<?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>205232</bug_id>
          
          <creation_ts>2019-12-13 19:13:04 -0800</creation_ts>
          <short_desc>DFG/FTL should be able to exit to the middle of a bytecode</short_desc>
          <delta_ts>2020-01-20 02:16:18 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>205582</dependson>
    
    <dependson>205649</dependson>
          <blocked>205581</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsc32</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pmatos</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1598597</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 19:13:04 -0800</bug_when>
    <thetext>DFG/FTL should be able to exit to the middle of a bytecode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598600</commentid>
    <comment_count>1</comment_count>
      <attachid>385671</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 20:15:50 -0800</bug_when>
    <thetext>Created attachment 385671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598604</commentid>
    <comment_count>2</comment_count>
      <attachid>385672</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 20:35:48 -0800</bug_when>
    <thetext>Created attachment 385672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598606</commentid>
    <comment_count>3</comment_count>
      <attachid>385674</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 20:55:32 -0800</bug_when>
    <thetext>Created attachment 385674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598608</commentid>
    <comment_count>4</comment_count>
      <attachid>385676</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 21:02:38 -0800</bug_when>
    <thetext>Created attachment 385676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598609</commentid>
    <comment_count>5</comment_count>
      <attachid>385677</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 21:06:06 -0800</bug_when>
    <thetext>Created attachment 385677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598611</commentid>
    <comment_count>6</comment_count>
      <attachid>385679</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 21:36:54 -0800</bug_when>
    <thetext>Created attachment 385679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598612</commentid>
    <comment_count>7</comment_count>
      <attachid>385680</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-13 21:42:12 -0800</bug_when>
    <thetext>Created attachment 385680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598626</commentid>
    <comment_count>8</comment_count>
      <attachid>385680</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-14 00:17:45 -0800</bug_when>
    <thetext>Comment on attachment 385680
Patch

Weird all the non-apply tests are passing locally for me... will investigate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600038</commentid>
    <comment_count>9</comment_count>
      <attachid>386022</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 15:42:05 -0800</bug_when>
    <thetext>Created attachment 386022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600043</commentid>
    <comment_count>10</comment_count>
      <attachid>386025</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 16:03:01 -0800</bug_when>
    <thetext>Created attachment 386025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600048</commentid>
    <comment_count>11</comment_count>
      <attachid>386029</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 16:11:02 -0800</bug_when>
    <thetext>Created attachment 386029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600056</commentid>
    <comment_count>12</comment_count>
      <attachid>386031</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 16:42:06 -0800</bug_when>
    <thetext>Created attachment 386031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600062</commentid>
    <comment_count>13</comment_count>
      <attachid>386034</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 16:52:39 -0800</bug_when>
    <thetext>Created attachment 386034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600068</commentid>
    <comment_count>14</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 17:04:27 -0800</bug_when>
    <thetext>&gt; ../../Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:575:56: warning: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘int’ [-Wsign-compare]
&gt;                                  for (unsigned i = 0; i &lt; inlineCallFrame-&gt;argumentCountIncludingThis - 1; ++i) {

Wait what?? inlineCallFrame-&gt;argumentCountIncludingThis is unsigned so the result of `inlineCallFrame-&gt;argumentCountIncludingThis - 1` should also be unsigned!

Ugh</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600076</commentid>
    <comment_count>15</comment_count>
      <attachid>386040</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 17:23:16 -0800</bug_when>
    <thetext>Created attachment 386040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600077</commentid>
    <comment_count>16</comment_count>
      <attachid>386041</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 17:27:48 -0800</bug_when>
    <thetext>Created attachment 386041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600098</commentid>
    <comment_count>17</comment_count>
      <attachid>386047</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 18:25:08 -0800</bug_when>
    <thetext>Created attachment 386047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600115</commentid>
    <comment_count>18</comment_count>
      <attachid>386053</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 19:25:21 -0800</bug_when>
    <thetext>Created attachment 386053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600117</commentid>
    <comment_count>19</comment_count>
      <attachid>386054</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 19:40:10 -0800</bug_when>
    <thetext>Created attachment 386054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600122</commentid>
    <comment_count>20</comment_count>
      <attachid>386056</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 20:18:17 -0800</bug_when>
    <thetext>Created attachment 386056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600123</commentid>
    <comment_count>21</comment_count>
      <attachid>386057</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 20:29:44 -0800</bug_when>
    <thetext>Created attachment 386057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600146</commentid>
    <comment_count>22</comment_count>
      <attachid>386062</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-18 21:47:07 -0800</bug_when>
    <thetext>Created attachment 386062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600375</commentid>
    <comment_count>23</comment_count>
      <attachid>386118</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-19 10:38:09 -0800</bug_when>
    <thetext>Created attachment 386118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600608</commentid>
    <comment_count>24</comment_count>
      <attachid>386118</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-19 18:45:43 -0800</bug_when>
    <thetext>Comment on attachment 386118
Patch

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

Wowza. I really like this patch. I&apos;m gonna hold off on r+ until some of my comments/questions/concerns are addressed

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +        When the DFG OSR exits if there are any active checkpoints inline

you should explain what a checkpoint is before this sentence. Might also be worth saying how you packed in checkpoint index into bytecode index

&gt; Source/JavaScriptCore/ChangeLog:34
&gt; +        refers to virtual registers as a int as possible. Instead

&quot;a int&quot; =&gt; &quot;an int&quot;
&quot;Instead&quot; =&gt; &quot;Instead, &quot;

&gt; Source/JavaScriptCore/ChangeLog:36
&gt; +        couple of new classes/enum added to JSC:

&quot;enum&quot; =&gt; &quot;enums&quot;

&gt; Source/JavaScriptCore/ChangeLog:56
&gt; +        3) FTL::SelectPredictability is a new enum that describes to the
&gt; +        FTL whether or not we think a select is going to be
&gt; +        predictable. SelectPredictability has four options: Unpredictable,
&gt; +        Predictable, LeftLikely, and RightLikely. Unpredictable means we
&gt; +        think a branch predictor won&apos;t do a good job guessing this value
&gt; +        so we should compile the select to a cmov. The other options mean
&gt; +        we either think we are going to pick the same value every time or
&gt; +        there&apos;s a reasonable chance the branch predictor will be able to
&gt; +        guess the value.

this is a random point. Why does this patch include this?

&gt; Source/JavaScriptCore/ChangeLog:61
&gt; +        getters twice if we OSR exit during from LoadVarargs.

&quot;during from&quot; =&gt; &quot;during&quot; or &quot;from&quot;

&gt; Source/JavaScriptCore/bytecode/BytecodeIndex.h:51
&gt; +    static constexpr uint32_t numberOfCheckpoints = 4;

This should be called maxNumberOfCheckpoints

&gt; Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h:37
&gt; +// Note: Full bytecode liveness does not track any information about the liveness of temps.

&quot;temps&quot; =&gt; &quot;tmps&quot;

&gt; Source/JavaScriptCore/bytecode/Operands.h:41
&gt; +enum OperandKind { ArgumentOperand, LocalOperand, TmpOperand };

why not &quot;enum class OperandKind {Argument, Local, Tmp}&quot;?

&gt; Source/JavaScriptCore/bytecode/Operands.h:140
&gt; -        m_values.fill(initialValue, numArguments + numLocals);
&gt; +        m_values.grow(numArguments + numLocals + numTmps);
&gt; +        m_values.fill(initialValue);

why this change?

&gt; Source/JavaScriptCore/bytecode/Operands.h:240
&gt; +                m_values[localIndex(oldNumLocals + i)] = ensuredValue;

this seems like a semantic change and slightly sketchy you&apos;re not constructing a new one of each entry. I think you should keep this &quot;= T()&quot;, and let the compiler optimize away

&gt; Source/JavaScriptCore/bytecode/Operands.h:244
&gt; +    void ensureTmps(size_t size, const T&amp; ensuredValue = T())

same comment

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3233
&gt; +        ASSERT(m_codeBlock-&gt;hasCheckpoints());

we don&apos;t have check points for tail call forward varargs too?

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:861
&gt; +
&gt; +

style nit: only one newline

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:956
&gt; +                                unsigned frameArgumentCount = static_cast&lt;unsigned&gt;(inlineCallFrame-&gt;argumentCountIncludingThis - 1);

this is needed?

&gt; Source/JavaScriptCore/dfg/DFGArgumentsUtilities.cpp:65
&gt; +    InsertionSet&amp; insertionSet, Node* arguments, unsigned nodeIndex, NodeOrigin origin, bool addThis)

style nit: This should be an enum, not bool, according to WK style

&gt; Source/JavaScriptCore/dfg/DFGArgumentsUtilities.cpp:146
&gt; +            insertionSet.insertConstantForUse(nodeIndex, origin, jsNumber(addThis), Int32Use));

nit: jsNumber(static_cast&lt;int32_t&gt;(addThis)) so people don&apos;t go crazy reading this LOC

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:285
&gt; +    void progressCheckpoint()

nit: progressCheckpoint =&gt; progressToNextCheckpoint?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:423
&gt; +    Node* getLocalOrTmp(Operand operand)

maybe file a bug on a rename here? Should we name the node Get or GetOperand instead of keeping it GetLocal? (Same w/ SetLocal)

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:635
&gt; +        ASSERT(operand.isTmp() || !operand.virtualRegister().isConstant());

nit: maybe just add an isConstant() to Operand that is this logic?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1130
&gt; +    // The max number of temps used for forwarding data to an OSR exit to checkpoint.

&quot;to an OSR exit to checkpoint&quot;? Did you mean to have the second &quot;to&quot;?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1662
&gt; +    ensureTmps((m_inlineStackTop-&gt;m_inlineCallFrame ? m_inlineStackTop-&gt;m_inlineCallFrame-&gt;tmpOffset : 0) + m_inlineStackTop-&gt;m_codeBlock-&gt;numTmps() + codeBlock-&gt;numTmps());

nit: Why not put this after the new inline stack entry constructor below, and just have it be:
ensureTmps(m_inlineStackTop-&gt;m_inlineCallFrame-&gt;tmpOffset + codeBLock-&gt;numTmps())

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1963
&gt; +            auto argCountTmp = m_inlineStackTop-&gt;remapOperand(Operand(TmpOperand, OpCallVarargs::argCount));
&gt; +            setDirect(argCountTmp, addToGraph(VarargsLength, OpInfo(data), arguments));

can we have a version that doesn&apos;t require us to call setDirect? Like a set that does remap for us?

&gt; Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:497
&gt; +        RELEASE_ASSERT_NOT_REACHED();

is this needed? Wouldn&apos;t the switch be a compile error?

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:818
&gt; +        write(AbstractHeap(Stack, data-&gt;count));

I thought you said we don&apos;t do this anymore?

&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:59
&gt; +    return DisposableCallSiteIndex(index);

why all these DisposableCallSiteIndex changes? How is that right?

&gt; Source/JavaScriptCore/dfg/DFGForAllKills.h:78
&gt; +        if (after.bytecodeIndex().checkpoint()) {

the code inside this &quot;if&quot; is assuming that these checkpoints belong to the same bytecode offset. Is that an ok assumption to make? Maybe assert that?

I think this is an ok assumption, since when the DFG does code motion, it changes forExit origin, and this code is using forExit

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1222
&gt; +    if (verbose)
&gt; +        dataLog(&quot;Ran out of stack, returning true.\n&quot;);
&gt; +    return true;    
&gt;      
&gt;      RELEASE_ASSERT_NOT_REACHED();

what&apos;s going on here? Looks wrong...

&gt; Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp:181
&gt; +                flush(Operand(TmpOperand, tmp));

nit: You use this constructor in a few places, would be nice to just have &quot;Operand::tmp(tmp)&quot;

&gt; Source/JavaScriptCore/dfg/DFGNodeType.h:77
&gt; +    /* These are used in SSA form to represent to track */\

track?

&gt; Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:246
&gt; +    case VarargsLength: {
&gt; +        break;
&gt; +    }

why?

&gt; Source/JavaScriptCore/dfg/DFGOSRExit.cpp:641
&gt; +                addSideState(reinterpret_cast&lt;CallFrame*&gt;(reinterpret_cast&lt;char*&gt;(callFrame) + inlineCallFrame-&gt;returnPCOffset() - sizeof(CPURegister)), callBytecodeIndex, inlineCallFrame-&gt;tmpOffset);

there isn&apos;t an offset just for call frame?

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2957
&gt; +    for (uint32_t i = length - 1; i &lt; mandatoryMinimum; ++i)

why - 1 now?

&gt; Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:524
&gt; +                        RELEASE_ASSERT(node-&gt;op() == VarargsLength || node-&gt;op() == LoadVarargs || node-&gt;op() == ForwardVarargs);

as I said in clobberize comment, does this actually write to that stack slot?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:-7370
&gt; -    // https://bugs.webkit.org/show_bug.cgi?id=141448

you should dupe https://bugs.webkit.org/show_bug.cgi?id=141448 to this :-)

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:7388
&gt; +    m_jit.store32(argumentCountIncludingThis, JITCompiler::payloadFor(data-&gt;machineCount));

seems like LoadVarargs should write to this. And VarargsLength should not. In clobberize

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:9572
&gt; +            m_out.bitOr(m_out.isZero32(lengthIncludingThis), m_out.above(lengthIncludingThis, m_out.constInt32(data-&gt;limit)))); 

why would it be zero? DFG doesn&apos;t seem to do this?

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:488
&gt; +                    sideState-&gt;tmps[i] = tmpScratch[i + tmpOffset];

these are already boxed? This seems different than in the DFG, where you had to do value recovery. Is that right? Why not make the DFG also put the boxed value in the buffer before you read it out, so that DFG OSR exit code is cleaner?

&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:108
&gt; +    return CallSiteIndex::fromBits(unsafeCallSiteAsRawBits() &amp; (std::numeric_limits&lt;uint32_t&gt;::max() &gt;&gt; BytecodeIndex::checkpointShift));

why not construct a BytecodeIndex and then call the helper function?

This looks wrong anyways. I think you meant to mask off the checkpoint index. But that begs the question, why do you need to do that? That&apos;s wrong for DFG/FTL CallSiteIndices, right? Those are just indices into an array that we bound check in the sampling profiler.

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:115
&gt; +        static constexpr int headerSizeInRegisters = static_cast&lt;int&gt;(CallFrameSlot::argumentCount) + 1;

why is this static_cast needed if you overload the operators to work with CallFrameSlot?

&gt; Source/JavaScriptCore/interpreter/CheckpointOSRExitSideState.h:37
&gt; +    T getTmp(size_t offset) 

his is only used for JSValue. Let&apos;s just make this return JSValue.

&gt; Source/JavaScriptCore/interpreter/CheckpointOSRExitSideState.h:52
&gt; +    void* nextInstructionJumpTarget;

this is unused

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:545
&gt; +            // FIXME: We should support exception handling in checkpoints.

hat do you mean by this?
Please file a bug if it&apos;s important

&gt; Source/JavaScriptCore/jit/JITExceptions.cpp:53
&gt; -        CRASH();
&gt; +        WTFBreakpointTrap();

why?

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1969
&gt; +    unsigned argumentCountIncludingThis = sideState.getTmp&lt;JSValue&gt;(Opcode::argCount).asUInt32();

let&apos;s just make getTmp return JSValue

Also, let&apos;s rename argCount to argCount to argCountIncludingThis for consistency

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1973
&gt; +        loadVarargs(globalObject, buffer, callFrame-&gt;r(bytecode.m_arguments).jsValue(), 0, argumentCountIncludingThis - 1);

is zero the right offset here? Isn&apos;t it based on something in the opcode?

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1992
&gt; +inline SlowPathReturnType dispatchNextInstruction(CodeBlock* codeBlock, InstructionStream::Ref pc)

nit: I&apos;d name this &quot;dispatchToNextInstruction&quot;?

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:2064
&gt; +        ASSERT_WITH_MESSAGE(pc.next()-&gt;opcodeID() == op_ret, &quot;We strongly assume all tail calls are followed by an op_ret.&quot;);

why does it really matter though? I don&apos;t see how it changes this code

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1780
&gt; +
&gt; +

nit: undo

&gt; Source/JavaScriptCore/runtime/VM.cpp:1031
&gt; +void VM::addCheckpointOSRSideState(CallFrame* callFrame, std::unique_ptr&lt;CheckpointOSRExitSideState&gt;&amp;&amp; payload)

Don&apos;t you need to visit these things?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600840</commentid>
    <comment_count>25</comment_count>
      <attachid>386118</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-20 11:31:50 -0800</bug_when>
    <thetext>Comment on attachment 386118
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:19
&gt;&gt; +        When the DFG OSR exits if there are any active checkpoints inline
&gt; 
&gt; you should explain what a checkpoint is before this sentence. Might also be worth saying how you packed in checkpoint index into bytecode index

True. I added a comment above.

&gt;&gt; Source/JavaScriptCore/ChangeLog:34
&gt;&gt; +        refers to virtual registers as a int as possible. Instead
&gt; 
&gt; &quot;a int&quot; =&gt; &quot;an int&quot;
&gt; &quot;Instead&quot; =&gt; &quot;Instead, &quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:36
&gt;&gt; +        couple of new classes/enum added to JSC:
&gt; 
&gt; &quot;enum&quot; =&gt; &quot;enums&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:61
&gt;&gt; +        getters twice if we OSR exit during from LoadVarargs.
&gt; 
&gt; &quot;during from&quot; =&gt; &quot;during&quot; or &quot;from&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/bytecode/Operands.h:41
&gt;&gt; +enum OperandKind { ArgumentOperand, LocalOperand, TmpOperand };
&gt; 
&gt; why not &quot;enum class OperandKind {Argument, Local, Tmp}&quot;?

Sure!

&gt;&gt; Source/JavaScriptCore/bytecode/Operands.h:140
&gt;&gt; +        m_values.fill(initialValue);
&gt; 
&gt; why this change?

I think because FastBitVector didn&apos;t support it. I can make it work if you want but it probably doesn&apos;t matter for perf.

&gt;&gt; Source/JavaScriptCore/bytecode/Operands.h:240
&gt;&gt; +                m_values[localIndex(oldNumLocals + i)] = ensuredValue;
&gt; 
&gt; this seems like a semantic change and slightly sketchy you&apos;re not constructing a new one of each entry. I think you should keep this &quot;= T()&quot;, and let the compiler optimize away

This only runs if ensuredValue != T(). And if it doesn&apos;t need initialization it presumably has a reasonable copy constructor.

&gt;&gt; Source/JavaScriptCore/bytecode/Operands.h:244
&gt;&gt; +    void ensureTmps(size_t size, const T&amp; ensuredValue = T())
&gt; 
&gt; same comment

Ditto.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3233
&gt;&gt; +        ASSERT(m_codeBlock-&gt;hasCheckpoints());
&gt; 
&gt; we don&apos;t have check points for tail call forward varargs too?

No, because when &quot;forwarding varargsing&quot; getting the length is not observable.

&gt;&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:956
&gt;&gt; +                                unsigned frameArgumentCount = static_cast&lt;unsigned&gt;(inlineCallFrame-&gt;argumentCountIncludingThis - 1);
&gt; 
&gt; this is needed?

Yeah, GCC seems to have a weird bug where it treats all bitfields as signed so the rhs becomes an int and we get an error. Although, this particular one might be unnecessary.

&gt;&gt; Source/JavaScriptCore/dfg/DFGArgumentsUtilities.cpp:65
&gt;&gt; +    InsertionSet&amp; insertionSet, Node* arguments, unsigned nodeIndex, NodeOrigin origin, bool addThis)
&gt; 
&gt; style nit: This should be an enum, not bool, according to WK style

It&apos;s not in the style guide! https://webkit.org/code-style-guidelines/ :P

&gt;&gt; Source/JavaScriptCore/dfg/DFGArgumentsUtilities.cpp:146
&gt;&gt; +            insertionSet.insertConstantForUse(nodeIndex, origin, jsNumber(addThis), Int32Use));
&gt; 
&gt; nit: jsNumber(static_cast&lt;int32_t&gt;(addThis)) so people don&apos;t go crazy reading this LOC

Sure.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:285
&gt;&gt; +    void progressCheckpoint()
&gt; 
&gt; nit: progressCheckpoint =&gt; progressToNextCheckpoint?

Sure.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:423
&gt;&gt; +    Node* getLocalOrTmp(Operand operand)
&gt; 
&gt; maybe file a bug on a rename here? Should we name the node Get or GetOperand instead of keeping it GetLocal? (Same w/ SetLocal)

Sure. https://bugs.webkit.org/show_bug.cgi?id=205489

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:635
&gt;&gt; +        ASSERT(operand.isTmp() || !operand.virtualRegister().isConstant());
&gt; 
&gt; nit: maybe just add an isConstant() to Operand that is this logic?

Done.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1130
&gt;&gt; +    // The max number of temps used for forwarding data to an OSR exit to checkpoint.
&gt; 
&gt; &quot;to an OSR exit to checkpoint&quot;? Did you mean to have the second &quot;to&quot;?

Fixed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1963
&gt;&gt; +            setDirect(argCountTmp, addToGraph(VarargsLength, OpInfo(data), arguments));
&gt; 
&gt; can we have a version that doesn&apos;t require us to call setDirect? Like a set that does remap for us?

That seems reasonable but can we do it in a later patch? I&apos;m not sure complicating this patch more is worthwhile. https://bugs.webkit.org/show_bug.cgi?id=205490

&gt;&gt; Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:497
&gt;&gt; +        RELEASE_ASSERT_NOT_REACHED();
&gt; 
&gt; is this needed? Wouldn&apos;t the switch be a compile error?

Not on MSVC!

&gt;&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:818
&gt;&gt; +        write(AbstractHeap(Stack, data-&gt;count));
&gt; 
&gt; I thought you said we don&apos;t do this anymore?

Whoops, will remove.

&gt;&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:59
&gt;&gt; +    return DisposableCallSiteIndex(index);
&gt; 
&gt; why all these DisposableCallSiteIndex changes? How is that right?

DisposableCallSiteIndex is what I&apos;m using to refer to non-bytecode offset CallSites. Maybe that should be a different class from Disposable?

&gt;&gt; Source/JavaScriptCore/dfg/DFGForAllKills.h:78
&gt;&gt; +        if (after.bytecodeIndex().checkpoint()) {
&gt; 
&gt; the code inside this &quot;if&quot; is assuming that these checkpoints belong to the same bytecode offset. Is that an ok assumption to make? Maybe assert that?
&gt; 
&gt; I think this is an ok assumption, since when the DFG does code motion, it changes forExit origin, and this code is using forExit

That was my thinking as well but an assert seems reasonable.

&gt;&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1222
&gt;&gt;      RELEASE_ASSERT_NOT_REACHED();
&gt; 
&gt; what&apos;s going on here? Looks wrong...

Whoops, I reorganized the loop but forgot to delete the now unreachable RELEASE_ASSERT_NOT_REACHED().

&gt;&gt; Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp:181
&gt;&gt; +                flush(Operand(TmpOperand, tmp));
&gt; 
&gt; nit: You use this constructor in a few places, would be nice to just have &quot;Operand::tmp(tmp)&quot;

Fair enough. Added.

&gt;&gt; Source/JavaScriptCore/dfg/DFGNodeType.h:77
&gt;&gt; +    /* These are used in SSA form to represent to track */\
&gt; 
&gt; track?

Whoops was going to add comments on what these did but I didn&apos;t get around to it. Will do in a follow up patch.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:246
&gt;&gt; +    }
&gt; 
&gt; why?

Because this doesn&apos;t set any side state. The tmp is set by the subsequent MovHint.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRExit.cpp:641
&gt;&gt; +                addSideState(reinterpret_cast&lt;CallFrame*&gt;(reinterpret_cast&lt;char*&gt;(callFrame) + inlineCallFrame-&gt;returnPCOffset() - sizeof(CPURegister)), callBytecodeIndex, inlineCallFrame-&gt;tmpOffset);
&gt; 
&gt; there isn&apos;t an offset just for call frame?

Not one that works here that I know of. There&apos;s CallFrame::returnPCOffset() but that doesn&apos;t handle the inline call frame offset.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2957
&gt;&gt; +    for (uint32_t i = length - 1; i &lt; mandatoryMinimum; ++i)
&gt; 
&gt; why - 1 now?

Because we&apos;re handing the length + this now. I&apos;ll change the variable name.

&gt;&gt; Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:524
&gt;&gt; +                        RELEASE_ASSERT(node-&gt;op() == VarargsLength || node-&gt;op() == LoadVarargs || node-&gt;op() == ForwardVarargs);
&gt; 
&gt; as I said in clobberize comment, does this actually write to that stack slot?

No, fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:9572
&gt;&gt; +            m_out.bitOr(m_out.isZero32(lengthIncludingThis), m_out.above(lengthIncludingThis, m_out.constInt32(data-&gt;limit)))); 
&gt; 
&gt; why would it be zero? DFG doesn&apos;t seem to do this?

Because VarargsLength could have overflowed so you&apos;d wrap around to zero. Yeah, DFG does the same logic but just as two separate speculations.

&gt;&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:488
&gt;&gt; +                    sideState-&gt;tmps[i] = tmpScratch[i + tmpOffset];
&gt; 
&gt; these are already boxed? This seems different than in the DFG, where you had to do value recovery. Is that right? Why not make the DFG also put the boxed value in the buffer before you read it out, so that DFG OSR exit code is cleaner?

Yeah, the FTL does it the right way. I&apos;ll add a FIXME to switch the DFG to using the same system as the FTL. The code could probably all be deduplicated anyway.

&gt;&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:108
&gt;&gt; +    return CallSiteIndex::fromBits(unsafeCallSiteAsRawBits() &amp; (std::numeric_limits&lt;uint32_t&gt;::max() &gt;&gt; BytecodeIndex::checkpointShift));
&gt; 
&gt; why not construct a BytecodeIndex and then call the helper function?
&gt; 
&gt; This looks wrong anyways. I think you meant to mask off the checkpoint index. But that begs the question, why do you need to do that? That&apos;s wrong for DFG/FTL CallSiteIndices, right? Those are just indices into an array that we bound check in the sampling profiler.

Yeah, I think this will give the wrong line of code. I fixed it. I also think the OSR exit code will put the wrong bytecode index into the CallFrame so I fixed that too.

&gt;&gt; Source/JavaScriptCore/interpreter/CheckpointOSRExitSideState.h:37
&gt;&gt; +    T getTmp(size_t offset) 
&gt; 
&gt; his is only used for JSValue. Let&apos;s just make this return JSValue.

Sure.

&gt;&gt; Source/JavaScriptCore/interpreter/CheckpointOSRExitSideState.h:52
&gt;&gt; +    void* nextInstructionJumpTarget;
&gt; 
&gt; this is unused

Removed.

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:545
&gt;&gt; +            // FIXME: We should support exception handling in checkpoints.
&gt; 
&gt; hat do you mean by this?
&gt; Please file a bug if it&apos;s important

We don&apos;t support a catch block inside a single bytecode right now. We will probably have to do this for iteration_close in the future anyway.

&gt;&gt; Source/JavaScriptCore/jit/JITExceptions.cpp:53
&gt;&gt; +        WTFBreakpointTrap();
&gt; 
&gt; why?

Because CRASH() doesn&apos;t do a breakpoint, it loads 0xbbadbeef... :/

&gt;&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1969
&gt;&gt; +    unsigned argumentCountIncludingThis = sideState.getTmp&lt;JSValue&gt;(Opcode::argCount).asUInt32();
&gt; 
&gt; let&apos;s just make getTmp return JSValue
&gt; 
&gt; Also, let&apos;s rename argCount to argCount to argCountIncludingThis for consistency

Done.

&gt;&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1973
&gt;&gt; +        loadVarargs(globalObject, buffer, callFrame-&gt;r(bytecode.m_arguments).jsValue(), 0, argumentCountIncludingThis - 1);
&gt; 
&gt; is zero the right offset here? Isn&apos;t it based on something in the opcode?

Oh, yeah, that&apos;s right. I&apos;ll add a test where we do return foo.call(...args); in strict mode then OSR exit due to the length.

&gt;&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1992
&gt;&gt; +inline SlowPathReturnType dispatchNextInstruction(CodeBlock* codeBlock, InstructionStream::Ref pc)
&gt; 
&gt; nit: I&apos;d name this &quot;dispatchToNextInstruction&quot;?

Done.

&gt;&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:2064
&gt;&gt; +        ASSERT_WITH_MESSAGE(pc.next()-&gt;opcodeID() == op_ret, &quot;We strongly assume all tail calls are followed by an op_ret.&quot;);
&gt; 
&gt; why does it really matter though? I don&apos;t see how it changes this code

It does matter because we dispatch to the next bytecode so if it&apos;s not a ret then we will be running whatever random bytecode is after the tail call.

&gt;&gt; Source/JavaScriptCore/runtime/VM.cpp:1031
&gt;&gt; +void VM::addCheckpointOSRSideState(CallFrame* callFrame, std::unique_ptr&lt;CheckpointOSRExitSideState&gt;&amp;&amp; payload)
&gt; 
&gt; Don&apos;t you need to visit these things?

Yes. Added during Heap::gatherConservativeRoots()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601295</commentid>
    <comment_count>26</comment_count>
      <attachid>386352</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-23 13:34:30 -0800</bug_when>
    <thetext>Created attachment 386352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601306</commentid>
    <comment_count>27</comment_count>
      <attachid>386118</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-23 14:56:47 -0800</bug_when>
    <thetext>Comment on attachment 386118
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:59
&gt;&gt;&gt; +    return DisposableCallSiteIndex(index);
&gt;&gt; 
&gt;&gt; why all these DisposableCallSiteIndex changes? How is that right?
&gt; 
&gt; DisposableCallSiteIndex is what I&apos;m using to refer to non-bytecode offset CallSites. Maybe that should be a different class from Disposable?

Yeah this change looks wrong since callsiteindex is an index into a vector in DFG/FTL. Disposable is meant for things that go away, like ICs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601341</commentid>
    <comment_count>28</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-12-23 17:49:56 -0800</bug_when>
    <thetext>Committed r253896: &lt;https://trac.webkit.org/changeset/253896&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601342</commentid>
    <comment_count>29</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-23 17:50:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/58171565&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601413</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-24 11:11:24 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 205582</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601422</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-12-24 12:46:32 -0800</bug_when>
    <thetext>Keith fixed the build in https://trac.webkit.org/r253903, we didn&apos;t roll back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602344</commentid>
    <comment_count>32</comment_count>
    <who name="Paulo Matos">pmatos</who>
    <bug_when>2020-01-03 00:28:49 -0800</bug_when>
    <thetext>This patch unfortunately breaks the build on both arm and mips.
The problem is related with a non-existing function:

../../Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:338:93: error: no matching function for call to ‘JSC::CodeBlock::instructions(JSC::BytecodeIndex&amp;)’
         const Instruction* instruction = jit.baselineCodeBlock()-&gt;instructions(bytecodeIndex).at().ptr();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602500</commentid>
    <comment_count>33</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-03 10:10:50 -0800</bug_when>
    <thetext>(In reply to Paulo Matos from comment #32)
&gt; This patch unfortunately breaks the build on both arm and mips.
&gt; The problem is related with a non-existing function:
&gt; 
&gt; ../../Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:338:93: error:
&gt; no matching function for call to
&gt; ‘JSC::CodeBlock::instructions(JSC::BytecodeIndex&amp;)’
&gt;          const Instruction* instruction =
&gt; jit.baselineCodeBlock()-&gt;instructions(bytecodeIndex).at().ptr();

Oh, whoops, the bytecodeIndex needs to be the parameter to the at() not the instructions() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608619</commentid>
    <comment_count>34</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-19 20:59:14 -0800</bug_when>
    <thetext>Reopened. This was reverted by r254632 (Bug 206301).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608680</commentid>
    <comment_count>35</comment_count>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-01-20 02:11:24 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #34)
&gt; Reopened. This was reverted by r254632 (Bug 206301).

I think this was relanded on https://bugs.webkit.org/show_bug.cgi?id=206361.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608681</commentid>
    <comment_count>36</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-20 02:16:18 -0800</bug_when>
    <thetext>(In reply to Caio Lima from comment #35)

Oops. Thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385671</attachid>
            <date>2019-12-13 20:15:50 -0800</date>
            <delta_ts>2019-12-13 20:35:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191213201538.patch</filename>
            <type>text/plain</type>
            <size>617548</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ODgzZDhkY2RmODAyYWJiMGJlZGRmNzY2ODY4YjI4OTlkZTVhNTUyLi43MGRhM2MyOGUyNTIyNTYx
MTJlMGNkYjM2MWI4MTAzMWRiYTVhNzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NzEgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGUgdGhlIHByb2JlLWJhc2VkIE9TUiBleGl0
IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uIHRodXMgdGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQgY29kZSBzaW5jZSBpdAorICAgICAgICB3b3VsZCBiZSBhIG5vbi10cml2aWFs
IGFtb3VudCBvZiB3b3JrIHRvIGdldCBjaGVja3BvaW50cyB3b3JraW5nCisgICAgICAgIHdpdGgg
cHJvYmUgT1NSLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAg
ICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUluZGV4OjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6YXNCaXRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjplbnVt
VmFsdWVzRXF1YWxBc0ludGVncmFsKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZSk6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNBbHdheXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNMaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZUlu
ZGV4Rm9yRXhpdCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1UbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6
OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29k
ZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6dW5tYXBPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAg
ICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJh
bmQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6Ok9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpr
aW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kOjp2aXJ0dWFsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1RtcCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNI
ZWFkZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0FyZ3VtZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJpdHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZM
b2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZUbXBzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXApOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omxv
Y2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRG
b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldEZvck9wZXJh
bmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvckluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdl
dENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6On5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcjo6flZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCk6CisgICAg
ICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpk
dW1wKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBh
cnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpm
bHVzaERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNo
T3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFu
dG9tTG9jYWxEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0
T1NSKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RG
R0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5k
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5C
eXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRs
ZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9j
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdU
b0NoZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5m
by5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
YWxsZWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xh
eW91dFBoYXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5k
bGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVu
a3MuaDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JF
bnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
OjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBm
dGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjptYXhVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjptaW5VbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptYXhTaWduZWQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bWluU2lnbmVkKToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50
cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBn
ZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmN1cnJlbnRWUEMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKEpTQzo6Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU6OmdldFRtcCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6c2l6ZU9m
VmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklU
OjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9y
ZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudElu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFs
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlND
OjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRo
dW5rSklUKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRjaE5leHRJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVy
Zmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OmR1bXBSZWdpc3Rlcik6CisgICAg
ICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaXhlZEFycmF5LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNGaXhlZEFycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNGaXhlZEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVu
dHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJlbGVhc2VM
b2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6Cisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjphZGRDaGVja3BvaW50
T1NSU2lkZVN0YXRlKToKKyAgICAgICAgKEpTQzo6Vk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpoYXNDaGVj
a3BvaW50T1NSU2lkZVN0YXRlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6Z2V0Q29u
c3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6Z2V0
Q29uc3RhbnRUeXBlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpzZXRVc2VzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3cpOgorCiAyMDE5LTEyLTEzICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIEhlYXA6OmZpbmFsaXpl
IGZ1bmN0aW9uIHRoYXQgdGFrZXMgV1RGOjpGdW5jdGlvbjx2b2lkKCk+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRiYThlMGE3
YjE3NDYwMTA3N2U2NTNiZmVmZmRhMWVlNDM4YjRjYWQuLjM0YzIyYzZkOGQ4MGE2N2IxY2UzYmU1
NmZkNWEzNjQxNTMxMTk5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTktMTItMTMgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91
bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6Cisg
ICAgICAgIChXVEY6OldvcmRUeXBlPjo6aW52ZXJ0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+
OjpvcGVyYXRvcik6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IgY29uc3QgY29u
c3QpOgorICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RC
aXRSZWZlcmVuY2U6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJlbmNl
OjpvcGVyYXRvciY9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6ZmlsbCk6CisgICAg
ICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6Omdyb3cpOgorCisyMDE5LTEyLTEzICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJl
IGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRmFzdEJpdFZlY3RvciAobW9y
ZSkgdGVtcGxhdGUgY29tcGF0YWJsZSB3aXRoIFZlY3Rvcjxib29sPiBzbyBvdGhlciBjb250YWlu
ZXJzCisgICAgICAgIHVzaW5nIGEgVmVjdG9yPFQ+IG1lbWJlciBjYW4gdXNlIEZhc3RCaXRWZWN0
b3IgaW5zdGVhZCBpZiB0aGUgVCBpcyBib29sLgorCisgICAgICAgIEFsc28sIGFkZCBzb21lIGhh
bmR5IG1ldGhvZHMgdG8gQml0bWFwLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAg
ICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3Bl
cmF0b3IpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToK
KyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVm
ZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3Bl
cmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAo
V1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKwogMjAxOS0xMi0xMyAgU2FhbSBCYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBIZWFwOjpmaW5hbGl6ZSBmdW5jdGlv
biB0aGF0IHRha2VzIFdURjo6RnVuY3Rpb248dm9pZCgpPgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBmOGMxYjRh
ZTU1NmI1MzRjMmFiMTAxYWMzOTBiYTcxMWI0NWNiYWVhLi45ZWFkNjUzZmFhYWIxODkzZWI5MmRk
MDJlOTc1Nzk2NmRmYTk5YWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtNjQsNiArNjQsNyBAQCAkKFBST0pF
Q1RfRElSKS9kaXNhc3NlbWJsZXIvdWRpczg2L29wdGFibGUueG1sCiAkKFBST0pFQ1RfRElSKS9k
aXNhc3NlbWJsZXIvdWRpczg2L3VkX2l0YWIucHkKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9B
cmd1bWVudC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0Fzc2VydGlvbi5yYgorJChQUk9K
RUNUX0RJUikvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0
b3IvRFNMLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvRml0cy5yYgogJChQUk9KRUNUX0RJ
UikvZ2VuZXJhdG9yL0dlbmVyYXRlZEZpbGUucmIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMTYxZDcwNWNjMmUzYzYxOWVjNTQ0Yjc2NmViNzRkMjhhODRmODhjNi4uMDFiMjg3MTQ0
MDY4MzFjNWE2NTIyNmMzMjc2NjdlN2U5ZTE2ODhkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTkzMiw2ICs5MzIsNyBAQAogCQk1MzMzQkJEQjIxMTBGN0QyMDA3NjE4RUMgLyog
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgKi87IH07CiAJCTUzMzNCQkRDMjExMEY3RDkwMDc2MThFQyAvKiBERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3Bw
ICovOyB9OwogCQk1MzMzQkJERDIxMTBGN0UxMDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4
MEY0QzE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi87IH07CisJ
CTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEUyQTYy
Mzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0MUZDNzIxREFDMzQz
QzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi87IH07CiAJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFD
MSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0NjM4
NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFBy
b21pc2VUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0zNjAxLDYgKzM2MDIsNyBAQAogCQk1MzE4MDQ1RDIyRUFBRjBGMDA0QTczNDIgLyog
QjNFeHRyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNFeHRyYWN0VmFsdWUuY3Bw
OyBwYXRoID0gYjMvQjNFeHRyYWN0VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSB0ZXN0YXBpLmNwcDsgcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNjMxQjMyMTg3NzdBNTAwN0I4MTkxIC8qIEphdmFT
Y3JpcHRDb3JlLm1vZHVsZW1hcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9ICJzb3VyY2Vjb2RlLm1vZHVsZS1tYXAiOyBw
YXRoID0gSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2
MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1
MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7
IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNjE1LDYgKzM2MTcsOSBAQAogCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2QTcg
LyogVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRDNDU3
RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9IFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MzREOUJGOTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxw
ZXJzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSXRlcmF0b3JI
ZWxwZXJzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGQTIzNjNDNTVE
MDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmphdmFzY3JpcHQ7IHBhdGggPSBNYXBJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEQxRTRENEIxNjAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzQ2FzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNz
Q2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NDYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNTMxRTUzQkQyOTAwMjEz
RjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTk1Myw2ICs1OTU4LDcgQEAKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBC
ODk2MTkgLyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJQTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8q
IENhbGxGcmFtZUNsb3N1cmUuaCAqLywKIAkJCQlGRUEzQkJBNzIxMkI2NTU4MDBFOTNBRDEgLyog
Q2FsbEZyYW1lSW5saW5lcy5oICovLAorCQkJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovLAogCQkJCTE0MjlEODVCMEVEMjE4RTkwMEI4
OTYxOSAvKiBDTG9vcFN0YWNrLmNwcCAqLywKIAkJCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUg
LyogQ0xvb3BTdGFjay5oICovLAogCQkJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9v
cFN0YWNrSW5saW5lcy5oICovLApAQCAtODU4Niw3ICs4NTkyLDkgQEAKIAkJCQlBNTI3MDQ4NTFE
MDI3Qzg4MDAzNTRDMzcgLyogR2xvYmFsT3BlcmF0aW9ucy5qcyAqLywKIAkJCQlFMzVFMDM2MTFC
N0FCNDg1MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovLAog
CQkJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rv
ci5qcyAqLywKKwkJCQk1MzREOUJGOTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJz
LmpzICovLAogCQkJCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKKwkJCQk1MzREOUJGQTIzNjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90
b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlw
ZS5qcyAqLywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpz
ICovLAogCQkJCUE1MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5q
cyAqLywKQEAgLTg1OTcsNiArODYwNSw3IEBACiAJCQkJN0NGOUJDNUYxQjY1RDlCMTAwOURCMUVG
IC8qIFJlZmxlY3RPYmplY3QuanMgKi8sCiAJCQkJNjU0Nzg4NDIxQzkzN0QyQzAwMDc4MUEwIC8q
IFJlZ0V4cFByb3RvdHlwZS5qcyAqLywKIAkJCQk4NDkyNUE5QzIyQjMwQ0M4MDBEMURGRkYgLyog
UmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCisJCQkJNTM0RDlCRjgyMzYzQzU1
RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdEMUM0
MTg0MTkwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNjAxQjY1RDlC
MTAwOURCMUVGIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzYxMUI2NUQ5
QjEwMDlEQjFFRiAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKQEAgLTkwOTgsNiAr
OTEwNyw3IEBACiAJCQkJRkUxQkQwMjExRTcyMDI3OTAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUMxNjAzMjIzMzlFOUY5MDBBMDRDQjggLyogQ2VsbFNpemUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUMzRERBMUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFG
NDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMjYx
QUE5MDk1NjAwRDMzQjMzIC8qIENsb25lZEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgKaW5kZXggNTZkOGEwN2RiZmNkZWZkZWM3NjA4OWExM2RmYjUwMTFiNjRiMjVk
My4uNjg4NDA4M2UwZmMxNzZhMjEzY2Q2NjgyNzY0YjJmNGViMzBjNmY2YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCkBAIC0yMzksMTMgKzIzOSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NP
REVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgot
ICAgIGV4cGxpY2l0IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikK
LSAgICAgICAgOiBtX3ZhbHVlKHVudGFnQ29kZVB0cjx0YWc+KGZ1bmN0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3Zh
bHVlKTsKLSAgICB9Ci0KICAgICBjb25zdCB2b2lkKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gbV92YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQw
MTc1NmQ1MzJhNzFlYzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1
NTA2NWMzOWI2YzZkYTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0y
NjMsMjAgKzI2MywyMCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihD
b21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAg
Y29uc3QgY2hhciogbmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5k
PGludDY0X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9w
ZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBP
cGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJ
bnQ2NE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0
eXBlZGVmIEIzT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFu
ZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3Bl
cmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BF
UkFORCh2YWx1ZSkgQjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVz
dGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBv
cHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4m
IG9wZXJhbmRzKQogewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZs
b2F0VHlwZT4oMC4pIH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2Fz
dDxGbG9hdFR5cGU+KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdp
dGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMp
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0
VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlw
ZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRU
eXBlPj4gb3BlcmFuZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5k
czsKICAgICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0
dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4Mzg3OWQy
ZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApA
QCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFu
ZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0ZWNvZGVE
dW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBtX291dC5w
cmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAgICBtX291
dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQgQnl0ZWNv
ZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2VuZXJhdG9y
VHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9j
az4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50IHIpIGNv
bnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZpcnR1YWxS
ZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChyKSkK
KyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7
CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAgcmV0dXJu
IHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgsMTAgKzk4
LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZzZXQoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2Nr
PgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQgaW5kZXgp
IGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENv
bnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZpcnR1YWxS
ZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENvbnN0
YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIpIik7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgQnl0ZWNv
ZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRlY29kZUR1
bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAgICAgRnVu
Y3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZhbHVlID0g
Zm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2NrLT5nZXRD
b25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEwNzVlZmUw
M2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAtNjEsNyAr
NjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnByaW50KHYp
OyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lz
dGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1bXBlckJh
c2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29u
c3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBjb25z
dCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNv
bnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBD
U3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAgQmxvY2sq
IG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgSlND
OjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVyOwogCiAg
ICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGlu
ZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29uc3RhbnQo
VHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3ZGMwZjlm
MjZlMTkxMzdlYjJjMzE1OWIuLmI4MTJmYjQxYmY5YWJlNjY0ZjQ0NzU5MTNlOWNlMzQyOWRiNDEy
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUlu
ZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5jcHAKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlSW5kZXguaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzM0LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiB2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChj
aGVja3BvaW50KCkpCisgICAgICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaAppbmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkz
NTE1OGRmLi42MDg3MDBjNTdhZDcwMTcyYzJjYjAwZjEwOWE1YzQxMzE3NDJkNWIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50
U3RyZWFtOwpAQCAtMzMsMjggKzM0LDM5IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgQ29kZUJsb2NrOworCiBjbGFzcyBCeXRlY29kZUluZGV4IHsKIHB1
YmxpYzoKICAgICBCeXRlY29kZUluZGV4KCkgPSBkZWZhdWx0OwogICAgIEJ5dGVjb2RlSW5kZXgo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fb2Zmc2V0KGRlbGV0
ZWRWYWx1ZSgpLmFzQml0cygpKQorICAgICAgICA6IG1fcGFja2VkQml0cyhkZWxldGVkVmFsdWUo
KS5hc0JpdHMoKSkKICAgICB7CiAgICAgfQotICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIDogbV9vZmZzZXQoYnl0ZWNvZGVPZmZzZXQp
Ci0gICAgeyB9CiAKLSAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQotICAgIHVpbnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Cisg
ICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgdWludDhf
dCBjaGVja3BvaW50ID0gMCkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMocGFjayhieXRlY29kZU9m
ZnNldCwgY2hlY2twb2ludCkpCisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMpOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVtYmVyT2ZDaGVja3BvaW50cyA9IDQ7
CisgICAgc3RhdGljX2Fzc2VydChoYXNPbmVCaXRTZXQobnVtYmVyT2ZDaGVja3BvaW50cyksICJu
dW1iZXJPZkNoZWNrcG9pbnRzIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIiKTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRNYXNrID0gbnVtYmVyT2ZDaGVja3BvaW50cyAt
IDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50U2hpZnQgPSBXVEY6
OmdldE1TQlNldENvbnN0ZXhwcihudW1iZXJPZkNoZWNrcG9pbnRzKTsKKworICAgIHVpbnQzMl90
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyA+PiBjaGVja3BvaW50U2hpZnQ7
IH0KKyAgICB1aW50OF90IGNoZWNrcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMg
JiBjaGVja3BvaW50TWFzazsgfQorICAgIHVpbnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJu
IG1fcGFja2VkQml0czsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6aW50SGFzaChtX29mZnNldCk7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRl
eCBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhpbnZhbGlkT2Zmc2V0IC0gMSk7IH0K
ICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMg
PT0gZGVsZXRlZFZhbHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGZyb21CaXRz
KHVpbnQzMl90IGJpdHMpOwogCiAgICAgLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCi0gICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQgJiYgbV9vZmZzZXQgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFs
aWRPZmZzZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CiAg
ICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gYXNCaXRzKCkgPT0gb3RoZXIuYXNCaXRzKCk7IH0KICAgICBib29sIG9wZXJhdG9yICE9
KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQogCkBAIC02OSwxMyArODEsMjIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IGludmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7CiAKLSAgICB1aW50MzJfdCBtX29mZnNldCB7IGludmFsaWRPZmZz
ZXQgfTsKKyAgICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1
aW50OF90IGNoZWNrcG9pbnQpOworCisgICAgdWludDMyX3QgbV9wYWNrZWRCaXRzIHsgaW52YWxp
ZE9mZnNldCB9OwogfTsKIAoraW5saW5lIHVpbnQzMl90IEJ5dGVjb2RlSW5kZXg6OnBhY2sodWlu
dDMyX3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQoreworICAgIEFTU0VSVChj
aGVja3BvaW50IDwgbnVtYmVyT2ZDaGVja3BvaW50cyk7CisgICAgQVNTRVJUKChieXRlY29kZUlu
ZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCkgPj4gY2hlY2twb2ludFNoaWZ0ID09IGJ5dGVjb2RlSW5k
ZXgpOworICAgIHJldHVybiBieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCB8IGNoZWNr
cG9pbnQ7Cit9CisKIGlubGluZSBCeXRlY29kZUluZGV4IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRz
KHVpbnQzMl90IGJpdHMpCiB7CiAgICAgQnl0ZWNvZGVJbmRleCByZXN1bHQ7Ci0gICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gYml0czsKKyAgICByZXN1bHQubV9wYWNrZWRCaXRzID0gYml0czsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgppbmRleCA3MWJmNmIwNmNjN2VmNDkwZjdiMzZhYTNlMjAwNjUxNzc4N2Fm
ZmE0Li5kZjBiZGViMWNiMGYwNTQwODA3ZTlhZmE3ZTI5MzE0YTE3MGMyN2RlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTU5LDcgKzU5
LDcgQEAgdHlwZXMgWwogICAgIDpXYXRjaHBvaW50U2V0LAogCiAgICAgOlZhbHVlUHJvZmlsZSwK
LSAgICA6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciwKKyAgICA6VmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyLAogICAgIDpVbmFyeUFyaXRoUHJvZmlsZSwKICAgICA6Qmlu
YXJ5QXJpdGhQcm9maWxlLAogICAgIDpBcnJheVByb2ZpbGUsCkBAIC03OTEsNiArNzkxLDEzIEBA
IG9wIDpjYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICB9LAor
ICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnQ6IHVuc2lnbmVkLAorICAgIH0sCisgICAgY2hl
Y2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBt
YWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF92YXJhcmdzLApAQCAtODA1LDYg
KzgxMiwxMyBAQCBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKKyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnQ6IHVuc2lnbmVkCisg
ICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBu
aWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzLApAQCAtODQ1LDYgKzg1OSwxMyBAQCBvcCA6Y29uc3RydWN0X3ZhcmFyZ3Ms
CiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAg
ICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAg
ICAgYXJnQ291bnQ6IHVuc2lnbmVkCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAg
ICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAg
fQogCiBvcCA6cmV0LApAQCAtOTkyLDcgKzEwMTMsNyBAQCBvcCA6Y2F0Y2gsCiAgICAgICAgIHRo
cm93blZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAg
ICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIuKiwKKyAgICAgICAgYnVm
ZmVyOiBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIuKiwKICAgICB9CiAKIG9w
IDp0aHJvdywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKaW5kZXggOTE4ZTFkMjEzNGE2MGI2Y2ZmMTAx
MTQzYWI1NTQzM2I4YjQzZjQ0MC4uN2RhMjJjMmQyY2M3YmZjMTFkMWY4ZjhkN2RiZTZkM2M5MTZj
ZTViYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKQEAgLTIwMSw0ICsyMDEsMzkgQEAgdm9pZCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKENvZGVCbG9jayogY29kZUJsb2Nr
KQogICAgIH0KIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRW51bVR5cGUxLCB0eXBlbmFtZSBFbnVt
VHlwZTI+Citjb25zdGV4cHIgYm9vbCBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBl
MSB2MSwgRW51bVR5cGUyIHYyKQoreworICAgIHVzaW5nIEludFR5cGUxID0gdHlwZW5hbWUgc3Rk
Ojp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGUxPjo6dHlwZTsKKyAgICB1c2luZyBJbnRUeXBlMiA9
IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlMj46OnR5cGU7CisgICAgaWYg
Y29uc3RleHByIChzaXplb2YoSW50VHlwZTEpID4gc2l6ZW9mKEludFR5cGUyKSkKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUxPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTE+
KHYyKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEp
ID09IHN0YXRpY19jYXN0PEludFR5cGUyPih2Mik7Cit9CisKK0JpdG1hcDxtYXhOdW1DaGVja3Bv
aW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJs
b2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgQml0bWFwPG1heE51bUNo
ZWNrcG9pbnRUbXBzPiByZXN1bHQ7CisgICAgdWludDhfdCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCk7CisKKyAgICBpZiAoIWNoZWNrcG9pbnQpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGNvZGVCbG9jay5pbnN0cnVjdGlvbnMoKS5hdChieXRl
Y29kZUluZGV4KS0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
czogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BD
YWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wVGFpbENhbGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51
bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudCwgT3BUYWlsQ2Fs
bFZhcmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0Vx
dWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJhcmdz
OjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjph
cmdDb3VudCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBpZiAoY2hl
Y2twb2ludCA9PSBPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCkKKyAgICAgICAgICAgIHJlc3VsdC5z
ZXQoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmgKaW5kZXggNzM3OWIzYzliYzcyMzI1OTEwOWM2MWU3YWRhNTMzZDllN2QyZjJjOS4uM2U1ZWRj
MGE2OGFlNDRkZjY1MTVjZGJmZDRiNDI3ZWY2OWVlZjE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlQmFzaWNCbG9jay5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3
dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC05Nyw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dy
YXBoOwogfTsKIAorQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNo
ZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0ZWNvZGVJbmRleCk7CisKIGlubGluZSBib29s
IG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3Bl
cmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91
dCwgaW50IG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggM2Qx
MmUxOTVjNjk5ZWZiZjk2MzZhMmI5NzRlNzk0NGNkYWVkNzJjMC4uZGU2Y2E4ZGM5MTA5Yjc4OTY3
ZjEwNTUwMDlkYTMwZTg5OTg0ODI4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5o
CkBAIC0zMywyMiArMzMsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIG9w
ZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0
ZXJJc0Fsd2F5c0xpdmUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gIVZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKS5pc0xvY2FsKCk7CisgICAgcmV0dXJuICFyZWcuaXNMb2NhbCgp
OwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25z
dCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJl
Z2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgdW5zaWduZWQgbG9jYWwgPSBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpOworICAgIHVuc2lnbmVkIGxvY2FsID0gcmVnLnRvTG9j
YWwoKTsKICAgICBpZiAobG9jYWwgPj0gb3V0Lm51bUJpdHMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBvdXRbbG9jYWxdOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNM
aXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2
aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5k
KSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOworICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgdmlydHVhbFJl
Z2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOwogfQogCiBpbmxp
bmUgYm9vbCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXgg
ODY5ZjUzZjNmY2QwZDA3NjEwOWExZmRhNWY5NDdmNTIwZmU1MTRkZC4uNjAyZGQ1MjVhMWJkMmMx
NjNkYjhjZjEzYjM1Y2M2MzZlYTFlYjVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCeXRlY29k
ZVN0cnVjdHMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgogI2luY2x1ZGUgIkNhbGxM
aW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCkBAIC00MDcsNyArNDA4LDcgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xv
bmVkU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+
cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKICAgICAgICAgfQotICAgICAgICByZXBs
YWNlQ29uc3RhbnQodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpLCBjbG9uZWRTeW1ib2xUYWJs
ZSk7CisgICAgICAgIHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldCgpKSwgY2xvbmVkU3ltYm9sVGFibGUpOwogICAgIH0KIAogICAgIGJvb2wg
c2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlID0gbV91bmxpbmtlZENvZGUtPndh
c0NvbXBpbGVkV2l0aFR5cGVQcm9maWxlck9wY29kZXMoKSB8fCBtX3VubGlua2VkQ29kZS0+d2Fz
Q29tcGlsZWRXaXRoQ29udHJvbEZsb3dQcm9maWxlck9wY29kZXMoKTsKQEAgLTY0MSw3ICs2NDIs
NyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1f
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAg
ICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcg
dG8gaXMgbm90IGFub255bW91cy4KICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIg
IT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xU
YWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUo
KSkpOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50
aWZpZXIoYnl0ZWNvZGUubV92YXIpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBh
dXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CkBAIC03
MDksOCArNzEwLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29k
ZUxvY2FsbHlSZXNvbHZlZDogewotICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4
ID0gYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNl
dCgpOwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxT
eW1ib2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRD
b25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkp
KTsKICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9pZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElmIG91
ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwg
aXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KQEAgLTEwODYsNiAr
MTA4NiwxNSBAQCBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6
V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpbwogICAgIAogICAgIHJldHVybiB0cnVl
OwogfQorCitCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvckV4aXQoQnl0
ZWNvZGVJbmRleCBleGl0SW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKGV4aXRJbmRleC5jaGVja3Bv
aW50KCkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMo
KS5hdChleGl0SW5kZXgpOworICAgICAgICBleGl0SW5kZXggPSBpbnN0cnVjdGlvbi5uZXh0KCku
aW5kZXgoKTsKKyAgICB9CisgICAgcmV0dXJuIGV4aXRJbmRleDsKK30KICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIAogdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgxMSwxMCAr
MTgyMCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRG
b3JCeXRlY29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJgogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtUGFyYW1ldGVycygpOyArK2kpCiAgICAgICAgIGxpdmVPcGVyYW5kcy5hcHBlbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9IG1ha2VV
bmlxdWU8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7
CisgICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChw
cm9maWxlcy0+bV9zaXplID09IGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9maWxlcy0+bV9zaXplOyArK2kpCi0gICAgICAgIHByb2ZpbGVzLT5t
X2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0KCk7Cisg
ICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFu
ZHNbaV07CiAKICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3MTMsNyAr
MjcyMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9u
c0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byogcmFyZURh
dGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tl
dCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2ZpbGVCdWNr
ZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAg
ICAgICAgICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggMDkyYzdhYWM4NDI2
YzFlNGM5ZDU5ZjU0ZjkxZTU1NjM2YzM3NGExZi4uNzk2MzQzNWVhYjM3NDRlOTZjZGVhNTRlNjhk
NDhiZjEyM2UwMDBjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaApAQCAtMTU4LDYgKzE1OCw3IEBAIHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBudW1WYXJz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CisgICAgaW50IG51bVRtcHMoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9p
bnRUbXBzOyB9CiAKICAgICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAm
bV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFt
ZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRl
cnMpOyB9CkBAIC0yMjYsMjAgKzIyNywyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxs
ZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFr
cG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRl
eCkKKyAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdpc3RlciBy
ZWcpCiAgICAgewotICAgICAgICBpZiAoaW5kZXggPT0gdGhpc1JlZ2lzdGVyKCkub2Zmc2V0KCkg
JiYgIWlzU3RyaWN0TW9kZSgpKQorICAgICAgICBpZiAocmVnID09IHRoaXNSZWdpc3RlcigpICYm
ICFpc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlm
IChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0
Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgpOworICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwogCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3Jh
cnlSZWdpc3RlckluZGV4KGludCBpbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1w
b3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGluZGV4ID49IG1fbnVtVmFyczsKKyAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBtX251
bVZhcnM7CiAgICAgfQogCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFu
ZGxlcik7CkBAIC01NzgsMTAgKzU3OSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBW
ZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25z
dGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRl
eCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvblty
ZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7
IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
Y2xzLnNpemUoKTsgfQpAQCAtNzcxLDYgKzc3MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0
T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9u
UmVzdWx0KTsKICAgICAKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5
dGVjb2RlSW5kZXgpIGNvbnN0OwogICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7
IG1fb3NyRXhpdENvdW50ZXIrKzsgfQpAQCAtODcxLDcgKzg3Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPj4g
bV9jYXRjaFByb2ZpbGVzOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAogICAgICAg
ICBEaXJlY3RFdmFsQ29kZUNhY2hlIG1fZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9OwpAQCAt
OTM4LDEwICs5MzksMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3Rl
cnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3Qg
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAotICAg
IHZvaWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lk
IHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0
aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2lu
ZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgdmFsdWUp
OworICAgICAgICBBU1NFUlQocmVnLmlzQ29uc3RhbnQoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+
KHJlZy50b0NvbnN0YW50SW5kZXgoKSkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Cisg
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1f
dm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHko
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uaAppbmRleCAyMTA2ODEzZjBhMWVhYTUxMzRkMGYzOWJkNzUxYzczMThl
YmMwNDMxLi4xOGFmMjQyMmIxMDAxZjI1ZjkwOTY4MmU0ZDllYjAxYTU5YjY1NDk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw3ICsxNjAs
OSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFt
ZSogdGVybWluYWwgPSBudWxscHRyKSBjb25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdGlvbj4KLSAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7Cisg
ICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpIGNvbnN0OworCisgICAg
Ym9vbCBpbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAog
ICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRl
ZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNr
KCkgY29uc3Q7CkBAIC0yNzgsNiArMjgwLDE2IEBAIGlubGluZSBib29sIENvZGVPcmlnaW46Om9w
ZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0CiAgICAgICAgICYmIGlubGlu
ZUNhbGxGcmFtZSgpID09IG90aGVyLmlubGluZUNhbGxGcmFtZSgpOwogfQogCitpbmxpbmUgYm9v
bCBDb2RlT3JpZ2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0
Cit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICB3YWxrVXBJbmxpbmVTdGFjayhbJl0g
KENvZGVPcmlnaW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uYnl0ZWNvZGVJbmRleCgp
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogc3RydWN0IENvZGVPcmlnaW5IYXNoIHsKICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBDb2RlT3JpZ2luJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlT3JpZ2luJiBhLCBjb25zdCBDb2Rl
T3JpZ2luJiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggZTRhNTc1YjAzYTdk
MWI1OTlhZDBkNTZjZWRkZGFmNGJhMDUwMmYzYS4uYWJhOWYyZDNkZjBlYmM3ZGZjNTBkNzgxZjYz
MTNhYjlkMDcwZDM2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTI2LDEyICsyNiwxNiBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJP
cGVyYW5kcy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBDb2RlQmxvY2s7
CiAKKy8vIE5vdGU6IEZ1bGwgYnl0ZWNvZGUgbGl2ZXNuZXNzIGRvZXMgbm90IHRyYWNrIGFueSBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVtcHMuCisvLyBJZiB5b3Ugd2FudCB0
bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50
LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNM
aXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVu
ZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBv
cGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7CisgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUocmVnKSB8fCB2aXJ0dWFsUmVn
aXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgs
IHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0
VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCisgICAgLy8gRklY
TUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNvbXBh
Y3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQy
NzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAppbmRleCA5NzUwOGJiZjBjNDVjYjk3
YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi4zOTA0OTRmOTQ1NGE3MDIyZTQ1Yzg5N2NiYTA5NTlk
ZDFiZjk3NWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgQ29k
ZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgorICAgIHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4K
KyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAy
ODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0eXBlIGlzIEtpbmQKICAgICBib29s
IGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUv
c2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlh
YmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1hbnVhbGx5LgpAQCAtMTkxLDcg
KzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIC8vIElubGluZUNhbGxGcmFt
ZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1
c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFsaXplIGV4cGxpY2l0bHkuCiAgICAg
SW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09mZnNldCgwKQorICAgICAgICA6IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAgICwgdG1wT2Zmc2V0KDApCisgICAg
ICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5kKENhbGwpCiAgICAgICAgICwgaXND
bG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiArMjIyLDEyIEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaWduZWQ+
KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc2V0VG1wT2Zmc2V0
KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRtcE9mZnNldCA9IG9mZnNldDsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRtcE9mZnNldCkgPT0g
b2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2FsbGVyRnJhbWVPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OnJl
dHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ5LDcgKzI1OCw3IEBAIGlubGluZSBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29k
ZU9yaWdpCiAKIC8vIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29k
ZU9yaWdpbiBiZWNhdXNlIGl0IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxk
IGluIElubGluZUNhbGxGcmFtZQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5l
IHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0
aW9uKQoraW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVu
Y3Rpb24mIGZ1bmN0aW9uKSBjb25zdAogewogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0
aGlzOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC0yNjEsMTEgKzI3MCwxOCBAQCBpbmxpbmUgdm9p
ZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24p
CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitB
TFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCit7CisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkK
KyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3Bl
cmFuZC52YWx1ZSgpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpIDogb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgcmV0dXJu
IG9wZXJhbmQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKHJlZy5vZmZz
ZXQoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwotICAgIHJldHVybiByZWc7Cisg
ICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJh
bmQudmFsdWUoKSAtIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6IE9wZXJhbmQob3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAg
IHJldHVybiBvcGVyYW5kOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgK
aW5kZXggYmZiOTRiMzVmY2Q2MzlhNGExZjFkMDBjOGFiYjE0NWViMWM2NGE1OS4uZTAzZmEzOTM5
NTk1NTUyZWJmMzhmN2I0YWIyZGQ1NzcwYTUwZjVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKQEAgLTI2
LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5o
IgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5j
bHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTQ5
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgOiBtX2J5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICB7CkBA
IC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsgbV9vcGVyYW5k
Lm9mZnNldCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3Bl
cmFuZC52YWx1ZSgpICsgbV9vcGVyYW5kLmtpbmQoKTsKICAgICB9CiAgICAgCiAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpAQCAt
OTAsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNvZGVJbmRl
eCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICBP
cGVyYW5kIG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlmMzZjN2ZiZGEx
MDU1Nzg5ZGZmZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEyYzY5
YThiYzA2NzA0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9N
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5k
OwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICBy
ZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4KCk7
Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0
KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwgSlNW
YWx1ZVJlZwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6
IHsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQu
Ynl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsK
KyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0
ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2sp
OwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05MSw3ICs5
MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNW
YWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFuZDogewot
ICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRl
Y29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkpOworICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29k
ZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aAppbmRleCA1ZDgxYzRjOTAwYjA4YTRkZWQ4M2E3NGRmYTVhMmRjZjMzNWVjODhkLi4zNmQzNjlm
MGMwMGZiZDQ0Yzg1NWEzODllMDY1MDg0YmM3OGU1ODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5ZmY5Zjk3MzZh
ZWIzNzM0NTk0NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uNWRhZDNhOWRkMWQzMDMxOWUzMTZhYmE0MWE3
MjBlNmE0YTY1MTBlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKQEAgLTM1LDExMSArMzUsMjIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9wZXJhbmRLaW5kIHsg
QXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBtYXhO
dW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBvbmUgdGhhdCBleGlz
dHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBleGlzdCBiZXR3ZWVu
IGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3Bl
cmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1YmxpYzoKKyAgICBPcGVy
YW5kKCkgPSBkZWZhdWx0OworCisgICAgT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgOiBtX2tpbmQob3BlcmFuZC5pc0xvY2FsKCkgPyBMb2NhbE9wZXJhbmQgOiBBcmd1
bWVudE9wZXJhbmQpCisgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpCisgICAg
eyB9CisKKyAgICBPcGVyYW5kKE9wZXJhbmRLaW5kIGtpbmQsIGludCBvcGVyYW5kKQorICAgICAg
ICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorICAgIHsgCisg
ICAgICAgIEFTU0VSVChraW5kID09IFRtcE9wZXJhbmQgfHwgVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLmlzTG9jYWwoKSA9PSAoa2luZCA9PSBMb2NhbE9wZXJhbmQpKTsKKyAgICB9CisKKyAgICBP
cGVyYW5kS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgaW50IHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kICE9IFRtcE9w
ZXJhbmQpOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCk7CisgICAg
fQorICAgIHVpbnQ2NF90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ2NF90Kj4odGhpcyk7IH0KKyAgICBzdGF0aWMgT3BlcmFuZCBmcm9tQml0cyh1
aW50NjRfdCB2YWx1ZSk7CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ID09IFRtcE9wZXJhbmQ7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gQXJndW1lbnRPcGVyYW5kOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpID09IExvY2FsT3BlcmFuZCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2Fs
KCk7IH0KKyAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFRtcE9w
ZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNIZWFkZXIoKTsgfQorCisgICAgaW50IHRvQXJn
dW1lbnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyKCkudG9Bcmd1bWVudCgpOyB9CisgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChp
c0xvY2FsKCkpOyByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOyB9CisKKyAgICBp
bmxpbmUgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IE9wZXJhbmQmKSBjb25zdDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIE9wZXJhbmRLaW5kIG1fa2luZDsKKyAgICBpbnQgbV9vcGVy
YW5kOworfTsKKworQUxXQVlTX0lOTElORSBib29sIE9wZXJhbmQ6Om9wZXJhdG9yPT0oY29uc3Qg
T3BlcmFuZCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlKCkgPT0gb3RoZXIudmFsdWUoKTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkg
PT0gb3RoZXIudmlydHVhbFJlZ2lzdGVyKCk7Cit9CisKK2lubGluZSBib29sIE9wZXJhbmQ6Omlz
VmFsaWQoKSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUo
KSA+PSAwOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc1ZhbGlkKCk7Cit9CisKK2lu
bGluZSBPcGVyYW5kIE9wZXJhbmQ6OmZyb21CaXRzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIE9w
ZXJhbmQgcmVzdWx0ID0gYml0d2lzZV9jYXN0PE9wZXJhbmQ+KHZhbHVlKTsKKyAgICBBU1NFUlQo
cmVzdWx0LmlzVmFsaWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljX2Fzc2Vy
dChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIk9wZXJhbmQ6OmFzQml0cygp
IHJlbGllcyBvbiB0aGlzLiIpOwogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlr
ZSB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgot
ICAgIE9wZXJhbmRzKCkKLSAgICAgICAgOiBtX251bUFyZ3VtZW50cygwKSB7IH0KLSAgICAKLSAg
ICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxz
KQorICAgIC8vIHVzaW5nIFN0b3JhZ2UgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3Rk
Ojppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4+OworICAgIC8vIHVzaW5nIFJlZlR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3I6OkJpdFJl
ZmVyZW5jZSwgVCY+OworICAgIC8vIHVzaW5nIENvbnN0UmVmVHlwZSA9IHR5cGVuYW1lIHN0ZDo6
Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+Owor
ICAgIHVzaW5nIFN0b3JhZ2UgPSBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Owor
ICAgIHVzaW5nIFJlZlR5cGUgPSBUJjsKKyAgICB1c2luZyBDb25zdFJlZlR5cGUgPSBjb25zdCBU
JjsKKworICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCiAg
ICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9j
YWxzKG51bUxvY2FscykKICAgICB7Ci0gICAgICAgIGlmIChXVEY6OlZlY3RvclRyYWl0czxUPjo6
bmVlZHNJbml0aWFsaXphdGlvbikgewotICAgICAgICAgICAgbV92YWx1ZXMucmVzaXplKG51bUFy
Z3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3Zh
bHVlcy5maWxsKFQoKSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfQorICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7Cisg
ICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CisgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFp
dHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCisgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQo
KSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2FscywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1U
bXBzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVt
QXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAgICB7Ci0gICAg
ICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMp
OworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRt
cHMpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNM
aWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIpCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
T3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRp
YWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFy
Z3VtZW50cygpKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkp
CiAgICAgewotICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG90
aGVyLnNpemUoKSk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9
Ci0gICAgCisKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBt
X251bUFyZ3VtZW50czsgfQotICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKSAtIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgCisgICAgc2l6ZV90
IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KKyAgICBzaXpl
X3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVy
T2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKworICAgIHNpemVfdCB0bXBJbmRl
eChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9m
VG1wcygpKTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpOworICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlkeCA8IG1fbnVtQXJndW1lbnRzKTsKKyAg
ICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4g
aWR4OwogICAgIH0KICAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbnVtQXJndW1lbnRzICsgaWR4OworICAgICAgICBB
U1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFy
Z3VtZW50cygpICsgaWR4OwogICAgIH0KKworICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIHRtcChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAg
IAotICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gbV92
YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXJndW1lbnQo
c2l6ZV90IGlkeCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVu
dEluZGV4KGlkeCldOwotICAgIH0KKyAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUg
YXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRl
eChpZHgpXTsgfQogICAgIAotICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFs
dWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KLSAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgUmVmVHlwZSBs
b2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9Cisg
ICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVy
YW5kS2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAo
b3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRL
aW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1i
ZXJPZlRtcHMoKTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxz
KCk7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIG51bWJl
ck9mTG9jYWxzKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQg
b3BlcmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBlIGF0Rm9y
KHNpemVfdCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1w
T3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1
bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAg
cmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAg
ICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3Bl
cmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29u
c3QKKyAgICBDb25zdFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAo
b3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0
dXJuIHRtcChpZHgpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAg
IHJldHVybiBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAg
ICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkK
KworICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFs
dWUgPSBUKCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUo
KTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAg
ICAgIGlmIChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9m
TG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBz
aXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9s
ZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXpl
KTsKLSAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3Zh
bHVlc1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEg
LSBpKV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJl
ZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRp
b24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxv
Y2FsczsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9j
YWxzICsgaSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBl
bnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lk
IGVuc3VyZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAg
ICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBz
aXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1Np
emUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXpl
KCk7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJl
ck9mTG9jYWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVu
c3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1Np
emU7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0
IFQmIHZhbHVlKQpAQCAtMTY0LDg0ICsyNzQsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
aWR4ID49IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBz
ZXRMb2NhbChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRl
eChpbnQgb3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNp
emVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBl
IGdldEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8T3BlcmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7
Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkp
OwotICAgICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9M
b2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAg
cmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1
cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVf
dCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAg
ICBzaXplX3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gb3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlm
ICghb3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAg
fQogICAgIAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQo
KSk7CisgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0g
ICAgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5
cGUgb3BlcmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1
cm4gdG1wKG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9w
ZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3Bl
cmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0
IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Cisg
ICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQor
ICAgIENvbnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0g
ICAgYm9vbCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2Fs
KCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAg
ICAgICBpZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0g
MCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8
IG51bWJlck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9w
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGlu
dCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBv
cGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3Bl
cmFuZCkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
c2V0T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNv
bnN0IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9
Ci0gICAgVCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAg
ICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotCi0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
aW5kZXggPCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9y
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6
ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAg
IFJlZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQor
CisgICAgT3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRz
KCkpLm9mZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
Rm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4
IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgaW5kZXggLSAobnVtYmVyT2ZM
b2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBz
ZXRPcGVyYW5kRmlyc3RUaW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgc2V0
QXJndW1lbnRGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBzZXRMb2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2
YWx1ZSk7Ci0gICAgfQotICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAtMjU3
LDYgKzM1OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFyZ3Vt
ZW50cygpID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQobnVt
YmVyT2ZMb2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJU
KG51bWJlck9mVG1wcygpID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBtX3ZhbHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUsOSAr
MzY4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3Zh
bHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxULCAw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1Bcmd1
bWVudHM7CisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBh
cmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBh
cmUgdG1wcy4KKyAgICBTdG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJndW1l
bnRzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgKaW5kZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1NjZm
ZC4uMGIxY2MxZjJkMTk3YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAsNiAr
MzAsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgb3V0
LnByaW50KCJ0bXAiLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJhbmRz
PFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAogewpAQCAtNDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbElu
ZGV4LCAiOiIsIGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0K
KyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7
ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIs
IGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgpAQCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkp
OwogICAgIH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVy
T2ZUbXBzKCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcElu
ZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAppbmRleCBkNWRkZWU4ZDU2MDc3MDMyM2IxZmQ1ZjFhY2NjY2MwNTAyYzEyNjU0Li43
ZTkzMjYyZGZiMDk1OWRlYzJhOTI0MWZmOGM2MTFmMzNiOTJiNDQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTcy
LDYgKzcyLDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1f
aGFzQ2hlY2twb2ludHMoZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgp
KQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwg
bV9tZXRhZGF0YShVbmxpbmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCBhNGZh
N2UwNTViOGU5MmI2YWFhYWE1OGMxYTlkOWVjYmFiZjQ5OGYzLi5iOTUxNjVjZWYwYjg2NmI0MGU2
MzEzNDI3MWU4MTkzNDJhOTBiZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtMTQyLDYgKzE0Miw5IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5z
aXplKCk7IH0KICAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Np
b25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXNDaGVj
a3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lkIHNl
dEhhc0NoZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAgLy8g
U3BlY2lhbCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAg
dm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1f
c2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OSw5ICsyMDIsOCBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNv
bnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQo
KTsgfQogICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50
aWZpZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29u
c3RhbnRJZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MjAsNiArNDIyLDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBtX2Fn
ZSA6IDM7CiAgICAgc3RhdGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsKKyAg
ICBib29sIG1faGFzQ2hlY2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xv
Y2sgbV9sb2NrOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAppbmRleCBiYmI4YTRiMjQ1MzEwNDAzYTdmY2VmMmIyMWUxMTgzM2VmYjkw
MzY3Li5lYjkxNzk0NTMwZGYxYTMyOTJkY2RiZWQzMTY0ZTljNzkwOWE2OWYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjggKzE3
NiwyOCBAQCBpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUlu
ZGV4KFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVByb2Zp
bGUtPm1fYnl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQg
OiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlciB7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
IHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUp
CiAgICAgewogICAgICAgICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZmIHRo
YW4gd2UgbmVlZC4gV2UgY291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAgICAg
ICAgLy8gdG8gYmUgbW9yZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIgPSBN
YWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD46Om1hbGxvYyhtX3NpemUgKiBzaXplb2Yo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCkpOworICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtp
XSkgVmFsdWVQcm9maWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIu
Z2V0KClbaV0pIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAotICAg
IH5WYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKCkKKyAgICB+VmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0aW9uPgpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+IG1fYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5jcHAKaW5kZXggYzVjYTRkZTFlNGIzNjExMjE0YzM1YWIxZWEzMmRjMWNiZjQ1ZjNlOS4uYjEz
OTQ3ZjBlMThkZjA2M2E4OGIzZjIyN2NkY2RiZmVmZmVkYzMwOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMzUsMjIgKzM1LDIy
IEBAIEpTVmFsdWUgVmFsdWVSZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6
Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOwogICAgIGNhc2UgSW50
NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZElu
dDUyKCkpOwogICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
IHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
LnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOwogICAgIGNhc2Ug
RG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5
TmFOKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJs
ZSgpKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkRG91YmxlKCkpKTsKICAgICBjYXNlIENlbGxEaXNwbGFj
ZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkpLnVuYm94ZWRDZWxsKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxh
Y2VkSW5KU1N0YWNrOgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogI2Vsc2UKLSAg
ICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCkpLnVuYm94ZWRCb29sZWFuKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CiAjZW5kaWYKICAg
ICBjYXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm4gY29uc3RhbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCmluZGV4IGQ4ZjE4YzNmZTg1
NTk0ZjMyYTI5M2FmZDg5MDkyMjM2MTM2MmVhNjMuLjVlNDNiYzcyYmJjYzRmZjk3YTY4ZjgzZGE4
MzA5NGU1OGRhM2IzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUmVjb3ZlcnkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmgKaW5kZXggMzYxOTUyOTQyZDJiODZiYWIxMmY2Y2NjN2NjMWJh
MDIxZjVhZDA0OC4uZWIwY2NjMzhlZGJhNGU4ODNiYWExNDQxOGIwNjE2ZWVhZjNhMzI5OSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaApA
QCAtMzEsMTIgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kSXNMb2NhbChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9j
YWwoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPCAwOwogfQogCi1pbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxS
ZWdpc3RlcklzQXJndW1lbnQoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPj0g
MDsKIH0KQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgIHsgfQogCiAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IHNfaW52YWxpZFZpcnR1
YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBvcGVyYW5k
SXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25z
dCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBi
b29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmly
dHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBp
c0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0
dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29sIGlz
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChp
c0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCmluZGV4IGNiZGYyNjk0ZmMzM2E2NGU5NWVlYTFmM2RmODE3OGM2ZjE5MjFk
ZWIuLjJiMTUyM2UyNWVhZWUzYmY0Zjg1MzRjOTkwYWQ3YWZmOTllODI4ZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCkBAIC0xNjM4LDExICsxNjM4LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRFcXVhbGl0eU9wSW1wbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlCiAK
ICAgICBpZiAobV9sYXN0SW5zdHJ1Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAgICAgICAgIGF1
dG8gb3AgPSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAgIGlmIChz
cmMxLT5pbmRleCgpID09IG9wLm1fZHN0Lm9mZnNldCgpCisgICAgICAgIGlmIChzcmMxLT52aXJ0
dWFsUmVnaXN0ZXIoKSA9PSBvcC5tX2RzdAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3Jh
cnkoKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KHNyYzItPmluZGV4KCkpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIo
c3JjMi0+aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOworICAgICAgICAgICAgJiYgc3Jj
Mi0+dmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpCisgICAgICAgICAgICAmJiBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkuaXNT
dHJpbmcoKSkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQo
KSktPnRyeUdldFZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5lZCIp
IHsKICAgICAgICAgICAgICAgICByZXdpbmQoKTsKICAgICAgICAgICAgICAgICBPcElzVW5kZWZp
bmVkOjplbWl0KHRoaXMsIGRzdCwgb3AubV92YWx1ZSk7CkBAIC0zMjMwLDYgKzMyMzAsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogZnVuYwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBBU1NFUlQoZHN0
ICE9IGlnbm9yZWRSZXN1bHQoKSk7CiAgICAgVmFyYXJnc09wOjplbWl0KHRoaXMsIGRzdCwgZnVu
YywgdGhpc1JlZ2lzdGVyLCBhcmd1bWVudHMgPyBhcmd1bWVudHMgOiBWaXJ0dWFsUmVnaXN0ZXIo
MCksIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMxZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJk
Yjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZmZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAt
MTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRp
b25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7
IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNr
cG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAg
IFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+
cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5jcHAKaW5kZXggYjgzZmVlMGQzYzA5ZDE0OTdhYTdlYTFkZTNlMDQ5MDYy
ZjIyNmMxNC4uZTY0MDcxYjFhYTBlMzQ4OTQ0MzQzOWZmMjhmY2EyNTFiNjJiOTY1YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcApAQCAtNDAsNiAr
NDAsMTQgQEAgdm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KHZhbHVlKCkpOwogfQogCit2b2lkIEFic3RyYWN0
SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAg
ICAgICAgb3V0LnByaW50KE9wZXJhbmQ6OmZyb21CaXRzKHZhbHVlKCkpKTsKK30KKwogdm9pZCBB
YnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJp
bnQoa2luZCgpKTsKQEAgLTQ5LDYgKzU3LDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiKCIsIERPTUpJVDo6SGVh
cFJhbmdlOjpmcm9tUmF3KHBheWxvYWQoKS52YWx1ZTMyKCkpLCAiKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIGlmIChraW5kKCkgPT0gU3RhY2spIHsKKyAgICAgICAgb3V0LnByaW50
KCIoIik7CisgICAgICAgIHBheWxvYWQoKS5kdW1wQXNPcGVyYW5kKG91dCk7CisgICAgICAgIG91
dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgb3V0LnByaW50KCIo
IiwgcGF5bG9hZCgpLCAiKSIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAppbmRleCBiZjk5Mzc3OTcwNDcwMmQ4ZDViMjBiNmMyZjZmNzM5NWFmZTZi
ODY4Li4zYzRjZTNkNWQwMmRjM2E4MWYzYWE0MjRjZmMzZmQxYzQ0N2M1MjkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRPTUpJVEhlYXBSYW5nZS5oIgorI2lu
Y2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBA
IC0xMjMsMTAgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fdmFsdWUoYml0d2lz
ZV9jYXN0PGludHB0cl90Pihwb2ludGVyKSkKICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorCisgICAgICAgIFBh
eWxvYWQoT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQotICAg
ICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgICAgICAgICAsIG1fdmFs
dWUob3BlcmFuZC5hc0JpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUGF5
bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgICAgIDogUGF5bG9hZChPcGVy
YW5kKG9wZXJhbmQpKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODMsNiAr
MTg5LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wQXNPcGVyYW5kKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9pc1Rv
cDsKQEAgLTIwNCw2ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoa2lu
ZCAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQgJiYga2luZCAhPSBIZWFw
ICYmIGtpbmQgIT0gU2lkZVN0YXRlKTsKICAgICAgICAgbV92YWx1ZSA9IGVuY29kZShraW5kLCBw
YXlsb2FkKTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPmtpbmQoKSA9PSBraW5kICYmIHRoaXMtPnBh
eWxvYWQoKSA9PSBwYXlsb2FkKTsKICAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKQEAgLTIxOSw2ICsyMjcsMTEgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJh
Y3RIZWFwKTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CiAgICAgfQorICAgIE9wZXJh
bmQgb3BlcmFuZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNr
ICYmICFwYXlsb2FkKCkuaXNUb3AoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjpmcm9tQml0
cyhwYXlsb2FkKCkudmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcCBzdXBl
cnR5cGUoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCA1ZDdlNjk2OGM3MWYy
MTYzN2ZmOGNiNzVlZTVkNTg2Y2QyZGUyNjNiLi5mMzc0YTE5NzU2YzkxOTNmZjM5MmM4Y2NkMjhm
NjQ5NzdmMWQzZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zODEsNyArMzgxLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsK
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3Rh
dGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0
YS0+b3BlcmFuZCgpKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQg
YWxyZWFkeSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZh
bHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQo
KSkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC0zOTIsNyArMzkyLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2NhbCk7
CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3Bl
cmFuZCk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkg
YmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5
cGUodHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1
ZSgpKQpAQCAtNDAyLDEyICs0MDIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3Rh
dGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjksNyArNDI5LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3Vt
ZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50RGVmaW5pdGVseS9TZXRBcmd1bWVudE1heWJl
IG1lYW5zCiAgICAgICAgIC8vIHRoYXQgc29tZW9uZSBzZXQgdGhlIGFyZ3VtZW50IHZhbHVlcyBv
dXQtb2YtYmFuZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEK
ICAgICAgICAgLy8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NFUlQoIW1fc3RhdGUub3Bl
cmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBBU1NFUlQoIW1fc3RhdGUu
b3BlcmFuZChub2RlLT5vcGVyYW5kKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czogewpAQCAtNDU4LDYgKzQ1OCwx
MiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAg
ICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsK
ICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVjayBpZiB0aGUgY291
bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0dXJuCkBAIC00NzYs
NyArNDgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIG1fc3RhdGUub3Bl
cmFuZChkYXRhLT5jb3VudCkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykKLSAgICAgICAgICAgIG1f
c3RhdGUub3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7Cisg
ICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9m
ZnNldCgpICsgaSkpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAppbmRleCBk
NzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZhMDgwY2VhMzJm
ZDljNTkxZjMwZjFlN2RkNDZmMWQxMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFy
aWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFi
bGUtPm9wZXJhbmQoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBhZjJlZGE0YWQ4OGU5Yjk3YWFk
NWY0ZjkzOTIzNzYyMTk1MmFlZjg0Li5mYTI0YzY5ZDBmZWNiN2JhZmM3MDVkODVjM2M1YWQwYzY1
MzkxZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJh
eVdpdGhTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVudHNDaGlsZCgp
LT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5v
cCgpID09IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5
QnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5hcmd1bWVudHND
aGlsZCgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00OTMsMTAgKzQ5
NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
aGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBvaW50IHRvIGFuIGFyZ3VtZW50IG9y
IGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnLmlzSGVhZGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3Bl
cmFuZChyZWcpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmFuZC5p
c0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Js
b2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTU2
MCwxMiArNTYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJl
cmVkQnlCbG9jayB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5
VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0Nsb2JiZXJlZEJ5QmxvY2spIHsKQEAgLTYyNyw3ICs2MzAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6
ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCBo
ZWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhcC5raW5k
KCkgPT0gU3RhY2sgJiYgIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChp
bmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTg0NSw5ICs4NDgsMjMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJn
c0xlbmd0aDogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5h
cmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1p
bmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgICAvLyBWYXJhcmdzTGVuZ3RoIGNhbiBleGl0LCBzbyBp
dCBiZXR0ZXIgYmUgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAgICAgICAgICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKHRydWUpOworCisKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJn
dW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgb3Jp
Z2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7
Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVk
QWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIApAQCAtODYyLDEwICs4NzksMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNr
LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2lu
LnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFy
Z3NEYXRhLT5jb3VudCksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+
b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwg
Rmx1c2hlZEludDMyKSksCkBAIC04NzQsMTQgKzg5MSwxNSBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVk
IHN0b3JlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
S2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJl
Zy5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9w
SW5mbyhyZWcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1v
dkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZyksIEVkZ2UodmFsdWUpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmln
aW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKQEAgLTEwMTksOSArMTAzNyw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NEYXRh
LT5vZmZzZXQ7CkBAIC0xMDMwLDcgKzEwNDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49
IDEpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJh
cmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCB2YXJh
cmdzRGF0YS0+bGltaXQsIHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAppbmRl
eCA2MjYxMTIzY2JmZWMzZWJhMTk1ZDA5YjkzMTAyNmYyNmM3MjU4NDc2Li4yMDZkNmZiZGM1NGEz
NmNiODQxOGE4YjM4NTQ2ZDg3NTc3OTkwMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCkBAIC0zMiwxMSArMzIsMTUgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKKyAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkK
ICAgICAgICAgcmV0dXJuIChyZWcuaXNBcmd1bWVudCgpICYmIHJlZy50b0FyZ3VtZW50KCkpIHx8
IHJlZy5pc0hlYWRlcigpOwotICAgIAorCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9z
dXJlQ2FsbAogICAgICAgICAmJiByZWcgPT0gVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTUyLDEzICs1NiwxMyBAQCBib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3Qo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcgogICAgIHJl
dHVybiByZWcgPj0gYXJndW1lbnRTdGFydCAmJiByZWcgPCBhcmd1bWVudFN0YXJ0ICsgbnVtQXJn
dW1lbnRzOwogfQogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlk
YXRlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90
KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCBvcGVyYW5kKQogewotICAgIHJldHVybiBhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSgpLCByZWcpOworICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpLCBvcGVyYW5kKTsKIH0KIAog
Tm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNl
dCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9k
ZU9yaWdpbiBvcmlnaW4pCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFy
Z3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBhZGRU
aGlzKQogewogICAgIEdyYXBoJiBncmFwaCA9IGluc2VydGlvblNldC5ncmFwaCgpOwogCkBAIC02
OSwxMSArNzMsMTQgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAog
ICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIKICAgICAgICAgfHwg
YXJndW1lbnRzLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5v
cCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlCdWZmZXIKLSAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQsCisgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlX
aXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkLAogICAgICAgICBh
cmd1bWVudHMtPm9wKCkpOwogCisgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3By
ZWFkKQorICAgICAgICByZXR1cm4gZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGlu
c2VydGlvblNldCwgYXJndW1lbnRzLT5jaGlsZDEoKS5ub2RlKCksIG5vZGVJbmRleCwgb3JpZ2lu
LCBhZGRUaGlzKTsKKwogICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
V2l0aFNwcmVhZCkgewotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50
cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gYWRk
VGhpczsKICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcmd1bWVudHMtPmJpdFZlY3Rv
cigpOwogICAgICAgICBOb2RlKiBjdXJyZW50U3VtID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CkBAIC0x
MDMsNyArMTEwLDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAog
CiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMt
Pm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7CiAgICAgICAgIHJldHVybiBpbnNlcnRp
b25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNO
dW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxl
bmd0aCgpKSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1l
bnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpICsgYWRk
VGhpcykpOwogICAgIH0KICAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGFyZ3VtZW50cy0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwpAQCAtMTEz
LDcgKzEyMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAg
ICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCk7CiAgICAgCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIC0gIWFkZFRoaXM7CiAgICAgICAgIGlmIChhcmd1bWVudHNTaXplID49IG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgZWxzZQpAQCAtMTI5LDE0ICsxMzYsMTQgQEAg
Tm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBub2RlSW5k
ZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoU3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVj
a2VkKSwKICAgICAgICAgRWRnZShhcmd1bWVudENvdW50LCBJbnQzMlVzZSksCiAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwg
b3JpZ2luLCBqc051bWJlcigxICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkp
OworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwICsgIWFkZFRoaXMpLCBJbnQzMlVzZSkpOwogCiAgICAgaWYgKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSB7CiAgICAgICAgIC8vIFRoZSBhYm92ZSBzdWJ0cmFjdGlvbiBtYXkgcHJv
ZHVjZSBhIG5lZ2F0aXZlIG51bWJlciBpZiB0aGlzIG51bWJlciBpcyBub24temVyby4gV2UgY29y
cmVjdCB0aGF0IGhlcmUuCiAgICAgICAgIHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aE1heCwgb3JpZ2lu
LCAKICAgICAgICAgICAgIEVkZ2UocmVzdWx0LCBJbnQzMlVzZSksIAotICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJl
cigwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYWRkVGhpcyksIEludDMyVXNlKSk7
CiAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGll
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaApp
bmRleCA5YTc3MThmYmJmNTQ3YjJmNmFlMTAxZGFmMzc0YTA2YTJjM2RkZjEyLi43NGY5MzllODE2
MjJkNDAyNDZlMjM1NWQ1MDk4YTllZDJhODUyMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKQEAgLTMxLDExICszMSwxMSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2
ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIpOwotYm9vbCBhcmd1
bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyKTsK
K2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5k
KTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIE9wZXJh
bmQpOwogCiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5z
ZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmln
aW4pOworICAgIEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luLCBib29sIGFkZFRoaXMgPSBmYWxzZSk7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFp
bEFic3RyYWN0U3RhdGUuaAppbmRleCA5NmRhYzM5YTQ0NGZmYmQzY2U1NDNmNTdmMzZjZDYxZGVj
YzI4YmQ0Li44OTdjNzBkZmZiYTA2NmI2NDljYWZkY2MxZWYwOTMzNzY4MTA0ZDEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaApA
QCAtMTM5LDggKzEzOSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFy
Z3VtZW50cygpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQotICAgIEFic3RyYWN0
VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkg
eyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KICAgICBB
YnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVl
c0F0VGFpbC5sb2NhbChpbmRleCk7IH0KICAgICBBYnN0cmFjdFZhbHVlJiBhcmd1bWVudChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7
IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmNwcAppbmRleCA3NzQzZTdkMDFmMWNhZDc4MWQ4NGFiMDNkM2MwOWM3N2Y4MDI5YmE1Li5j
MmI1NWFhNWM0YTUyMjliMWIxYTQ0MzFjMTg3YWRlZjQ2YzNkYjI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCkBAIC02NSwxMCArNjUs
MTAgQEAgdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lSGVhcCgpCiAKIHZvaWQgQXZhaWxhYmls
aXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBDb2RlT3JpZ2luIHdoZXJlKQog
ewotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxzQ29weShtX2xvY2Fscy5udW1iZXJP
ZkFyZ3VtZW50cygpLCBtX2xvY2Fscy5udW1iZXJPZkxvY2FscygpLCBBdmFpbGFiaWxpdHk6OnVu
YXZhaWxhYmxlKCkpOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxzQ29weShPcGVy
YW5kc0xpa2UsIG1fbG9jYWxzLCBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkpOwogICAgIGdy
YXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICB3aGVyZSwKLSAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAg
ICAgICAgIGxvY2Fsc0NvcHkub3BlcmFuZChyZWcpID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOwog
ICAgICAgICB9KTsKICAgICBtX2xvY2FscyA9IFdURk1vdmUobG9jYWxzQ29weSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAppbmRleCA1MzU1MjU2
MDIzZGRjZjI4MGRjNTk1YjMzYTdjN2ZkZWM1NGU2NGYwLi44MGMxMmJmMTgwMjVhNTYxMDU5NmRh
MjRlMjNjMDI1ZjJhYmU0ZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5TWFwLmgKQEAgLTY2LDkgKzY2LDkgQEAgc3RydWN0IEF2YWlsYWJpbGl0eU1h
cCB7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc0Z1bmN0b3IsIHR5cGVu
YW1lIEFkZEZ1bmN0b3I+Ci0gICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKFZpcnR1YWxS
ZWdpc3RlciByZWcsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRk
KQorICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChPcGVyYW5kIG9wLCBjb25zdCBIYXNG
dW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKICAgICB7Ci0gICAgICAgIEF2YWls
YWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CisgICAgICAgIEF2
YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKG9wKTsKICAgICAgICAg
aWYgKCFhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCmluZGV4IDA1
ODQ0OTYzZTYxMGVkMjkzYzU2MGZhYmZkMzg5YTlmMzk3ODBhMDcuLmUyMWIyOGI1MjIxZjE1NjE4
YjgwNjRhM2E3YjJkNzg2OTEzODQyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKLUJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgZmxv
YXQgZXhlY3V0aW9uQ291bnQpCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMs
IHVuc2lnbmVkIG51bVRtcHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogICAgIDogYnl0ZWNvZGVC
ZWdpbihieXRlY29kZUJlZ2luKQogICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAsIGNmYVN0cnVj
dHVyZUNsb2JiZXJTdGF0ZUF0SGVhZChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKQEAgLTQ4LDExICs0
OCwxMSBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZwogICAgICwgaXNMaW5rZWQoZmFsc2UpCiAj
ZW5kaWYKICAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQotICAgICwgdmFyaWFibGVzQXRIZWFkKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50
cywgbnVtTG9jYWxzKQotICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
KQotICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgaW50
ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBBYnN0
cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBu
dW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkK
ICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpAQCAtNzAsNiArNzAs
MTUgQEAgdm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxz
KQogICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpOwogfQogCit2b2lkIEJhc2ljQmxvY2s6
OmVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKK3sKKyAgICB2YXJpYWJsZXNBdEhlYWQu
ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YXJpYWJsZXNBdFRhaWwuZW5zdXJlVG1wcyhu
ZXdOdW1UbXBzKTsKKyAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAg
ICB2YWx1ZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICBpbnRlcnNlY3Rpb25P
ZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpm
dWxsVG9wKCkpOworfQorCiB2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VUZXJtaW5hbChHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZUFuZEluZGV4IHJlc3VsdCA9IGZpbmRUZXJt
aW5hbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAppbmRleCBi
NWFkZjA5MTJkMDk0MmJlOTdlOTg3Y2RjODlmNGFlMzRkMGMwYmM4Li4xZGQzOGM3OTA4ZGM2ZjRk
MWIwODViYzhlMDYyNTQ4MGRiNDQ5N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaApAQCAtNDYsMTEgKzQ2LDEyIEBAIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCA4
PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNC
bG9jaz4gewogICAgIEJhc2ljQmxvY2soCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVC
ZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRtcHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlv
bkNvdW50KTsKICAgICB+QmFzaWNCbG9jaygpOwogICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxz
KHVuc2lnbmVkIG5ld051bUxvY2Fscyk7CisgICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5l
d051bVRtcHMpOwogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5zaXplKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQu
Y3BwCmluZGV4IDc1MDhlMjE5ZGM3YzU4M2RiOWVhOGZjZTY0Njg1ODk5OWUwNDYwZjkuLjAwOGNm
NTIyNjk1N2M5YTgzNTg1YzVlNWUyYzEyNWYyZjhjZTRiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCkBAIC01MSw3ICs1MSw3
IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNp
Y0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0
KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25D
b3VudCkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNC
bG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
VG1wcygpLCBleGVjdXRpb25Db3VudCkpOwogICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7
CiAgICAgYXV0byogcmVzdWx0ID0gYmxvY2sucHRyKCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZN
b3ZlKGJsb2NrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCmluZGV4IGY4ZGU5NWZlYTUwOWFkMjA3NzUzMjczZGJmNjhjYzUwMjIyNTJiMWUu
LjBiNjFmMGVjYzUyYzgyYzY1NzcxMDI2NjEwYTZiMTEyMTNiMzVmYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMTIsNiArMTEy
LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY29uc3RhbnRPbmUoZ3JhcGguZnJlZXplKGpzTnVt
YmVyKDEpKSkKICAgICAgICAgLCBtX251bUFyZ3VtZW50cyhtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSkKKyAgICAgICAgLCBtX251bVRtcHMobV9jb2RlQmxvY2stPm51bVRtcHMoKSkKICAgICAg
ICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAgICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDAp
CiAgICAgICAgICwgbV9pbmxpbmVTdGFja1RvcCgwKQpAQCAtMTQwLDYgKzE0MSwxNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxv
Y2Fscyk7CiAgICAgfQogCisgICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMp
CisgICAgeworICAgICAgICBWRVJCT1NFX0xPRygiICAgZW5zdXJlTG9jYWxzOiB0cnlpbmcgdG8g
cmFpc2UgbV9udW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJc
biIpOworICAgICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9n
cmFwaC5ibG9jayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8v
IEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVu
Y3Rvcj4KICAgICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2Rl
VHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzEsMjUgKzI4Mywz
MyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFz
aWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8
QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2li
bGVUYXJnZXRzKTsKICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2tw
b2ludCgpCisgICAgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9j
dXJyZW50SW5kZXgub2Zmc2V0KCksIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAg
ICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAg
ICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFu
ZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAg
ICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVy
YW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3Qo
KTsKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9w
ZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkp
OwogCi0gICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsK
KyAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
KTsKIAotICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBnZXRMb2Nh
bChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAg
fQogCiAgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAtMjk5LDggKzMx
OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFu
dHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAh
bV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2Rl
QmxvY2smIGNvZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQu
b2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24ob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2Nr
LmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAg
bV9jb25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkK
QEAgLTM1OSw5ICszNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxv
Y2FscyBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0
CiAgICAgfTsKLSAgICBOb2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5v
ZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXRE
aXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9y
bWFsU2V0KQogICAgIHsKLSAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFu
ZC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8o
b3BlcmFuZCksIHZhbHVlKTsKIAogICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVj
YXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0g
ZmFsc2U7CkBAIC0zNzUsNyArMzk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBkZWxheWVkLmV4ZWN1dGUodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9j
ZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQpAQCAtMzkzLDE4ICs0MTQsMTcgQEAgcHJp
dmF0ZToKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBB
U1NFUlQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJ
bmRleCk7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQo
KSk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9w
LT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVy
biBub2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFi
b3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdl
dExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAo
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5k
LnRvTG9jYWwoKTsKLQotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkg
fHwgb3BlcmFuZC5pc0xvY2FsKCkpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAg
IC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3Mg
ZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50
IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtNDI5LDIwICs0NDksMjUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRp
b24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAg
IHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2lu
JiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBT
ZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25z
dCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1
ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9w
ZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3Bl
PENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50
aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewot
ICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1
bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1w
KCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBz
KSB7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCppbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJh
ZCBvcGVyYW5kOiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAi
LCBtX251bVRtcHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1w
cygpLCAiIHRtcHMuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1l
ZGlhdGVOYWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFy
Z3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckxvY2FsKHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAg
ICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBt
X2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFw
aC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0
ZXIoKSkKICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQogCkBAIC00
NTIsNyArNDc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJn
ZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
LCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0
TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsK
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODQsMjAgKzUwOSwyMSBAQCBwcml2
YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBz
ZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisg
ICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9w
ZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
ICAgICB7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1
cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShyZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBm
b3IgJ3RoaXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8gdGhlbiBt
YWtlIHN1cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1bWVudCB8
fCBtX2dyYXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNldE1vZGUg
IT0gSW1tZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25L
aW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzMywxNCArNTU5LDE2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZz
ZXQoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsKICAgICAg
ICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICAKLSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3Np
dGlvbihPcGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3Vt
ZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBv
c2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU3Niw2ICs2MDQsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IG1fZ3JhcGgubGl2ZW5lc3NGb3Io
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIGhh
bmRsZSB0bXBzIGhlcmUgYmVjYXVzZSB0bXBzIGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgZmx1c2hl
ZCB0byB0aGUgc3RhY2suCiAgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2ZW5lc3NBdEJ5
dGVjb2RlID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIG1fZ3JhcGgu
YXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQob3JpZ2luLCBpc0NhbGxlck9yaWdp
bikpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBjb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICAgICAgICAgICAgICBpZiAobGl2
ZW5lc3NBdEJ5dGVjb2RlW2xvY2FsXSkKQEAgLTU4NSwyNyArNjE0LDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIHZvaWQgZmx1c2goT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAg
Zmx1c2hEaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZs
dXNoRGlyZWN0KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsKICAgICB9
CiAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVu
dFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFu
ZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsKICAg
ICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4ob3BlcmFuZCwgYXJndW1lbnRQb3Np
dGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGU+Ci0gICAgdm9p
ZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVu
dFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21M
b2NhbChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24p
CiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAg
QVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0Nv
bnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgTm9kZSomIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAg
ICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwogICAgICAgICAKQEAg
LTYxNSwyNiArNjQ0LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBhZGRU
b0dyYXBoKG5vZGVUeXBlLCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgaWYg
KGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJp
YWJsZSh2YXJpYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBwaGFudG9tTG9jYWxEaXJlY3QoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwaGFudG9tTG9jYWxEaXJlY3QoT3BlcmFu
ZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9t
TG9jYWw+KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsKICAgICB9CiAK
ICAgICB2b2lkIGZsdXNoKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnkpCiAgICAg
ewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07CisgICAgICAgIGF1dG8g
YWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkg
eyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hJbXBsKGlubGluZVN0YWNr
RW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7CiAgICAgfQogCiAgICAg
dm9pZCBmbHVzaEZvclRlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJl
Y3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hE
aXJlY3QocmVnKTsgfTsKLSAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0g
KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcGhhbnRvbUxvY2FsRGly
ZWN0KHJlZyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNh
bGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsKKyAg
ICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSos
IE9wZXJhbmQgb3BlcmFuZCkgeyBwaGFudG9tTG9jYWxEaXJlY3Qob3BlcmFuZCk7IH07CiAgICAg
ICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKGN1cnJlbnRDb2RlT3JpZ2luKCksIGFkZEZsdXNoRGly
ZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwogICAgIH0KIApAQCAtNzYyLDYgKzc5MCwxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2Uo
Y2hpbGQzKSk7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgfQorICAg
IE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogY2hp
bGQxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wID09IE1vdkhpbnQpOworICAgICAgICByZXR1
cm4gYWRkVG9HcmFwaChvcCwgT3BJbmZvKG9wZXJhbmQua2luZCgpKSwgT3BJbmZvKG9wZXJhbmQu
dmFsdWUoKSksIGNoaWxkMSk7CisgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUg
b3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIg
PSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAgICAgICAgTm9kZSogcmVz
dWx0ID0gbV9ncmFwaC5hZGROb2RlKApAQCAtMTA5Miw4ICsxMTI1LDEwIEBAIHByaXZhdGU6CiAK
ICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgog
ICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwotICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxz
ICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4gdGhlIGZ1bmN0aW9uLgorICAgIC8vIFRoZSBu
dW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgYnkgdGhlIGJ5dGVjb2Rl
IGZvciB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHM7CisgICAgLy8gVGhl
IG1heCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3IgZm9yd2FyZGluZyBkYXRhIHRvIGFuIE9TUiBl
eGl0IHRvIGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQgbV9udW1UbXBzOwogICAgIC8vIFRoZSBu
dW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRoYXQgd2UgbmVl
ZCB0bwogICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1bWVudHMgdG8gb3V0Z29pbmcgY2FsbHMg
ZnJvbSB0aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVtYmVyIGluY2x1ZGVzIHRoZSBDYWxsRnJh
bWUgc2xvdHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0aGUgY2FsbGVlCkBAIC0xMTYwLDE0ICsx
MTk1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgp
OwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAgT3BlcmFuZCByZW1hcE9wZXJhbmQoT3Bl
cmFuZCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1faW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOworCisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kKFRt
cE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSArIG1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0
YW50KCkpOwogCi0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zm
c2V0KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQ7CiAgICAgICAgIH0KICAgICB9OwogICAgIApAQCAtMTE3NiwxMyArMTIxNCw4IEBAIHBy
aXZhdGU6CiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2sgbV9pY0NvbnRleHRTdGFjazsKICAgICAK
ICAgICBzdHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKLSAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdp
bjsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKLSAgICAgICAgTm9kZSogbV92
YWx1ZTsKLSAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7Ci0gICAgICAgIAogICAgICAgICBEZWxh
eWVkU2V0TG9jYWwoKSB7IH0KLSAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0IENvZGVPcmln
aW4mIG9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUpCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmln
aW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKICAgICAg
ICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAgLTExOTUsOCArMTIyOCwxMyBAQCBw
cml2YXRlOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9vcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRBcmd1bWVudChtX29yaWdpbiwg
bV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwotICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ci0+c2V0TG9jYWwobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsT3JUbXAobV9vcmlnaW4sIG1fb3BlcmFu
ZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKICAgICAgICAgfQorCisgICAgICAgIENvZGVPcmlnaW4g
bV9vcmlnaW47CisgICAgICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgICAgICBOb2RlKiBtX3Zh
bHVlIHsgbnVsbHB0ciB9OworICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKICAgICB9OwogICAg
IAogICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1fc2V0TG9jYWxRdWV1ZTsKQEAgLTEy
MDksNyArMTI0Nyw3IEBAIHByaXZhdGU6CiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxs
b2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAg
IEFTU0VSVChieXRlY29kZUluZGV4KTsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9w
dFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVt
TG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBC
YXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgbV9u
dW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9jay5wdHIoKTsKICAg
ICAvLyBtX2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdheXMgYmUgc29ydGVkIGluIGluY3Jl
YXNpbmcgb3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpKQpAQCAtMTIyMSw3ICsxMjU5LDcgQEAgQmFzaWNC
bG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKIAogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRl
VW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0
UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251
bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcg
QmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2Fscywg
bV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9jay5wdHIoKTsK
ICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxvY2spKTsKICAgICByZXR1cm4gYmxv
Y2tQdHI7CkBAIC0xNDI0LDcgKzE0NjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVS
ZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IHN0YXRpY19jYXN0PGlu
dD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IElubGluZUNhbGxGcmFt
ZSBpcyBWYXJhcmdzLCB3ZSBkbyBub3Qga25vdyBob3cgbWFueSBhcmd1bWVudHMgYXJlIGFjdHVh
bGx5IGZpbGxlZCBieSBMb2FkVmFyYXJncy4gVmFyYXJncyBJbmxpbmVDYWxsRnJhbWUncwotICAg
ICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIg
b2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSBMb2FkVmFyYXJncy4gV2UgImNvbnRp
bnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCisgICAgICAgICAgICAvLyBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBm
aWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhlIHVw
cGVyIGZyYW1lIHdoaWNoIG1heSBiZQogICAgICAgICAgICAgLy8gYSBnb29kIHRhcmdldCB0byBq
dW1wIGludG8uCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTE2MTUsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4
dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0g
ICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxvY2Fs
cygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2Fs
KCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAg
ICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcyhtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoT3BlcmFuZChUbXBPcGVyYW5kLCBjb2RlQmxvY2stPm51bVRtcHMoKSkpLnZh
bHVlKCkgKyBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFy
Z3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7
CiAKICAgICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNh
bGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzcsNyArMTY3Nyw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1f
aW5saW5lU3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRo
aXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAg
ICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVD
YWxsRnJhbWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhl
IGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZElu
ZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBAIC0xNjcyLDkgKzE3MTIsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0
aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiBy
ZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBN
b3ZIaW50cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0
IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dl
dCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50
VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldCksIHZhbHVlKTsKICAgICAg
ICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENv
ZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxOCwxNiArMTc1OCwxNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBkbyBub3QgbmVl
ZCB0byBtb3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCAh
PSByZWdpc3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVy
T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1l
bnRUb0dldCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQg
PSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhh
cmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIE9wZXJhbmQg
YXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92
SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9z
ZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigp
LCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5
Rml4dXBDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSks
IHVuZGVmaW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBt
X3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGFyZ3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAg
ICAgIH0KIApAQCAtMTg5NCwxMiArMTkzNCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rlcgog
ICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJnZXROb2RlLCB0
aGlzQXJndW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZz
ZXQgPQotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgIG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFs
UmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgCiAg
ICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCkpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0
KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgICAg
ICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAx
KTsKQEAgLTE5MDcsMTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFy
YXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAg
ICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OwogICAgICAgICBkYXRhLT5saW1pdCA9
IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBkYXRhLT5tYW5kYXRvcnlN
aW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsT3Ag
PT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2Fy
ZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7
CisKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChHZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICBlbHNlIGlmIChpbmxpbmVD
YWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9
IGdldERpcmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lKCksIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgZWxzZSAKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFy
Z3MsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQpOworICAgICAg
ICAgICAgYXV0byBhcmdDb3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChP
cGVyYW5kKFRtcE9wZXJhbmQsIE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgICAg
ICBzZXREaXJlY3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0aCwgT3BJbmZv
KGRhdGEpLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzQ2hlY2twb2ludCgpOwor
CisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldExv
Y2FsT3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBuZWVkIHRvIGtl
ZXAgYWxpdmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAvLyBhbmQgYXJn
dW1lbnRzQXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdlIG9ubHkgbmVl
ZCBhIFBoYW50b20gZm9yCkBAIC0xOTIzLDE0ICsxOTc2LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJl
Z2lzdGVyCiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciBy
ZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAvLyBiZWZvcmUg
U1NBLgogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxl
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVy
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoZGF0YS0+
Y291bnQpOwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3Jj
ZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAogICAgICAg
ICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJndW1lbnREZWZp
bml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAgICAgLy8gbW9z
dGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnByZWRpY3QoU3Bl
Y0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9maXRhYmxlVG9V
bmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgo
U2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+
bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3Vt
ZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAg
dW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTE5NTQsNyArMjAwNyw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVudHMgPj0gbWFu
ZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERlZmluaXRlbHks
IE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFi
bGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1TZXRBcmd1bWVu
dHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjA1NCw3ICsyMTA3LDcgQEAgQnl0ZUNvZGVQYXJz
ZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5n
KAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0OiAiLCByZWdp
c3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdpc3Rlck9mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
VkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcsICJcbiIpOwog
ICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXRXaXRo
Rmx1c2gpOwogCkBAIC01MTAzLDcgKzUxNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVn
ZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlzQ29uc3RhbnQo
KSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVl
emVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVj
b2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVu
UmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVuUmVnRXhwKSwg
anNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25l
d19yZWdleHApOwogICAgICAgICB9CkBAIC02MTc5LDcgKzYyMzIsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUoKSB8fCAobV9ncmFwaC5jb21waWxhdGlvbigp
ICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0gMSAmJiBtX2N1cnJlbnRCbG9jay0+YXQoMCkt
Pm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAotICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1
ZmZlcjsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciog
YnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsKIAogICAgICAg
ICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRj
aCk7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2Fu
IGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCkBAIC02MTk2LDcgKzYyNDksNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCi0gICAgICAgICAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OwogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCkBAIC02MjI0LDE0
ICs2Mjc3LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAKIAogICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZMb2NhbHMgPSAwOwotICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgYnVmZmVyLT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQp
OwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzTG9jYWwo
KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dyYXBoKEV4dHJhY3RDYXRj
aExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9jYWxQcmVkaWN0aW9uc1tu
dW1iZXJPZkxvY2Fsc10pKTsKICAgICAgICAgICAgICAgICArK251bWJlck9mTG9jYWxzOwotICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKHByb2ZpbGUubV9vcGVyYW5k
KSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9w
ZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbG9jYWxzVG9TZXQudW5jaGVja2VkQXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZhbHVlKSk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIGlmIChudW1iZXJPZkxvY2FscykKQEAgLTYzNTksNyArNjQxMiw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgICAgICAgICAgRnJvemVu
VmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5v
ZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dy
YXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcikpOwogICAgICAgICAgICAgdW5zaWduZWQgcmVs
YXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgICAg
ICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBp
ZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewpAQCAtNjgyNyw4
ICs2ODgwLDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhp
Y2FsRW52aXJvbm1lbnQ+KCk7CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUubV9zeW1ib2xU
YWJsZS5pc0NvbnN0YW50KCkgJiYgYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUuaXNDb25zdGFudCgp
KTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29k
ZS5tX3N5bWJvbFRhYmxlLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5p
dGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLm9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9u
ZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkpOwogICAgICAgICAgICAgTm9kZSogc2NvcGUg
PSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52aXJv
bm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1ib2xUYWJsZSks
IE9wSW5mbyhpbml0aWFsVmFsdWUpLCBzY29wZSk7CiAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGxleGljYWxFbnZpcm9ubWVudCk7CkBAIC03Mjc2LDggKzczMjksMTAgQEAgQnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIC8v
IFRoZSBvd25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZl
IGEgYmFycmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCiAg
ICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUgPyBt
X2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9jYWxsZXItPm1f
Y29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0U3Rh
Y2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPT0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpZiAoY2FsbGVlKSB7
CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkgPSBWYWx1ZVJl
Y292ZXJ5Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc2MzksNyArNzY5NCw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNWYXJp
YWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5n
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC03NjU5LDI0ICs3NzE0LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzb3ItPnBy
ZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2Vy
dmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUg
b3AsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBP
cGVyYW5kIGFyZ3VtZW50ID0gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQuaXNBcmd1bWVudCgpICYmICFh
cmd1bWVudC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VmVjdG9yPEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRzID0gbV9pbmxpbmVDYWxsRnJhbWVU
b0FyZ3VtZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0FyZ3VtZW50KCldLT5hZGRWYXJpYWJs
ZSh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBvcCwg
b3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgRmx1c2gsIG9wZXJh
bmQpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
YWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRM
aXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIFBoYW50b21Mb2NhbCwgb3BlcmFu
ZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIGZsdXNoRm9y
VGVybWluYWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21M
b2NhbERpcmVjdCk7CkBAIC03NzQxLDYgKzc3OTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSgpCiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJn
dW1lbnRzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCkpOwogICAgIH0KIAorICAgIG1fZ3JhcGgubV90bXBzID0gbV9udW1UbXBzOwogICAg
IG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFyYW1l
dGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcAppbmRleCA4ZTliYjRhY2JlNTUwMmRkYTdiMzc0Nzg0YjVhODVmZmRl
NzAzYmZkLi4zZGM3NTY4ZjFlZTJjNjk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2MjUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTcwLDIyICsxNzAsMjIg
QEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNvbnN0
IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgu
bV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG11c3RI
YW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAg
ICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAg
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAo
IW5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIG9wZXJh
bmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgIFdpZGVuaW5nICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiB3aXRoICIs
IHZhbHVlLnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVu
aW5nICIsIG9wZXJhbmQsICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxvY2stPnZhbHVlc0F0
SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0YXJnZXQubWVy
Z2VPU1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVlKCksIG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2JjMTZiNjdkNjAy
YmE2NDI2YWYwZjIzODIuLjU3NzBmMDk4OTQyYzg5NmI3YWNmODIzZmNhYjk0NDRhMjI0Y2NlZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWNpYWxDYXNl
QXJndW1lbnRzKCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5kPigpOwogICAg
ICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAgcHJvcGFnYXRl
UGhpczxUbXBPcGVyYW5kPigpOwogICAgICAgICBjb21wdXRlSXNGbHVzaGVkKCk7CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwpAQCAtMjExLDEwICsyMTIs
MjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5vZGUqIG5vZGUp
CiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3Vt
ZW50KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJh
bmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJh
bmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAg
ICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJn
dW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1
bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1l
bnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2Fs
T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVy
YW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiB7Cisg
ICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxUbXBPcGVyYW5kPihub2RlLCB2YXJp
YWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUg
bm9kZVR5cGUsIE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYgKzI0MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgY2FzZSBQaGFudG9t
TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIEFTU0VS
VChvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgb3RoZXJOb2Rl
ID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjcwLDE1ICsyODIsMjUgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAg
ICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFy
Z3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1l
bnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFu
dG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlh
YmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJh
bmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsKKyAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50
T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVy
YW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5v
ZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9j
YWxGb3I8bm9kZVR5cGUsIFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9j
YWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSwgbm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2Fs
aXplTG9jYWxzSW5CbG9jaygpCkBAIC0yODksNiArMzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIGNsZWFyVmFyaWFibGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKICAgICAgICAgY2xl
YXJWYXJpYWJsZXM8TG9jYWxPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlhYmxlczxUbXBP
cGVyYW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkgcmVm
ZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CiAgICAg
ICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQsIGJ1dCBkb2Vz
bid0IGFzc3VtZSB0aGF0IHRoZSByZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBwcml2YXRlOgogICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJvcGFnYXRlUGhp
cygpCiAgICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sg
PSBvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBt
X2xvY2FsUGhpU3RhY2s7CisgICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlT
dGFjayA9IHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8g
RW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHkuCiAgICAgICAg
IG1fYmxvY2sgPSAwOwpAQCAtNDY2LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+
JiBwaGlTdGFja0ZvcigpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1l
bnRPcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsKLSAgICAg
ICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkg
eworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFj
azsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7Cisg
ICAgICAgIGNhc2UgVG1wT3BlcmFuZDogcmV0dXJuIG1fdG1wUGhpU3RhY2s7CisgICAgICAgIH0K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21wdXRlSXNGbHVzaGVkKCkKQEAgLTUyMSw2ICs1NDcsNyBAQCBwcml2YXRlOgogICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9h
cmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fbG9jYWxQ
aGlTdGFjazsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX3RtcFBoaVN0YWNrOwog
ICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4IDIzODFjNmI4Zjhm
NGJhNzYzNGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UuLjRjY2UxNzQ4ODNlMjA0MTBkNjIyM2E2ZjQx
NzJlZGRlNjk4YWFlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCkBAIC0xNDcsOCArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNU
b3AoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBoZWFw
LnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01h
cC5yZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIG1fYWJzdHJh
Y3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAg
ICAgaWYgKGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNr
U3RhY2tNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE3Miw3ICsxNzEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChwYWlyLmtleS5oZWFw
KCkua2luZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52
YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFj
dEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
LmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBhaXIua2V5KQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTIyNiw4ICsyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQWJzdHJhY3RIZWFw
IGFic3RyYWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAgICAgICAgICAgIGlmIChhYnN0cmFj
dEhlYXAucGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZChtX2Zh
bGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAgIEFTU0VSVChhYnN0
cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3Ry
YWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRk
UmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5vZGUsIDB9KTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0OSw4ICsyNDcsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKLSAgICAgICAgICAgIEFTU0VSVChs
b2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24uaGVhcCgpLnBheWxv
YWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7Cisg
ICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxv
Y2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQogICAgICAgICAgICAgICAgICYmIGl0
ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk4LDcgKzI5NSw3IEBAIHByaXZhdGU6CiAgICAg
Ly8gYSBkdXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBvbmx5IGxpdmUgaW4gbV9mYWxsYmFj
a1N0YWNrTWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5LCBUT1AgYWx3YXlzIGdvZXMgaW50
byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZSB2YWx1
ZS4KLSAgICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4s
IERlZmF1bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxpbnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKKyAgICBIYXNoTWFwPGludDY0
X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDY0X3Q+
OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2NF90Pj4gbV9hYnN0
cmFjdEhlYXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOwogCiAgICAgTWFw
IG1faGVhcE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5k
ZXggODhlZmVlN2QwMzMyOWRkYzJkY2E3MTY3MjFlODBjMTIyZDAyZTNhNi4uNjA2MzUyN2EzMzZk
NmNlOTI2YzJhNGFmMjFjZWRmNGQ4NzFlOWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMiw5ICsxMTIsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3Jp
dGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhpcyBkb2VzLgogICAg
IGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1l
ID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFj
aywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAg
IH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5IGFjY291bnQgd2hpY2gg
bm9kZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEtpbGxTdGFjazoK
LSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkp
KTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZE9wZXJh
bmQoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CkBA
IC00OTgsNyArNDk4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJu
OwogCiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9w
ZXJhbmQoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAK
QEAgLTc4OSwzNiArNzg5LDQzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihT
dGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0
YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2Ms
IEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5v
cGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewot
ICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
PmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgcmVhZChoZWFwKTsKICAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBBYnN0
cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5v
cGVyYW5kKTsKICAgICAgICAgd3JpdGUoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
U3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7Cisg
ICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKKyAgICAgICAgcmV0dXJuOyAgCisg
ICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICByZWFkKFdvcmxkKTsKICAg
ICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRh
dGEtPmNvdW50Lm9mZnNldCgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxp
bWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5z
dGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODI3LDkgKzgzNCw5IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoU3RhY2spOwogICAgICAgICAKICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0g
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsK
KyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxp
bnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0
YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRM
aXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5l
c3MuY3BwCmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBkMDljZDJhYzMwZjMuLjE1
NzQ2YzA1NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApAQCAtMzksNyArMzks
NyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQXZhaWxh
YmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICBbJl0gKFZpcnR1
YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCiAgICAgICAgICAgICAg
ICAgcmVnLAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCA3OTg3Yjg3MGZk
NTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiLi43ZmZkNGQzNWI2Y2Y1YzlkZTM4MWU3ZGE2
MTMzMmZkNTI0OTY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRD
b2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9yaWdpbnMuYXBw
ZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgp
IC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAg
IHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4g
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAt
NjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNv
ZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsK
ICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVy
biBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6
Omxhc3RDYWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZU9yaWdpbnMu
c2l6ZSgpKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNvZGVPcmln
aW5zLnNpemUoKSAtIDEpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoY29k
ZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvbW1v
bkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA4NTQxMjMxNDc0MWU2
ZjExMjYxZjJlOTdjNDlmZTY0NGRhZTdiYWY3Li5mMzhjODNmZGQzMGMyZjUzYjNkNTA5M2Y0MGIy
YzcwZTk1MzEwNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBA
IC0yOTQsNiArMjk0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgSW5CeVZhbDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5j
ZU9mQ3VzdG9tOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdz
OgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXg6CiAgICAgY2FzZSBOdW1iZXJUb1N0
cmluZ1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKaW5kZXggMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIyNzJkNDc5OTk4YjUzOS4u
NDVmYmM0MzlkNTNiYTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcApAQCAtOTAsNyArOTAsNiBAQCBzdGF0aWMgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJz
IHRoYXQgdGhlIERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRv
CiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5h
bGl6YXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZtLmdldENUSVN0dWIoYXJpdHlGaXh1
cEdlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwog
ICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAgICAg
dm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwog
ICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhZWUxZjAwNzNiMGY0YmJjYzQ3
MzRlYjY0MWU0NjQ4YzMwNTVhMjQ0Li5jYTMzZGIyMjdkNGI5Mjc3M2ZhODZkNzJlZTNkNGQxYjg1
YmY5ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
QEAgLTI0MzIsNiArMjQzMiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIExvYWRW
YXJhcmdzOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJl
IHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CkBAIC0yNDY0LDggKzI0NzIsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBj
YXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJk
VmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAg
ICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAg
ICAgICBjYXNlIE5ld1Byb21pc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZvckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFs
bEtpbGxzLmgKaW5kZXggMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRjZmRlMjhiOS4u
OTMzYTJiZGUyMmUxNjZjMmFlYjZkNGFjMWJiZTljZTFlNWNlZDU2YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtMzIsNiArMzIsMTAgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2UgRm9yQWxsS2lsbHNJbnRl
cm5hbCB7Citjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIC8vIFV0aWxpdGll
cyBmb3IgZmluZGluZyB0aGUgbGFzdCBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUgaW4gREZH
IFNTQS4gVGhpcyBhY2NvdW50cyBmb3IgbGl2ZW5lc3MgZHVlCiAvLyB0byBPU1IgZXhpdC4gVGhp
cyBpcyB1c3VhbGx5IHVzZWQgZm9yIGVudW1lcmF0aW5nIG92ZXIgYWxsIG9mIHRoZSBwcm9ncmFt
IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSwKIC8vIGJ5IGV4cGxvcmluZyBhbGwgYmxvY2tz
IHdoZXJlIHRoZSBub2RlIGlzIGxpdmUgYXQgdGFpbCBhbmQgdGhlbiBleHBsb3JpbmcgYWxsIHBy
b2dyYW0gcG9pbnRzIHdoZXJlIHRoZQpAQCAtNTMsMTMgKzU3LDEzIEBAIHZvaWQgZm9yQWxsS2ls
bGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0
ZXIsIGNvbnN0CiAgICAgCiAgICAgQ29kZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRlci0+b3JpZ2lu
LmZvckV4aXQ7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3RlZDsKKyAgICBP
cGVyYW5kIGFscmVhZHlOb3RlZDsKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0aGluZyB0aGF0
IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVlLgogICAgIGlm
IChub2RlQWZ0ZXItPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBub2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYgKGdyYXBoLmlz
TGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlcikpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsK
LSAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gbm9kZUFmdGVyLT51bmxpbmtlZE9wZXJhbmQoKTsKKyAgICAgICAgaWYgKGdyYXBoLmlzTGl2
ZUluQnl0ZWNvZGUob3BlcmFuZCwgYWZ0ZXIpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJh
bmQpOworICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKICAgICAgICAgfQogICAg
IH0KICAgICAKQEAgLTcwLDggKzc0LDI0IEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAg
Ly8gb3RoZXIgbG9vcCwgYmVsb3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5lQ2FsbEZyYW1lID0g
YmVmb3JlLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxpbmVDYWxsRnJhbWUg
PT0gYWZ0ZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0g
YmVmb3JlSW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCA6IDA7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoYmVmb3JlSW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFmdGVyLmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0
ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2tw
b2ludCgpKTsKKworICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NGb3JD
aGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAg
ICAgYXV0byBsaXZlQWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywg
YWZ0ZXIuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGludCB0bXBPZmZzZXQgPSBiZWZv
cmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7
CisgICAgICAgICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVmb3Jl
LmZpbHRlcihsaXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRC
aXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihPcGVyYW5kKFRt
cE9wZXJhbmQsIHRtcCArIHRtcE9mZnNldCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAvLyBObyBsb2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVD
YWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAg
ICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9y
KGNvZGVCbG9jayk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVCZWZvcmUgPSBm
dWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3ND
YWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9y
JiBsaXZlQWZ0ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRl
eCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CkBAIC04MiwxNyArMTAy
LDIxIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
QmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFmdGVyLmJ5
dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9zcyBhIGNoZWNr
cG9pbnQgYnV0IGJlZm9yZSBhbmQgYWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5lQ2FsbEZyYW1l
LiIpOworCiAgICAgLy8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRpdmUgd2F5OiBp
dCBpcyBraWxsZWQgaWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVyLgotICAgIEJp
dFZlY3RvciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShhZnRlcik7Ci0g
ICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVjdG9yIGxpdmVB
ZnRlciA9IGdyYXBoLmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShhZnRlcik7CisgICAgdW5z
aWduZWQgbnVtTG9jYWxzID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkxvY2FscygpOworICAgIGdyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgK
ICAgICAgICAgYmVmb3JlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAg
ICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0gKE9wZXJhbmQg
b3BlcmFuZCkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5vdGVkKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50
b0xvY2FsKCkpKQorICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgp
ID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAg
ICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFu
ZCk7CiAgICAgICAgIH0pOwogfQogICAgIApAQCAtMTA1LDcgKzEyOSw4IEBAIHZvaWQgZm9yQWxs
S2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNl
ZW5JbkNsb3N1cmVGbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGxl
ZEZ1bmN0b3JGbGFnID0gMjsKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gZmxhZ3M7Ci0g
ICAgCisKKyAgICBBU1NFUlQobm9kZUluZGV4KTsKICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7CiAgICAgCiAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAtMTIwLDE1ICsx
NDUsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAg
fQogICAgICAgICB9KTsKIAotICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7Ci0gICAgaWYgKG5v
ZGVJbmRleCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAg
IE5vZGUqIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAgIGZvckFsbEtp
bGxlZE9wZXJhbmRzKAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAotICAg
ICAgICAgICAgICAgIHJlZywKKyAgICAgICAgICAgICAgICBvcGVyYW5kLAogICAgICAgICAgICAg
ICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmbGFncy5nZXQobm9kZSkgJiBzZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAgICAgICAgICB9
LApAQCAtMTU5LDYgKzE4Miw3IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIC8vIFN0
YXJ0IGF0IHRoZSBzZWNvbmQgbm9kZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBleHBlY3RlZCB0
byBvbmx5IGluc3BlY3Qgbm9kZXMgZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0aGUgYmxvY2sg
dXAgdG8gbm9kZUluZGV4IChleGNsdXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMgemVybyB0aGVu
IHRoZSBmdW5jdG9yIGhhcyBub3RoaW5nIHRvIGRvLgogICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMTsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYoRm9yQWxsS2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxvY2FsIGF2YWls
YWJpbGl0eSBhdCBpbmRleDogIiwgbm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxhYmlsaXR5Lm1f
YXZhaWxhYmlsaXR5KTsKICAgICAgICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAg
ICAgICAgICAgIGdyYXBoLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSwgYmxvY2ss
IG5vZGVJbmRleCwKICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA3OTY0OTg1MzMxNjAzYzM4YmJhZWNlNDNiNDdh
OGJhMDg3OWJkODcwLi5mMzVkNjVjMmE4ZGYxOGZmYTdlZWVmNTQ2MWNhMzJhM2M0YjJhYzIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDggKzMwOCw4IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3Ry
LCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgqdGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZh
cmlhYmxlQWNjZXNzRGF0YSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAiKCIsIFZhcmlh
YmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAg
ICAgICAgICBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsKICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJtYWNoaW5lOiIsIG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAgdm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5v
ZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0YWNrQWNjZXNz
RGF0YSgpKSB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2FsKTsKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgaWYgKGRhdGEtPm1h
Y2hpbmVMb2NhbC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNo
aW5lOiIsIGRhdGEtPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0
YS0+Zm9ybWF0KTsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgCi0g
ICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICBpZiAo
bm9kZS0+aGFzVW5saW5rZWRPcGVyYW5kKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JMZW5ndGhIaW50
KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQgPSAiLCBub2Rl
LT52ZWN0b3JMZW5ndGhIaW50KCkpOwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNWYWx1ZSgpKQpA
QCAtNTE1LDkgKzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAgICAgICBvdXQu
cHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIHBoaU5v
ZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT5vcCgpID09
IFBoaSk7CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhp
Tm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBw
aGlOb2RlLT5sb2NhbCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5v
cGVyYW5kKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIs
IHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhpTm9k
ZS0+Y2hpbGQyKCkpIHsKQEAgLTg4NCw3ICs4ODUsNyBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRl
R2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBW
YQogICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChu
b2RlLT5sb2NhbCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAg
IGlmIChub2RlLT5vcGVyYW5kKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpCiAg
ICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC04OTMsOSArODk0LDkgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdl
dExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEK
ICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFj
Y2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdWJzdGl0
dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAgICAgICAgICAg
IE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFi
bGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0g
YmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5k
KCkpOwogICAgICAgICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAg
ICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpKSA9IG5ld0dldExvY2FsOworICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dldExvY2FsOwog
ICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMTMzLDIzICsxMTM0LDQzIEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpr
aWxsc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICByZXR1cm4ga2ls
bHNGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9CiAKLWJvb2wg
R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmln
aW4gY29kZU9yaWdpbikKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCBvcGVy
YW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxv
ZygiQ2hlY2tpbmcgb2Ygb3BlcmFuZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICBi
b29sIGlzQ2FsbGVyT3JpZ2luID0gZmFsc2U7CisKICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2lu
UHRyID0gJmNvZGVPcmlnaW47Ci0gICAgZm9yICg7OykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAt
IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkpOworICAgIGF1dG8qIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgIC8vIFdlIG5lZWQgdG8g
aGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUK
KyAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgorICAg
IGZvciAoOyBjb2RlT3JpZ2luUHRyOyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2FsbEZyYW1lID8g
JmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyIDogbnVsbHB0cikgeworICAgICAgICBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgdG1wT2Zmc2V0ID0g
aW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAgICAg
ICAgICAgdW5zaWduZWQgb3BlcmFuZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJh
bmQudmFsdWUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVlKCkgPj0gMCk7
CisgICAgICAgICAgICAvLyBUaGlzIHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0byBzb21lb25l
IHdlIGlubGluZWQuCisgICAgICAgICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1wT2Zmc2V0ICsg
bWF4TnVtQ2hlY2twb2ludFRtcHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlu
bGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVtVG1wcygpIHx8
IG9wZXJhbmRJbmRleCA8IHRtcE9mZnNldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgYXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVC
bG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBiaXRNYXAuZ2V0KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CisgICAgICAgIH0KKworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGNv
ZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgIGRhdGFMb2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAKLSAgICAgICAg
YXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7
Ci0gICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZz
ZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChv
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tP
ZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAgICAgICAgICAg
ICBpZiAocmVnLmlzQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlZy5vZmZzZXQoKSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKIApAQCAt
MTE3Niw0MiArMTE5Nyw0MSBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gbGl2ZW5l
c3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHJldHVybiBm
dWxsTGl2ZW5lc3Mub3BlcmFuZElzTGl2ZShyZWcub2Zmc2V0KCksIGJ5dGVjb2RlSW5kZXgsIGFw
cHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxl
ck9yaWdpbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsK
LSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIlJhbiBv
dXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5lc3MudmlydHVhbFJlZ2lzdGVySXNMaXZl
KHJlZywgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQo
KmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFudCBpZiBp
dCB3YXNuJ3QgZm9yIG91cgogICAgICAgICAvLyBvcF9jYWxsX3ZhcmFyZ3MgaW5saW5pbmcuCi0g
ICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpCisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUg
JiYgcmVnLmlzQXJndW1lbnQoKQogICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZWcudG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNp
emUoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQXJndW1lbnQgaXMgbGl2ZS5cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVz
ZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCi0gICAgICAgIC8vIHRoZSByZXR1cm4gYnl0
ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCi0gICAgICAgIGNvZGVPcmlnaW5QdHIgPSAm
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgIGlzQ2FsbGVyT3JpZ2luID0g
dHJ1ZTsKICAgICB9CisKKyAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBz
dGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKKyAgICByZXR1cm4gdHJ1ZTsgICAgCiAgICAgCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotQml0VmVjdG9yIEdyYXBoOjps
b2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCitCaXRWZWN0b3IgR3Jh
cGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7
CiAgICAgQml0VmVjdG9yIHJlc3VsdDsKLSAgICByZXN1bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgIGZvckFsbExvY2Fsc0xpdmVJ
bkJ5dGVjb2RlKAorICAgIHVuc2lnbmVkIG51bUxvY2FscyA9IGJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShudW1Mb2NhbHMg
KyBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpKTsKKyAgICBmb3JBbGxM
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGNvZGVPcmlnaW4sCi0gICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xv
Y2FsKCkpOwotICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KHJlZy50b0xvY2FsKCkpOworICAg
ICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFu
ZC50b0xvY2FsKCk7CisgICAgICAgICAgICByZXN1bHQucXVpY2tTZXQob2Zmc2V0KTsKICAgICAg
ICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MzQsOCArMTY1NCw4IEBAIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IoTm9kZSogY3VycmVuCiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBvcGVyYW5kTm9kZTsg
bm9kZTspIHsKICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7Ci0gICAg
ICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVu
dCgpOworICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+b3BlcmFuZCgpLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPm9wZXJh
bmQoKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0g
bV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50RGVmaW5pdGVs
eSBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEKQEAgLTE2NTUs
NyArMTY3NSw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+bG9jYWwo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCksIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IGZhYjlj
ZjAyYTI1OTc2ZWY0N2QxNzkwNWJhZDljZTAzZTM4MmJjZTUuLmY3YTFkODIxNGMzMDJkN2Q5NmFj
MmE3N2EwMTg2NmE5ZDExOWY1MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
QEAgLTg0MCwxMyArODQwLDEzIEBAIHB1YmxpYzoKICAgICAvLyBRdWlja2x5IHF1ZXJ5IGlmIGEg
c2luZ2xlIGxvY2FsIGlzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGlzIGZhc3RlciB0
aGFuIGNhbGxpbmcKICAgICAvLyBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIGlmIHlvdSB3aWxsIG9u
bHkgcXVlcnkgb25lIGxvY2FsLiBCdXQsIGlmIHlvdSB3YW50IHRvIGtub3cgYWxsIG9mIHRoZQog
ICAgIC8vIGxvY2FscyBsaXZlLCB0aGVuIGNhbGxpbmcgdGhpcyBmb3IgZWFjaCBsb2NhbCBpcyBt
dWNoIHNsb3dlciB0aGFuIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkuCi0gICAgYm9vbCBpc0xpdmVJ
bkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciwgQ29kZU9yaWdpbik7CisgICAgYm9vbCBpc0xpdmVJ
bkJ5dGVjb2RlKE9wZXJhbmQsIENvZGVPcmlnaW4pOwogICAgIAotICAgIC8vIFF1aWNrbHkgZ2V0
IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4g
VGhpcyBkb2Vzbid0IGdpdmUgeW91CisgICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24t
YXJndW1lbnQgbG9jYWxzIGFuZCB0bXBzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRv
ZXNuJ3QgZ2l2ZSB5b3UKICAgICAvLyBhbnkgYXJndW1lbnRzIGJlY2F1c2UgdGhvc2UgYXJlIGFs
bCBwcmVzdW1lZCBsaXZlLiBZb3UgY2FuIGNhbGwgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSB0bwog
ICAgIC8vIGFsc28gZ2V0IHRoZSBhcmd1bWVudHMuIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiBj
YWxsaW5nIGlzTGl2ZUluQnl0ZWNvZGUoKSBmb3IgZWFjaCBsb2NhbC4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHZvaWQgZm9y
QWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIG5vdCBy
ZWR1bmRhbnRseSByZXBvcnRpbmcgYXJndW1lbnRzLiBOZWNlc3NhcnkgYmVjYXVzZSBpbiBjYXNl
IG9mIGEgdmFyYXJncwogICAgICAgICAvLyBjYWxsLCBvbmx5IHRoZSBjYWxsZWUga25vd3MgdGhh
dCBhcmd1bWVudHMgYXJlIGxpdmUgd2hpbGUgaW4gdGhlIGNhc2Ugb2YgYSBub24tdmFyYXJncwpA
QCAtODgxLDYgKzg4MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNz
QXRCeXRlY29kZVtyZWxhdGl2ZUxvY2FsXSkKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcihy
ZWcpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29kZU9yaWdpblB0ci0+Ynl0
ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb2Rl
QmxvY2stPm51bVRtcHMoKSk7CisgICAgICAgICAgICAgICAgYXV0byBsaXZlVG1wcyA9IHRtcExp
dmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUlu
ZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRCaXQoWyZdIChzaXpl
X3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZChUbXBPcGVyYW5kLCB0bXApKSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2Yg
YWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1v
c3RseSB1c2VmdWwgaWYKKyAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2Nh
bHMgYW5kIHRtcHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgogICAg
IC8vIHlvdSB3YW50IHRvIGNvbXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28g
ZGlmZmVyZW50IENvZGVPcmlnaW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNMaXZlSW5CeXRlY29k
ZShDb2RlT3JpZ2luKTsKKyAgICBCaXRWZWN0b3IgbG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2Rl
KENvZGVPcmlnaW4pOwogCiAgICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IGFwcHJvcHJpYXRl
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzQ2FsbGVy
T3JpZ2luKQogICAgIHsKQEAgLTkzOCwxMiArOTQ2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAgIH0KICAgICAKLSAg
ICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBhcmd1bWVudHMgYW5kIGxvY2FscyBsaXZlIGF0IHRo
ZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8g
Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3
YXlzIHByZXN1bWVkIGxpdmUuCisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgb3BlcmFuZHMg
bGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCisgICAgLy8gZXh0
ZW5zaW9uIHRvIGZvckFsbExvY2Fsc09yVG1wc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBh
cmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBmb3JBbGxMb2Nh
bHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAgZm9yQWxsTG9j
YWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOwogICAgICAgICAK
ICAgICAgICAgLy8gUmVwb3J0IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZS4KICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspCkBAIC0xMTE0LDYgKzExMjIsNyBAQCBwdWJsaWM6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNrd2FyZHNDRkc7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRvcnM+IG1fYmFja3dhcmRzRG9taW5hdG9y
czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM+IG1fY29u
dHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM7CisgICAgdW5zaWduZWQgbV90bXBzOwogICAgIHVuc2ln
bmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICB1
bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAppbmRleCA5OWFlZmZjZGMwNWExMWM0
NWIwNTc0MTI1MGY0ZDJhZWI0ZTIyOGNkLi4yMDJkMjI1MDUzZmE5ZGZiZTVjMjNjNjRiY2Y4YmUz
ODRlM2U3NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmNwcApAQCAtNDUsOCArNDUsOCBAQCBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogSW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0
cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiAgICAgLCBtX2Fi
c3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCi0gICAgLCBtX3Zhcmlh
YmxlcyhtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxW
YXJzKQotICAgICwgbV9ibG9jaygwKQorICAgICwgbV92YXJpYWJsZXMoT3BlcmFuZHNMaWtlLCBn
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICwgbV9ibG9jayhudWxscHRyKQog
ewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmgKaW5kZXggYmY1ZWFkMThlYzE2NDdlZTE2NzY2ODgzNTc0MDFmYTdmZWM3MTI5
OS4uMTg2NWU2YTFlZmZjM2RhYWVmZTU4NGNhODYyYzQ5YmMzNjg1ODUwMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaApAQCAt
MTY3LDEzICsxNjcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFzdEZvcndhcmQobV92
YXJpYWJsZXNbaW5kZXhdKTsKICAgICB9CiAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGlu
dCBvcGVyYW5kKQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMub3BlcmFuZEluZGV4
KG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gdGhpcy0+b3BlcmFuZChvcGVyYW5kLm9mZnNl
dCgpKTsgfQotICAgIAogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLmxvY2FsSW5kZXgoaW5k
ZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5k
ZXggM2Q4NDNjZTU4ZjIwYjQxMTYzMzlmY2RhOTU4OGFlYmE2YjdhOGMyZS4uNmY1MTE5OTg0M2Q3
ZWY1N2IzMDU1NjlkZjM4MzA2NjZjN2Y2YzE4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTg1LDggKzg1LDYgQEAgdm9pZCBKSVRDb21waWxl
cjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1
Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwotICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBD
b2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsr
aSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGls
YXRpb25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2Zh
aWx1cmVKdW1wczsKQEAgLTk3LDEzICs5NSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JF
eGl0cygpCiAKICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7Ci0gICAgICAgIGlm
IChPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewotICAgICAgICAgICAgSnVtcCB0YXJnZXQg
PSBqdW1wKCk7Ci0gICAgICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtM
YWJlbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsodGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbCk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJs
ZUp1bXAoKTsKKyAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7
CiAgICAgfQogfQogCkBAIC0yODgsMTEgKzI4MCw5IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxpbmso
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICBhdXRvIHRhcmdldCA9IENvZGVMb2NhdGlvbkxh
YmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAg
IE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07
Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRhcmdldCk7Ci0g
ICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXRDb2RlLT5vc3JFeGl0W2ldOwotICAgICAg
ICAgICAgZXhpdC5tX3BhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihpbmZvLm1fcGF0Y2hhYmxlSnVtcCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGluZm8ubV9wYXRjaGFibGVKdW1wLm1fanVtcCwgdGFyZ2V0
KTsKKyAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKKyAgICAg
ICAgZXhpdC5tX3BhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihpbmZvLm1fcGF0Y2hhYmxlSnVtcCk7CiAgICAgICAgIGlmIChpbmZv
Lm1fcmVwbGFjZW1lbnRTb3VyY2UuaXNTZXQoKSkgewogICAgICAgICAgICAgbV9qaXRDb2RlLT5j
b21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVtcFJlcGxhY2VtZW50KAogICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihpbmZvLm1fcmVw
bGFjZW1lbnRTb3VyY2UpLApAQCAtNTk1LDExICs1ODUsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6
bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVs
IGJsb2MKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwo
KSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKworICAgICAgICAgICAgQVNTRVJUKCF2
YXJpYWJsZS0+b3BlcmFuZCgpLmlzVG1wKCkpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5v
cGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7
CiAgICAgICAgICAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgKICAgICAgICAg
ICAgICAgICAgICAgT1NSRW50cnlSZXNodWZmbGluZygKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCkudmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQo
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhhYzI1
Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNl
cnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkRmx1c2hM
b2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Js
b2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAg
IHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0LiBXZSBqdXN0
IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25nLAogICAgICAg
ICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVzaCB0aGF0IHdl
IGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIGZsdXNoSXNE
ZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4
KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+
YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgpID09
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0
YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAg
ICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25T
ZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBjdXJyZW50RXhj
ZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0Q2F0
Y2hIZWFkOwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3BlcmFuZHM8Ym9v
bD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZUbXBzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0Owog
ICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEgKzEzMiwxMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2Nr
LT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAg
ICAgICAgIGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAgICAgICAgICAg
ICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxl
ci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1l
KSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVP
cmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKE9wZXJhbmQg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJh
bmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAg
ICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1NiwxMiArMTU1
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0Owog
ICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJl
bnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50
cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIpOwor
ICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NE
YXRhKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0cik7CiAKICAg
ICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNp
Z25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2VwdGlv
bkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxp
dmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgp
KSB7CisgICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFk
Lm9wZXJhbmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxp
ZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3OCw2ICsxNzcs
OCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSAwOyBsb2Nh
bCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwrKykKICAg
ICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVzaChPcGVyYW5k
KFRtcE9wZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAgICAgICAgfTsKIApAQCAtMTkyLDkg
KzE5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJl
bnRFeGNlcHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRN
YXliZSkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUt
PmxvY2FsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZl
QXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkg
ewotCisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhl
YWQub3BlcmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxp
ZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3BlcmFuZCkpOwogCiAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3VycmVu
dEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3Rh
Y2sobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChj
dXJyZW50RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1Rt
cCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsK
ICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
Y3BwCmluZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVkODcuLmZmZjk2
YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApAQCAtODUsNyAr
ODUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CiAgICAgICAg
IG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICBibG9jay0+dGVybWlu
YWwoKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKKyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgICAgICBt
X3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gTW92SGludCkgewotICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2gg
PSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgIiwgbm9kZSwg
IjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2NhbEVwb2NoLCAi
XG4iKTsKICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxFcG9jaCA9PSBj
dXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOworICAgICAgICAgICAg
ICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBFcG9jaCgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dy
YXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSArMTE2LDE1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2ls
bGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2Rl
SW5kZXggLSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IHNsb3BweSAt
IGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2Fp
bnN0IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQo
cmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChvcGVy
YW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9j
aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJh
bmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5NmY0MDRlMzNi
NDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1Y3QgU3RhY2tB
Y2Nlc3NEYXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKLSAgICAgICAgOiBsb2NhbChs
b2NhbCkKKyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBm
b3JtYXQpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAsIGZvcm1hdChmb3Jt
YXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWw7CisgICAg
T3BlcmFuZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7CiAgICAg
Rmx1c2hGb3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgog
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05MjMsOSArOTI0
LDExIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gY2hp
bGQxKCk7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZh
cmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgICAgICByZXR1cm4g
Y2hpbGQyKCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBAIC05NzMsOSAr
OTc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8VmFyaWFibGVBY2Nl
c3NEYXRhKj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGlu
ZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wg
aGFzVW5saW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9j
YWw6CkBAIC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5r
ZWRPcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwot
ICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOwor
ICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3Bl
cmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAg
ICBib29sIGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8
fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0
YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAppbmRleCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0Li5lM2U5YzMy
ZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNl
IGFyZSB1c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNy
byhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAg
LTIwMiw2ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oR2V0QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdz
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCAzMjgwZjg3
YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi5kMTBhMjA3MDRiMDE5ZDdlODc3YWNi
Mjk2MzI2YmE4OTcwMGMxM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDEx
ICszNSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUlu
dGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNs
YXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3Jh
cGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGlj
OgogICAgICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZv
ckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2lu
LmZvckV4aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsm
XSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFu
ZCwgIiAiKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7
CiAgICAgICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2Nr
LT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWls
YWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAg
ICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
IHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAg
ICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9
CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAg
ICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5
TGl2ZW5lc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0
KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
QWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4
ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVO
b2RlKE5vZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRT
dGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5s
b2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRB
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFj
azogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEq
IGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+
Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRh
dGEtPm9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2Rl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7
Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRM
b2NhbCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQyLDE1ICsyNDAsMTggQEAgdm9pZCBM
b2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJh
cmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPSBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5v
ZmZzZXQoKSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChG
bHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQo
KSArIGkpKSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRh
dGEtPnN0YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCArIGkpKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3MywyMCBAQCB2b2lkIExvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJlY29yZCBo
b3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0gICAgICAgICAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2Nh
dGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
OwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2Nh
dGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytp
KSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUs
IGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRiODQzZTg5MGRj
Ny4uMGQ4MjkzNTBkNGM2ZTBhMTIwODY4MzZjMGIwYjE3ODBmMmJiZTJkOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTM4MiwxMCArMzgyLDEwIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hP
U1JFbnRyeShWTSYgdm0sIENhbGxGCiAKICAgICBhdXRvIGluc3RydWN0aW9uID0gYmFzZWxpbmVD
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpKTsK
ICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwotICAgIFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1l
dGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigp
Lm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRh
QnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVu
dHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7Cisg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBw
cm9maWxlKSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5k
KS5pc0xvY2FsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRhdGFCdWZmZXJbaW5k
ZXhdID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCmluZGV4IGRjNzZiY2JhZWQ0MWVlZTA2M2RmZGJlYTg0NTA2
NjU1M2QwY2I0ZDYuLjYwOTY4NjYzYjY0YzJiNjg1NGU0NjE2MWY5NDk5NDY1N2UxYWVmZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGxvY2Fsc1tsb2NhbF0gPSBuZXdSb290LT5h
cHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9u
KCksIEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZv
KHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLCBT
cGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0
KCkpLAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4s
IE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSwKICAgICAgICAg
ICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAxOGM2NDE0NzkzNDI0NjliNDFjYThmOThm
MzA4YjNhNGM5MzNiYTk4Li4wNWRlOTU4Y2FlZWYxYjhmMDllMzJkMDk3YThmZTMyZDY3NzQyMDFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
VXNlRGVmLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNs
dWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUg
IkRGR01heUV4aXQuaCIKQEAgLTQ3LDg5NSArNDgsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKLS8vIFByb2JlIGJhc2VkIE9TUiBFeGl0LgotCi11c2luZyBDUFVTdGF0
ZSA9IFByb2JlOjpDUFVTdGF0ZTsKLXVzaW5nIENvbnRleHQgPSBQcm9iZTo6Q29udGV4dDsKLXVz
aW5nIEZyYW1lID0gUHJvYmU6OkZyYW1lOwotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxs
RnJhbWVzKFByb2JlOjpDb250ZXh0JiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgY29u
c3QgT1NSRXhpdEJhc2UmKTsKLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChQcm9i
ZTo6Q29udGV4dCYsIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
aywgT1NSRXhpdCYpOwotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmLCB1aW50MzJf
dCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmKTsKLQotc3RhdGljIEpTVmFsdWUganNWYWx1
ZUZvcihDUFVTdGF0ZSYgY3B1LCBKU1ZhbHVlU291cmNlIHNvdXJjZSkKLXsKLSAgICBpZiAoc291
cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAgICAgICBzdGQ6
Om1lbWNweSgmcmVzdWx0LCBjcHUuZ3ByPHVpbnQ4X3QqPihzb3VyY2UuYmFzZSgpKSArIHNvdXJj
ZS5vZmZzZXQoKSwgc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGNwdS5n
cHI8RW5jb2RlZEpTVmFsdWU+KHNvdXJjZS5ncHIoKSkpOwotI2Vsc2UKLSAgICBpZiAoc291cmNl
Lmhhc0tub3duVGFnKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKHNvdXJjZS50YWcoKSwgY3B1
LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWUo
Y3B1LmdwcjxpbnQzMl90Pihzb3VyY2UudGFnR1BSKCkpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJj
ZS5wYXlsb2FkR1BSKCkpKTsKLSNlbmRpZgotfQotCi0jaWYgTlVNQkVSX09GX0NBTExFRV9TQVZF
U19SRUdJU1RFUlMgPiAwCi0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENv
bnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEFTU0VSVChjb2Rl
QmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJl
c3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBVQ1BVUmVnaXN0ZXIqIHBoeXNpY2FsU3RhY2tG
cmFtZSA9IGNvbnRleHQuZnA8VUNQVVJlZ2lzdGVyKj4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQg
ZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8v
IFRoZSBjYWxsZWUgc2F2ZWQgdmFsdWVzIGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgc3RhY2ssIG5v
dCB0aGUgcmVjb3ZlcmVkIHN0YWNrLgotICAgICAgICAvLyBIZW5jZSwgd2UgcmVhZCB0aGUgdmFs
dWVzIGRpcmVjdGx5IGZyb20gdGhlIHBoeXNpY2FsIHN0YWNrIG1lbW9yeSBpbnN0ZWFkIG9mCi0g
ICAgICAgIC8vIGdvaW5nIHRocm91Z2ggY29udGV4dC5zdGFjaygpLgotICAgICAgICBBU1NFUlQo
IShlbnRyeS5vZmZzZXQoKSAlIHNpemVvZihVQ1BVUmVnaXN0ZXIpKSk7Ci0gICAgICAgIGNvbnRl
eHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IHBoeXNpY2FsU3RhY2tGcmFtZVtlbnRyeS5vZmZz
ZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpXTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2
ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQot
ewotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwotICAgIEFTU0VSVChjb2RlQmxv
Y2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVn
aXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxl
ZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJD
b3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZl
cy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YWNrLnNldChjb250ZXh0LmZwKCks
IGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdw
cigpKSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZv
aWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQot
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2
bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9y
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIHVuc2lnbmVk
IHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVk1FbnRyeVJl
Y29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwotICAg
IFVDUFVSZWdpc3RlciogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNQVVJl
Z2lzdGVyKj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXIpOwotCi0gICAg
Ly8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9
IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJz
LmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc2l6ZV90
IHVpbnRwdHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpOwot
ICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIGNvbnRleHQuZ3By
KGVudHJ5LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF07Ci0g
ICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBjb250ZXh0LmZw
cihlbnRyeS5yZWcoKS5mcHIoKSkgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihjYWxsZWVTYXZlQnVm
ZmVyW3VpbnRwdHJPZmZzZXRdKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9p
bnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8v
IEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9
ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7
Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9w
RW50cnlGcmFtZSk7Ci0gICAgdm9pZCogY2FsbGVlU2F2ZUJ1ZmZlciA9IGVudHJ5UmVjb3JkLT5j
YWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFs
bENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygp
OwotICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVz
LT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+
YXQoaSk7Ci0gICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQot
ICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBj
b250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgICAgIGVs
c2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2
ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZnByPFVDUFVSZWdpc3Rlcj4oZW50cnku
cmVnKCkuZnByKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVn
aXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2Vk
IG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcigpLgotc3Rh
dGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVC
bG9jayogY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIgb2Zmc2V0VmlydHVhbFJlZ2lzdGVyLCBi
b29sIHdhc0NhbGxlZFZpYVRhaWxDYWxsKQotewotICAgIEZyYW1lIGZyYW1lKGNvbnRleHQuZnAo
KSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0
ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJz
KCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwot
Ci0gICAgUmVnaXN0ZXJTZXQgYmFzZWxpbmVDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMu
Z2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVpbnRw
dHJfdCBzYXZlZFJlZ2lzdGVyVmFsdWU7Ci0KLSAgICAgICAgaWYgKHdhc0NhbGxlZFZpYVRhaWxD
YWxsICYmIGJhc2VsaW5lQ2FsbGVlU2F2ZXMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAg
IHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGZyYW1lLmdldDx1aW50cHRyX3Q+KGVudHJ5Lm9mZnNldCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gY29udGV4
dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpOwotCi0gICAgICAgIGZyYW1lLnNldChvZmZzZXRWaXJ0
dWFsUmVnaXN0ZXIub2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zmc2V0KCksIHNhdmVkUmVnaXN0
ZXJWYWx1ZSk7Ci0gICAgfQotfQotI2Vsc2UgLy8gbm90IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAotCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4
dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRl
eHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7
IH0KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJs
b2NrKiwgVmlydHVhbFJlZ2lzdGVyLCBib29sKSB7IH0KLQotI2VuZGlmIC8vIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBp
bnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4o
KTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGlu
ZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJn
dW1lbnRDb3VudCAtIDE7Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsK
LSAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAot
ICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3Ry
dWN0dXJlKCksIGxlbmd0aCwgY2FwYWNpdHkpOwotCi0gICAgcmVzdWx0LT5zZXRDYWxsZWUodm0s
IGNhbGxlZSk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4o
KSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7
Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5zZXRJbmRleFF1aWNr
bHkodm0sIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0YXRpYyBKU0NlbGwqIGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYg
Y29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAg
ICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNE
ZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9j
ayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7
Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICBD
bG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCi0g
ICAgICAgIHZtLCBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBjYWxs
ZWUsIGxlbmd0aCk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVy
Kj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDog
MCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChnbG9iYWxPYmplY3QsIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDb250ZXh0JiBjb250
ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2RlLCBjb25z
dCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCi17Ci0gICAgRnJhbWUgZnJhbWUo
Y29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgSGFzaE1hcDxNaW5pZmllZElE
LCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVu
dHMgbm9kZSBJRCB0byBvcGVyYW5kLgotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCi0gICAgICAgICAg
ICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENy
ZWF0ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNaW5pZmllZElEIGlkID0g
cmVjb3Zlcnkubm9kZUlEKCk7Ci0gICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRB
cmd1bWVudHMuZmluZChpZCk7Ci0gICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRB
cmd1bWVudHMuZW5kKCkpIHsKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwg
ZnJhbWUub3BlcmFuZChpdGVyLT52YWx1ZSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0gICAg
ICAgICAgICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgp
OwotCi0gICAgICAgIGludCBzdGFja09mZnNldDsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwotCi0gICAgICAg
IEpTRnVuY3Rpb24qIGNhbGxlZTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihmcmFtZS5vcGVyYW5kKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKS5hc0NlbGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxlZSA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFu
dCgpLmFzQ2VsbCgpKTsKLQotICAgICAgICBpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0g
ICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZnJhbWUub3BlcmFuZDxpbnQzMl90PihzdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLQotICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09i
amVjdDsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBj
YXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3Vt
ZW50c09iamVjdCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29k
ZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0
ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNE
dXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFy
Z3VtZW50Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFy
Z3VtZW50c09iamVjdCkpOwotCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRk
KGlkLCBvcGVyYW5kKTsKLSAgICB9Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9m
IGV4dHJhIGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgotLy8g
b2YgbW9zdCBsaWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkg
bmVlZGVkIChoaWdoZXIgZW51bSB2YWx1ZSkuCi0vLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9u
IGluY2x1ZGVzIHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQot
Ly8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93KS4KLWVudW0gY2xhc3MgRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsIHsKLSAgICBOb25lLAotICAgIFNwZWN1bGF0aW9uUmVjb3Zl
cnksCi0gICAgVmFsdWVQcm9maWxlVXBkYXRlLAotICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKLSAg
ICBPdGhlcgotfTsKLQotdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250
ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJl
Y2F0ZWRWTSgpID09ICZ2bSk7Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7Ci0KLSAgICBp
ZiAodmFsaWRhdGVERkdEb2VzR0MpIHsKLSAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBv
cHRpbWl6ZWQgY29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKLSAgICAg
ICAgLy8gY29kZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4KLSAgICAgICAgdm0uaGVhcC5z
ZXRFeHBlY3REb2VzR0ModHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKHZtLmNhbGxGcmFtZUZvckNh
dGNoKSB7Ci0gICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAg
ICBjb250ZXh0LmZwKCkgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwot
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotCi0g
ICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBo
ZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAotICAgIC8vIHJlYWxseSBiZSBwcm9maXRh
YmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKLQotICAgIHVpbnQz
Ml90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBERkc6OkpJVENvZGUqIGRmZ0pJ
VENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9
IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLQotICAgIEFTU0VSVCghdm0uY2FsbEZy
YW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7Ci0gICAgRVhDRVBU
SU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNF
eGNlcHRpb25IYW5kbGVyKCkpOwotCi0gICAgaWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkp
IHsKLSAgICAgICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsKLQotICAgICAgICAvLyBXZSBv
bmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNv
cmQuIFRoZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRo
ZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAg
IC8vIGV4aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQot
ICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7Ci0gICAgICAg
IGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgcmVj
b3ZlcnkgPSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJ
bmRleF07Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3Vs
YXRpb25SZWNvdmVyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5t
X2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAg
ICAgICAgIGlmIChleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAgICAgICAgICAgIGV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAg
aWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5n
VHlwZSkgewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9m
aWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgICAgIGFy
cmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCi0g
ICAgICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVBy
b2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50MzJf
dCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFs
dWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7Ci0gICAg
ICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNz
QW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAg
ICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAgICAgICAgYWRqdXN0ZWRUaHJl
c2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQpOwotCi0gICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8
fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldDsKLSAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7
Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1
cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChi
eXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRy
VGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3Rp
bmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENv
ZGVNYXAoKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNv
ZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KCkpOwotICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7Ci0gICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgotICAgICAgICBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJh
bmRTcGFuPiB1bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0gICAgICAgIGRmZ0pJVENvZGUtPnZhcmlh
YmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwg
ZGZnSklUQ29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1
bmRlZmluZWRPcGVyYW5kU3BhbnMpOwotICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zm
c2V0ID0gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7
Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4
aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVm
aW5lZE9wZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRo
cmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhp
dFRvTExJbnQpKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2Zp
bGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7
Ci0gICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0
ZWNvZGVQcm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGls
YXRpb24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdl
dCgpOwotCi0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29t
cGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxl
cjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAot
ICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUlu
dmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBleGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0g
cHJvZmlsZXJFeGl0OwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3Rk
OjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6
Ok90aGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmlu
dEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0g
c3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2
ZWw6Ok90aGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsID0gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwotCi0gICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkp
IHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20g
JXMsIHdpdGggb3BlcmFuZHMgPSAlc1xuIiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRv
Q1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4aXRL
aW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAot
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9w
ZXJhbmRzKSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE9TUkV4aXRTdGF0ZSYg
ZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOwotICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKEpJ
VENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQot
ICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5k
czsKLSAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3Bh
bnMgPSBleGl0U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotCi0gICAgY29udGV4dC5zcCgp
ID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7
Ci0KLSAgICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBp
cyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGRvIHsK
LSAgICAgICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwp
OwotCi0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpOb25lKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVn
aW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRpb25SZWNvdmVyeQotCi0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBh
cnJheSBwcm9maWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZwotICAgICAgICAvLyBtYXkgcmVseSBv
biBhIHZhbHVlIHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRo
YXQgaXQgaXMgbGlrZWx5Ci0gICAgICAgIC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28s
IHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVOTElLRUxZLgotICAgICAgICBTcGVjdWxhdGlvblJlY292
ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHJlY292ZXJ5KSkgewotICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgICAgIGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAt
IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMy
KSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVl
OjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNlbGY6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNv
dmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJl
Y292ZXJ5LT5kZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMy
KSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVl
OjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAgICAgICAgICAgICBjcHUuZ3By
KHJlY292ZXJ5LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkp
IC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAg
ICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRh
ZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEJv
b2xlYW5TcGVjdWxhdGlvbkNoZWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAg
ICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkg
XiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBW
YWx1ZVByb2ZpbGVVcGRhdGUKLSAgICAgICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVlOwotICAgICAg
ICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICAgICAgcHJvZmlsZWRWYWx1
ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBp
ZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJv
ZmlsZSkKLSAgICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJh
eVByb2ZpbGVVcGRhdGUKLSAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0g
ZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pz
VmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hl
IHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNl
bGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBw
cm9maWxlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICAgICAgYm9vbCBkb1By
b2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5t
b2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGlmIChkb1Byb2Zp
bGUpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxl
LT5vYnNlcnZlU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0
aW9uIGxldmVsOiBPdGhlcgotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2Vu
ZXJpY1Vud2luZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3Rv
IG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0g
ICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFj
ayBwb2ludGVyLgotICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQu
ZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkKLSAgICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4
aXQtPmluY0NvdW50KCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFj
aE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBwcmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhp
dEluZGV4LCBleGl0KTsKLQotICAgIH0gd2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRp
YWxpemF0aW9uLgotCi0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7
Ci0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKLQotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVy
VGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgQVNTRVJUKGNwdS5ncHI8
aW50NjRfdD4oR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2Vs
bE1hc2spOwotI2VuZGlmCi0KLSAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMg
YW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgotICAgIC8vIE5vdGU6IHdlIG5l
ZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3Rl
cnMgYmVsb3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMg
aW4gc29tZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0KLSAgICBpbnQgY2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwotICAgIHNpemVfdCBudW1i
ZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMuc2l6ZSgpOwotICAgIHNpemVfdCBudW1VbmRlZmluZWRP
cGVyYW5kU3BhbnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6ZSgpOwotCi0gICAgc2l6ZV90
IG5leHRVbmRlZmluZWRTcGFuSW5kZXggPSAwOwotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3Bl
cmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFu
ZFNwYW5zKQotICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3Bl
cmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0KLSAgICBKU1Zh
bHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgZm9yIChzaXplX3Qgc3BhbkluZGV4
ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkg
ewotICAgICAgICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07
Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zmc2V0OwotICAgICAgICBpbnQg
bGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKLQotICAg
ICAgICBmb3IgKGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsg
KytvZmZzZXQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVk
KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZP
cGVyYW5kczsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJh
bmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAoVU5MSUtF
TFkoaW5kZXggPT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkpIHsKLSAgICAgICAgICAgIGlu
ZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51
bWJlck9mUmVnaXN0ZXJzIC0gMTsKLSAgICAgICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3Bhbklu
ZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICAgICAgICAgIG5leHRVbmRl
ZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNw
YW5JbmRleF0uZmlyc3RJbmRleDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBu
ZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVn
LnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycykKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOwotCi0g
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNh
bGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZw
cigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5n
cHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UK
LSAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8
aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5n
cHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNl
ZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1
ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJv
eGVkQ2VsbCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgQm9vbGVhbkRp
c3BsYWNlZEluSlNTdGFjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkpKTsKLSNlbmRpZgotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJl
Y292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQz
MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5V
bnNhZmVVbmJveGVkSW50MzIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3Zlcnku
Z3ByKCkpID4+IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUyKCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90Pihy
ZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3Ry
aWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KS5hc2FuVW5zYWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
I2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHB1cmlmeU5hTihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91Ymxl
LCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2Fu
VW5zYWZlVW5ib3hlZERvdWJsZSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBDb25zdGFudDoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVj
b3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERp
cmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1
bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5
ZXQuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhl
biBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KLSAgICByZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoY29udGV4dCwgY29kZUJsb2NrKTsKLSAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29u
dGV4dCwgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUu
Z3ByKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJl
Z2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2Vs
bE1hc2tSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6
Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIo
KSkKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihjb250ZXh0KTsKLQotICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJl
Y292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1l
bnRzCi0gICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90
aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKLSAgICAvLyBy
ZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRv
IHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUuCi0gICAgLy8gTm90ZSB0aGF0
IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJl
IG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNj
b3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0aGF0LgotCi0gICAgREZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJh
bmRzKTsKLQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2lu
Y2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxz
IGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0g
ICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NS
IGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0
aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8vIE9T
UiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAg
ICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hh
bmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2lu
Y2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAgICAgd2Fu
dCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgot
ICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhh
dCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFz
IG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAg
cGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAg
ICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90
IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3Jt
cyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgIHBhcnRpY3Vs
YXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVz
LCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICBy
dW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJp
Z2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0
aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAoYSkg
YW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0
dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4g
RXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyBmcmVxdWVudGx5IGFuZCB0
aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0g
ICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJp
Z2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRz
IGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vIGdvb2Qgam9i
IG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAo
ZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRo
ZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVy
IG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAvLyBsYXJnZXIg
dGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwg
YW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBm
YWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lz
ZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkuCi0KLSAgICBpZiAoVU5MSUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0
Q291bnRlckFuZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2Nr
OjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCi0gICAgICAgIHRyaWdnZXJSZW9wdGlt
aXphdGlvbk5vdyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsK
LSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxp
bmVDb2RlQmxvY2ssIGV4aXQpOwotfQotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJh
bWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxv
Y2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQu
Y3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJm
b3JtaW5nIGFuIE9TUiBleGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNh
bGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1
MTEKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVD
b2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4o
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0K
LSAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAgIGZvciAoY29kZU9yaWdpbiA9
ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxs
RnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRD
YWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9j
ayk7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7Ci0g
ICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxl
clNraXBwaW5nVGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQpOwotICAgICAgICB2b2lkKiBj
YWxsZXJGcmFtZSA9IGNwdS5mcCgpOwotCi0gICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZh
bHNlOwotCi0gICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewotICAgICAgICAgICAgQVNTRVJUKGlu
bGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOwotICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBm
cmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7Ci0jaWYgQ1BVKEFS
TTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkg
KyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQ
ID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgp
ICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJl
dHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0
clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+
KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0dXJuUEMpOwotICAgICAgICAg
ICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVP
ZmZzZXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNl
bGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwot
ICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXIt
PmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJS
ZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRy
dWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7Ci0KLSAgICAgICAgICAgIGlmICh0cnVl
Q2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9
IGNwdS5mcDx1aW50OF90Kj4oKSArIHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpLT5zdGFj
a09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSNpZiBDUFUoQVJNNjRFKQotICAg
ICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICBq
dW1wVGFyZ2V0ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihu
ZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5l
Q2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAg
ICAgICAvLyBSZXN0b3JlIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSdzIGNhbGxlZSBzYXZlIHJlZ2lz
dGVycy4KLSAgICAgICAgLy8gSWYgdGhpcyBpbmxpbmVkIGZyYW1lIGlzIGEgdGFpbCBjYWxsIHRo
YXQgd2lsbCByZXR1cm4gYmFjayB0byB0aGUgb3JpZ2luYWwgY2FsbGVyLCB3ZSBuZWVkIHRvCi0g
ICAgICAgIC8vIGNvcHkgdGhlIHByaW9yIGNvbnRlbnRzIG9mIHRoZSB0YWcgcmVnaXN0ZXJzIGFs
cmVhZHkgc2F2ZWQgZm9yIHRoZSBvdXRlciBmcmFtZSB0byB0aGlzIGZyYW1lLgotICAgICAgICBz
YXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgIXRydWVDYWxsZXIpOwot
Ci0gICAgICAgIGlmIChjYWxsZXJJc0xMSW50KSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxp
bmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0
YVRhYmxlR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRh
YmxlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qg
dm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Ci0gICAgICAgIEFTU0VSVChjYWxsZXJGcmFt
ZSk7Ci0gICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZU9mZnNldCgpLCBjYWxsZXJGcmFtZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRh
Z09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpTVmFsdWUoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBz
byB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdp
bi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRz
ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5z
dHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVp
bnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSk7
Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNv
bnN0YW50KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2Ug
cGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgfQotCi0gICAg
Ly8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkg
ZGlkIGlubGluZSB0YWlsIGNhbGxzCi0gICAgaWYgKGNvZGVPcmlnaW4pIHsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNv
ZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotI2Vsc2UKLSAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSNlbmRpZgotICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYgZXhpdCkK
LXsKLSAgICBPU1JFeGl0U3RhdGUqIGV4aXRTdGF0ZSA9IGV4aXQuZXhpdFN0YXRlLmdldCgpOwot
Ci0gICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOyAvLyBUaGUgb3B0aW1pemluZyBjb21waWxlciBl
eHBlY3RzIHRoYXQgdGhlIE9TUiBleGl0IG1lY2hhbmlzbSB3aWxsIGV4ZWN1dGUgdGhpcyBmZW5j
ZS4KLSAgICB2bS5oZWFwLndyaXRlQmFycmllcihiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAv
LyBXZSBiYXJyaWVyIGFsbCBpbmxpbmVkIGZyYW1lcyAtLSBhbmQgbm90IGp1c3QgdGhlIGN1cnJl
bnQgaW5saW5lIHN0YWNrIC0tCi0gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoaWNoIGlu
bGluZWQgZnVuY3Rpb24gb3ducyB0aGUgdmFsdWUgcHJvZmlsZSB0aGF0Ci0gICAgLy8gd2UnbGwg
dXBkYXRlIHdoZW4gd2UgZXhpdC4gSW4gdGhlIGNhc2Ugb2YgImYoKSB7IGEoKTsgYigpOyB9Iiwg
aWYgYm90aAotICAgIC8vIGEgYW5kIGIgYXJlIGlubGluZWQsIHdlIG1pZ2h0IGV4aXQgaW5zaWRl
IGIgZHVlIHRvIGEgYmFkIHZhbHVlIGxvYWRlZAotICAgIC8vIGZyb20gYS4KLSAgICAvLyBGSVhN
RTogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBzaG91bGQgcmVtZW1iZXIgd2hpY2ggQ29k
ZUJsb2NrIG93bnMKLSAgICAvLyB0aGUgdmFsdWUgcHJvZmlsZS4KLSAgICBJbmxpbmVDYWxsRnJh
bWVTZXQqIGlubGluZUNhbGxGcmFtZXMgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmlubGluZUNhbGxGcmFtZXMuZ2V0KCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsK
LSAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVD
YWxsRnJhbWVzKQotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoaW5saW5lQ2FsbEZy
YW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Ci0gICAgfQotCi0gICAgYXV0byogZXhpdElu
bGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAg
IGlmIChleGl0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb250ZXh0LmZwKCkgPSBjb250ZXh0
LmZwPHVpbnQ4X3QqPigpICsgZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGV4aXRTdGF0ZS0+
anVtcFRhcmdldDsKLSAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0KLSAgICBpZiAoZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9w
X2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0uY2Fs
bEZyYW1lRm9yQ2F0Y2ggPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgfQotCi0gICAg
dm0udG9wQ2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotCi0gICAgaWYgKGV4
aXRTdGF0ZS0+aXNKdW1wVG9MTEludCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0Zv
ckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4
aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tG
b3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLQotICAgICAg
ICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6
cGJHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkub2Zmc2V0KCkpOwotI2Vsc2UKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0
cnVjdGlvbik7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIo
KSkKLSAgICAgICAgICAgIHZtLnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb247Ci0gICAgfQotCi0gICAgY29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KGp1bXBUYXJnZXQpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQo
Q29udGV4dCYgY29udGV4dCwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0JiBl
eGl0KQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUq
PigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
LSAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwot
ICAgIEV4aXRLaW5kIGtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotCi0gICAgZGF0
YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9n
KCIgQCBleGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKCIsIGJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBl
eGl0S2luZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOwotICAgIGlmIChhbHRlcm5hdGl2ZSkg
ewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0
ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICAgICAiLCByZW9wdGltaXph
dGlvblJldHJ5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigpLAotICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgYWx0
ZXJuYXRpdmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZGF0YUxvZygibm8gYWx0ZXJuYXRpdmUgY29kZSBibG9jayAoaS5lLiB3ZSd2ZSBiZWVuIGpl
dHRpc29uZWQpIik7Ci0gICAgZGF0YUxvZygiLCBvc3JFeGl0Q291bnRlciA9ICIsIGNvZGVCbG9j
ay0+b3NyRXhpdENvdW50ZXIoKSwgIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEdQUnMgYXQgdGlt
ZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5ncHJOYW1lKGdwciksICI6
IiwgUmF3UG9pbnRlcihjb250ZXh0Lmdwcjx2b2lkKj4oZ3ByKSkpOwotICAgIH0KLSAgICBkYXRh
TG9nKCJcbiIpOwotICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgewotICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAg
ICAgZGF0YUxvZygiICIsIGNvbnRleHQuZnByTmFtZShmcHIpLCAiOiIpOwotICAgICAgICB1aW50
NjRfdCBiaXRzID0gY29udGV4dC5mcHI8dWludDY0X3Q+KGZwcik7Ci0gICAgICAgIGRvdWJsZSB2
YWx1ZSA9IGNvbnRleHQuZnByKGZwcik7Ci0gICAgICAgIGRhdGFMb2dGKCIlbGx4OiVsZiIsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4oYml0cyksIHZhbHVlKTsKLSAgICB9Ci0gICAgZGF0YUxvZygi
XG4iKTsKLX0KLQotLy8gSklUIGJhc2VkIE9TUiBFeGl0LgotCiBPU1JFeGl0OjpPU1JFeGl0KEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVk
IHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogT1NSRXhpdEJhc2Uo
a2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljLCBqaXQt
Pm1fb3JpZ2luLndhc0hvaXN0ZWQpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJj
ZSkKQEAgLTk1OCwxNSArNzAsMTggQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFn
PiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCkgY29uc3QKIAogdm9pZCBPU1JFeGl0
OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCiB7Ci0gICAgSGFzaE1hcDxNaW5pZmll
ZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1
bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgorICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgVmlydHVh
bFJlZ2lzdGVyPiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJn
dW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9
IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAKICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAogICAgICAg
ICAgICAgJiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVO
b3RDcmVhdGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNUbXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIE1pbmlmaWVkSUQg
aWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKICAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5lbmQoKSkgewpAQCAtOTg3LDcgKzEwMiw3IEBAIHZvaWQgT1NSRXhpdDo6
ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3Bl
cmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBqaXQubW92ZSgKQEAgLTk5Nyw3ICsxMTIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJh
bmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXls
b2FkRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTEwMjMsNyArMTM4LDcgQEAgdm9pZCBP
U1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBj
b25zdCBPcGVyYW5kczxWYWwKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
T3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAotICAgICAg
ICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CisgICAgICAgIGFs
cmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
KTsKICAgICB9CiB9CiAKQEAgLTE0NjYsMTYgKzU4MSw4NCBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBp
bGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNv
bnN0CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCiAgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1l
KTsKIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZl
Q2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGRuJ3QgdXNl
IGEgcHJvYmUgYnV0IGZpbGxpbmcgYWxsIHRoZSBzaWRlIHN0YXRlIG9iamVjdHMgaXMgdHJpY2t5
IG90aGVyd2lzZS4uLgorICAgICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gdmFsdWVzKG9wZXJh
bmRzLm51bWJlck9mVG1wcygpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVy
YW5kcy5udW1iZXJPZlRtcHMoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzW2ldID0gb3BlcmFu
ZHMudG1wKGkpOworCisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAgICAgYXV0byogdG1w
U2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKKyAgICAgICAgaml0LnBy
b2JlKFs9LCB2YWx1ZXMgPSBXVEZNb3ZlKHZhbHVlcyldIChQcm9iZTo6Q29udGV4dCYgY29udGV4
dCkgeworICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJh
bWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0
ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAg
ICAgICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBhdXRvJiByZWNvdmVyeSA9IHZhbHVlc1tpICsgdG1wT2Zm
c2V0XTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0IHRo
ZSBGVEwgZG9lcyBhbmQgbWF0ZXJpYWxpemUgYWxsIHRoZSBKU1ZhbHVlcyBpbnRvIHRoZSBzY3Jh
dGNoIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAg
ICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5
LmNvbnN0YW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odG1wU2Ny
YXRjaFtpICsgdG1wT2Zmc2V0XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0
YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odG1wU2NyYXRjaFtpICsg
dG1wT2Zmc2V0XSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BS
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRGlz
cGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRt
cHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAg
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZl
eGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJh
bWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxs
ZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBj
YWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRT
aWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNo
YXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6
ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRt
cE9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUs
IGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBEbyBhbGwg
ZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0
YWNrLgogCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZp
cnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwo
KSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxv
Y2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBp
ZiAob3BlcmFuZC5pc1RtcCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaW50
IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAm
JiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJs
b2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAg
ICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5oCmluZGV4IGE3ZTU4NzhjMDcxNzA4YTFkYTc2YzBiMGViNTRkNTRmMWEwNGViOGUu
LjllOWJjZWE0ODFjMWQ2ODc3OTcyZjI1OWQ2MmMxYTIzMDBiMmIxNjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCkBAIC0xNTAsOCArMTUwLDYgQEAgc3RydWN0IE9TUkV4
aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogCiAgICAgZnJpZW5kIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21waWxlT1NSRXhpdChDYWxsRnJhbWUqKTsKIAotICAgIHN0YXRpYyB2b2lk
IGV4ZWN1dGVPU1JFeGl0KFByb2JlOjpDb250ZXh0Jik7Ci0KICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXBMb2NhdGlvbjsKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8T1NSRXhpdFB0clRhZz4gbV9jb2RlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKaW5kZXggMzEwOTYzZDg0NDM2YzUzMzI3ODRmMGEy
OTJhNDljYmUxYjgyYTU5Yi4uMDAzYjYxOGNkNDQwZTQwMGFiYWFjZWMwYWZiYzNjMTI0MzVkYjk2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaApAQCAtNzAs
NiArNzAsMTEgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgcmV0dXJuIG1fa2luZCA9
PSBHZW5lcmljVW53aW5kOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0V4aXRp
bmdUb0NoZWNrcG9pbnRIYW5kbGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKTsKKyAgICB9CisKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCmluZGV4IDJmZjNlYThiNWZiYjZmM2YyNzIxZDUwMjQ0NTYyOThiMDg0ZDUxMTUuLjBmYjQ4
MjAzYmZkYjVkNTRjOTYzZDI0ZjlkYmY3NjlkZTVhMjVmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTI5
LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVz
LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJE
RkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5j
bHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTQzLDYgKzE0Niw5IEBAIHZvaWQq
IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5
dGVjb2RlSW5kZXggY2FsbEJ5CiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPigmY2hl
Y2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50KTsKKwogICAgIHZv
aWQqIGp1bXBUYXJnZXQ7CiAKICAgICBpZiAoY2FsbGVySXNMTEludCkgewpAQCAtMzgyLDExICsz
ODgsMTIgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwogCiAgICAgdm9pZCoganVt
cFRhcmdldDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjaGVja3BvaW50
UmV0dXJuVGFyZ2V0OwogICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4
aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms7CiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAgICAgICAgIGF1dG8gYnl0
ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkgPyBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQpKSA6IExMSW50Ojpn
ZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6
cmVnVDIpOwpAQCAtNDAyLDcgKzQwOSwxNCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChW
TSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICNlbmRp
ZgogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRh
Zz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQt
PmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Cisg
ICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGluZGV4Rm9yQ2hlY2twb2ludFJldHVy
biA9IGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRleCk7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNv
ZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGluZGV4Rm9yQ2hlY2twb2ludFJldHVy
bik7CisgICAgICAgIGlmIChleGl0SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBj
aGVja3BvaW50UmV0dXJuVGFyZ2V0ID0gY29kZUxvY2F0aW9uOworICAgICAgICAgICAgY29kZUxv
Y2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9jYXN0PHZv
aWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSk7CisgICAgICAgIH0KKwogICAg
ICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxv
Y2F0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UuY3BwCmluZGV4IDIxNmM1YmFhMTRkOTZiMjliNWRkMzY5YTczYmZl
Y2I0YjAzZGMxOTkuLjdkYTZhZmQ1YzIyMWM5N2ZmOTNmNDAwY2IzNDk0NDU0ZDRkNDkyNDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcApAQCAtMjEwNyw3ICsyMTA3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmIChtX2hlYXAuZm9sbG93KGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5u
b2RlKCkpICE9IGVzY2FwZWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
ICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChp
KTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbi50
YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ob3BlcmFuZCksCiAgICAgICAgICAgICAgICAg
bWF0ZXJpYWxpemF0aW9uLT5kZWZhdWx0RWRnZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wSW5mby5oCmluZGV4IGYzOWMxNGI5ZjBhNDQ4Nzg5ZDc3MmRjMjdkZjE1ODgxZTUwODY4OTUu
Ljc3ZWZjZmIyNDgwMDJhNGJmNWVhNjBhNmU2NjUyMGZlMDUxNDRiY2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcEluZm8uaApAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgT3BJbmZvIHsK
ICAgICBleHBsaWNpdCBPcEluZm8oSW50ZWdyYWxUeXBlIHZhbHVlKQogICAgICAgICA6IG1fdmFs
dWUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSkgeyB9CiAgICAgZXhwbGljaXQgT3BJbmZv
KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZSkpKSB7IH0KLQorICAgIGV4
cGxpY2l0IE9wSW5mbyhPcGVyYW5kIG9wKSA6IG1fdmFsdWUob3AuYXNCaXRzKCkpIHsgfQogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgZXhwbGljaXQgT3BJbmZvKFQqIHB0cikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDBkZmU3YmVi
NTU1MGRiZTZkMzk1OTNjNmYzMmVlZTA1MjJkZDJlYmEuLmZkMDk2YTVkZGY1MjRiMGE5ZGRhOWRh
MDUwOTNmMTI2Yjk2NTRkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcApAQCAtMjk0NywxNSArMjk0NywxNiBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVEb3VibGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
agogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdWlu
dDMyX3QgbWFuZGF0b3J5TWluaW11bSkKIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50IHsgZmlyc3RFbGVtZW50RGVzdCB9OwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1
bWVudHMpOwogICAgIAotICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYml0d2lzZV9jYXN0PEpTVmFsdWUq
PigmY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCkpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3Ro
IC0gMSk7CiAgICAgCi0gICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5
TWluaW11bTsgKytpKQotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkp
ID0ganNVbmRlZmluZWQoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGggLSAxOyBpIDwg
bWFuZGF0b3J5TWluaW11bTsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
ICsgaSkgPSBqc1VuZGVmaW5lZCgpOwogfQogCiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCmluZGV4IGNiYzJj
OGJmYWU0ZTk0ZDA5NWRkYzkxNTdkYjM2YWI1YTBjNmFkYzIuLmJiNDIwNjFkNTE2NmZlMjEwZDlj
ZWRjNmM3ZWM3MThmNDRiYmJiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKQEAgLTEwOCwxNyArMTA4LDE3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgICAgICAgICBt
X3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJh
bmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM5LDIxICsxMzksMjEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3Vy
cmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlLaWxsZWQ7
CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAgICAgICAgIGF1dG8g
cHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAg
ICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
ewogICAgICAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5k
OiAiLCByZWcsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVk
IG9wZXJhbmQ6ICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgLy8gQWxyZWFk
eSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJl
YWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlLaWxsZWQp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChyZWcpOworICAgICAg
ICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChyZWcpID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gaW5zZXJ0
IGEgUGhhbnRvbSBpZiB0aGUgbm9kZSBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIHRoZSBsYXN0CiAg
ICAgICAgICAgICAgICAgLy8gZXhpdCwgYW5kIHdhcyBib3JuIGJlZm9yZSB0aGUgbGFzdCBleGl0
LgpAQCAtMTc5LDE0ICsxNzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAKICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVN
YXlFeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBkb2VzIGV4
aXQsIHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAgICAgICAg
IC8vIHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAg
YWxyZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVk
T3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IG9w
ZXJhbmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJh
bmQobG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9w
ZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yQWxsS2ls
bGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLCBw
cm9jZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IGE1OGUxNzk2NTYwZmM2ZDk0YmI0
NjNkMTQyOTg4NmUwNzhmMGFmY2MuLmY1ZjA5NmM4ZWI1NmQ0NWZhOTg5YmI0OTM2ZjcyZDQ0ODE5
NWExNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
bGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZh
bHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBoZWFwLm9w
ZXJhbmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02
OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdyaXRlcyB0
byBhbHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJlcml6ZSgp
LgogICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNhbGxJZkFw
cHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXls
b2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29u
ZGl0aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3RhY2spOwog
ICAgICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAo
KS5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2FsbElmQXBw
cm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihv
cGVyYW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKaW5k
ZXggNDQ3ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4uNWI0Zjk5MjkzNDEx
NzljMjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcApAQCAtNzIs
NyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBt
X2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0g
bXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggODA1MDUx
NmNiZmVjYzg0ZmUxOTU4NDI4YTBjZjg3Y2Q1NGVlMTE3Yi4uMjIxYzUwMWRiZDE0YzA0NTcyYTdm
ZTFkMTliZTZkMzE5N2MxM2YzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEzNjUsNiAr
MTM2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBa
b21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4IDg3Mjc3NjBj
NmVjYmRiMzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcuLmZkNjEyM2ZhOWYxZDUyOWU0YzJlZTJj
MGU3ZWRmNjNmMDdmNzhkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGlj
OgogICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFz
ZShncmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhpcyBpcyBpbXBv
cnRhbnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAg
ICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCwxMSArODUsOCBAQCBwdWJs
aWM6CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgp
OwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBP
cGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAg
ICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2Us
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXZl
QXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2td
LmZpbGwoZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxi
b29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNlKTsKKyAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGJvb2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAxLDM0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5k
ZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIsIGxpdmUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PFZpcnR1YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2Nh
cGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7CisgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxPcGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJhbmQsICIg
aXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRz
LmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAg
ICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQg
b3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5vZGUtPm9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBub2Rl
LT5vcCgpID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG9wID0g
bm9kZS0+b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9wID09
IFB1dFN0YWNrIHx8IG9wID09IFZhcmFyZ3NMZW5ndGggfHwgb3AgPT0gTG9hZFZhcmFyZ3MgfHwg
b3AgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AgPT0gS2lsbFN0YWNrKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07
CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9k
ZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUp
IHsgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA6IHdyaXRlcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiB3
cml0ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6
IHJlYWRzKQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHJlYWRz
KQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMzQsNyArMjI5LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBkZWZlcnJlZCA9
IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJy
ZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFjaykgewpAQCAt
MjYxLDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzOTgKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc0NvbmZsaWN0aW5nID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPT0g
Q29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5v
cGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9PSBDb25mbGljdGluZ0Zs
dXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFpc0NvbmZsaWN0aW5nKTsKQEAgLTI3NSwxNyArMjcwLDIw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChu
b2RlLT5vcCgpID09IFB1dFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIlNldHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQp
ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkg
PT0gS2lsbFN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHNpbmsgYSBQdXRTdGFjayBwYXN0IGEgS2lsbFN0YWNrLgotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3Rp
bmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBmb3IgIiwgbm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MywxNiArMjkxLDE4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkg
PSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZv
cndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwgbm9kZSwgIiBh
dCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2Ji
ZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5k
bGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9w
ZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRhaWxbYmxvY2td
KQpAQCAtMzEzLDEzICszMTMsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJDb25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFuZEZvcklu
ZGV4KGkpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1
Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNj
ZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5n
ICIsIGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9j
ayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFu
ZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtp
XSwgZGVmZXJyZWRbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zNTIsMTAgKzM1Miwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFuZHNMaWtlLCBt
X2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0b3I8VmlydHVh
bFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmQ+IGluZGV4
VG9PcGVyYW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRl
eChpKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisKICAgICAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1bGF0b3Iu
bmV3VmFyaWFibGUoKTsKICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQob3Bl
cmFuZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3BlcmFuZC5zaXpl
KCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOwpAQCAtMzcwLDEyICszNzAsMTIgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHB1dFN0
YWNrc1RvU2luay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3Iu
bmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3Bl
cmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRTdGFjazoKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9W
YXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTM4Niw3ICszODYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIAogICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAogICAgICAgICAg
ICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJs
b2NrKSAtPiBOb2RlKiB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10ub3BlcmFu
ZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zOTcs
NyArMzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3Jt
YXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAg
ICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRp
bmcgUGhpIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3Jh
cGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52
YWxpZEV4aXQoKSk7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbWFw
cGluZy5maWxsKG51bGxwdHIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVh
ZChibG9jaywgdmFyaWFibGUpOwpAQCAtNDIxLDE1ICs0MjEsMTUgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVyRHVtcChibG9j
ayksICI6ICIsIG1hcHBpbmcsICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2so
YmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRl
eFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+aW5k
ZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBN
YXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgcGhpRGVmLT52YWx1ZSgpLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZhbHVlKCk7CiAg
ICAgICAgICAgICB9CkBAIC00MzcsMTUgKzQzNywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBk
ZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICAg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGRhdGEtPm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCksICIgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcu
b3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC00NTMsMTYgKzQ1MywxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQo
ZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBk
ZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzQ29uY3JldGUoZm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpICE9IENvbmZs
aWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpICE9IENvbmZs
aWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
ZXJlIGlzIG5vIGRlZmVycmFsLiBObyBkZWZlcnJhbCBtZWFucyB0aGF0IHRoZSBtb3N0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlIHZhbHVlIGZvciB0aGlzIHN0YWNr
IHNsb3QgaXMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHN0YWNrLiBTbywKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGtlZXAgdGhlIEdldFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAg
bWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCkBAIC00NzIsMjAgKzQ3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgc3RvcmVkIGFuZCBnZXQgcmlkIG9mIHRoZSBHZXRTdGFjay4KICAgICAgICAgICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBmb3JtYXQgPT0gZGF0YS0+Zm9ybWF0
LCBmb3JtYXQsIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCk7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKGRh
dGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IGluY29t
aW5nLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9J
ZGVudGl0eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0Zs
dXNoOworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2Vk
T3BlcmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChE
RkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCkBAIC00OTks
NyArNDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2VydCBhIFB1
dFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRT
dGFjayBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CkBA
IC01MTMsNyArNTEzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsK
IAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIg
PSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFyZ3Mg
YXJlIHVuY29uZGl0aW9uYWwgd3JpdGVzIHRvIHRoZSBzdGFjawpAQCAtNTIxLDEzICs1MjEsMTMg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25zIHRoZXkgd3Jp
dGUgdG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9jYXRpb25zIGRlYWQgcmlnaHQgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBMb2FkVmFyYXJncy9Gb3J3YXJkVmFyYXJn
cy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2luawogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9w
KCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZh
cmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAg
ICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJp
emUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVy
LCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJh
bmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9IH0KICAgICAgICAgICAgIH0KQEAgLTUzOSw4ICs1MzksOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1
bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJh
bmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkNyZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAo
YmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVhZFtzdWNjZXNz
b3JCbG9ja10ub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBudWxscHRyLCBpc0NvbmNyZXRlKGZvcm1hdCksIGZvcm1hdCk7CkBAIC01ODUs
NyArNTg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgewor
ICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIg
UHV0U3RhY2sgc2lua2luZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAppbmRleCA0MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMxMWQ2NzY4NjUw
Li4wNGYyYzBjZDM5OThiMTgxYjllOThiYmE0MjcwNDg4M2I0MGQyZDhjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCkBAIC0x
NTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+bG9j
YWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPm9wZXJhbmQo
KSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudEdldHRl
cnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5n
LmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNT
QUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90
aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWFkTm9kZSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMwMCw3ICszMDAsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2Vt
ZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmly
dHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIs
IG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzog
IiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9kZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFi
bGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Q
b2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBwaGlE
ZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQs
IFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQo
KSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
KSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdl
KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5vcmln
aW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBj
YXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxT
dGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUt
PnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUt
Pm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkg
JiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUHV0U3RhY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQo
KSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
TWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOwotICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIs
IHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOworICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNo
aWxkOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9y
T3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwg
bm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21M
b2NhbDogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZh
dWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQyNSwxMiAr
NDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGV4aXRPSy4K
ICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2VkVXNlS2luZEZv
cihmb3JtYXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJ
bnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPmxvY2FsKCksICIgcHJvcGFnYXRpbmcg
IiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiIHRvICIsIHBo
aU5vZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0
aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgcHJvcGFnYXRpbmcgIiwg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICIgdG8gIiwgcGhp
Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2Vy
dGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUt
Pm9wZXJhbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2luZCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMTViZTQyYWMzYjY5YWY0ZGM1ODM4YTE4ZGYzOWQw
NzhjYTMxNjkxOS4uOWEzMmQ2N2E1ODc0Mjk1ODViMzdkOWFlMWE2Y2ViYzVmYzk2MmNmZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTMyMiw2
ICszMjIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5n
dGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoK
ICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA3N2U5Yjc3OGNkNmViNzdiMWJm
NTY1YzRjOGVhMTA1MWU3YmI1OTY3Li5kMTlhYjc2MDE0MjVkZGU5MTE5YjJjNmM4ZGIxM2RjMDNm
YjcyOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRHZXRD
YWxsZWUoQ29kZU9yaWdpbiBvcmlnaW4sIEdQUlJlZyBjYWxsZWVHUFIpCiAgICAgICAgICAgICAg
ICAgY2FsbGVlR1BSKTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGNhbGxl
ZUdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBjYWxsZWVHUFIpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0QXJndW1lbnRTdGFydChDb2RlT3JpZ2luIG9yaWdp
biwgR1BSUmVnIHN0YXJ0R1BSKQpAQCAtMTc3Niw3ICsxNzc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAg
bV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQo
Y2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5k
TG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoQWJvcnRSZWFz
b24gcmVhc29uKQpAQCAtMTgyNiw3ICsxODI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUN1cnJlbnRCbG9jaygpCiAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2Jsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgpA
QCAtMTgzNiwxMSArMTgzNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50
QmxvY2soKQogICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAgICAgICBjb250
aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgogICAgICAgICBmb3Jt
YXQgPSBkYXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsKLSAgICAgICAgbV9z
dHJlYW0tPmFwcGVuZEFuZExvZygKLSAgICAgICAgICAgIFZhcmlhYmxlRXZlbnQ6OnNldExvY2Fs
KAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwKLSAgICAgICAgICAg
ICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCi0gICAgICAgICAgICAgICAgZm9ybWF0KSk7
CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW9wZXJhbmQuaXNBcmd1
bWVudCgpIHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOwor
ICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKG9w
ZXJhbmQsIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAgICAgfQogCiAgICAg
bV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CkBAIC0xOTIwLDcgKzE5MTcsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAoZm9ybWF0ID09IEZs
dXNoZWRKU1ZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCh2
aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKTsKIAogICAgICAgICBKU1ZhbHVlU291cmNlIHZh
bHVlU291cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpKTsKICAgICAgICAgCkBAIC03MzQyLDU0ICs3MzQwLDU1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSogbm9kZSkKICAgICBub1Jlc3Vs
dChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5v
ZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xlbmd0aChOb2Rl
KiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAgICB7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKLSAgICB9CisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkp
OworICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKKyAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzUmVncywgZGF0YS0+
b2Zmc2V0KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbG9jayhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVu
dHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1l
bnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAg
IEdQUlRlbXBvcmFyeSBhcmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7CisgICAgR1BSUmVnIGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhpcy5ncHIoKTsKICAg
ICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCi0gICAgLy8gRklYTUU6IFRoZXJl
IGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVy
dHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhl
IFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxp
YW5jZQotICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3
aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgIC8v
IHBhc3QgdGhlIHNpemluZy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKIAotICAgIEdQUlJl
ZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQotICAgICAgICBKSVRDb21waWxlcjo6c2VsZWN0
U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncyk7CisgICAg
aW50MzJSZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2RlKTsgIAorfQogCi0gICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
Q291bnRJbmNsdWRpbmdUaGlzR1BSKTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2Fk
VmFyYXJncyhOb2RlKiBub2RlKQoreworICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOworCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFy
Z3VtZW50Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmd1bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgR1BSUmVnIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBKU1Zh
bHVlUmVncyBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CiAKICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2Uo
KSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZSwKLSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKSk7CisgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNW
YWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywg
SlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BS
LAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCiAgICAgICAgICAgICBU
cnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CiAKLSAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNv
dW50KSk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIG1faml0LnN0b3JlMzIoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hp
bmVDb3VudCkpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJn
dW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+
bWFuZGF0b3J5TWluaW11bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQo
KSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
IAogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM5OSwxNyArNzM5OCwxOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSogbm9kZSkKIHsKICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkpCi0gICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lKCk7CisgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBlbHNlCiAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAorICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICBHUFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHRlbXAodGhpcyk7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKyAgICBH
UFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOwor
ICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBhcmd1bWVudENvdW50LmdwcigpOwogICAgIEpTVmFsdWVS
ZWdzIHRlbXBSZWdzID0gdGVtcC5yZWdzKCk7Ci0gICAgICAgIAotICAgIGVtaXRHZXRMZW5ndGgo
aW5saW5lQ2FsbEZyYW1lLCBsZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0gKi8gdHJ1ZSk7Cisg
ICAgCisgICAgbV9qaXQubW92ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbGVuZ3RoR1BS
KTsKICAgICBpZiAoZGF0YS0+b2Zmc2V0KQogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoZGF0YS0+b2Zmc2V0KSwgbGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC03NjU1LDcgKzc2NTYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgc2NyYXRjaDFHUFIpOwogICAgICAgICB9CiAgICAg
fSBlbHNlCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSwgc2NyYXRjaDFHUFIpOwogCiAgICAgLy8gRG9uJ3QgbmVlZCBhIG1lbW9yeSBiYXJy
aWVycyBzaW5jZSB3ZSBqdXN0IGZhc3QtY3JlYXRlZCB0aGUgYWN0aXZhdGlvbiwgc28gdGhlCiAg
ICAgLy8gYWN0aXZhdGlvbiBtdXN0IGJlIHlvdW5nLgpAQCAtMTIzOTMsMTQgKzEyMzk0LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTZXR0ZXIoTm9kZSogbm9kZSkKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDYWxsZWUoTm9kZSogbm9kZSkKIHsKICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSwgcmVzdWx0LmdwcigpKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTZXRDYWxsZWUo
Tm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgIG1faml0LnN0b3JlQ2VsbChjYWxsZWUuZ3ByKCksIEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgIG1faml0LnN0b3Jl
Q2VsbChjYWxsZWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKQEAg
LTEyNDE4LDcgKzEyNDE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogewotICAg
IG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CisgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobm9kZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIG5vUmVzdWx0KG5vZGUpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5k
ZXggYzY0Zjk3OGFkZjg1ZmJmMjc3YmJhNzkyMTYwNjRmNDI4MWI4ZDVhOS4uMDNkNDgzNWJmNGI3
YThkZTA5MzllZmNmYTM3MDIyYjQ2MjY5MDk0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTM5Myw2ICsxMzkzLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
TmV3UmVnZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7
CisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
TG9hZFZhcmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0x
NjY5LDE1ICsxNjcwLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFn
ZShHUFJSZWcsIEdQUlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJl
ZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1
YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAg
IEFTU0VSVCghYnl0ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxS
ZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFu
ZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9y
bWF0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBm
b3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9j
dXJyZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2Fs
KHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7Cisg
ICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNo
aW5lTG9jYWwoKSwgZm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJh
dGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAppbmRleCA2N2IwZTBiMzcwNGNhNTlhODkwYWM1OWM4NmRiZDBkMmEwNTZkYjgx
Li4wYWYzZjE3MTgxNTQxMGQ5YmVmNjRhMjBmZDA5MDVkZGMwM2U2N2Y0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAg
LTE4MjgsNyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
OwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQg
aXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBh
c3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9j
dXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1h
dERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MjQsNiArMzgyNCwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRD
YWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewor
ICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggM2U2MzhjOWI5NDllYjVlYTI2YTMxMDVkZGI4
YWZlNzY2MjE2MzM0NC4uN2IxZTI1N2Q2MGQ0Njg0NWYxYTk0MGZmNmRmZGM5M2FjODZjN2M1MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCkBAIC0xOTM2LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3Bl
cmFuZCgpKTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFi
bGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZl
IGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3
ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExv
Y2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERh
dGFGb3JtYXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDY0LDYgKzQ0
NjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5n
dGg6IHsKKyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRW
YXJhcmdzKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IGJlZWM4NmFjN2E3ZDMzM2UzOTY3
OWUyNjc1NTkwNzRlNDY0YzliODIuLmQ3NjI4ZTVhMTE3Y2UzM2RlMWQxNjE1ZjYwNDI3NTIyMDQ3
N2EyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91
dFBoYXNlLmNwcApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEg
dmFyaWFibGUgYXMgYmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQg
KFNldExvY2FsLCBHZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAg
ICAgICAgIAotICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8
Ym9vbD4gdXNlZE9wZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBz
LCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0
aGF0IGFyZSB1c2VkIGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVw
ID0gZmFsc2U7CkBAIC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCku
aXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQo
KS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9w
ZXJhbmQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczoKICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAg
ICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQs
IHRydWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0
aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFzc2lnbm1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdp
c3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBp
LS07KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFs
UmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAg
fSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAg
IGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtOTIsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFj
azoKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3Rh
Y2stPmxvY2FsLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5z
ZXRPcGVyYW5kKHN0YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSAr
MTA3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gKml0ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmly
dHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCisgICAg
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICAgICAg
dXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgIHVzZWRPcGVy
YW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKLSAgICAgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IGFsbG9jYXRpb24odXNlZExvY2Fscy5zaXplKCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IGFsbG9jYXRpb24odXNlZE9wZXJhbmRzLnNpemUoKSk7CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0
TWFjaGluZUxvY2FsID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExvY2Fscy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCF1c2VkTG9jYWxzLmdldChpKSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZE9wZXJhbmRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoIXVzZWRPcGVyYW5kcy5nZXRGb3JPcGVyYW5kSW5kZXgoaSkpIHsKICAg
ICAgICAgICAgICAgICBhbGxvY2F0aW9uW2ldID0gVUlOVF9NQVg7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CkBAIC0xMzUsNDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlz
QXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9
IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCku
aXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
ID0gdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6
ZV90IGxvY2FsID0gdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYg
KGxvY2FsID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHVzZWRP
cGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0g
YWxsb2NhdGlvbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKKyAgICAg
ICAgICAgIGlmIChhbGxvY2F0aW9uW2luZGV4XSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9j
YXRpb24sIHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBmb3IgKFN0YWNrQWNjZXNzRGF0YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEp
IHsKLSAgICAgICAgICAgIGlmICghZGF0YS0+bG9jYWwuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAg
ICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICBpZiAo
ZGF0YS0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNo
aW5lTG9jYWwgPSBkYXRhLT5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sb2NhbC50b0xvY2FsKCkpID49IGFsbG9jYXRp
b24uc2l6ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGFs
bG9jYXRpb25bZGF0YS0+bG9jYWwudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkg
eworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQu
dG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xv
Y2FsKCldID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0g
YXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hp
bmVMb2NhbCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPm9wZXJhbmQp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJl
Z2lzdGVyKCkpCiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVCbG9jaygpLT5z
ZXRTY29wZVJlZ2lzdGVyKGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdp
c3RlcigpKSk7CisgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3Np
Z24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3Rlcigp
KSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxl
RGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIElubGluZVZhcmlhYmxlRGF0YSBkYXRh
ID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXTsKICAgICAgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0g
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBh
c3NpZ24oCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3Rlcihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24s
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpOworCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVu
dC0tOykgewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9n
cmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3Vt
ZW50UG9zaXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIxNSw4ICsyMTUsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEt
PmNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFz
c2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRh
LT5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBh
c3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0yMzEsMTcgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
YWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNz
aWduKGNvbnN0IE9wZXJhbmRzPGJvb2w+JiB1c2VkT3BlcmFuZHMsIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZD4mIGFsbG9jYXRpb24sIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50
b0xvY2FsKCldOwotICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFs
bG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpOworCisgICAgICAgIHNpemVfdCBvcGVyYW5kSW5kZXggPSB1c2VkT3BlcmFu
ZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24g
PSBhbGxvY2F0aW9uW29wZXJhbmRJbmRleF07CisgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0g
VUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwogICAgIH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCmluZGV4IGViM2RkYmQ3MTg0M2Q0OWY2NWIzMmNlOTYxZmY5YTA3MTJh
MWEwNTEuLmI0OGM2ZjdmMTkwOTc3NWQ3Mjc5Nzk5MWYzZmI5ODNkZTYzOGE3MjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcApAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRyOwotICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbV9ub2RlLT5sb2NhbCgpOworICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwogCi0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPm9wZXJh
bmQoKSA9PSBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsID0gbm9kZTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAo
U3RhY2ssIGxvY2FsKSkpCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dy
YXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG9wZXJhbmQpKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmNwcAppbmRleCA2YWNhZmJmM2JmNTM1Yzk2OTZiZTY0OGEyMDcwYjZlZTZmNGY4YmY5
Li5mMWIxZmY2NGRkYTUzY2Y0NTk2NzA0ZWViODMxNWYxNmJmYmU5MDllIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC00MCwxNCArNDAsNiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBl
cnMgaml0KG51bGxwdHIpOwotICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwg
JnZtKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
LSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJE
RkcgT1NSIGV4aXQgdGh1bmsiKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBD
Q2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmgKaW5kZXggMDVhNTBhNTRiMjVkNTFkYmNiMTg1OGZlN2FhZGNhNDg2ODIwNWQ5ZS4uOGI1YzNm
MDFhNDg1MjBiN2FhYWFhZWJhZmY5M2MzYjI2Y2NkOTg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2Ug
REZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1
bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCmluZGV4IDYwZmJmODk5NWZkYWQ3ODI1NmEwNjdiODljNGVjNWY1NzEzZjFkN2UuLjc5
NjY1ZjhhYjg1ZmMxMTE2ZDYzOWZiM2Q4YjU1ZjZlZDkwMjY4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApA
QCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIt
PnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNoZWNr
T3AgPSBDaGVja1N0cnVjdHVyZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcGVjQ2Vs
bENoZWNrICYgU3BlY0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKChsb2NhbCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0IDogMCkpID09IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4g
VGhlIGNhbGwgZW50cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCkBAIC0xNjgsOCAr
MTY4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3Bl
cmFuZCgpKSA9PSBub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gZ2V0TG9jYWw7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRM
b2NhbCgqYmxvY2ssIGluZGV4SW5CbG9jaywgdmFyaWFibGUsIGdldExvY2FsKTsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC00NDYsNyArNDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+
PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA5ZWU1ZTAwNzQwOWRm
NTI5NGJmY2Y1MWI3NzZlYjhjZmNmNDdjNTBlLi5hMmQ2Y2ZjMjQ5MzRlM2RjM2M0NmMwZTI0ZDRk
YTFjZTFiMGNmNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cApAQCAtNDgzLDcgKzQ4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5waGlzW2ldOwogICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxv
Y2suY29udGFpbnMobm9kZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9k
ZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9
IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+
b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dy
YXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGhp
IGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgogICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4
KGkpKQpAQCAtNTE5LDEwICs1MTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2sp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnNba107CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxv
Y2stPnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9j
YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJs
b2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVz
dCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGxvY2FsLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jaywgYmxvY2st
PnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAtNTMzLDExICs1
MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5v
ZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExv
Y2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnREZWZpbml0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5v
ZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZQpAQCAtNTQ3LDE5ICs1NDcsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fu
bm90IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2Nr
LT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2Qmxv
Y2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRn
ZSksIGZvdW5kKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoCi0gICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAot
ICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7
Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKAotICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwor
ICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xp
a2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90
PiBzZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFi
bG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQuYXJndW1lbnQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwpAQCAtNjY4LDI0ICs2NjQs
MjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291bnRzLmdl
dChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3Bl
cmFuZCgpKSA9PSBub3RTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGUsIGJsb2NrKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSwgYmxvY2spLCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVu
dERlZmluaXRlbHkgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAg
Ly8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUg
U2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhh
dmUgYSBzZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKICAgICAgICAgICAg
ICAgICAgICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGZvciB0
aGF0IGxvY2FsLgotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAg
ICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7
CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3Bl
cmFuZCgpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTk2OCwyNiArOTY0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAt
PiAiLCBlZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVw
b3J0VmFsaWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9jaykK
ICAgICB7CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9jYWws
ICIgaW4gbnVsbCBCbG9jayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBu
dWxsIEJsb2NrICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
ZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKG9w
ZXJhbmQsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBv
cnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNp
Y0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayog
ZGVzdGluYXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxv
Y2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAg
ZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVz
dGluYXRpb25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNv
bnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNl
QmxvY2ssIE5vZGUqIHByZXZOb2RlKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxv
Y2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2co
cHJldk5vZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7Cisg
ICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwg
KnNvdXJjZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dChOb2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDI2
ZjAzMjlkNTQzMDQxNTcyMDVlNzgxNDk4YzY0ZTBiZTk5MzIxMTAuLjk1Y2RjOTJlMmMyNDEwYTM1
YzAxMzEzMWZkYzNiN2NjYzI4MjllZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQxLDkg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1l
c3BhY2UgREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiBwdWJsaWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgp
CiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYsNyAr
NTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxw
dHIsIG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJk
aW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgs
NyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlz
IGZ1bmN0aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhu
KSBtYW5uZXIuCiAgICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQo
Y2FuZGlkYXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBk
YXRhTG9nKCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAg
CiAgICAgICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRB
cmd1bWVudHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVy
YW5kKCkuaXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmlu
ZyB0byBhbiBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5k
ZXggPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250
YWlucyhub2RlLT51bmxpbmtlZExvY2FsKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxldmFu
dExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1
YWxSZWdpc3RlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJh
cmdzOgpAQCAtMTQwLDEzICsxMzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhd0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgIGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBl
IGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUs
IGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5k
ZXg7CkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENh
bGxWYXJhcmdzOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9k
ZS0+Y2hpbGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVz
Y2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0xvYWRlZEZyb20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwg
bm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRH
ZXRCeU9mZnNldCkgewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2Fu
ZGlkYXRlQnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNl
cyhub2RlLCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEJ1dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwx
MSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0g
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIgd2hp
bGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBLaWxsaW5nICIsIG9wZXJhbmQsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlz
dER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExv
Y2Fscy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMu
cmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXgg
PSBub2RlSW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxh
c3RVc2VySW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAg
ICAgIAogICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJl
dHdlZW4gdGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2
MywxNiArMjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAg
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAg
ICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNr
OgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0
ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5j
ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0g
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBu
b2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2Fk
KCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
KGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAu
b3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENs
b2JiZXJpemUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExLDcgKzMx
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBt
YWtlIHRoaXMgd29yay4KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgV2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgIApAQCAtMzQxLDggKzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAh
PSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlM
ZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAv
KiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFy
YXJncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJm
NjAyYmQ2MmFlZDRjMzQzMmVhNWE4MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNjODhh
ODdjN2QxNzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgp
Ci0gICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSkpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAg
OiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9u
KFNwZWNOb25lKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZh
bHNlKQpAQCAtNDUsMTAgKzQ0LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nl
c3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwobG9j
YWwpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24oU3Bl
Y05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwg
bV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVy
VW5ib3goZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2Up
CkBAIC04Nyw3ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3Vi
bGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhp
cyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3
b3JrIGZvciBhcmd1bWVudHMuCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgIGlm
IChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAogICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhl
biB0aGlzIGRvZXNuJ3QKQEAgLTEyMSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0
YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlz
Um9vdCgpKTsKICAgICAgICAgCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3Vs
ZE5ldmVyVW5ib3goKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5l
dmVyVW5ib3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5
SW5kZXgpKQogICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91
YmxlRm9ybWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3ICsx
NzUsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwo
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGlu
ZSBhcmd1bWVudHMuCi0gICAgaWYgKG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVy
YW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8g
VGhlIGFyZ3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAo
aW5saW5lZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmgKaW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQy
MzIwMTRhMjg0ZS4uYmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
CkBAIC00OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVu
aW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShW
YXJpYWJsZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwot
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZhcmlh
YmxlQWNjZXNzRGF0YShPcGVyYW5kKTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwo
KQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9
PSBmaW5kKCktPm1fbG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAgQVNT
RVJUKG1fb3BlcmFuZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29w
ZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkK
QEAgLTIwOCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUg
c2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAv
LyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCi0g
ICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGlu
ZUxvY2FsOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVk
VHlwZSBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFn
czsKIAogICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5kZXggMjhlNDM3ZmQ1MWZlYTQ5NjllYjQ4
ZWNmMGMwNTA4ZjBhMzdkZjgzNS4uNWIyYzFlZTkwOWI1NDhmMzk4MjcwYzQzYmQzNmVkNzJlM2Y5
Y2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQu
Y3BwCkBAIC01OSwxMSArNTksMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmlu
dCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7CisgICAg
ICAgIG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50
KAotICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIg
LT4gYnl0ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAorICAgICAgICAgICAgIlNldExvY2Fs
KG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgp
LAogICAgICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIp
Iik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCmluZGV4IDIwNjBkNGEyZmQyNzIyM2RkNmY2OTljNmRi
YWQ2ZDIyNDY3Yzk4MzQuLmM4Yjg0YTdjMjE2NmU3MTVlNTMxY2Y3NWQzODQ5NzRmNWMzNjAyMmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC03
Niw3ICs3Niw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgIH0gcGFpcjsKICNlbmRpZgot
ICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiB9OwogCiBjbGFz
cyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Miw3ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdo
aWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZh
cmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0
aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgICAgIHJlcHJl
c2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIGV2ZW50Lm1fa2lu
ZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAg
ZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTgxLDEzICsxODEsMTMgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbCgKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGlu
ZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVPcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewog
ICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAg
ICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVnLm9mZnNldCgpOwogICAgICAgICBW
YXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRh
dGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2Vu
dGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9
IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAg
ICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTk1LDEzICsxOTUsMTMg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQogICAgIAotICAgIHN0YXRp
YyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgVmlydHVhbFJlZ2lzdGVyIGJ5
dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBp
ZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZl
bnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRz
KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAg
ICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQoKTsKKyAg
ICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlUmVnOwogICAgICAgICBldmVu
dC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3Zl
KHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRhdGlvbiA9IFdURk1vdmUocmVwcmVz
ZW50YXRpb24pOwpAQCAtMjY1LDEzICsyNjUsMTMgQEAgcHVibGljOgogICAgIFZpcnR1YWxSZWdp
c3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7Ci0gICAgICAgIHJldHVybiBWaXJ0
dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAgICAgICAg
cmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnaXN0ZXIoKSBjb25z
dAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0gTW92SGludEV2ZW50KTsKLSAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZpcnR1YWxS
ZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5kOwogICAg
IH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZ2lzdGVyKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCmluZGV4IDQ1MjZkMzliYjA5NGM0Yjg2NmU2N2VkM2UyZWUxYjQ4OTZhYmI3MjYuLjdlZDRk
OTAzYzE1OTU0NmZkNDM0YzY5NTcwOWE0ODU3NDdjZDFiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApAQCAtMTIzLDYg
KzEyMyw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOworICAgIHVuc2lnbmVkIG51bVRtcHM7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5zaWduZWQgZmlyc3RVbmRlZmluZWQg
PSBpbnZhbGlkSW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSBmYWxz
ZTsKQEAgLTEzMCwzNyArMTMxLDQyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJl
Y29uc3RydWN0KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbiA9IFsmXSAodW5z
aWduZWQgaSkgewogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZEluZGV4KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292
ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLm9mZnNldCgpOwot
ICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJG
b3JJbmRleChpIC0gMSkub2Zmc2V0KCk7CisgICAgICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVl
UmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLnZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpOworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5v
cGVyYW5kRm9ySW5kZXgoaSAtIDEpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAg
ICBpbnQgbWluT2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZzZXQsIGxhc3RPZmZzZXQpOwogICAg
ICAgICB1bmRlZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7IGZpcnN0VW5kZWZpbmVkLCBtaW5P
ZmZzZXQsIGkgLSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBp
bnZhbGlkSW5kZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQgPSBb
Jl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBzZXBhcmF0ZSB0aGUgc3Bh
biBvZiBhcmd1bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2NhbHMgZXZlbiBpZiB0aGV5IGhhdmUg
YWRqYWNlbnQgb3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9
IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNvdmVy
aWVzLmlzQXJndW1lbnQoaSkpCisgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlk
SW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5vcGVy
YW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgZmx1c2hVbmRlZmluZWRP
cGVyYW5kU3BhbihpKTsKIAogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZElu
ZGV4KSB7CiAgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGk7Ci0gICAgICAgICAgICBmaXJz
dFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKTsKKyAg
ICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVy
YW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIGF1
dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAg
aWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKS0+bnVtQ2FsbGVlTG9jYWxz
KCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2Nh
bCgpICsgMTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1l
KGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVt
Q2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCkudG9Mb2NhbCgpICsgMTsKKyAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1w
cygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CisgICAgfSBlbHNlIHsKICAgICAgICAg
bnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOworICAg
ICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bVRtcHMoKTsKKyAgICB9CiAgICAg
CiAgICAgLy8gQ3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdyZSBhdCBpbmRleCA9PSAwIHRoZW4g
dGhpcyBtdXN0IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAgLy8gZmFpbHVyZSwgaW4gd2hpY2gg
Y2FzZSBhbGwgdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJlY292ZXJpZXMgc2hv
dWxkCiAgICAgLy8gcmVmbGVjdCB0aGlzLgogICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgdmFs
dWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdG1w
cyBoZXJlIGJlY2F1c2UgdGhleSBjYW4ndCBiZSB1c2VkIHlldC4KKyAgICAgICAgdmFsdWVSZWNv
dmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcmlhYmxlcywgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFs
dWVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNb
aV0gPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyKHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkpLCBEYXRh
Rm9ybWF0SlMpOworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5k
ZXgoaSkudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0xNzEsNyArMTc3LDcgQEAgdW5zaWdu
ZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgt
LTsKICAgICAKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0
YXRlIGFuZCBleGVjdXRlIHRoZSBldmVudHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9w
ZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOwor
ICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBvcGVyYW5kU291cmNlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1p
bmlmaWVkR2VuZXJhdGlvbkluZm8+IGdlbmVyYXRpb25JbmZvczsKQEAgLTE5OCwxMiArMjA0LDEy
IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAg
ICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVy
KCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0
ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNv
dXJjZShldmVudC5pZCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRM
b2NhbEV2ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZl
bnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5z
ZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFG
b3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAg
ICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkK
KyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQo
KSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2
ZW50LmRhdGFGb3JtYXQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjEyLDcgKzIx
OCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIH0K
ICAgICAKICAgICAvLyBTdGVwIDM6IENvbXB1dGUgdmFsdWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1
ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxW
YWx1ZVJlY292ZXJ5PihPcGVyYW5kc0xpa2UsIG9wZXJhbmRTb3VyY2VzKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
VmFsdWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOwogICAgICAgICBpZiAoc291
cmNlLmlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoKSkgewpAQCAtMjY2LDcgKzI3Miw3IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5mby51
LnZpcnR1YWxSZWcpLCBpbmZvLmZvcm1hdCk7CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpk
aXNwbGFjZWRJbkpTU3RhY2soaW5mby51Lm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIGluZm8u
Zm9ybWF0KTsKICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNl
cGFyYXRlZCkKICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihvcGVyYW5kU291cmNl
cy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCmluZGV4IDc4MWI3MWU2OTI0MzgyODY0ODk3ZWZmN2Y5ZGU2OGU0ZWU0ZWJmMWQuLjMyY2Jj
MTA3NmRlNTlkYWE0YTcyN2RhYzdkNzVmYmRjYTYwN2RlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTE5MSw2ICsxOTEsNyBAQCBpbmxp
bmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5l
ZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgVmFsdWVUb0ludDMy
OgogICAgIGNhc2UgQnJhbmNoOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCmluZGV4IDMwODBkYzM0NTA5YzczMzMyNGI4MTQzZDJh
OTU0ZjA4ZWRhZjEzZmIuLmMwMDRmYWNjYzFhZDA1ZDM2Y2VkYmVkZjk2NzgyYWFiN2RjYjk4MzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogRm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQotICAgIDogbV9i
eXRlY29kZUluZGV4KFVJTlRfTUFYKQotICAgICwgbV9lbnRyeUZhaWx1cmVDb3VudCgwKQorICAg
IDogbV9lbnRyeUZhaWx1cmVDb3VudCgwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggMmY0ZTA5NjIyZDg0NGY0MjBkNjZkMzM0
ZWE5ODMyMjFlZDA2ZDI1ZC4uN2Y2ZWVhNDM3MDVlYmU5YTYzZjMxNmZhNjhlYzQ2NjY2NzBiNTE3
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtMjc0LDcgKzI3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0
IHdhbnQgdGhlIENvZGVCbG9jayB0byBoYXZlIGEgd2VhayBwb2ludGVyIHRvIGl0c2VsZiBiZWNh
dXNlCiAgICAgICAgIC8vIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdldCBjb2xsZWN0
ZWQuCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lz
ZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICAgICAgLy8gU3RhY2sgT3ZlcmZs
b3cgQ2hlY2suCiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dyYXBoLnJlcXVp
cmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CkBAIC0zNTUsNyAr
MzU1LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2Nh
bHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCks
IDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZs
dXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsK
QEAgLTEyODEsNiArMTI4MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2FsbEV2YWw6CiAg
ICAgICAgICAgICBjb21waWxlQ2FsbEV2YWwoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aCgp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAg
ICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1Myw3
ICsxOTU2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZm
ZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkp
OwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIg
KyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAgICAgIHNldEpTVmFs
dWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpKSkpOwogICAgIH0KIAogICAgIHZv
aWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKQEAgLTE5NzIsNyArMTk3NSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKICAgICAgICAgU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAg
ICAgICAgCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRh
dGEtPmZvcm1hdCksIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgIApAQCAtNzg0MSwxMyArNzg0NCwx
MyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgpCiAgICAgewot
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSkpOwogICAgIH0KIAogICAg
IHZvaWQgY29tcGlsZVNldENhbGxlZSgpCiAgICAgewogICAgICAgICBhdXRvIGNhbGxlZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwg
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQ
dHIoY2FsbGVlLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkKQEAgLTc4NjIsNyArNzg2NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNv
bXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICBtX291
dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAg
ICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRTY29w
ZSgpCkBAIC05NDU3LDUxICs5NDYwLDUxIEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUo
cGF0Y2hwb2ludCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkK
KyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAorICAgICAgICBMVmFsdWUganNBcmd1bWVu
dHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisKICAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IHZtQ2FsbCgKICAgICAgICAgICAgIEludDMyLCBvcGVyYXRpb25TaXplT2ZW
YXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBqc0FyZ3VtZW50cywKICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVs
IGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8vIGZyb20gdGhl
IHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3Jvbmcg
ZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBz
b2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxs
X3ZhcmFyZ3MgcmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0gICAgICAgIAor
CiAgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwg
bV9vdXQuaW50MzJPbmUpOwogCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIFZhcmFy
Z3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJvdmUo
bGVuZ3RoLCBsZW5ndGhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHNldEludDMyKGxlbmd0aElu
Y2x1ZGluZ1RoaXMpOworICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkKKyAg
ICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1ZSBq
c0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICAg
ICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVy
Zmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3Ro
SW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAg
CisgICAgICAgICAgICBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihsZW5ndGhJbmNsdWRpbmdU
aGlzKSwgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihk
YXRhLT5saW1pdCkpKSk7IAorCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5n
VGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9u
TGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTG9hZFZhcmFy
Z3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCiAgICAgICAgIC8vIG9mIGEgVmlydHVhbFJl
Z2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKICAgICAgICAgTFZhbHVlIG1h
Y2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0Zv
cihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKKyAg
ICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUo
KSwgbV9jYWxsRnJhbWUpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoMykpOwogICAg
ICAgICAKICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uTG9hZFZh
cmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICBtX291dC5jYXN0
VG9JbnQzMihtYWNoaW5lU3RhcnQpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihkYXRh
LT5vZmZzZXQpLAotICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1h
bmRhdG9yeU1pbmltdW0pKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0
LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgewotICAgICAgICBpZiAobV9ub2RlLT5j
aGlsZDEoKSkgewotICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpIHsKKyAgICAg
ICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7
CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewogICAgICAgICAgICAgICAgIGNvbXBpbGVG
b3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05
NTEwLDUwICs5NTEzLDI2IEBAIHByaXZhdGU6CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKQotICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgp
KQorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgp
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSgpOwogCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOyAKLSAgICAgICAg
TFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBudWxscHRyOwotICAgICAgICBBcmd1bWVudHNM
ZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFt
ZSk7Ci0gICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgewotICAgICAgICAgICAg
dW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247Ci0gICAgICAgICAg
ICBpZiAoa25vd25MZW5ndGggPj0gZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAgICAgIGtub3du
TGVuZ3RoID0ga25vd25MZW5ndGggLSBkYXRhLT5vZmZzZXQ7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOwotICAgICAgICAgICAgbGVuZ3RoID0gbV9v
dXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3Bl
cmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMu
Ci0gICAgICAgICAgICBpZiAoIWRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBsZW5ndGgg
PSBhcmd1bWVudHNMZW5ndGgudmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3Ro
LnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpLCB1bnN1cmUoaXNMYXJnZXIp
LCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3Io
bV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5v
ZmZzZXQpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0g
ICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExl
bmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5jb25zdElu
dDMyKDEpKTsKLSAgICAgICAgfQotCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gZGF0YS0+b2Zmc2V0OworICAgICAgICBMVmFsdWUgY2FsbGVyTGVuZ3RoSW5jbHVk
aW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbGVu
Z3RoSW5jbHVkaW5nVGhpczsgCisgICAgICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkK
KyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5tYXhTaWduZWQobV9vdXQu
c3ViKGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApKSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICBlbHNlIAorICAgICAg
ICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXM7CisK
KyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBt
X291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NP
dmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVu
Z3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZv
cihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAgICBMVmFsdWUgc291cmNl
U3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk2MTIsNjUgKzk1OTEsMTcgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0
aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAg
ICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICByZXR1cm4g
YXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0g
bV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExl
bmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZh
bHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSksIHVuc3VyZShp
c0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1
Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0
aFJlc3VsdCk7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlQzMl9NSU4pKTsKKyAgICAgICAg
cmV0dXJuIG1fb3V0Lm1heFNpZ25lZChtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBt
X291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSksIG1fb3V0LmludDMyWmVy
byk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkK
ICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRl
ZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0
czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKLQotICAgICAgICBOb2Rl
KiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogYXJn
dW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwg
YXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9w
KCkgPT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGF0aWNB
cmd1bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOwot
Ci0gICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSByZWN1cnNhYmxlTGFtYmRhKFsm
XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICBpZiAodGFy
Z2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzZWxmKHRhcmdl
dC0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZCkgewotICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gdGFyZ2V0
LT5iaXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJp
dFZlY3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZihtX2dyYXBoLnZh
ckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50czsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewot
ICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRzICs9IHRhcmdldC0+Y2FzdE9w
ZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXQtPm9w
KCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUo
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdGFyZ2V0
LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgc3ByZWFkTGVuZ3Rocy5h
cHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5l
Q2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwotICAg
ICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29s
bGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyk7
Ci0gICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCi0gICAgICAgICAg
ICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGluZ1RoaXMsIGxl
bmd0aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRlKApAQCAtOTY4MSw3ICs5NjEy
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9y
KGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAgICBhdXRvIGZvcndhcmRTcHJl
YWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVkU3ByZWFkTGVuZ3RocywgJnRhcmdl
dFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExW
YWx1ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3Ro
aXMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUlu
ZGV4KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9t
U3ByZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9k
ZSgpLCBzdG9yZUluZGV4KTsKIApAQCAtOTcxMyw4ICs5NjQ0LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICBMVmFsdWUg
c291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIHRh
cmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3By
ZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhzLmdldChpbmxp
bmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICBMVmFsdWUg
c291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGgg
PSBtX291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5s
aW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCiAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjE2OSw4ICsxMjEwMSw4
IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIHBhY2tldCwgbV9o
ZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlj
a2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0Lmxv
YWRQdHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcGFja2V0LCBtX2hlYXBz
LlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoMCkpKSwgcGFja2V0LCBtX2hl
YXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKKyAgICAgICAgbV9vdXQuc3Rv
cmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxs
ZWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRv
d0NoaWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBAIC0xMjI2MSw3ICsxMjE5Myw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVz
c0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAg
ICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5h
c0NlbGwoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwog
ICAgIH0KICAgICAKICAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzUyNiw3ICsxNzQ1
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1f
ZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAg
ICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CisgICAgICAgICAgICB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1f
b3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0xNzYzNCw3ICsx
NzU2Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwg
cHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9m
QXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51
bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5u
dW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMTc3
MzksMTUgKzE3NjcyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdERlc2NyaXB0b3It
Pm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxp
dHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAgJiYgbV9ncmFw
aC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkKLSAgICAgICAgICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxv
Y2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCks
ICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9y
aWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5LmlzRGVhZCgp
ICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBleGl0T3JpZ2luKSkKKyAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZl
IGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBvcGVyYW5kLCAiLCBh
dmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4p
LmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVl
ID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkp
OwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMo
KSkKQEAgLTE4MDQyLDM5ICsxNzk3NSwzOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9v
dXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwg
aW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRy
ZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJp
YWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJh
c2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCld
LCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFz
ZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2Us
IE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2Us
IG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9y
KExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1
ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYWRk
cmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2lu
dGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAg
aWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9j
YXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLCBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCwgb2Zmc2V0KTsKICAgICB9
Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2lu
dGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBh
eWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRl
ciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVk
UG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApp
bmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5Li4wOTFlN2YzYzli
NDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxu
Iik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxs
RnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5h
c2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLmFzYW5VbnNhZmVK
U1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZh
bHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFy
Z3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYx
OGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3Io
CiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9w
cm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxl
KHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJP
ZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2Fs
cywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9u
SnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXgg
ZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMx
ZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3Qg
T1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRh
Rm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJn
dW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUu
CiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFs
aWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4
ODE3NmVlNzIuLmEzNzg0MTBkYTliODAxNTcyNGE5ZGMxNmMzZmUxYWVjMDgwNTVkNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwx
MSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgog
I2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhp
dAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0g
YmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwog
CisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBleGl0Lm1f
ZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7CisgICAgICAgIFZNKiB2bVB0ciA9ICZ2
bTsKKyAgICAgICAgaml0LnByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAg
ICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRl
Y29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6
Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAg
ICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNl
dF07CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShm
cmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsg
Y29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxs
cygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9
IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxC
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnBy
ZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsg
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSks
IGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDAp
OworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBOb3cgZ2V0IHN0YXRlIG91dCBvZiB0aGUg
c2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2suIFRoZSB2YWx1
ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1c3QgbW92ZSB0aGVtLgogICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgp
OyBpbmRleC0tOykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2Ny
aXB0b3ItPm1fdmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkg
PCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVz
KSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwg
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBp
bmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdU
MCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlZykpOworICAgICAgICBqaXQuc3RvcmU2
NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyh2bSwg
aml0LCBleGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
CmluZGV4IDgyOWQyYmFiMTAyNjE4MjkxOGZjZjMyZWQwNGUyM2U2N2JlOTRjNTUuLjYyNjEyOTdm
MjA3YTQxZmMyZGUzY2Y2NDI3MWQ3N2NlOGQ5YzBjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGV4dGVybiAiQyIg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5l
dyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0
byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVh
ZC4KICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJm
bHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAg
ICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1t
dXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsK
ICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IDc0OTMzZGM2MDUxNWM1ZGEwMGVh
MThmYzdkNWRiM2FkOWNlNWU5Y2YuLjJjMzA0OGZiYmUzNTE4ODczZjNhZmJiNjViMjMzOGZhMGFk
NzQ1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKQEAgLTE3Niw2
ICsxNzYsMzggQEAgTFZhbHVlIE91dHB1dDo6bmVnKExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpOZWcsIG9yaWdpbigpLCB2YWx1
ZSk7CiB9CiAKK0xWYWx1ZSBPdXRwdXQ6Om1heFVuc2lnbmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCit7CisgICAgYXV0byBpc0xlZnRHcmVhdGVyID0gYWJvdmVPckVxdWFsKGxlZnQsIHJp
Z2h0KTsKKyAgICBpZiAoaXNMZWZ0R3JlYXRlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IGlzTGVmdEdyZWF0ZXItPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBpc0xl
ZnRHcmVhdGVyLCBsZWZ0LCByaWdodCk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6Om1pblVuc2lnbmVk
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCit7CisgICAgYXV0byBpc0xlZnRMZXNzID0gYmVs
b3dPckVxdWFsKGxlZnQsIHJpZ2h0KTsKKyAgICBpZiAoaXNMZWZ0TGVzcy0+aGFzSW50MzIoKSkK
KyAgICAgICAgcmV0dXJuIGlzTGVmdExlc3MtPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9y
aWdpbigpLCBpc0xlZnRMZXNzLCBsZWZ0LCByaWdodCk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6Om1h
eFNpZ25lZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQoreworICAgIGF1dG8gaXNMZWZ0R3Jl
YXRlciA9IGdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgaWYgKGlzTGVmdEdy
ZWF0ZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBpc0xlZnRHcmVhdGVyLT5hc0ludDMy
KCkgPyBsZWZ0IDogcmlnaHQ7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgaXNMZWZ0R3JlYXRlciwgbGVmdCwgcmlnaHQp
OworfQorCitMVmFsdWUgT3V0cHV0OjptaW5TaWduZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkKK3sKKyAgICBhdXRvIGlzTGVmdExlc3MgPSBsZXNzVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQp
OworICAgIGlmIChpc0xlZnRMZXNzLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gaXNMZWZ0
TGVzcy0+YXNJbnQzMigpID8gbGVmdCA6IHJpZ2h0OworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGlzTGVmdExlc3MsIGxl
ZnQsIHJpZ2h0KTsKK30KKwogTFZhbHVlIE91dHB1dDo6ZG91YmxlQWRkKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpCiB7CiAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6OkFkZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5MzYyYjNiZGNhMGZkNDZhMDNh
YTU3MGNhMmUuLjk2ZDNkMTMzZTg1ODE1MGY0MDZlZDE0MjNmYWM0ZGY1NWMwYTlkOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMTU2LDYgKzE1NiwxMSBAQCBwdWJs
aWM6CiAgICAgTFZhbHVlIGNoaWxsTW9kKExWYWx1ZSwgTFZhbHVlKTsKICAgICBMVmFsdWUgbmVn
KExWYWx1ZSk7CiAKKyAgICBMVmFsdWUgbWF4VW5zaWduZWQoTFZhbHVlLCBMVmFsdWUpOworICAg
IExWYWx1ZSBtaW5VbnNpZ25lZChMVmFsdWUsIExWYWx1ZSk7CisgICAgTFZhbHVlIG1heFNpZ25l
ZChMVmFsdWUsIExWYWx1ZSk7CisgICAgTFZhbHVlIG1pblNpZ25lZChMVmFsdWUsIExWYWx1ZSk7
CisKICAgICBMVmFsdWUgZG91YmxlQWRkKExWYWx1ZSwgTFZhbHVlKTsKICAgICBMVmFsdWUgZG91
YmxlU3ViKExWYWx1ZSwgTFZhbHVlKTsKICAgICBMVmFsdWUgZG91YmxlTXVsKExWYWx1ZSwgTFZh
bHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4
IDY5MzRjM2YwZDM3OTFmNjRiYTQyOTYzZTA1NTYzZGJiYzdkZGE1YTQuLmM3MjZhZDI3YzgxNWFj
NjdhNjcwZDI1ODA0YWE4Y2FlMjJiM2EwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaApAQCAtMTAwLDcgKzEwMCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxs
T3BlcmF0aW9uKAogICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CiAgICAgICAgIGppdC5zdG9yZTMy
KAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5i
aXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKHZtLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdl
dCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YTVmNTI3
N2RkNjMxYWNkNGNjYmVjZDE0YjI0Y2M1ZDRhMzlhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCkBAIC0wLDAgKzEsNjQg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2NsYXNzIENoZWNrcG9p
bnQKKyAgICBhdHRyX3JlYWRlciA6dXNlcworICAgIGF0dHJfcmVhZGVyIDpkZWZzCisgICAgYXR0
cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX3JlYWRlciA6aW5kZXgKKworICAgIGRlZiBpbml0aWFs
aXplKG5hbWUsIGluZGV4LCB0bXBzKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGlu
ZGV4ID0gaW5kZXgKKyAgICAgICAgQHVzZXMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYp
fCB1c2VEZWYgPT0gOnVzZSB9CisgICAgICAgIEBkZWZzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwg
dXNlRGVmKXwgdXNlRGVmID09IDpkZWZpbmUgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNz
KG5hbWVzcGFjZSkKKyAgICAgICAgRU9GPC0tCisgICAgY2FzZSAje25hbWVzcGFjZX06OiN7bmFt
ZX06CitFT0YKKyAgICBlbmQKK2VuZAorCitjbGFzcyBDaGVja3BvaW50cworICAgIGRlZiBpbml0
aWFsaXplKG9wY29kZSwgdG1wcywgY2hlY2twb2ludHMpCisgICAgICAgIEBvcGNvZGUgPSBvcGNv
ZGUKKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9p
bnRzLm1hcF93aXRoX2luZGV4IHsgfChuYW1lLCB0bXBzKSwgaW5kZXh8IENoZWNrcG9pbnQubmV3
KG5hbWUsIGluZGV4LCB0bXBzKSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MKKyAgICAg
ICAgQGNoZWNrcG9pbnRzLmVhY2ggZG8gfGNoZWNrcG9pbnR8CisKKyAgICAgICAgZW5kCisgICAg
ICAgIEVPRjwtLQorQml0TWFwPG1heE51bVRtcHM+IHRtcExpdmVuZXNzRm9yI3tAb3Bjb2RlLmNh
cGl0YWxpemVkX25hbWV9KHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBzd2l0Y2ggKGNoZWNr
cG9pbnQpIHsKKworICAgIH0KK30KK0VPRgorICAgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCmluZGV4IGRhYjg2ODZjYTMzYTEwMmM5YmZhMWRmMTgw
M2ViYjRmMGFiMjQ0ODUuLmM5NTM3ZTk3MzdiZTczNDUzZDA3OTU4MGVjYzY2MzMxZjZmZTRhMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCkBAIC0zMCw2ICsz
MCw3IEBAIGNsYXNzIE9wY29kZQogICAgIGF0dHJfcmVhZGVyIDphcmdzCiAgICAgYXR0cl9yZWFk
ZXIgOm1ldGFkYXRhCiAgICAgYXR0cl9yZWFkZXIgOmV4dHJhcworICAgIGF0dHJfcmVhZGVyIDpj
aGVja3BvaW50cwogCiAgICAgbW9kdWxlIFNpemUKICAgICAgICAgTmFycm93ID0gIk9wY29kZVNp
emU6Ok5hcnJvdyIKQEAgLTQ1LDEyICs0NiwxNCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgdGlk
CiAgICAgZW5kCiAKLSAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFy
Z3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMpCisgICAgZGVmIGluaXRpYWxpemUo
c2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6
ZXJzLCB0bXBzLCBjaGVja3BvaW50cykKICAgICAgICAgQHNlY3Rpb24gPSBzZWN0aW9uCiAgICAg
ICAgIEBuYW1lID0gbmFtZQogICAgICAgICBAZXh0cmFzID0gZXh0cmFzIHx8IHt9CiAgICAgICAg
IEBtZXRhZGF0YSA9IE1ldGFkYXRhLm5ldyBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJz
CiAgICAgICAgIEBhcmdzID0gYXJncy5tYXAud2l0aF9pbmRleCB7IHwoYXJnX25hbWUsIHR5cGUp
LCBpbmRleHwgQXJndW1lbnQubmV3IGFyZ19uYW1lLCB0eXBlLCBpbmRleCArIDEgfSB1bmxlc3Mg
YXJncy5uaWw/CisgICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBj
aGVja3BvaW50cy5tYXAgeyB8KGNoZWNrcG9pbnQsIF8pfCBjaGVja3BvaW50IH0gdW5sZXNzIGNo
ZWNrcG9pbnRzLm5pbD8KICAgICBlbmQKIAogICAgIGRlZiBjcmVhdGVfaWQhCkBAIC0xMTgsNiAr
MTIxLDggQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIDw8LUVPRgogc3RydWN0ICN7Y2FwaXRhbGl6
ZWRfbmFtZX0gOiBwdWJsaWMgSW5zdHJ1Y3Rpb24gewogICAgICN7b3Bjb2RlSUR9CisgICAgI3t0
ZW1wc30KKyAgICAje2NoZWNrcG9pbnRWYWx1ZXN9CiAKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQpA
QCAtMTMyLDYgKzEzNywxOCBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNv
ZGVJRFR5cGV9IG9wY29kZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAgICBkZWYgY2hlY2tw
b2ludFZhbHVlcworICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAg
ICBbImVudW0gQ2hlY2twb2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFw
eyB8Y2hlY2twb2ludHwgIiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0sIFsiICAgICAgICBudW1i
ZXJPZkNoZWNrcG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4iKQorICAgIGVuZAorCisgICAg
ZGVmIHRlbXBzCisgICAgICAgIHJldHVybiBpZiBAdG1wcy5uaWw/CisKKyAgICAgICAgWyJlbnVt
IFRtcHMgOiB1aW50OF90IHsiXS5jb25jYXQoQHRtcHMubWFwIHt8dG1wLCB0eXBlfCAiICAgICAg
ICAje3RtcH0sIn0sIFsiICAgIH07Il0pLmpvaW4oIlxuIikKKyAgICBlbmQKKwogICAgIGRlZiBl
bWl0dGVyCiAgICAgICAgIG9wX3dpZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYsIG9wY29kZUlE
VHlwZSwgMCkKICAgICAgICAgb3Bfd2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUzMiwgb3Bjb2Rl
SURUeXBlLCAwKQpAQCAtMjAwLDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bj
b2RlU2l6ZSBfX3NpemUsIGJvb2wgcmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRlY29kZUdlbmVy
YXRvcj4KICAgICBzdGF0aWMgYm9vbCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRvciogZ2VuI3t0
eXBlZF9hcmdzfSN7bWV0YWRhdGFfcGFyYW19KQogICAgIHsKKyAgICAgICAgI3shQGNoZWNrcG9p
bnRzLm5pbD8gPyAiZ2VuLT5zZXRVc2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAgICAgICAgIGlm
IChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2VuLT5hbGlnbldp
ZGVPcGNvZGUxNigpOwogICAgICAgICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lk
ZTMyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9u
LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4IDIw
NGFjNzU5ZTEzZWZmMTUxZjhjZDE3N2YzYmYxYjcwZTA3NzljYWEuLjY2ODU1YmE2NTAwODBlNGMy
M2NjMGViZWMxMGU3OTQ5Y2RlNzY4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL1NlY3Rpb24ucmIKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgogICBlbmQKIAog
ICBkZWYgY3JlYXRlX29wY29kZShuYW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUubmV3KHNlbGYs
IG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0s
IGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSkKKyAgICAgIE9wY29kZS5uZXcoc2VsZiwg
bmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwg
Y29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdLCBjb25maWdbOnRtcHNdLCBjb25maWdbOmNo
ZWNrcG9pbnRzXSkKICAgZW5kCiAKICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFtZSwgb3Bjb2Rl
cywgY29uZmlnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmNwcAppbmRleCBmNjM5NGFjNzEwNzEyNWI3Y2FiMjFhZDJiOTExM2MwNzk1MzZhNjAwLi4w
ZmQ1NjJiYjFhOTJiMDM0YzVkYzgwNjM2MDkwNWI0NjRlYjUzZWE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtNTAsNyArNTAsNyBA
QCB2b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihDYWxs
RnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbAogICAgIEFTU0VSVChnbG9iYWxFeGVjLT5pc0RlcHJl
Y2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpKTsKIH0KIAotYm9vbCBDYWxsRnJhbWU6OmNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKK2Jvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkp
OwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewpAQCAtMTAwLDEyICsxMDAs
MTIgQEAgU1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlQXNS
YXdCaXRzKCkgY29uc3QKIAogQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgo
KSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY2FsbFNp
dGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6
OmZyb21CaXRzKGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogU1VQUFJFU1NfQVNBTiBDYWxs
U2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0
cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMo
dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
QEAgLTEyMywyOCArMTIzLDI5IEBAIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0
IEluc3RydWN0aW9uKiB2cGMpCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0
ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgQVNT
RVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxvY2soKS0+Ynl0ZWNv
ZGVPZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMy
XzY0KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VS
VChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKS5wdHIo
KTsKIH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24q
IHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRlY29k
ZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFn
KCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOworICAgIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAg
QVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNh
bGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxv
Y2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAg
IHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZUluZGV4KCkpOworICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJ
bmRleCgpLm9mZnNldCgpOwogfQogCiAjZW5kaWYKQEAgLTE2NSw4ICsxNjYsOCBAQCBCeXRlY29k
ZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAgICAgICAgIHJldHVybiBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICB9CiAjZW5kaWYKLSAgICBBU1NFUlQoY2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNp
dGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0
ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgo
KTsKIH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTgwLDcgKzE4
MSw3IEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKICAgICAgICAgcmV0dXJu
IGNvZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICByZXR1
cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQo
KSkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4
KCkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IGNmYjc3
MTg1NjAzOTkzMzkxMDA0ZmMxMzIxMTgzODQyM2M1ZGM2YTkuLjA1ZjY5MTc3NDg5NTMzMWQ5MjMx
MDAxYTE1YTJjMDVhYmU4YTg5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTQ2LDE4ICs0NiwxOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAogICAgICAgICBleHBs
aWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
ICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IG1fYml0
cyhieXRlY29kZUluZGV4LmFzQml0cygpKQogICAgICAgICB7IH0KIAotICAgICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4OyB9CisgICAg
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1aW50MzJfdCBi
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CisgICAgICAg
IHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7
IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4g
Qnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IG1fYml0
cyB7IEJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKSB9OwogICAgIH07CiAKICAgICBjbGFzcyBEaXNw
b3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAgLTc4LDcgKzc4
LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIGFybTY0XzMyIGV4cGVjdHMgY2FsbGVyIGZy
YW1lIGFuZCByZXR1cm4gcGMgdG8gdXNlIDggYnl0ZXMgCiAgICAgc3RydWN0IENhbGxlckZyYW1l
QW5kUEMgewogICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lOwotICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBjb25zdCBJbnN0cnVjdGlvbiogcmV0
dXJuUEM7CisgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIHZvaWQqIHJldHVyblBDOwogICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBzaXplSW5SZWdpc3RlcnMgPSAyICogc2l6ZW9mKENQ
VVJlZ2lzdGVyKSAvIHNpemVvZihSZWdpc3Rlcik7CiAgICAgfTsKICAgICBzdGF0aWNfYXNzZXJ0
KENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyA9PSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpLCAiQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzIGlzIGluY29ycmVjdC4iKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0dXJuUEMpOyB9CiAgICAgICAgIEFic3Ry
YWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0dXJuIEFic3RyYWN0UEModm0sIHRo
aXMpOyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNv
bnN0OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdDsKIAog
ICAgICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0OwpAQCAtMTgyLDEwICsx
ODIsOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXByZWNh
dGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxlZSog
Z2xvYmFsQ2FsbGVlKTsKIAogICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29k
ZWZyYW1lIChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdpc3Rl
ciYgcihpbnQpOwogICAgICAgICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAg
ICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lzdGVy
JiB1bmNoZWNrZWRSKGludCk7CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBrbm93
biBub24tY29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJlZ2lz
dGVyKTsKIAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVy
IGNhcHR1cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCkBA
IC0yNTQsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICB2b2lkIHNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+
KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnBheWxvYWQoKSA9IGNvdW50OyB9
CiAgICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwogICAgICAgICBpbmxp
bmUgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZvaWQgc2V0UmV0dXJu
UEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAgICB2b2lkIHNldFJl
dHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZhbHVl
OyB9CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCmlu
ZGV4IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEuLmFlMzU4OThmYjVj
OWY0NmQ1YjBjYWYzYzY1ZjQ3N2QzNDgxM2I5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAtMzIsMjggKzMyLDE3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihp
bnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2so
KTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0g
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0KIGlu
bGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAg
cmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6
OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKKyAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
Z2lzdGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOworICAg
IHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdpc3RlciYgQ2FsbEZy
YW1lOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHVuY2hl
Y2tlZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOworICAg
IHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1ZhbHVlIENhbGxGcmFt
ZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MjA5YzNhMWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZmNDZi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0No
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBvZmZz
ZXQpIAorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVp
bnQ2NF90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZzZXRd
KTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDMy
X3QpKQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50
MzJfdD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2Yo
VCkgPT0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90KSk7
CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OworICAgIHZvaWQqIG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7CisgICAg
dWludDY0X3QgdG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCA5YzFj
YzQyNjU1MGNkNWE1Y2IxZGI5OTg1YWY2NGE4OTc3ZmZjYTkyLi4yMThmNjQ4OWZlNDg3ZDc3NDVl
ZTIwNDdhYjZiMTdmNDQ0N2JmOTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJC
eXRlY29kZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0
Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGly
ZWN0QXJndW1lbnRzLmgiCkBAIC0xMjQsNyArMTI1LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNpdGVJ
bmRleCBjYWxsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsK
ICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tl
ZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5j
aGVja2VkUihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNjb3Bl
KCk7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0gY2Fs
bGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93RnVu
Y3Rpb25Db250ZXh0ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigp
IHx8IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7CkBA
IC0yMTcsNiArMjE4LDkgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+PSBtYXhB
cmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAgICAg
bGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UKQEAgLTI1Myw3ICsyNTcsNyBA
QCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQg
bG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50
cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpT
VmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAg
ICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjY1LDM1ICsyNjksMzUgQEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2kKICAg
ICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToK
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRz
Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RF
bGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1l
bnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJn
dW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2Nv
cGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8
U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZp
cnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSlNGaXhlZEFycmF5VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBq
c0Nhc3Q8SlNGaXhlZEFycmF5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBq
c0Nhc3Q8SlNGaXhlZEFycmF5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1
bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChh
cmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAg
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9i
amVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihv
YmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
dW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNh
bkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBv
ZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IG9iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBp
ICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFs
dWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFsdWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMzA1LDggKzMwOSw3IEBAIHZvaWQgc2V0dXBW
YXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVj
dCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
JmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAg
bmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsK
QEAgLTU0Niw4ICs1NDksMTMgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0
b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAg
IGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsK
KyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9pbnRzLgorI2lmIEVOQUJM
RShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMgPT0gJmNoZWNrcG9pbnRfb3Ny
X2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCkKKyAgICAgICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ss
IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1faGFu
ZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAg
LTU2OSw2ICs1NzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5n
KQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAorICAgICAgICBtX3Jl
dHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC02MDUsNiArNjE0LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVC
bG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZv
aWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODc0LDcgKzg4NCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09i
amVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAg
aWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgKyAx
IC8qIHRoaXMgKi8gPj0gbWF4QXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1
cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAK
ICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTk0Myw3ICs5NTMsNyBAQCBKU09iamVjdCogSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTTwogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewor
ICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6ZSgp
ICsgMSAvKiB0aGlzICovID49IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2Ew
Li5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1
bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2Fk
VmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNl
dCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1l
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1
ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIw
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxp
bmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAg
ICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5t
X2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1f
ZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7
CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxs
RnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJ
bnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRv
cjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1
bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAgICAgICAg
ICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBjOGRmMjAw
Yjk4MWZmODI2YTUyZWYwNjcwZWM3ZGVlZGNiZmY2OTZlLi5jM2U4ZDBjM2RhMTEzZDk5YWMwYzhk
ZjQwMTU5ODliMjkwZDY5MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmppdEFzc2VydElzTnVsbChHUFJSZWcgZ3ByKQogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0
QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKQogewotICAgIEp1bXAgb2sgPSBicmFuY2gzMihCZWxv
dywgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgVHJ1c3RlZEltbTMy
KDEwMDAwMDAwKSk7CisgICAgSnVtcCBvayA9IGJyYW5jaDMyKEJlbG93LCBwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIFRydXN0ZWRJbW0z
MigxMDAwMDAwMCkpOwogICAgIGFib3J0V2l0aFJlYXNvbihBSEluc2FuZUFyZ3VtZW50Q291bnQp
OwogICAgIG9rLmxpbmsodGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAppbmRleCAyMjAwOWM1ZmQyYmEyMjdkNDdjZmU4NTQ5MzlmNTJkZWYyZDcx
YmMyLi41ODcwN2ZhODQzY2RkZTg3MjVjYTcyOGI4OGMxMTNmOGE5MWYyMjFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTExNDgsOSArMTE0OCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsK
ICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KLSAgICBzdGF0
aWMgQWRkcmVzcyBhZGRyZXNzRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIGFk
ZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VS
VCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE2Myw5
ICsxMTY0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1Zh
bGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNl
dCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICBz
dGF0aWMgQWRkcmVzcyB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAg
ICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBA
IC0xMTc4LDkgKzExODAsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lz
dGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsg
UGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50
IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAg
ICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKaW5kZXggODQ4NWE5ZmJkNjgzZGJl
ZjY1OGY2NzA4ODEzZjc1OGQ1ZGRiOThkMS4uYjNmMGUxNjkyYzBkYWJhNzk5NTZlMWU1MTE5OThi
OWYyOWQyZDcyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cApAQCAtMzcsNyArMzcsNyBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblBy
b2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzYwogICAgIHN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVy
RnJhbWVBbmRQQywgY2FsbGVyRnJhbWUpKSwgc2NyYXRjaDEpOwogICAgIHN0b3JlUHRyKHNjcmF0
Y2gxLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbGVyRnJhbWUpKSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIHNjcmF0Y2gxKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBzY3JhdGNoMSk7CiAgICAgc3RvcmVQ
dHIoc2NyYXRjaDEsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29w
ZSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCAxN2MwZWRhYTgyYjlmOTRm
NTc0MTMxMTA2MWE2NTEyOTRhNTE2Zjg1Li5iNjYxMjdhNGZiMWVjYmM2ZjE0OTIxN2JjMDAzZTEw
MmUxN2FlNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC03NTUsNyArNzU1LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
IAotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSwgcmVnVDEpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdUMSk7CiAgICAgICAgIGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAyODAzMmEy
MWFhY2I5YTJkOTMyMjg1ZmUxZjk2NWFkZTNlMjdhODBhLi44NzMxNWVmODQ3N2FjMTJhNzNjNTcw
YWVmOTEyNTBjNTY5YTRmMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTMzMSwxNiAr
MzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAg
IGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwogICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50RG91YmxlKGludCBzcmMpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICB2b2lkIGVtaXRMb2FkRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZElu
dDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lk
IGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAg
ICAgICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lz
dGVySUQgdmFsdWUpOwogCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKICAgICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4g
d3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCByZWdpc3RlcnMKICAgICAg
ICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2gg
cmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIs
IHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKLSAgICAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
KTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmls
ZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCkBAIC00MDQsMzIg
KzQwNCwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9k
ZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIAotICAgICAgICB2b2lkIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKLSAgICAgICAgdm9pZCBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CisgICAgICAg
IHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVl
UmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKIAotICAgICAgICBpbnQzMl90IGdldE9wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFu
dERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYyk7CisgICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCk7CisgICAgICAgIGJvb2wgZ2V0T3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3AsIGludDMy
X3QmIGNvbnN0YW50KTsKIAotICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVn
aXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdExvYWRQYXlsb2FkKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAogICAgICAgICB2b2lkIGVtaXRMb2Fk
KGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpOwot
ICAgICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAg
ICB2b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQg
cGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2Fk
Mik7CisgICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRh
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0
YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFn
MiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKLSAgICAgICAgdm9pZCBlbWl0U3RvcmUoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2Ug
PSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwg
Y29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0
ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQz
MiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVt
aXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jv
b2wgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBS
ZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rl
ciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBi
b29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFs
c2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1p
dFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAotICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVy
SW5kZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmly
dHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7
CiAKICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRlbnRpZmllciop
OwogCkBAIC00MzgsMTcgKzQzOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1w
TGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVn
aXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1ZSk7CiAKICNlbHNlIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNy
YzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVy
IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20g
PSByZWdUMCk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgZHN0LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9h
ZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQg
aW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKICAgICAgICAgfQpAQCAtNDU2LDI5ICs0
NDksMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZkJvdGhKU0Nl
bGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVnKTsKKyAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJl
Z2lzdGVySUQgc2NyYXRjaCk7CiAgICAgICAgIFBhdGNoYWJsZUp1bXAgZW1pdFBhdGNoYWJsZUp1
bXBJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVt
YmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChS
ZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCi0gICAgICAgIHZv
aWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlVlJlZywgY29uc3QgSWRlbnRpZmllciop
OworICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVJlZywgY29uc3QgSWRlbnRpZmllciopOwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91Ymxl
Q29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBp
bnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBAIC02ODUsOCArNjc4LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
LSAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1Zh
bHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNjk0LDIwICs2ODcsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICAg
ICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVn
IHRhZywgR1BSUmVnIHBheWxvYWQpOwogI2VuZGlmCi0gICAgICAgIHZvaWQgZW1pdEdldENsb3N1
cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CisgICAgICAgIHZvaWQgZW1pdEdl
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAg
ICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7Ci0gICAgICAgIHZvaWQgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpOworICAgICAg
ICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7
CisgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJv
bSwgVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFu
ZChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsK
LSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYyk7CisgICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9m
aWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKQEAgLTczNCw3ICs3MjcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsK
ICAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQgdmlydHVh
bFJlZ2lzdGVySW5kZXgpOworICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiYgc2xvd0Nhc2VzLAogICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCkBAIC03NTQsMTMgKzc0Nywx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3Vt
ZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CkBAIC04MDQsNyArNzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTg2NCw3ICs4NTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAgICAgICB2b2lkIHByaW50Qnl0
ZWNvZGVPcGVyYW5kVHlwZXMoaW50IHNyYzEsIGludCBzcmMyKTsKKyAgICAgICAgdm9pZCBwcmlu
dEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4IDM0NTg3NDRmYmNkZDUz
YWNmOWE0MzMyOGJjNDk0YjBmZWRjYjg5M2YuLjNhMzJjMzI2MTg5ZmFiMTk3ZDdjZjlmOTFkNWY2
YjRiMzEwMjAyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNp
Z25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMTcyLDEzICsxNzIsMTMgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2Fz
ZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQg
aW50IGltbWVkaWF0ZQpAQCAtMjMwLDEzICsyMzAsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBp
bnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkg
ewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwpAQCAtMjU2LDEz
ICsyNTYsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChk
c3QsIG9wMSwgb3AyLCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwpA
QCAtMjg0LDEzICsyODQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUo
KSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2Rl
IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CkBAIC0zODcsNyArMzg3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVj
b2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRl
Y29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTM5OSw3ICszOTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVjPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC00MTUsOSArNDE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNv
cnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2
UmVnaXN0ZXJzOjplYXgpOwpAQCAtNDkxLDkgKzQ5MSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGluZ1Bv
bGljeSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwpAQCAtNTM4LDggKzUzOCw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpCiB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsK
LSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01OTksOSArNTk5LDkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlmdFR5cGUg
c25pcHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBA
IC02NzQsOCArNjc0LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5j
dGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1
bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3BlcmFuZCA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZy
b20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCkBAIC03MjQsOSArNzI0
LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblBy
b2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CkBAIC03OTksNyArNzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGMKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtODQ1LDkgKzg0NSw5IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBA
IC05MDYsOSArOTA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRf
b3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKaW5kZXggYmYyMzA2YmNlNGQ1NmYxMDlhMDM2MThiMzQwNzJmYzU3YzBlNWFjMy4uYWY5
ZWViNjI3OWNjZTRkMTFiOTM0YWUxZjFiNWM2ZTRkNjcyMmY3NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtNjYsNyArNjYsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwogCiAgICAgaWYgKE9wOjpvcGNv
ZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAgICAgc3RvcmUzMihyZWdUMCwg
bWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKQEAgLTg1LDkgKzg1LDkgQEAgc3RkOjplbmFibGVfaWZfdDwKICwgdm9p
ZD4KIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0lu
Zm8qIGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9m
ZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQo
KTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNl
dCgpOyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHdlIG5ldmVy
IHVzZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5t
X2ZpcnN0VmFyQXJnOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJl
Z1QxKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogewogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxl
ZTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVS
ZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKaW5kZXggYjdkMGNhMjM1OGJlNTI1MDE4YTNmNGU5NjE2ZDljYjg0
OGZmZjUyMS4uZTA3YTgzM2Q0Yzg1M2I5YzdhMDJkZThiNzQ2MDFkZjMwNjZiYWUyZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC01MCw3ICs1MCw3
IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
IGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgZGF0YUxvZygiSW4g
Y2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZyYW1lKSwgIiBmb3IgY29kZSBibG9j
ayAiLCBjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBDUkFTSCgpOworICAgICAgICBXVEZCcmVh
a3BvaW50VHJhcCgpOwogICAgIH0KICAgICAKICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9
IHZtLnNoYWRvd0NoaWNrZW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
aW5kZXggMjIxNDljOWJkMWI4ZWMxMTgxMmNiZTBiODU0MWJlZTkzYjEwYWIzNC4uN2JjMTRlODM1
YWQxYWQxZGQ2NzNmY2E1MDY5NjgwZTI1NWZiYzliOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgKQEAgLTQ4LDE5ICs0OCwyMCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9yQXJyYXlNb2RlKGNvbnN0IEluc3RydWN0
aQogICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKIH0KIAotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgcmV0dXJuIHNy
Yy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKIH0K
IAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMp
CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYykpOworICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRy
eSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKIHsKKyAgICBBU1NFUlQoZW50
cnkuaXNIZWFkZXIoKSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkpOwogICAgIHN0b3JlMzIo
ZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTA5LDcgKzExMCw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAjZWxzZQogICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAjZW5k
aWYKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0
aW9uQml0cyksIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKICAgICAKICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzIGlz
IG5lZWRlZC4gSklUT3BlcmF0aW9ucyB0ZW5kIHRvIHVwZGF0ZSB0aGUgdG9wIGNhbGwgZnJhbWUg
b24KICAgICAvLyB0aGUgQysrIHNpZGUuCkBAIC0xNDMsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGkKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBk
c3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE1NSw3ICsxNTYsNyBAQCBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7
CkBAIC0xNjcsOSArMTY4LDkgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKICAgICByZXR1cm4g
Y2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CiB9CiAKQEAgLTI4NCw5ICsyODUsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpz
YW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAjZW5kaWYKICNlbmRpZgogCi1B
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYykKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICBy
ZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmlu
ZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3Ro
KCkgPT0gMTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQpAQCAtMzYzLDI2ICszNjQsMjYgQEAgaW5saW5lIEpJ
VEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiAg
ICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6
OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBpbnQzMl90IEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19J
TkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KGRzdCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKGluZGV4KS50YWcoKSksIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTAs
OSArMzkxLDkgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgdGFnKQogICAgIGxvYWQzMih0YWdGb3IoaW5kZXgpLCB0YWcpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJl
Z2lzdGVySUQgcGF5bG9hZCkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAg
IG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2Fk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwNiwxMzYgKzQwNywxMzMgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkKQogICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNW
YWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldChWaXJ0dWFsUmVn
aXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1pdExvYWQoc3JjLCBkc3QudGFn
R1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIo
KSwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwogCiAgICAgaWYgKGJhc2UgPT0gY2FsbEZy
YW1lUmVnaXN0ZXIpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsK
LSAgICAgICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExv
YWRUYWcoaW5kZXgsIHRhZyk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChyZWcsIHBheWxvYWQp
OworICAgICAgICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKICAgICBpZiAocGF5bG9h
ZCA9PSBiYXNlKSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0Zv
cih0YXJnZXQsIGJhc2UpLCB0YWcpOwotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQs
IGJhc2UpLCBwYXlsb2FkKTsKKyAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcp
OworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSks
IHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKKyAgICBs
b2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBsb2FkMzIodGFnRm9y
KHJlZywgYmFzZSksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKGludCBp
bmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4Miwg
UmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQoraW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJ
RCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0
ZXJJRCBwYXlsb2FkMikKIHsKLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsK
LSAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKKyAgICBlbWl0TG9hZChyZWcy
LCB0YWcyLCBwYXlsb2FkMik7CisgICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3Rl
cklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4
KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVn
KTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZh
bHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwg
dmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZp
cnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihyZWcpOwogICAgICAgICBjaGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZpbkNvbnN0YW50UG9vbCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KEFic29sdXRlQWRkcmVzcyhieXRlUG9pbnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocGF5bG9hZEZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocGF5bG9hZEZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0
b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRh
ZywgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50
MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJ
bnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIp
Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGlu
dCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1t
MzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykp
OwogICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNDZWxsKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKLSAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKHJlZykpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJv
b2woVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNC
b29sKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0
b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNCb29sKQot
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5U
YWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAg
IHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7CisgICAgc3RvcmVEb3VibGUo
dmFsdWUsIGFkZHJlc3NGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
KGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1
ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJn
ZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5
bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygp
KSwgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5
bG9hZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0
YW50LnRhZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVh
bFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lz
dGVySW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwo
cmVnKSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdElt
bWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAg
IGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRh
ZykpOwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50
MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
K0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFu
dCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBjb25z
dGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTsKQEAgLTU1NSwxMSArNTUz
LDExIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQg
b3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0
KQogCiAvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGlu
dG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKQEAgLTU3MSw0NyArNTY5LDMyIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVn
aXN0ZXJJRCBkc3QpCiAgICAgbG9hZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1Zh
bHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0
KCksIGRzdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRz
dDIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwg
UmVnaXN0ZXJJRCBkc3QyKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVy
IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQg
ZHN0MikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLm9mZnNldCgpLCBkc3Qx
LCBzcmMyLm9mZnNldCgpLCBkc3QyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRz
dCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20p
CiB7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3Qub2Zmc2V0KCksIGZyb20pOwotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVt
cCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQg
cmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBA
IC02MjksMjggKzYxMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZykpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0
dWFsUmVnaXN0ZXIgdlJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1t
ZWRpYXRlKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsK
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRl
eCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJl
Zyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2
YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCks
IHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJl
Z2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgQVNTRVJU
KGlzT3BlcmFuZENvbnN0YW50SW50KGluZGV4KSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOwor
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25z
dGFudEludChyZWcpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29u
c3RhbnRPcGVyYW5kKHJlZykuYXNJbnQzMigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAogQUxX
QVlTX0lOTElORSBKSVQ6OlBhdGNoYWJsZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90
SW50KFJlZ2lzdGVySUQgcmVnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKaW5kZXggN2NmYTA5NWYwMGQxN2UxNDExYmU5Y2ZiODBmODA4MDZmNzg4ZjZjMS4uNDYxN2Vl
Mjk0YjE0ZmVmMTI0ODg4NDQxZGZkOTQ1MTAzNjVhYTVkZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1v
dj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNy
YyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsK
KyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNF
X0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEyOSw5ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
Uwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2Rl
Lm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAo
YmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgog
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VP
ZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1w
dHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKQEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc1VuZGVmaW5lZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsK
QEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5l
ZE9yTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CiAKQEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CkBAIC0yNzQsOCArMjc0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAg
IHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4
Niw4ICsyODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0
IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BS
ZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKICAgICAKQEAgLTM2MCwxNSArMzYwLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9v
bGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUg
bG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJl
c3BlY3RpdmVseSkuCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMzkwLDE0ICszOTAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5v
ZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9j
b25kaXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7
Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcVB0cj4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBK
U1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3Bl
Y2lhbFBvaW50ZXIub2Zmc2V0KCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJh
bmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVy
LmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCkBAIC00ODUsMTggKzQ4NSwx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2Rl
Lm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwog
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBA
IC01MTAsMjYgKzUxMCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwog
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwog
ICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KQEAgLTU0OCw5ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0
ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwg
c3JjMiwgcmVnVDEpOwogICAgIApAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29t
cGlsZU9wCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwg
cmVnVDAsIHNyYzIsIHJlZ1QxKTsKIApAQCAtNjUwLDggKzY1MCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwpAQCAtNjY0LDggKzY2NCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9OdW1lcmljPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKQEAgLTY4NCwyMCArNjg0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJp
bmc+KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmlu
ZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7CkBAIC03MjgsMTAgKzcyOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9m
ZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9u
KTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZh
bHVlLm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhy
b3duVmFsdWUpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVy
IGlubGluZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5n
CkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
KiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZm
ZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwogICAgIGVsc2UKQEAgLTc0OSw3ICs3NDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5r
KHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUp
IHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsK
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJl
Z3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1
ZVByb2ZpbGUmPihwcm9maWxlKSk7CkBAIC03NjYsMTAgKzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1Qw
KTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxl
SW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZz
ZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFi
bGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3
ICs3OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVj
b2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5z
aWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN3aXRjaFN0cmluZz4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFi
bGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAt
ODY3LDggKzg2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7CiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAg
ICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7
CisgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwog
CiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1
Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9m
ZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ny
Y0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsK
IApAQCAtOTM3LDcgKzkzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBi
eXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRG
dW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxl
ZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2
NSwxMyArOTY1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVS
ZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIs
IHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAg
LTk4NSw3ICs5ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk5Niw3ICs5OTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFYKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hh
c0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rv
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFz
SW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0x
MTA0LDggKzExMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5t
X3JlZ2V4cDsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQpAQCAtMTExNSwxMiArMTExNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5l
d0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNjEsMTEgKzEx
NjEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHBy
Q29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKQEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlc0luZGV4ID0g
Ynl0ZWNvZGUubV9hcmd2Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5t
X2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjE5LDggKzEyMTksOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjM2LDkg
KzEyMzYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjgyLDkg
KzEyODIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKQEAgLTEzMzAsOSArMTMzMCw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJl
bCgpOwpAQCAtMTM0OSwxMCArMTM0OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAK
ICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMzkwLDkgKzEzOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFt
ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRp
b24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApA
QCAtMTUwOSw3ICsxNTA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcg
c2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQg
cmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3Jh
dGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTUyMyw4ICsxNTIzLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVn
VDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJl
Z1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qz
KTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCkpOwogfQogCkBAIC0xNTQ1LDggKzE1NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGxvYWQzMihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSksIHJlZ1QwKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJs
ZVJlZ3MocmVnVDAsIHJlZ1QxKTsKICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKQEAgLTE1
NTYsOSArMTU1Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVz
dF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAg
PSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QwKTsKKyAgICBsb2FkMzIocGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdU
MCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSnVtcCB6ZXJvTGVu
Z3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9T
a2lwKSk7CiAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwpAQCAtMTU4
Niw3ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwpA
QCAtMTU5NCw5ICsxNTk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDIpOworICAgIGxvYWQzMihwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIHJlZ1QyKTsK
ICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCksIHJlc3VsdFJlZ3MpOworICAgIGxv
YWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAK
ICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggYWU1YjZhZDU0Y2E4MTM2ZWNhYzFi
NjQxMWM5NTczNDMwZTVjMWY3YS4uYzQ2Mzc5YTlmOWVjY2FlNzQ0YThlN2FjODA4NTUxZmViZjJm
YTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZl
ciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVm
ZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygp
KTsKICAgICBlbHNlCkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBOb1B0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAg
aWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwog
ICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2Zp
bGUmPihwcm9maWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAppbmRleCAzYjQ4NTBmYWI4ZDZmYWU5MzBlOWU4NjkzYzQ0YmJmNGExZTQzOTNkLi44Y2I1
NWZiNWI3ZWY4NWYwYWMxMTlmMjJlZTJhZDE5MWFjMTkwNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE2NTQsMTggKzE2NTQsMTggQEAgU2xv
d1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9p
bnRlciwgdWludDMyX3QgYnl0ZWMKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1W
YXJzV2l0aFZhbHVlczsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwog
ICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVz
ID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwotICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1Zh
bHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFy
c1dpdGhWYWx1ZXMpOworCisgICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0
SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVl
cywgMCk7CiAgICAgICAgIGludCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMgPSBzdGF0aWNfY2Fz
dDxpbnQ+KENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVW
YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2Fs
KG9wZXJhbmQpICYmIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkgPCBsb2NhbHNV
c2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVz
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVl
c1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CkBAIC0xNzgzLDcgKzE3ODMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aQogICAgIGNvZGVC
bG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0
YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29k
ZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAg
ICAgfSk7CiAKQEAgLTE5MDcsOCArMTkwNyw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Qb3BTY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHNjb3BlCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
IAotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0g
c2NvcGUtPm5leHQoKTsKKyAgICBhdXRvJiBzY29wZVNsb3QgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoVmlydHVhbFJlZ2lzdGVyKHNjb3BlUmVnKSk7CisgICAgc2NvcGVTbG90ID0gc2NvcGVTbG90
LlJlZ2lzdGVyOjpzY29wZSgpLT5uZXh0KCk7CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkSGFzSW5zdGFuY2UpCkBAIC0yNDE2LDcgKzI0MTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpz
VmFsdWUoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CiAgICAgR2V0UHV0
SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9nZXRQdXRJ
bmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gQ2xvc3VyZVZh
ciBmb3IgZ2V0X2Zyb21fc2NvcGUuCkBAIC0yNDU5LDggKzI0NTksOCBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBJbnN0cgogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNW
YWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgp
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUpLmpz
VmFsdWUoKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJ
bmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGRvZXMgbm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVy
IHZhbHVlIGFsaXZlIGluIERGRy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYWI5OWZkOTg3YjA2MWYyZTc2YTE3YzI4YmU4YzRlNzI2
NWEyZDgxNS4uZTcyOWZjMDU4ZWM2OGVjMTFmMzJkNTcwNzg5Yjc3YTA5NzVkMjZmMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3
LDkgKzU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBA
IC05Myw3ICs5Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB7CiAgICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKIApAQCAtMTE3LDggKzExNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogCkBAIC0x
NzcsNyArMTc3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQogewogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjA4LDcgKzIw
OCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChP
cCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91
c1NoYXBlOgogICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBU
aW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTIzNSw3ICsyMzUsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBA
IC0yNDksNyArMjQ5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKICAgICBMYWJlbCBzdG9y
ZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7
CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBA
IC0yNzQsOCArMjc0LDggQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKICAgICAvLyBwcm9wZXJ0
eTogcmVnVDEKICAgICAvLyBzY3JhdGNoOiByZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVy
Q2hlY2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDEsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsK
QEAgLTMwNCwxNCArMzA0LDE0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGJvb2wg
aXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3Zh
bF9kaXJlY3Q7Ci0gICAgaW50IGJhc2U7Ci0gICAgaW50IHByb3BlcnR5OwotICAgIGludCB2YWx1
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1
dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwotICAgICAg
ICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgICAgIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAg
ICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJl
Y3QpCkBAIC0zMzcsMzYgKzMzNywzNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2dldHRlci5vZmZzZXQoKSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zZXR0ZXIub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
ckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKQEAgLTM3NSwxOCArMzc1LDE4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHBy
b3BlcnR5KS5pbXBsKCkpOwpAQCAtMzk1LDkgKzM5NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpA
QCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00NDUsOCArNDQ1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG8KIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwpAQCAtNDg1LDggKzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwpAQCAtNTEzLDkgKzUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OwotICAgIGludCB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01Mzks
NyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhU
aGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CkBAIC01NzEsOCArNTcxLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7
CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVy
ZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKQEAgLTYxNSw4
ICs2MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKQEAg
LTY1Nyw3ICs2NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0
Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3Bl
LCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKK3ZvaWQgSklU
OjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsK
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTY3MCw4ICs2NzAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9s
b2NhbFNjb3BlRGVwdGg7CiAKQEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
fQogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkK
IHsKICAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC03OTAsNyArNzkwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVn
KQogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKK3ZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogewogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7
CkBAIC05MTksMTcgKzkxOSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0Tm90aWZ5V3JpdGUo
c2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7CiB9Ci12b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKK3ZvaWQgSklUOjpl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50
U2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBs
b2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwpAQCAtOTM4LDcgKzkzOCw3IEBA
IHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVz
c09mT3BlcmFuZCwgaW50IHZhbHVlLCBXCiAgICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7CkBAIC05NTAsOCArOTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7
CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNs
b3QoKTsKQEAgLTEwODYsOCArMTA4Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIHJlZ1QwKTsKQEAgLTEwOTksOSArMTA5OSw5IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKQEAgLTExMTAsNyArMTExMCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVu
c2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1
bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKQEAgLTExNTAs
OCArMTE1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwpAQCAtMTE2NCw4ICsxMTY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEludGVybmFsRmllbGQ+KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwpAQCAtMTE3Niw3ICsxMTc2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNlbHNlIC8v
IFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93
bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSkgewpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewpAQCAtMTQy
NSw3ICsxNDI1LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUKICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzSW50KHR5
cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpAQCAtMTUwMSw3ICsxNTAx
LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHkKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwog
ICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggMmNmOTE5OGY0MGVkYWFmNTNhNjFkYmYzMzkwYTZj
N2RiMjg2YTVjMS4uNjk5ODc2OWM1OGIwMGMwYmFjYzVjOTJmMWQ0NzZhYTU3ZTM1MzMwOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtNDUsMTIgKzQ1
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBp
bmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICBp
bmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
RlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKKyAgICAgICAgaW5saW5lIEp1
bXAgZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOwor
ICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBkc3QpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1
bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogI2VuZGlmCiAKICAgICAgICAgdm9pZCBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJl
Z2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTY0LDM2ICs2NCwzNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpbmxp
bmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAg
ewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBwYXls
b2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVy
SW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgcGF5
bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rl
cik7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KQor
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJ
Zk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWws
IHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZp
cnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgfQog
ICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9h
ZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5k
ZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHBheWxv
YWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICByZXR1cm4gYnJhbmNo
MzIoTm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4
KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2Fk
UHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpK
dW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVh
bFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBs
b2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBB
U1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAg
ICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAg
SnVtcCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICBs
b2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQpAQCAtMTAxLDIzICsxMDEs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0g
ICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAg
ICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAg
cmV0dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVy
ZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIGxvYWQ2
NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZDY0
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgSnVtcCBub3RJbnQz
MiA9IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIoZHN0
LCBkc3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAgICAgfQogCi0gICAgaW5saW5lIEpT
SW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25l
ZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZDY0KGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90TnVtYmVy
ID0gYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJh
bmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2Ny
YXRjaCwgZHN0KTsKQEAgLTEzNywyNCArMTM3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CisgICAgICAgIHN0
b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGVudHJ5KSk7CiAjZWxzZQot
ICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAgICAgICAgc3RvcmU2
NChmcm9tLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNlbmRpZgogICAg
IH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCiAgICAgewotICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkpOworICAgICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
ZW50cnkpKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5
KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5KSk7Ci0gICAgICAgIHN0b3JlMzIo
ZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKKyAgICAg
ICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNl
bHNlCi0gICAgICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSkpOworICAgICAgICBz
dG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGVudHJ5KSkpOwogI2VuZGlm
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0YWIyNjcxNTVjMTNkZjM2YTcyNDliNmMzNDMuLjll
M2Q3NjMzZjllY2ExYTQyNmVhMTllNWQ4ZTkyOTg1MzI1ZDllOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC00Myw3ICs0Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAg
ICAgICAgICAgIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7CiAgICAgICAg
ICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBhcmd1bWVu
dHMKLSAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBUcnVzdGVkSW1tMzIoZXhwZWN0
ZWRBcmdDb3VudCArIDEpKSk7CisgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRBcmdDb3VudCArIDEpKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IFNwZWNpYWxpemVkVGh1bmtKSVQoVk0m
IHZtKQpAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAg
ICAgdm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNy
YyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsK
ICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBz
Y3JhdGNoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1
bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2Vs
bChzcmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50
IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewot
ICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1
bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2Fk
SW50MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRl
NmRiNDRiZGFmOWU4ZTgwZjIyYWEuLmFkYTQ1OTZiMWI0ODgzYjc0MDczNTU5YzQ2NTYwN2Q5NDE0
Yjc2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAKQEAgLTQwMSw3ICs0MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
OjpyZWdUMywgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwogI2VuZGlmCiAgICAgaml0Lm1vdmUo
SlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDMp
OwotICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOworICAgIGpp
dC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7
CiAgICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKIAog
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGV4dHJhIHNsb3RzIHdlIGNhbiB1c2UKQEAg
LTQ2Miw3ICs0NjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFy
aXR5Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5yZXQoKTsKICNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpIHNlY3Rpb24gYWJvdmUsIFVTRShKU1ZBTFVFMzJfNjQpIHNlY3Rpb24gYmVsb3cu
CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVu
dEdQUjIpOworICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgSlNJbnRlcmZhY2VKSVQ6
OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6YXJn
dW1lbnRHUFIyKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGV4dHJhIHNsb3Rz
IHdlIGNhbiB1c2UKQEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCk7Cisg
ICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJZk5v
dEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJbnQzMi4KQEAgLTExMzYsOCAr
MTEzNiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlz
Tm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7CiAgICAgCiAgICAgLy8gU2V0IHVwIG91ciBjYWxsIGZyYW1lLgotICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKLSAgICBqaXQuc3RvcmUz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOworICAgIGppdC5zdG9yZTMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKIAogICAgIHVuc2ln
bmVkIGV4dHJhU3RhY2tOZWVkZWQgPSAwOwogICAgIGlmICh1bnNpZ25lZCBzdGFja01pc2FsaWdu
bWVudCA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAlIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSkK
QEAgLTExNTgsNyArMTE1OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAgLy8KICAg
ICAvLyBUaGF0J3MgcmVhbGx5IGFsbCB0aGVyZSBpcyB0byB0aGlzLiBXZSBoYXZlIGFsbCB0aGUg
cmVnaXN0ZXJzIHdlIG5lZWQgdG8gZG8gaXQuCiAgICAgCi0gICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEdQUkluZm86
OnJlZ1QxKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBHUFJJbmZvOjpyZWdUMSk7
CiAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKSwg
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQubHNoaWZ0MzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuYWRkMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSksIEdQ
UkluZm86OnJlZ1QyKTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZN
JiB2CiAgICAgCiAgICAgaml0Lm5lZ1B0cihHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIEdQUklu
Zm86OnJlZ1QzKTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29s
dXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIp
OwogCiAgICAgLy8gVGhyb3cgU3RhY2sgT3ZlcmZsb3cgZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCmluZGV4IDk1MWQ3NjlkNjkyNDliZjNhYzk4ZjQ0
MDgzNDFmNjUxMDJhOTU1YzEuLmFmZWVjYmFjMDdiMWViMTcwZWQ2ZDQ0NjU1MDgyNTdkYTc2NTFi
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCkBAIC0yOSw3
ICsyOSw3IEBACiAvLyAtIFByaW50cyBldmVyeSBpbnN0cnVjdGlvbiBleGVjdXRlZCBpZiBPcHRp
b25zOjp0cmFjZUxMSW50RXhlY3V0aW9uKCkgaXMgZW5hYmxlZC4KIC8vIC0gUHJpbnRzIHNvbWUg
aW5mb3JtYXRpb24gZm9yIHNvbWUgb2YgdGhlIG1vcmUgc3VidGxlIHNsb3cgcGF0aHMgaWYKIC8v
ICAgT3B0aW9uczo6dHJhY2VMTEludFNsb3dQYXRoKCkgaXMgZW5hYmxlZC4KLSNkZWZpbmUgTExJ
TlRfVFJBQ0lORyAwCisjZGVmaW5lIExMSU5UX1RSQUNJTkcgMQogCiAvLyBEaXNhYmxlIGlubGlu
ZSBhbGxvY2F0aW9uIGluIHRoZSBpbnRlcnByZXRlci4gVGhpcyBpcyBncmVhdCBpZiB5b3UncmUg
Y2hhbmdpbmcKIC8vIGhvdyB0aGUgR0MgYWxsb2NhdGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3YTQ2ZThlNTc4OTdmMjc4NWNk
MzM5ZmNiZTJiYzBjOTBjZWRiMi4uOGZjYzVkYjhkODM4YjkyMjIxYjE3MmU4OWE3YzgzMmUwMmM2
ZjBjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5j
bHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb21tb25TbG93
UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29w
ZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsK
ICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBM
TElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRP
cGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJh
bmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKS5qc1Zh
bHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9w
ZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3Rh
bnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
eyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsgfQoraW5s
aW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0K
IAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAog
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAt
MTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAogICAgIGNh
bGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2Mp
OwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBj
YWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJh
bWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkwLDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZUFu
ZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVuZ3RoKTsKIAog
ICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZy
YW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOwor
ICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBD
KHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2Fs
bGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcyNiw3IEBAIGlu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNl
dENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVl
QXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsK
ICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkzMCw3ICsxOTMxLDcgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1f
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9m
aWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNh
bGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9
KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRsZVZhcmFyZ3NDaGVj
a3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gc2lkZVN0YXRl
LmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJbnQzMigpOworCisgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgeworICAgICAgICBsb2FkVmFyYXJn
cyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fYXJndW1lbnRz
KS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfSk7
CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBKU1Zh
bHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFy
YXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2Fs
bEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGNv
bnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Nh
bGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3Ms
ICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJlc3VsdDsKK30KKworaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sKKyAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgeworICAgICAgICBhdXRv
IG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0
KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRCeXRlY29kZS5leGVj
dXRhYmxlQWRkcmVzcygpLCAwKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQnl0
ZWNvZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRleCA9IHBjLm5leHQoKS5pbmRleCgpOworICAgIGF1
dG8gbmV4dEJ5dGVjb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNv
ZGVJbmRleCk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgMCk7CisjZW5kaWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCos
IEVuY29kZWRKU1ZhbHVlKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0
aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZy
YW1lLCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUgcmVzdWx0KQoreworICAgIC8vIFNpbmNlIGFsbCBv
dXIgY2FsbGluZyBjaGVja3BvaW50cyBkbyByaWdodCBub3cgaXMgbW92ZSByZXN1bHQgaW50byBv
dXIgZGVzdCB3ZSBjYW4ganVzdCBkbyB0aGF0IGhlcmUgYW5kIHJldHVybi4KKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29k
ZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBz
aWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsK
KyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIocGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2Rl
KHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDb25zdHJ1
Y3RWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgLy8gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mgc2hvdWxkIG5ldmVyIHJl
dHVybiBpZiB0aGUgdGhpbmcgaXQgd2FzIGNhbGxpbmcgd2FzIGlubGluZWQuCisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywg
cGMpOworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2tw
b2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CitleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShj
YWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+
Ynl0ZWNvZGVJbmRleDsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOwor
CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3ND
aGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFy
Z3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2Fs
bEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRl
U3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9
PSBvcF9yZXQsICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2Vk
IGJ5IGFuIG9wX3JldC4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNh
bGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRl
U3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KHJldHVyblRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0
cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5
cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFt
ZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxs
RnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJh
bWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCBm
Y2FmODBkYTFjYjVjNDZjNTBlZTdmN2Y1ODA1MzNmN2Y1M2NlMDQxLi5jZDQ1YWYxMGIzMTNhOTE2
YjBkM2VlYzBiZGJhMTZlY2Y4ZmQ4YWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuaApAQCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpT
VmFsdWU7CiBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9KYXZhU2Ny
aXB0KHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1F
bnRyeVRvTmF0aXZlKHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CisgICAgdm9pZCBjaGVj
a3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQoKTsKKyAgICB2b2lkIGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCgpOwogfQogCiBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBm
cmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0
Li4wYjllM2RmODYyNzU5ODI3YzQxNzIzMGVkMmRjZGRmMWU1YzkyYzAyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0x
MDkxLDcgKzEwOTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BO
YW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAK
ICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENv
dW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQ
QwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUs
IG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3Ao
Y29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0
dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVw
YXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElm
RXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMK
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0
aW9uW3QzXSwgLm5vRXhjZXB0aW9uCiAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246Cisubm9FeGNlcHRpb246ICAgIAorZW5kCisKK21h
Y3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRj
aCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgIGNhbGxTbG93UGF0
aChmcmFtZVNsb3dQYXRoKQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9t
X3Nsb3dfcGF0aF90cmFtcG9saW5lKQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKICAgICBpZiBK
U1ZBTFVFNjQKICAgICAgICAgbW92ZSByMSwgc3AKQEAgLTE5OTksNiArMjAwMywyMiBAQCBvcChs
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAg
ICBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5j
dGlvbkZvckNvbnN0cnVjdCkKIGVuZCkKIAoraWYgbm90IENfTE9PUCBhbmQgbm90IENfTE9PUF9X
SU4KKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50
cnlwb2ludAorICAgIF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5
cG9pbnQ6CisgICAgICAgIG1vdmUgcjAsIGEyCisgICAgICAgIGNhbGxTbG93UGF0aChfc2xvd19w
YXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpCisgICAgICAgIGJyYW5j
aElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAg
ICAgICBqbXAgcjAKKworICAgIGdsb2JhbCBfY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50
CisgICAgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludDoKKyAgICAgICAgIyBGSVhNRTog
V2UgY2FuIHByb2JhYmx5IGRpc3BhdGNoIHRvIHRoZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0
bHkgYnV0IHRoaXMgd2FzIGVhc2llciAKKyAgICAgICAgIyBhbmQgcHJvYmFibHkgZG9lc24ndCBt
YXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9j
aGVja3BvaW50X29zcl9leGl0KQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhy
b3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIwCitlbmQKIAogIyBM
YXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1
cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdo
ZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IDNk
ZDJlYjQ4Y2JiYTZlZjVjZDk4ODYzOWM3OTExZTIyYTcxMzMxNDguLmJkZTAyYzYzNGIwOTgyYWQ5
YTMyYzRlNDg0ZWYzY2FmNzMwN2I3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC00Miw2ICs0MiwxNyBAQCBt
YWNybyBuZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQogICAgIGptcCBbdDEsIHQwLCBQdHJTaXplXSwg
Qnl0ZWNvZGVQdHJUYWcKIGVuZAogCittYWNybyBzdG9yZVBDKCkKKyAgICBsc2hpZnRpIGNvbnN0
ZXhwciBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQsIFBDCisgICAgc3RvcmVpIFBDLCBM
TEludFJldHVyblBDW2Nmcl0KKyAgICByc2hpZnRpIGNvbnN0ZXhwciBCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50U2hpZnQsIFBDCitlbmQKKworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTElu
dFJldHVyblBDW2Nmcl0sIFBDCisgICAgcnNoaWZ0aSBjb25zdGV4cHIgQnl0ZWNvZGVJbmRleDo6
Y2hlY2twb2ludFNoaWZ0LCBQQworZW5kCisKIG1hY3JvIGdldHVPcGVyYW5kTmFycm93KG9wY29k
ZVN0cnVjdCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIgY29uc3RleHByICVvcGNvZGVTdHJ1
Y3QlXyVmaWVsZE5hbWUlX2luZGV4W1BCLCBQQywgMV0sIGRzdAogZW5kCkBAIC05Miw3ICsxMDMs
NyBAQCBlbmQKIAogIyBBZnRlciBjYWxsaW5nLCBjYWxsaW5nIGJ5dGVjb2RlIGlzIGNsYWltaW5n
IGlucHV0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQuCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChz
aXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBU
YWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkUEMoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwg
UEIKICAgICBnZXQoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2RzdCwgdDEpCkBAIC0zOTAsNyArNDAx
LDcgQEAgZW5kCiAKICMgQ2FsbCBhIHNsb3cgcGF0aCBmb3IgY2FsbCBvcGNvZGVzLgogbWFjcm8g
Y2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQotICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRl
Rm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0zOTksMjAg
KzQxMCwyMCBAQCBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQK
IAogbWFjcm8gY2FsbFRyYXBIYW5kbGVyKHRocm93SGFuZGxlcikKLSAgICBzdG9yZWkgUEMsIEFy
Z3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVT
dGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQogICAgIGND
YWxsMihfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAgICBidHBueiByMCwgdGhyb3dI
YW5kbGVyCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAg
IGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRv
SklURm9yTG9vcCgpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVCgKICAgICAgICAgMSwKICAgICAgICAg
bWFjcm8oKQotICAgICAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0
W2Nmcl0KKyAgICAgICAgICAgIHN0b3JlUEMoKQogICAgICAgICAgICAgcHJlcGFyZVN0YXRlRm9y
Q0NhbGwoKQogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBh
MQpAQCAtNDIxLDcgKzQzMiw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAg
ICAgICAgICAgIG1vdmUgcjEsIHNwCiAgICAgICAgICAgICBqbXAgcjAsIEpTRW50cnlQdHJUYWcK
ICAgICAgICAgLnJlY292ZXI6Ci0gICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFn
T2Zmc2V0W2Nmcl0sIFBDCisgICAgICAgICAgICBsb2FkUEMoKQogICAgICAgICBlbmQpCiBlbmQK
IApAQCAtMjA1Nyw3ICsyMDY4LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNs
b3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRk
cCBjZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNp
emUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCB0MikKLSAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVu
dENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICAgICAgc3RvcmVQQygpCiAgICAgICAgIHN0b3Jl
aSB0MiwgQXJndW1lbnRDb3VudCArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMs
IHNwCiAgICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxs
TGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJU
YWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKaW5kZXggODQwZjg5Yjg4
ZDQyMGNjM2I3NWM4M2Q2YzU3ODI0MTU0MDJmMzM2Ni4uOGY1MDVjYzY5OWNkNGFlMzdlZjM0NTAw
ZmRmYmU2OTk5ODA3Y2RhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJnTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aApAQCAtMTMzLDYgKzEzMywxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tO
b3ROZWVkZWQoKSB7IGNsZWFyTmVlZHNPdmVyZmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVu
Y3RvciYgZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5z
dXJlQ2FwYWNpdHkoY291bnQpOworICAgICAgICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVu
YyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0
eShpbnQgbmV3Q2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCmluZGV4IGY4ZDk3OTk1ODc0NTIyNmE0N2U2ZjhiNmM1NTg2MGMxOGZjZTg3
YTEuLmZmYjc0NTlhNmFkY2NiYWIxNmRhOGE0ZWY4YjE3MTFkODcyYTFhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTE3ODgsNiArMTc4
OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQg
aGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNp
Z25lZCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0K
ICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQog
ICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAK
QEAgLTE4MjAsNiArMTgyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4
dFR5cGUgOiAyOwogICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDogMTsKICAgICB1bnNpZ25l
ZCBtX2NvZGVUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIAog
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNl
TW9kZTsKQEAgLTIwMTgsNiArMjAyMCw3IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxv
Y2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSoKIAogICAg
ICwgbV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAg
ICAgLCBtX2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhjYWNoZWRDb2RlQmxvY2suaGFz
Q2hlY2twb2ludHMoKSkKIAogICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVy
ZXMoKSkKICAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKQEAg
LTIyMDYsNiArMjIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29k
ZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zCiAgICAgbV9wYXJzZU1v
ZGUgPSBjb2RlQmxvY2subV9wYXJzZU1vZGU7CiAgICAgbV9jb2RlR2VuZXJhdGlvbk1vZGUgPSBj
b2RlQmxvY2subV9jb2RlR2VuZXJhdGlvbk1vZGU7CiAgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9j
ay5tX2NvZGVUeXBlOworICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVj
a3BvaW50czsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21l
dGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9yYXJlRGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBhYjE4ODlkMDE2NzU5YzFhNTA4Y2MzZmZmZDlkMGU5
N2JhZDg3NDBkLi5hYzM5NjRlN2M0ZWMyNmQ0MTY3Y2YxZjE5YTUyMTViNjZjYjAzNzcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
QEAgLTk5LDggKzk5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUg
R0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCi0j
ZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCisj
ZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpKQorI2Rl
ZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQpKQogCiAjZGVmaW5lIFJF
VFVSTl9UV08oZmlyc3QsIHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAgICAgICBcCkBAIC0xMTQwLDggKzExNDAsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVu
dmlyb25tZW50PigpOwotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNj
b3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7
CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VU
X0MoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRp
YWxWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAg
QVNTRVJUKGluaXRpYWxWYWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBq
c1REWlZhbHVlKCkpOwpAQCAtMTE1Niw4ICsxMTU1LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1c2hfd2l0aF9zY29wZSkKICAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRl
Y29kZS5tX25ld1Njb3BlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBD
SEVDS19FWENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVu
dFNjb3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3Vy
cmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3Bl
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIG5ld1Njb3BlKSk7CiB9CiAKQEAgLTExNjYsNyAr
MTE2NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lz
dGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwogICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2Nv
cGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lz
dGVyOjpzY29wZSgpOwogICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRl
bnQpOwogCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTgwLDcgKzExNzgsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6
OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0
ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVk
U2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKICAg
ICAvLyBQcm94eSBjYW4gdGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQcm94eSBpbiB3aXRoIHN0
YXRlbWVudCdzIEB1bnNjb3BhYmxlcy4KICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTE0MTcs
NyArMTQxNSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQog
ewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVm
ZmVyPigpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGJ5
dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgQVNTRVJUKGJ5dGVj
b2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5LmlzQ29uc3RhbnQoKSk7CiAgICAgSlNJbW11dGFibGVC
dXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1
dHRlcmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5qc1ZhbHVlKCku
YXNDZWxsKCkpOwogICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIApAQCAtMTQzNiw3ICsxNDM0LDcgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIC8vIFdlIGFs
c28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVh
ZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgLy8g
YSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0g
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1
dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7
CisgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJs
ZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogCkBAIC0xNDgxLDQgKzE0NzksMTYg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NwcmVhZCkKICAgICBSRVRVUk4oSlNGaXhlZEFy
cmF5OjpjcmVhdGVGcm9tQXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwgYXJyYXkpKTsKIH0KIAorZXh0
ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpOworZXh0ZXJuICJD
IiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpCit7CisgICAgZGF0YUxvZ0xu
KFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkpKTsKK30KKworLy8gZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CisvLyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0
dXJuVHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjLCApCisvLyB7CisKKy8vIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRi
ZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQx
Yjc4ZTYzMTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hh
ciogZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBj
b25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7
Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtNDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25z
dHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29u
c3RydWN0RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBj
b25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0K
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVl
IG5ld1RhcmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmEx
MWQ3Y2VlMjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2Jh
ZWI2Y2FjMTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uc3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnN0cnVjdERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAK
IC8vIENvbnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENh
bGxEYXRhIGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNz
YWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJn
TGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpT
T2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBD
b25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFs
dWUgbmV3VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0
cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSwgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFl
ZmFmZDQzYTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcApAQCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJn
dW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChp
bmRleCwgaW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50
czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9t
YXBwZWRBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5n
dGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAg
Zm9yIChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0g
Z2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBv
ZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJn
dW1lbnRzU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEu
LjhkOTY0MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1
bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAg
ICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1
ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVl
YjI3MmNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9k
aWZpZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVu
Z3RoKTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5k
ZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0
ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2Rp
ZmllZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCmluZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFi
ZjVmMmVlMTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAt
Mjk3LDcgKzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFy
Z3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTMwNSw5ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFy
Z3VtZW50KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5y
KGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwor
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBv
ZmZzZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKaW5kZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5
MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJh
eTo6ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1l
bnRCdWZmZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsK
IH0KIAotdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZQogICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KS5hdCh0aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBv
ZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAg
ICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVB
c0RvdWJsZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwx
MSArMTI5NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZz
ZXQpID0gdi5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYu
Z2V0KCk7CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9i
YWxPYmplY3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0
KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmlu
ZGV4IDMxNzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5
MjU0Y2MxYTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9u
T2JzZXJ2YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ZpeGVkQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhl
ZEFycmF5LmNwcAppbmRleCAyOGNiMjhlNzY5NDcxMTIzODVjNzRmNTViNTNlNTBjZmIyNmRmMTM4
Li5hOTFlNjNkY2ZkOTBiZWQxZmZkZmM5YTQ5OWYzMjdhZWIzZTA5MTEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKQEAgLTQyLDEzICs0Miwx
MyBAQCB2b2lkIEpTRml4ZWRBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmpl
Y3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5zaXplKCkpOwogfQogCi12b2lkIEpTRml4ZWRBcnJh
eTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKK3ZvaWQgSlNGaXhlZEFycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IG1fc2l6ZSkKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAgICAg
ICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGaXhlZEFycmF5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJy
YXkuaAppbmRleCBjZDc2ZWIzZDNmMjAyMjQzZmViN2U3OTllMzNlMDFiM2Y4MTc2NmMyLi41ZWIw
NTMxZGU5MzRmNjg1ODg3YzA1NTNkYWU3MjE3NTg5OGMwNjBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTRml4ZWRBcnJheSkpOwogICAgIH0KIAotICAgIHZv
aWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAg
IHN0YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDlj
MC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CiAgICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7
CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkp
ID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggMjAwOGU0NzlmMDUwYzVmOWY5ODk3
ODA5ODJlZWNhZWQxMWM1ODJiNy4uODlmNTI5OWQ2YzEyNTg4NGU5MzA3MzgwMzE3NzdiZjYwNDgw
MDg2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0
YWJsZUJ1dHRlcmZseS5oCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZh
YTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6
OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9IG1fdm07CiAgICAg
aWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0tPmhhc0No
ZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hl
Y2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAgICB2bS0+ZHJhaW5N
aWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5
NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5j
cHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1
dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxPYmplY3Qt
PnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhl
Y3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3Qt
PnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkp
LT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5t
X21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhl
Y3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+
Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkp
LmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAgICByZXR1
cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKaW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEwNTBjZGU4NmNiMjUyMWU1NDExNi4uM2Q3NzU3
YjJlMTdkZGMxYzE4Y2FmMTEzNGNhOTk0MTI4OGI1ZDQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMiArNTA5LDYgQEAgc3RhdGljIHZvaWQg
cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZl
ZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2
ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IE9w
dGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplOwogCi0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAvLyBGSVhNRTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3
b3JrIG9uIDMyLWJpdDoKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc3OTU2Ci0gICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNl
bmRpZgotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9u
czo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggMDNmMjg1MjQ0ZGI5OTAyZWFiYTk2ZDY5NzdlM2I3
ZDM5MTk3ZGU1Mi4uNGQxNTZjZjczZGZjZDU0ZmZhODNkY2Q3OThlZDdlYWQ2YzViYWJhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC0xNDksNyAr
MTQ5LDYgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBm
YWxzZTsKICAgICB2KEJvb2wsIHZlcmJvc2VDb21waWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdmVyYm9zZUZUTENvbXBpbGF0aW9uLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihCb29sLCBsb2dDb21waWxhdGlvbkNoYW5nZXMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KEJvb2wsIHVzZVByb2JlT1NSRXhpdCwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgcHJpbnRFYWNoT1NSRXhpdCwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmFsaWRhdGVHcmFwaCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCAwODFkOTc4YTdiMmE2MjY2YWM1NTJjMzc5ZDM4
NDUwMDVkYzExZjEwLi4zYzc0MGQ0OGY2MjQxYjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5ZGIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVu
dChWTSYgdm0sIHVpbnQzMl90IGkpCiAgICAgICAgIHN0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhd
LmNsZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1l
bnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVj
dCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
LmgKaW5kZXggZjg1ZTQ3ZGZiZWU4Y2E3YzM3MDRmMjllZDRjYjFiNGU5NzIwNDQ1Ny4uZTU4Y2Iy
MmVmZDQ4YzY3NGJmNWIxYjExMjgwYjUxYWJjMGRlMDg0YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz46
OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fdGFibGUtPmxlbmd0aCgpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKaW5kZXggYWYwYWE0ZTczNWQ2ZDhiYjQ4OWU4MDM4MWQwMGI2NTEyZmVlZjgz
MC4uZjVmMDFiZDI4NzQwZGI2MWRmMmY4MDQ0NzRmZTc2MDc4NDljOGJkZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkJvb2xl
YW5PYmplY3QuaCIKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0YWJsZXMuaCIKICNpbmNsdWRlICJC
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTEwMzEsNiArMTAzMiwyMCBAQCB2
b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNl
cnZhdGl2ZVJvb3RzKQogfQogI2VuZGlmCiAKK3ZvaWQgVk06OmFkZENoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZT4mJiBwYXlsb2FkKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2hlY2twb2ludFNpZGVT
dGF0ZS5hZGQoY2FsbEZyYW1lLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9s
ZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBzaWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRTaWRlU3Rh
dGUudGFrZShjYWxsRnJhbWUpOworICAgIHJldHVybiBzaWRlU3RhdGU7Cit9CisKIHZvaWQgbG9n
U2FuaXRpemVTdGFjayhWTSYgdm0pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5pdGl6
ZVN0YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAppbmRleCBhZjIwMTk4MGU1MGE5M2JiNjAxOGZiMzZkYmRmNWZiMTQ0ODdlNDMxLi42NDNmYThk
NGI5YzMyOGVmZTA2NDJhZjZlNWZmOGI3YWI0MjExMTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKQEAgLTEwMyw2ICsxMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEJ1aWx0
aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBD
YWxsRnJhbWU7CitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2Rl
QmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTk0
OSw2ICs5NTAsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKIAorICAgIHZvaWQgYWRkQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZShDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGU+JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4g
ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKik7CisgICAgYm9vbCBoYXNDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja3BvaW50U2lkZVN0YXRl
LnNpemUoKTsgfQorCiAgICAgVk1FbnRyeVNjb3BlKiBlbnRyeVNjb3BlOwogCiAgICAgSlNPYmpl
Y3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CkBAIC0xMTk5
LDYgKzEyMDQsNyBAQCBwcml2YXRlOgogICAgIExvY2sgbV9zY3JhdGNoQnVmZmVyTG9jazsKICAg
ICBWZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IG1fc2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6ZV90IG1f
c2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgeyAwIH07CisgICAgSGFzaE1hcDxDYWxsRnJhbWUqLCBz
dGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNrcG9pbnRT
aWRlU3RhdGU7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5h
YmxlZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJv
bEZsb3dQcm9maWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3
ZGQ1YTU2Ny4uMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdmMTkyNDczNTJjMGY4YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgK
QEAgLTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYg
Y29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KICAgICBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdHJ1Y3Rp
b25zOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKGludCBp
bmRleCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoT3B0aW9uczo6ZHVt
cEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlw
ZXNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07CisgICAgICAgIHJldHVybiBt
X2NvbnN0YW50VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsKICAgICB9CiAKICAgICB2b2lk
IHNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmlu
ZGV4IGFiMTc0MDZhZmI3MzRhNzA4ZGYxMWRiYjY4MDE1MThiNzY2NWZiNDIuLmVlMmIzMjdkMmFm
NTQ3MTk2ODc5NjlhYzI1MmE4NGM3ODhlZjZlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtMjQyLDYgKzI0Miw5IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9y
PiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCisgICAgLy8gV2UgbmVlZCB0aGlz
IGZvciBhdXRvZ2VuZXJhdGVkIHRlbXBsYXRlcyB1c2VkIGJ5IEpTIGJ5dGVjb2Rlcy4KKyAgICB2
b2lkIHNldFVzZXNDaGVja3BvaW50cygpIGNvbnN0IHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7IH0KKwogICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayop
IHsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1Bh
dGhzLmNwcAppbmRleCA1YThlYmI4MWQyZGJlZTAzYWM2OTMyYWNlZjZmYmI0NzI3MmVjODRiLi5j
MjQwNjkwOTM5ZDJjZTAxNGExNzNiMmUzNzljMmRiMTk5MmQzZDQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzUsNyArNzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdp
c3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBK
U1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIu
b2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0
Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhX
YXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJs
b2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IGE0OTczZWJiYTA0
NjhhNjVkYjk1YzhiYTgzMjY0YWQ4ZmE4NmRkZDkuLjdhNzI1YjBiYzE1YjZlOWI2NTY2MTVhZTY5
N2UwZmM4N2Y4M2QxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVu
dHJ5cG9pbnRTbG93KCkKIAogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGpp
dC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnN0b3JlNjQoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcg
cmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CkBAIC0yNDMsNyArMjQzLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2Fs
bEVudHJ5cG9pbnRTbG93KCkKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBtaXNtYXRj
aGVkIGFyaXR5CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NjU2NAogICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpC
ZWxvdywKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpICsgMSkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxKSkpOwogCiAgICAgaWYg
KHVzZVRhZ1JlZ2lzdGVycygpKQogICAgICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tS
ZWdpc3RlcnMoKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQog
ICAgIC8vIDIuIFdlIG5lZWQgdG8ga25vdyB0byByZXN0b3JlIHRoZSBwcmV2aW91cyB3YXNtIGNv
bnRleHQuCiAgICAgaWYgKCFtX2pzVG9XYXNtSUNDYWxsZWUpCiAgICAgICAgIG1fanNUb1dhc21J
Q0NhbGxlZS5zZXQodm0sIHRoaXMsIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0KCksIHRoaXMpKTsKLSAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogCiAg
ICAgewogICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGp1c3QgZG8gYW4gaW5kaXJlY3Qg
anVtcC4gQnV0IHdlIHNob3VsZCB0ZWFjaCB0aGUgTW9kdWxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9CaXRtYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0
MjYzMmMzZWZjMDAwYmQxOGU5ZTM2OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5
MmUzNjZhNzUwNTRkY2M2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAg
ICBzaXplX3QgbmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFy
KHNpemVfdCk7CiAgICAgdm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAg
aW50NjRfdCBmaW5kUnVuT2ZaZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXpl
X3QgY291bnQoc2l6ZV90IHN0YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBj
b25zdDsKQEAgLTEwMiw2ICsxMDMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
PShib29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5k
ZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90
IG1faW5kZXg7CkBAIC0xMTEsNiArMTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNp
emUpOyB9CiAgICAgCisgICAgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0
IGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRD
bGVhcihCaXRtYXAmKTsKICAgICB2b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAt
MjI0LDYgKzIzNCwxMyBAQCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjpjbGVhckFsbCgpCiAgICAgbWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwog
fQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Citpbmxp
bmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRz
W2ldOworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
CiBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJs
eVVuc2V0KHNpemVfdCBzdGFydCkgY29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5l
IGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRt
YXAmIG90aGVyKSBjb25zdAogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVt
cGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8g
Qml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+
IGl0ZXJhdG9yCit7CisgICAgQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIGluZGV4KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5
cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7Cisg
ICAgcmV0dXJuICgqY29uc3RfY2FzdDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhp
cykpW2luZGV4XTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgogaW5saW5lIHVuc2lnbmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhh
c2goKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5o
IGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCmluZGV4IDg4NWI3YjE3M2IxMWE2MDFi
ZTI5YTMzMmFiOWQyYTQxNGQ1NjIxMjIuLmEzOGM5NmMzNDkzZTlkMTBkNTZhODBiNWJkNzVmMWQ0
YTZjYmYzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKQEAgLTQ2NCw2ICs0NjQsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKKyAgICBGYXN0Qml0UmVmZXJlbmNl
JiBvcGVyYXRvcnw9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgPSB2YWx1ZSA6
ICp0aGlzOyB9CisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3ImPShib29sIHZhbHVlKSB7
IHJldHVybiB2YWx1ZSA/ICp0aGlzIDogKnRoaXMgPSB2YWx1ZTsgfQorCiBwcml2YXRlOgogICAg
IHVpbnQzMl90KiBtX3dvcmQgeyBudWxscHRyIH07CiAgICAgdWludDMyX3QgbV9tYXNrIHsgMCB9
OwpAQCAtNTA5LDcgKzUxMiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNs
ZWFyQWxsKCk7CiAgICAgfQotICAgIAorCisgICAgLy8gRm9yIHRlbXBsYXRpbmcgYXMgVmVjdG9y
PGJvb2w+CisgICAgdm9pZCBmaWxsKGJvb2wgdmFsdWUpIHsgdmFsdWUgPyBzZXRBbGwoKSA6IGNs
ZWFyQWxsKCk7IH0KKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpIHsgcmVzaXplKG5ld1Np
emUpOyB9CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBi
ZWdpbiwgc2l6ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgYml0dmVjdG9yIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGViZDhmMjgyYTBlMjI0ZTY4OTgwZmJiZGYyM2NlNmQz
MDIzZjQyYy4uNjNhNTYyMTA1YTI1NjY3NTVhOGU5ODVlMzVkZWZlNjY0MGU5MDE0NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE5LTEyLTEzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgor
CisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9m
IGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNTIzMgorCisgICAgICAgIFJlbW92ZSBwcm9iZSBPU1IgZXhpdCBvcHRpb24gc2luY2Ug
d2UgYXJlIG5vdCB1c2luZyB0aGF0IGFueW1vcmUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgor
CiAyMDE5LTEyLTEzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLiBBZGQgbXlzZWxmIGFzIGEgY29tbWl0dGVyLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggNTE0MjNhNzU4YWY4MjA0MmU5NThhMTg4ZTYyZDczZmM3
MDgzNTViNy4uNjU1Nzc0MGY3ZGExN2UwMWU1YmQxMjI0OTNjYjAzN2I3ZjRlY2I3ZSAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC00OTgsNyArNDk4LDYgQEAgTk9fQ0pJVF9PUFRJ
T05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRl
cldhcm1VcD0xMDAKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZlbD0xIl0KIEIz
TzBfT1BUSU9OUyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFseXNp
cz0xMDAiLCAiLS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0gWyItLXVzZUZU
TEpJVD10cnVlIl0KLVBST0JFX09TUl9FWElUX09QVElPTiA9IFsiLS11c2VQcm9iZU9TUkV4aXQ9
dHJ1ZSJdCiBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgPSBbIi0tZm9yY2VPU1JFeGl0VG9MTElu
dD10cnVlIl0KIAogcmVxdWlyZV9yZWxhdGl2ZSAid2Via2l0cnVieS9qc2Mtc3RyZXNzLXRlc3Qt
d3JpdGVyLSN7JHRlc3RXcml0ZXJ9IgpAQCAtNzEzLDcgKzcxMiw3IEBAIGRlZiBydW5GVExOb0NK
SVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkZUTE5v
Q0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwt
bm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1
ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9y
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRf
T1BUSU9OICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1j
aml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwg
Ii0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVROb1B1dFN0YWNrVmFsaWRhdGUoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOSw3ICs3MjgsNyBAQCBkZWYgcnVuRlRM
Tm9DSklUT1NSVmFsaWRhdGlvbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAK
IGRlZiBydW5ERkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigi
ZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9O
UyArIFBST0JFX09TUl9FWElUX09QVElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VS
X09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJ
VF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVu
REZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAyMjcz
NjQwODgwM2NiYTViNmJhYjY1NjQzN2U4YmI0ZWIxNzhhMDNkLi5iMDI1ODhkMTg2OTQ1ZTZkMWJm
NjQzOTZjYjI1YjcyZjdlOWJhZjNiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTEyLTEzICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxk
IGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2xvYWQtdmFyYXJn
cy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanM6CisgICAgICAgIChjaGVja0Vx
dWFsKToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRs
ZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQt
c3RyaWN0LmpzOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisKIDIwMTktMTItMTIgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBXYXNtIGluaXQtZXhw
ciBzaG91bGQgcmVqZWN0IG11dGFibGUgZ2xvYmFscwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pT
VGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJp
Y3QuanMKaW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3
MzIzMTkwY2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5q
cworKysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5k
LWV4aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwg
YikgewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2
ZXJzdXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEu
Yy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBp
ZiAoYS5jLmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIg
KyBiLmMubGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAg
ICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3Vz
ICIgKyBiLmM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385672</attachid>
            <date>2019-12-13 20:35:48 -0800</date>
            <delta_ts>2019-12-13 20:55:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191213203536.patch</filename>
            <type>text/plain</type>
            <size>617571</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YmE3Mzg4NmUyZDg3YTUxNzhlYjQwMWRlZWM5ZDUwNGUxMThkYzMwLi4xNWNhMTNkMWEyYzNkODU5
Yzg0Y2MyNDI5Y2ZjMDdkODI5ZTJjZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NzEgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGUgdGhlIHByb2JlLWJhc2VkIE9TUiBleGl0
IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uIHRodXMgdGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQgY29kZSBzaW5jZSBpdAorICAgICAgICB3b3VsZCBiZSBhIG5vbi10cml2aWFs
IGFtb3VudCBvZiB3b3JrIHRvIGdldCBjaGVja3BvaW50cyB3b3JraW5nCisgICAgICAgIHdpdGgg
cHJvYmUgT1NSLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAg
ICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUluZGV4OjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6YXNCaXRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjplbnVt
VmFsdWVzRXF1YWxBc0ludGVncmFsKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZSk6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNBbHdheXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNMaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZUlu
ZGV4Rm9yRXhpdCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1UbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6
OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29k
ZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6dW5tYXBPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAg
ICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJh
bmQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6Ok9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpr
aW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kOjp2aXJ0dWFsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1RtcCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNI
ZWFkZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0FyZ3VtZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJpdHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZM
b2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZUbXBzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXApOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omxv
Y2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRG
b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldEZvck9wZXJh
bmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvckluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdl
dENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6On5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcjo6flZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCk6CisgICAg
ICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpk
dW1wKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBh
cnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpm
bHVzaERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNo
T3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFu
dG9tTG9jYWxEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0
T1NSKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RG
R0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5k
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5C
eXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRs
ZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9j
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdU
b0NoZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5m
by5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
YWxsZWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xh
eW91dFBoYXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5k
bGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVu
a3MuaDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JF
bnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
OjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBm
dGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjptYXhVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjptaW5VbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptYXhTaWduZWQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bWluU2lnbmVkKToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50
cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBn
ZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmN1cnJlbnRWUEMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKEpTQzo6Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU6OmdldFRtcCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6c2l6ZU9m
VmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklU
OjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9y
ZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudElu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFs
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlND
OjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRo
dW5rSklUKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRjaE5leHRJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVy
Zmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OmR1bXBSZWdpc3Rlcik6CisgICAg
ICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaXhlZEFycmF5LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNGaXhlZEFycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNGaXhlZEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVu
dHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJlbGVhc2VM
b2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6Cisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjphZGRDaGVja3BvaW50
T1NSU2lkZVN0YXRlKToKKyAgICAgICAgKEpTQzo6Vk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpoYXNDaGVj
a3BvaW50T1NSU2lkZVN0YXRlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6Z2V0Q29u
c3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6Z2V0
Q29uc3RhbnRUeXBlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpzZXRVc2VzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3cpOgorCiAyMDE5LTEyLTEzICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFN0cnVjdHVyZSBzaG91bGQgaGF2
ZSBhIGJsb29tIGZpbHRlciBvZiBzZWVuIGlkZW50aWZpZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRiYThlMGE3YjE3NDYw
MTA3N2U2NTNiZmVmZmRhMWVlNDM4YjRjYWQuLjM0YzIyYzZkOGQ4MGE2N2IxY2UzYmU1NmZkNWEz
NjQxNTMxMTk5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxl
ciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUg
YWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAg
IChXVEY6OldvcmRUeXBlPjo6aW52ZXJ0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVy
YXRvcik6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IgY29uc3QgY29uc3QpOgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVy
YXRvciY9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6ZmlsbCk6CisgICAgICAgIChX
VEY6OkZhc3RCaXRWZWN0b3I6Omdyb3cpOgorCisyMDE5LTEyLTEzICBLZWl0aCBNaWxsZXIgIDxr
ZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUg
dG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRmFzdEJpdFZlY3RvciAobW9yZSkgdGVt
cGxhdGUgY29tcGF0YWJsZSB3aXRoIFZlY3Rvcjxib29sPiBzbyBvdGhlciBjb250YWluZXJzCisg
ICAgICAgIHVzaW5nIGEgVmVjdG9yPFQ+IG1lbWJlciBjYW4gdXNlIEZhc3RCaXRWZWN0b3IgaW5z
dGVhZCBpZiB0aGUgVCBpcyBib29sLgorCisgICAgICAgIEFsc28sIGFkZCBzb21lIGhhbmR5IG1l
dGhvZHMgdG8gQml0bWFwLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RG
OjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3Ip
OgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAg
ICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJlbmNl
OjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0b3Im
PSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RGOjpG
YXN0Qml0VmVjdG9yOjpncm93KToKKwogMjAxOS0xMi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBIZWFwOjpmaW5hbGl6ZSBmdW5jdGlvbiB0aGF0
IHRha2VzIFdURjo6RnVuY3Rpb248dm9pZCgpPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBmOGMxYjRhZTU1NmI1
MzRjMmFiMTAxYWMzOTBiYTcxMWI0NWNiYWVhLi45ZWFkNjUzZmFhYWIxODkzZWI5MmRkMDJlOTc1
Nzk2NmRmYTk5YWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtNjQsNiArNjQsNyBAQCAkKFBST0pFQ1RfRElS
KS9kaXNhc3NlbWJsZXIvdWRpczg2L29wdGFibGUueG1sCiAkKFBST0pFQ1RfRElSKS9kaXNhc3Nl
bWJsZXIvdWRpczg2L3VkX2l0YWIucHkKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bcmd1bWVu
dC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0Fzc2VydGlvbi5yYgorJChQUk9KRUNUX0RJ
UikvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvRFNM
LnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvRml0cy5yYgogJChQUk9KRUNUX0RJUikvZ2Vu
ZXJhdG9yL0dlbmVyYXRlZEZpbGUucmIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MTYxZDcwNWNjMmUzYzYxOWVjNTQ0Yjc2NmViNzRkMjhhODRmODhjNi4uMDFiMjg3MTQ0MDY4MzFj
NWE2NTIyNmMzMjc2NjdlN2U5ZTE2ODhkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTkzMiw2ICs5MzIsNyBAQAogCQk1MzMzQkJEQjIxMTBGN0QyMDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAgKi87IH07CiAJCTUzMzNCQkRDMjExMEY3RDkwMDc2MThFQyAvKiBERkdTcGVjdWxh
dGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwICovOyB9
OwogCQk1MzMzQkJERDIxMTBGN0UxMDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEY0QzE0
MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi87IH07CisJCTUzMzhF
MkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEUyQTYyMzk2RUZF
QzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0MUZDNzIxREFDMzQzQzAwRTdF
NEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21C
b3VuZHNDaGVja1ZhbHVlLmggKi87IH07CiAJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0NjM4NzUxRTcw
RERFQzAwRjEyQUMxIC8qIFByb21pc2VUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VU
aW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0zNjAxLDYgKzM2MDIsNyBAQAogCQk1MzE4MDQ1RDIyRUFBRjBGMDA0QTczNDIgLyogQjNFeHRy
YWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNFeHRyYWN0VmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNFeHRyYWN0VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSB0ZXN0YXBpLmNwcDsgcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNjMxQjMyMTg3NzdBNTAwN0I4MTkxIC8qIEphdmFTY3JpcHRD
b3JlLm1vZHVsZW1hcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9ICJzb3VyY2Vjb2RlLm1vZHVsZS1tYXAiOyBwYXRoID0g
SmF2YVNjcmlwdENvcmUubW9kdWxlbWFwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2MzAwNEQ1
MDBBIC8qIFdhc21PcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9w
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0
RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQx
RkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGgg
PSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zNjE1LDYgKzM2MTcsOSBAQAogCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2QTcgLyogVHlw
ZWRBcnJheUNvbnN0cnVjdG9yLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRDNDU3RDFCQzcy
NTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkY4MjM2M0M1NUQwMDU0NTI0
RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNj
cmlwdDsgcGF0aCA9IFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzREOUJGOTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJzLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSXRlcmF0b3JIZWxwZXJz
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGQTIzNjNDNTVEMDA1NDUy
NEQgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBNYXBJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTM0RTAzNEQxRTRENEIxNjAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzRFMDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NDYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNTMxRTUzQkQyOTAwMjEzRjY0IC8q
IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTk1Myw2ICs1OTU4LDcgQEAKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkg
LyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJQTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxG
cmFtZUNsb3N1cmUuaCAqLywKIAkJCQlGRUEzQkJBNzIxMkI2NTU4MDBFOTNBRDEgLyogQ2FsbEZy
YW1lSW5saW5lcy5oICovLAorCQkJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZS5oICovLAogCQkJCTE0MjlEODVCMEVEMjE4RTkwMEI4OTYxOSAv
KiBDTG9vcFN0YWNrLmNwcCAqLywKIAkJCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xv
b3BTdGFjay5oICovLAogCQkJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNr
SW5saW5lcy5oICovLApAQCAtODU4Niw3ICs4NTkyLDkgQEAKIAkJCQlBNTI3MDQ4NTFEMDI3Qzg4
MDAzNTRDMzcgLyogR2xvYmFsT3BlcmF0aW9ucy5qcyAqLywKIAkJCQlFMzVFMDM2MTFCN0FCNDg1
MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovLAogCQkJCUUz
M0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAq
LywKKwkJCQk1MzREOUJGOTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJzLmpzICov
LAogCQkJCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVyYXRvclByb3RvdHlwZS5qcyAq
LywKKwkJCQk1MzREOUJGQTIzNjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCiAJCQkJNzAzNTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5qcyAq
LywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovLAog
CQkJCUE1MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywK
QEAgLTg1OTcsNiArODYwNSw3IEBACiAJCQkJN0NGOUJDNUYxQjY1RDlCMTAwOURCMUVGIC8qIFJl
ZmxlY3RPYmplY3QuanMgKi8sCiAJCQkJNjU0Nzg4NDIxQzkzN0QyQzAwMDc4MUEwIC8qIFJlZ0V4
cFByb3RvdHlwZS5qcyAqLywKIAkJCQk4NDkyNUE5QzIyQjMwQ0M4MDBEMURGRkYgLyogUmVnRXhw
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCisJCQkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1
MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdEMUM0MTg0MTkw
MDRCRDdCRiAvKiBTZXRQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNjAxQjY1RDlCMTAwOURC
MUVGIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzYxMUI2NUQ5QjEwMDlE
QjFFRiAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKQEAgLTkwOTgsNiArOTEwNyw3
IEBACiAJCQkJRkUxQkQwMjExRTcyMDI3OTAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUMxNjAzMjIzMzlFOUY5MDBBMDRDQjggLyogQ2VsbFNpemUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMUMzRERBMUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAw
QUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMjYxQUE5MDk1
NjAwRDMzQjMzIC8qIENsb25lZEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKaW5kZXggNTZkOGEwN2RiZmNkZWZkZWM3NjA4OWExM2RmYjUwMTFiNjRiMjVkMy4uNjg4
NDA4M2UwZmMxNzZhMjEzY2Q2NjgyNzY0YjJmNGViMzBjNmY2YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBA
IC0yMzksMTMgKzIzOSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9J
TlRFUihtX3ZhbHVlKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgotICAgIGV4
cGxpY2l0IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKLSAgICAg
ICAgOiBtX3ZhbHVlKHVudGFnQ29kZVB0cjx0YWc+KGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsK
LSAgICB9Ci0KICAgICBjb25zdCB2b2lkKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1
MzJhNzFlYzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMz
OWI2YzZkYTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAg
KzI2MywyMCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxh
dGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3Qg
Y2hhciogbmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0
X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7
Ci10eXBlZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5k
PGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9w
ZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVm
IEIzT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4
X3Q+IEludDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxk
ZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2
YWx1ZSkgQjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1Zh
bHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRl
V2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJh
bmRzKQogewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlw
ZT4oMC4pIH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRl
cmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+
IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZs
b2F0aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4g
b3BlcmFuZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAg
ICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9w
ZXJhbmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4Mzg3OWQyZDZjODFm
YjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJC
YXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBtX291dC5wcmludGYo
IiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAgICBtX291dC5wcmlu
dGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQgQnl0ZWNvZGVEdW1w
ZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLUNT
dHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0CitD
U3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rl
ciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChyKSkKKyAgICBp
ZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7CiAKLSAg
ICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAgcmV0dXJuIHRvQ1N0
cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgsMTAgKzk4LDEwIEBA
IGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0
cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0
CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENvbnN0YW50
KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZpcnR1YWxSZWdpc3Rl
cihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENvbnN0YW50KHJl
Zyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIpIik7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgQnl0ZWNvZGVEdW1w
ZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6
Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI6OmNv
bnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZhbHVlID0gZm9ybWF0
Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2NrLT5nZXRDb25zdGFu
dChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEwNzVlZmUwM2VlLi5l
ZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAtNjEsNyArNjEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnByaW50KHYpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1bXBlckJhc2UoUHJp
bnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lk
IGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNT
dGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0IG92
ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIENT
dHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBDU3RyaW5n
IGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAgQmxvY2sqIG1fYmxv
Y2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgSlNDOjpCeXRl
Y29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVyOwogCiAgICAgdm9p
ZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29uc3RhbnQoVHlwZSwg
dWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3ZGMwZjlmMjZlMTkx
MzdlYjJjMzE1OWIuLmI4MTJmYjQxYmY5YWJlNjY0ZjQ0NzU5MTNlOWNlMzQyOWRiNDEyZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAK
QEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlSW5kZXguaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzM0LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiB2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3Bv
aW50KCkpCisgICAgICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlSW5kZXguaAppbmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRm
Li42MDg3MDBjNTdhZDcwMTcyYzJjYjAwZjEwOWE1YzQxMzE3NDJkNWIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFt
OwpAQCAtMzMsMjggKzM0LDM5IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQ29kZUJsb2NrOworCiBjbGFzcyBCeXRlY29kZUluZGV4IHsKIHB1YmxpYzoK
ICAgICBCeXRlY29kZUluZGV4KCkgPSBkZWZhdWx0OwogICAgIEJ5dGVjb2RlSW5kZXgoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fb2Zmc2V0KGRlbGV0ZWRWYWx1
ZSgpLmFzQml0cygpKQorICAgICAgICA6IG1fcGFja2VkQml0cyhkZWxldGVkVmFsdWUoKS5hc0Jp
dHMoKSkKICAgICB7CiAgICAgfQotICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIDogbV9vZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAg
eyB9CiAKLSAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQot
ICAgIHVpbnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgZXhw
bGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgdWludDhfdCBjaGVj
a3BvaW50ID0gMCkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMocGFjayhieXRlY29kZU9mZnNldCwg
Y2hlY2twb2ludCkpCisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMpOworICAgIH0KKworICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVtYmVyT2ZDaGVja3BvaW50cyA9IDQ7CisgICAg
c3RhdGljX2Fzc2VydChoYXNPbmVCaXRTZXQobnVtYmVyT2ZDaGVja3BvaW50cyksICJudW1iZXJP
ZkNoZWNrcG9pbnRzIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIiKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRNYXNrID0gbnVtYmVyT2ZDaGVja3BvaW50cyAtIDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50U2hpZnQgPSBXVEY6OmdldE1T
QlNldENvbnN0ZXhwcihudW1iZXJPZkNoZWNrcG9pbnRzKTsKKworICAgIHVpbnQzMl90IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyA+PiBjaGVja3BvaW50U2hpZnQ7IH0KKyAg
ICB1aW50OF90IGNoZWNrcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgJiBjaGVj
a3BvaW50TWFzazsgfQorICAgIHVpbnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFj
a2VkQml0czsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aW50
SGFzaChtX29mZnNldCk7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RG
OjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBkZWxl
dGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhpbnZhbGlkT2Zmc2V0IC0gMSk7IH0KICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgPT0gZGVs
ZXRlZFZhbHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGZyb21CaXRzKHVpbnQz
Ml90IGJpdHMpOwogCiAgICAgLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCi0gICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQg
JiYgbV9vZmZzZXQgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZz
ZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CiAgICAgYm9v
bCBvcGVyYXRvciA9PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4g
YXNCaXRzKCkgPT0gb3RoZXIuYXNCaXRzKCk7IH0KICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0
IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsg
fQogCkBAIC02OSwxMyArODEsMjIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQzMl90IGludmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCk7CiAKLSAgICB1aW50MzJfdCBtX29mZnNldCB7IGludmFsaWRPZmZzZXQgfTsK
KyAgICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90
IGNoZWNrcG9pbnQpOworCisgICAgdWludDMyX3QgbV9wYWNrZWRCaXRzIHsgaW52YWxpZE9mZnNl
dCB9OwogfTsKIAoraW5saW5lIHVpbnQzMl90IEJ5dGVjb2RlSW5kZXg6OnBhY2sodWludDMyX3Qg
Ynl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQoreworICAgIEFTU0VSVChjaGVja3Bv
aW50IDwgbnVtYmVyT2ZDaGVja3BvaW50cyk7CisgICAgQVNTRVJUKChieXRlY29kZUluZGV4IDw8
IGNoZWNrcG9pbnRTaGlmdCkgPj4gY2hlY2twb2ludFNoaWZ0ID09IGJ5dGVjb2RlSW5kZXgpOwor
ICAgIHJldHVybiBieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCB8IGNoZWNrcG9pbnQ7
Cit9CisKIGlubGluZSBCeXRlY29kZUluZGV4IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKHVpbnQz
Ml90IGJpdHMpCiB7CiAgICAgQnl0ZWNvZGVJbmRleCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gYml0czsKKyAgICByZXN1bHQubV9wYWNrZWRCaXRzID0gYml0czsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5yYgppbmRleCA3MWJmNmIwNmNjN2VmNDkwZjdiMzZhYTNlMjAwNjUxNzc4N2FmZmE0Li5k
ZjBiZGViMWNiMGYwNTQwODA3ZTlhZmE3ZTI5MzE0YTE3MGMyN2RlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTU5LDcgKzU5LDcgQEAg
dHlwZXMgWwogICAgIDpXYXRjaHBvaW50U2V0LAogCiAgICAgOlZhbHVlUHJvZmlsZSwKLSAgICA6
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciwKKyAgICA6VmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyLAogICAgIDpVbmFyeUFyaXRoUHJvZmlsZSwKICAgICA6QmluYXJ5QXJp
dGhQcm9maWxlLAogICAgIDpBcnJheVByb2ZpbGUsCkBAIC03OTEsNiArNzkxLDEzIEBAIG9wIDpj
YWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJh
eVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICB9LAorICAgIHRt
cHM6IHsKKyAgICAgICAgYXJnQ291bnQ6IHVuc2lnbmVkLAorICAgIH0sCisgICAgY2hlY2twb2lu
dHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2Fs
bDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF92YXJhcmdzLApAQCAtODA1LDYgKzgxMiwx
MyBAQCBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJy
YXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnQ6IHVuc2lnbmVkCisgICAgfSwK
KyAgICBjaGVja3BvaW50czogeworICAgICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisg
ICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzLApAQCAtODQ1LDYgKzg1OSwxMyBAQCBvcCA6Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAg
bWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJn
Q291bnQ6IHVuc2lnbmVkCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBkZXRl
cm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBv
cCA6cmV0LApAQCAtOTkyLDcgKzEwMTMsNyBAQCBvcCA6Y2F0Y2gsCiAgICAgICAgIHRocm93blZh
bHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBi
dWZmZXI6IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIuKiwKKyAgICAgICAgYnVmZmVyOiBW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIuKiwKICAgICB9CiAKIG9wIDp0aHJv
dywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKaW5kZXggOTE4ZTFkMjEzNGE2MGI2Y2ZmMTAxMTQzYWI1
NTQzM2I4YjQzZjQ0MC4uN2RhMjJjMmQyY2M3YmZjMTFkMWY4ZjhkN2RiZTZkM2M5MTZjZTViYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKQEAgLTIwMSw0ICsyMDEsMzkgQEAgdm9pZCBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAg
IH0KIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRW51bVR5cGUxLCB0eXBlbmFtZSBFbnVtVHlwZTI+
Citjb25zdGV4cHIgYm9vbCBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBlMSB2MSwg
RW51bVR5cGUyIHYyKQoreworICAgIHVzaW5nIEludFR5cGUxID0gdHlwZW5hbWUgc3RkOjp1bmRl
cmx5aW5nX3R5cGU8RW51bVR5cGUxPjo6dHlwZTsKKyAgICB1c2luZyBJbnRUeXBlMiA9IHR5cGVu
YW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlMj46OnR5cGU7CisgICAgaWYgY29uc3Rl
eHByIChzaXplb2YoSW50VHlwZTEpID4gc2l6ZW9mKEludFR5cGUyKSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEludFR5cGUxPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTE+KHYyKTsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0
YXRpY19jYXN0PEludFR5cGUyPih2Mik7Cit9CisKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1w
cz4gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgQml0bWFwPG1heE51bUNoZWNrcG9p
bnRUbXBzPiByZXN1bHQ7CisgICAgdWludDhfdCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCk7CisKKyAgICBpZiAoIWNoZWNrcG9pbnQpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICBzd2l0Y2ggKGNvZGVCbG9jay5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUlu
ZGV4KS0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFy
YXJnczo6bWFrZUNhbGwsIE9wVGFpbENhbGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVl
c0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudCwgT3BUYWlsQ2FsbFZhcmFy
Z3M6OmFyZ0NvdW50KSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJ
bnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjptYWtl
Q2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3Vu
dCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBpZiAoY2hlY2twb2lu
dCA9PSBPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQoT3BD
YWxsVmFyYXJnczo6YXJnQ291bnQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5k
ZXggNzM3OWIzYzliYzcyMzI1OTEwOWM2MWU3YWRhNTMzZDllN2QyZjJjOS4uM2U1ZWRjMGE2OGFl
NDRkZjY1MTVjZGJmZDRiNDI3ZWY2OWVlZjE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlR3JhcGguaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQml0
bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC05Nyw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwog
fTsKIAorQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0ZWNvZGVJbmRleCk7CisKIGlubGluZSBib29sIG9wZXJh
bmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05v
dEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7
CiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50
IG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggM2QxMmUxOTVj
Njk5ZWZiZjk2MzZhMmI5NzRlNzk0NGNkYWVkNzJjMC4uZGU2Y2E4ZGM5MTA5Yjc4OTY3ZjEwNTUw
MDlkYTMwZTg5OTg0ODI4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0z
MywyMiArMzMsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIG9wZXJhbmRJ
c0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0Fs
d2F5c0xpdmUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gIVZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS5pc0xvY2FsKCk7CisgICAgcmV0dXJuICFyZWcuaXNMb2NhbCgpOwogfQog
Ci1pbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0
Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
VGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1
YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgdW5zaWduZWQgbG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCkudG9Mb2NhbCgpOworICAgIHVuc2lnbmVkIGxvY2FsID0gcmVnLnRvTG9jYWwoKTsK
ICAgICBpZiAobG9jYWwgPj0gb3V0Lm51bUJpdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBvdXRbbG9jYWxdOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNv
bnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFs
UmVnaXN0ZXJJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKIHsKLSAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOworICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgdmlydHVhbFJlZ2lzdGVy
VGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOwogfQogCiBpbmxpbmUgYm9v
bCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggODY5ZjUz
ZjNmY2QwZDA3NjEwOWExZmRhNWY5NDdmNTIwZmU1MTRkZC4uNjAyZGQ1MjVhMWJkMmMxNjNkYjhj
ZjEzYjM1Y2M2MzZlYTFlYjVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3Rh
dHVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVk
ZSAiREZHQ2FwYWJpbGl0aWVzLmgiCkBAIC00MDcsNyArNDA4LDcgQEAgYm9vbCBDb2RlQmxvY2s6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xvbmVkU3lt
Ym9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFy
ZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKICAgICAgICAgfQotICAgICAgICByZXBsYWNlQ29u
c3RhbnQodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpLCBjbG9uZWRTeW1ib2xUYWJsZSk7Cisg
ICAgICAgIHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rl
ck9mZnNldCgpKSwgY2xvbmVkU3ltYm9sVGFibGUpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxk
VXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlID0gbV91bmxpbmtlZENvZGUtPndhc0NvbXBp
bGVkV2l0aFR5cGVQcm9maWxlck9wY29kZXMoKSB8fCBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGls
ZWRXaXRoQ29udHJvbEZsb3dQcm9maWxlck9wY29kZXMoKTsKQEAgLTY0MSw3ICs2NDIsNyBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAgICAg
IC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8gaXMg
bm90IGFub255bW91cy4KICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIgIT0gVUlO
VF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
anNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9y
U2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAg
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0
YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
Ynl0ZWNvZGUubV92YXIpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGl0
ZXIgPSBzeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CkBAIC03MDksOCAr
NzEwLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2Fs
bHlSZXNvbHZlZDogewotICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpOwot
ICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xU
YWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFu
dChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkpKTsKICAg
ICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9pZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJl
bnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2ls
bCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KQEAgLTEwODYsNiArMTA4Niwx
NSBAQCBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1Jl
ZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpbwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQor
CitCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJ
bmRleCBleGl0SW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkp
IHsKKyAgICAgICAgY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChl
eGl0SW5kZXgpOworICAgICAgICBleGl0SW5kZXggPSBpbnN0cnVjdGlvbi5uZXh0KCkuaW5kZXgo
KTsKKyAgICB9CisgICAgcmV0dXJuIGV4aXRJbmRleDsKK30KICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKIAogdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgxMSwxMCArMTgyMCwx
MCBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UGFyYW1ldGVycygpOyArK2kpCiAgICAgICAgIGxpdmVPcGVyYW5kcy5hcHBlbmQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CisgICAg
YXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
QnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChwcm9maWxl
cy0+bV9zaXplID09IGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwcm9maWxlcy0+bV9zaXplOyArK2kpCi0gICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZl
ci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0KCk7CisgICAgICAg
IHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV07
CiAKICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3MTMsNyArMjcyMiw3
IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENv
dW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byogcmFyZURhdGEgPSBt
X3JhcmVEYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJh
cmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgICAg
ICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggMDkyYzdhYWM4NDI2YzFlNGM5
ZDU5ZjU0ZjkxZTU1NjM2YzM3NGExZi4uNzk2MzQzNWVhYjM3NDRlOTZjZGVhNTRlNjhkNDhiZjEy
M2UwMDBjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApA
QCAtMTU4LDYgKzE1OCw3IEBAIHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBudW1WYXJzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CisgICAgaW50IG51bVRtcHMoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBz
OyB9CiAKICAgICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1Q
YXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9
CkBAIC0yMjYsMjAgKzIyNywyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRz
KCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKKyAg
ICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdpc3RlciByZWcpCiAg
ICAgewotICAgICAgICBpZiAoaW5kZXggPT0gdGhpc1JlZ2lzdGVyKCkub2Zmc2V0KCkgJiYgIWlz
U3RyaWN0TW9kZSgpKQorICAgICAgICBpZiAocmVnID09IHRoaXNSZWdpc3RlcigpICYmICFpc1N0
cmljdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnQoaW5kZXgpLmlzQ2VsbCgpOworICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwogCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdp
c3RlckluZGV4KGludCBpbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4
ID49IG1fbnVtVmFyczsKKyAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBtX251bVZhcnM7
CiAgICAgfQogCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7
CkBAIC01NzgsMTAgKzU3OSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8
V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJl
Z2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV0uZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltyZWcudG9D
b25zdGFudEluZGV4KCldOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVj
bChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAg
ICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNp
emUoKTsgfQpAQCAtNzcxLDYgKzc3MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T3B0aW1p
emF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0
KTsKICAgICAKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2Rl
SW5kZXgpIGNvbnN0OwogICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1
cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3Ny
RXhpdENvdW50ZXIrKzsgfQpAQCAtODcxLDcgKzg3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVj
dG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBWZWN0b3I8
U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPj4gbV9jYXRj
aFByb2ZpbGVzOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAogICAgICAgICBEaXJl
Y3RFdmFsQ29kZUNhY2hlIG1fZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9OwpAQCAtOTM4LDEw
ICs5MzksMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29u
c3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9y
PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAotICAgIHZvaWQg
cmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHJlcGxh
Y2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFu
dFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOworICAg
ICAgICBBU1NFUlQocmVnLmlzQ29uc3RhbnQoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50
b0NvbnN0YW50SW5kZXgoKSkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRo
aXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAppbmRleCAyMTA2ODEzZjBhMWVhYTUxMzRkMGYzOWJkNzUxYzczMThlYmMwNDMx
Li4xOGFmMjQyMmIxMDAxZjI1ZjkwOTY4MmU0ZDllYjAxYTU5YjY1NDk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw3ICsxNjAsOSBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFtZSogdGVy
bWluYWwgPSBudWxscHRyKSBjb25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KLSAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CisgICAgdm9p
ZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpIGNvbnN0OworCisgICAgYm9vbCBp
bmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8v
IEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3Ig
ZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29u
c3Q7CkBAIC0yNzgsNiArMjgwLDE2IEBAIGlubGluZSBib29sIENvZGVPcmlnaW46Om9wZXJhdG9y
PT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0CiAgICAgICAgICYmIGlubGluZUNhbGxG
cmFtZSgpID09IG90aGVyLmlubGluZUNhbGxGcmFtZSgpOwogfQogCitpbmxpbmUgYm9vbCBDb2Rl
T3JpZ2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0Cit7Cisg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICB3YWxrVXBJbmxpbmVTdGFjayhbJl0gKENvZGVP
cmlnaW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNr
cG9pbnQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogc3RydWN0IENvZGVPcmlnaW5IYXNoIHsKICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBDb2RlT3JpZ2luJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlT3JpZ2luJiBhLCBjb25zdCBDb2RlT3JpZ2lu
JiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggZTRhNTc1YjAzYTdkMWI1OTlh
ZDBkNTZjZWRkZGFmNGJhMDUwMmYzYS4uYWJhOWYyZDNkZjBlYmM3ZGZjNTBkNzgxZjYzMTNhYjlk
MDcwZDM2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxC
eXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1
bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTI2LDEyICsyNiwxNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJPcGVyYW5k
cy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBDb2RlQmxvY2s7CiAKKy8v
IE5vdGU6IEZ1bGwgYnl0ZWNvZGUgbGl2ZXNuZXNzIGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVtcHMuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2
ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xh
c3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGlu
dCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRp
b25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5k
SXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZl
KGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7CisgICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUocmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50
KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9y
J3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCisgICAgLy8gRklYTUU6IFVz
ZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0
ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1f
YmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAppbmRleCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUx
NTk3MDQxNzFkZGY2ZGQxZGEzLi4zOTA0OTRmOTQ1NGE3MDIyZTQ1Yzg5N2NiYTA5NTlkZDFiZjk3
NWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2Fs
bEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAg
V3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgQ29kZU9yaWdp
biBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgorICAgIHVuc2lnbmVkIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1
bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAg
ICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xv
c3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUg
YXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywg
aS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1hbnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5
IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZp
ZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBp
ZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFsaXplIGV4cGxpY2l0bHkuCiAgICAgSW5saW5l
Q2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09mZnNldCgwKQorICAgICAgICA6IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAgICwgdG1wT2Zmc2V0KDApCisgICAgICAgICwg
c3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5kKENhbGwpCiAgICAgICAgICwgaXNDbG9zdXJl
Q2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiArMjIyLDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxs
RnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNr
T2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2ln
bmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRtcE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0
KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2FsbGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZy
YW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBD
T2Zmc2V0KCk7IH0KIApAQCAtMjQ5LDcgKzI1OCw3IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdp
CiAKIC8vIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdp
biBiZWNhdXNlIGl0IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElu
bGluZUNhbGxGcmFtZQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQor
aW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKSBjb25zdAogewogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOwog
ICAgIHdoaWxlICh0cnVlKSB7CkBAIC0yNjEsMTEgKzI3MCwxOCBAQCBpbmxpbmUgdm9pZCBDb2Rl
T3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiAgICAg
fQogfQogCi1BTFdBWVNfSU5MSU5FIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitBTFdBWVNf
SU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCBPcGVyYW5kIG9wZXJhbmQpCit7CisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKKyAgICAg
ICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52
YWx1ZSgpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpIDogb3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgcmV0dXJuIG9wZXJh
bmQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKHJlZy5vZmZzZXQoKSAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwotICAgIHJldHVybiByZWc7CisgICAgICAg
IHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJhbmQudmFs
dWUoKSAtIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6IE9wZXJhbmQob3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgIHJldHVy
biBvcGVyYW5kOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKaW5kZXgg
YmZiOTRiMzVmY2Q2MzlhNGExZjFkMDBjOGFiYjE0NWViMWM2NGE1OS4uZTAzZmEzOTM5NTk1NTUy
ZWJmMzhmN2I0YWIyZGQ1NzcwYTUwZjVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKQEAgLTI2LDYgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgorI2lu
Y2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSAi
VmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTQ5LDcgKzUw
LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICB7CkBAIC02OSw3
ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsgbV9vcGVyYW5kLm9mZnNl
dCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC52
YWx1ZSgpICsgbV9vcGVyYW5kLmtpbmQoKTsKICAgICB9CiAgICAgCiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpAQCAtOTAsNyAr
OTEsNyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNvZGVJbmRleCBtX2J5
dGVjb2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICBPcGVyYW5k
IG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleUhhc2gg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlmMzZjN2ZiZGExMDU1Nzg5
ZGZmZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEyYzY5YThiYzA2
NzA0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Ojpmcm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5kOwogICAg
IHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICByZXN1bHQu
dS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4KCk7Ci0gICAg
cmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7Cisg
ICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJl
ZwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNv
ZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAgICAg
ICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9m
ZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkpOworICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNl
dCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRl
eCA1ZDgxYzRjOTAwYjA4YTRkZWQ4M2E3NGRmYTVhMmRjZjMzNWVjODhkLi4zNmQzNjlmMGMwMGZi
ZDQ0Yzg1NWEzODllMDY1MDg0YmM3OGU1ODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgK
QEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlT2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1OwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5ZmY5Zjk3MzZhZWIzNzM0
NTk0NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uNWRhZDNhOWRkMWQzMDMxOWUzMTZhYmE0MWE3MjBlNmE0
YTY1MTBlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAg
LTM1LDExMSArMzUsMjIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1l
bnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1DaGVj
a3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBvbmUgdGhhdCBleGlzdHMgZm9y
IGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBleGlzdCBiZXR3ZWVuIGJ5dGVj
b2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3BlcmFuZCwg
VG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1YmxpYzoKKyAgICBPcGVyYW5kKCkg
PSBkZWZhdWx0OworCisgICAgT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgOiBtX2tpbmQob3BlcmFuZC5pc0xvY2FsKCkgPyBMb2NhbE9wZXJhbmQgOiBBcmd1bWVudE9w
ZXJhbmQpCisgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgeyB9CisK
KyAgICBPcGVyYW5kKE9wZXJhbmRLaW5kIGtpbmQsIGludCBvcGVyYW5kKQorICAgICAgICA6IG1f
a2luZChraW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorICAgIHsgCisgICAgICAg
IEFTU0VSVChraW5kID09IFRtcE9wZXJhbmQgfHwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
TG9jYWwoKSA9PSAoa2luZCA9PSBMb2NhbE9wZXJhbmQpKTsKKyAgICB9CisKKyAgICBPcGVyYW5k
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgaW50IHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kICE9IFRtcE9wZXJhbmQp
OworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCk7CisgICAgfQorICAg
IHVpbnQ2NF90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ2NF90Kj4odGhpcyk7IH0KKyAgICBzdGF0aWMgT3BlcmFuZCBmcm9tQml0cyh1aW50NjRf
dCB2YWx1ZSk7CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IFRt
cE9wZXJhbmQ7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkg
PT0gQXJndW1lbnRPcGVyYW5kOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IExvY2FsT3BlcmFuZCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCk7IH0K
KyAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFRtcE9wZXJhbmQg
JiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNIZWFkZXIoKTsgfQorCisgICAgaW50IHRvQXJndW1lbnQo
KSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCku
dG9Bcmd1bWVudCgpOyB9CisgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2Fs
KCkpOyByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOyB9CisKKyAgICBpbmxpbmUg
Ym9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE9wZXJhbmQmKSBjb25zdDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIE9wZXJhbmRLaW5kIG1fa2luZDsKKyAgICBpbnQgbV9vcGVyYW5kOwor
fTsKKworQUxXQVlTX0lOTElORSBib29sIE9wZXJhbmQ6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmFu
ZCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVl
KCkgPT0gb3RoZXIudmFsdWUoKTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkgPT0gb3Ro
ZXIudmlydHVhbFJlZ2lzdGVyKCk7Cit9CisKK2lubGluZSBib29sIE9wZXJhbmQ6OmlzVmFsaWQo
KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA+PSAw
OworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc1ZhbGlkKCk7Cit9CisKK2lubGluZSBP
cGVyYW5kIE9wZXJhbmQ6OmZyb21CaXRzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIE9wZXJhbmQg
cmVzdWx0ID0gYml0d2lzZV9jYXN0PE9wZXJhbmQ+KHZhbHVlKTsKKyAgICBBU1NFUlQocmVzdWx0
LmlzVmFsaWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljX2Fzc2VydChzaXpl
b2YoT3BlcmFuZCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIk9wZXJhbmQ6OmFzQml0cygpIHJlbGll
cyBvbiB0aGlzLiIpOwogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgotICAgIE9w
ZXJhbmRzKCkKLSAgICAgICAgOiBtX251bUFyZ3VtZW50cygwKSB7IH0KLSAgICAKLSAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzKQorICAg
IC8vIHVzaW5nIFN0b3JhZ2UgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19z
YW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4+OworICAgIC8vIHVzaW5nIFJlZlR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlv
bmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3I6OkJpdFJlZmVyZW5j
ZSwgVCY+OworICAgIC8vIHVzaW5nIENvbnN0UmVmVHlwZSA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0
aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OworICAgIHVz
aW5nIFN0b3JhZ2UgPSBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+OworICAgIHVz
aW5nIFJlZlR5cGUgPSBUJjsKKyAgICB1c2luZyBDb25zdFJlZlR5cGUgPSBjb25zdCBUJjsKKwor
ICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCiAgICAgICAg
IDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG51
bUxvY2FscykKICAgICB7Ci0gICAgICAgIGlmIChXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikgewotICAgICAgICAgICAgbV92YWx1ZXMucmVzaXplKG51bUFyZ3VtZW50
cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5m
aWxsKFQoKSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfQorICAgICAgICBz
aXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAg
IG1fdmFsdWVzLmdyb3coc2l6ZSk7CisgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46
Om5lZWRzSW5pdGlhbGl6YXRpb24pCisgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAg
ICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90
IG51bUxvY2FscywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRz
KHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBj
b25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1l
bnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAgICB7Ci0gICAgICAgIG1f
dmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOworICAg
ICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOwor
ICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFn
LCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFu
ZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1
ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50
cygpKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCiAgICAg
ewotICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNp
emUoKSk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9Ci0gICAg
CisKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFy
Z3VtZW50czsgfQotICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLnNpemUoKSAtIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgCisgICAgc2l6ZV90IG51bWJl
ck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KKyAgICBzaXplX3QgbnVt
YmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1
bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKworICAgIHNpemVfdCB0bXBJbmRleChzaXpl
X3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygp
KTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpOworICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25z
dAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlkeCA8IG1fbnVtQXJndW1lbnRzKTsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4Owog
ICAgIH0KICAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fbnVtQXJndW1lbnRzICsgaWR4OworICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50
cygpICsgaWR4OwogICAgIH0KKworICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJu
IG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAotICAg
IFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNb
YXJndW1lbnRJbmRleChpZHgpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXJndW1lbnQoc2l6ZV90
IGlkeCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4
KGlkeCldOwotICAgIH0KKyAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJu
IG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgYXJndW1l
bnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgp
XTsgfQogICAgIAotICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xv
Y2FsSW5kZXgoaWR4KV07IH0KLSAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgUmVmVHlwZSBsb2NhbChz
aXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgQ29u
c3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2Fs
SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2lu
ZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7
CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJPZlRt
cHMoKTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7Cisg
ICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mTG9j
YWxzKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBlIGF0Rm9yKHNpemVf
dCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5k
KQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFu
ZDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9w
ZXJhbmQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJu
IGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0
dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtp
bmQgb3BlcmFuZEtpbmQ+Ci0gICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAg
ICBDb25zdFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
IChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFu
ZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRt
cChpZHgpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVy
biBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2Fz
ZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAg
fQogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKworICAg
IHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBU
KCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlm
IChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxz
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1i
ZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3Qg
b2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRt
cHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAg
ICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3ZhbHVlc1tu
ZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07
CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJlZFZhbHVl
ICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2Fsczsg
KytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxzICsg
aSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVM
b2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lkIGVuc3Vy
ZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0g
ICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0g
b2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Cisg
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVuc3VyZWRW
YWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7ICsr
aSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZh
bHVlKQpAQCAtMTY0LDg0ICsyNzQsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4ID49
IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRMb2Nh
bChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChpbnQg
b3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIGdldEZv
ck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8T3Bl
cmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAgc2l6ZV90
IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAg
ICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgp
KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gbG9j
YWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBvcGVy
YW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAgICBzaXpl
X3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
b3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3Au
aXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAgfQogICAg
IAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Cisg
ICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAgVCYg
b3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5cGUgb3Bl
cmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAg
cmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1w
KG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQp
IGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMq
Pih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihj
b25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgQ29u
c3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAgIENv
bnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0gICAgYm9v
bCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwg
bnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAgICAgICBp
ZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51bWJl
ck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZpcnR1
YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVy
YW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5k
LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFuZCkg
PSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0T3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNvbnN0IFQm
IGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAg
VCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBjb25z
dCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQot
Ci0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXgg
PCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9ySW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFJlZlR5
cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
T3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpLm9m
ZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKKyAg
ICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVy
YW5kRmlyc3RUaW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgc2V0QXJndW1l
bnRGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRM
b2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2YWx1ZSk7
Ci0gICAgfQotICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAtMjU3LDYgKzM1
OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFyZ3VtZW50cygp
ID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQobnVtYmVyT2ZM
b2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJl
ck9mVG1wcygpID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBtX3ZhbHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUsOSArMzY4LDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAg
CiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxULCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7
CisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVu
dHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1w
cy4KKyAgICBTdG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxp
bmVzLmgKaW5kZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1NjZmZC4uMGIx
Y2MxZjJkMTk3YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAsNiArMzAsMTQg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgb3V0LnByaW50
KCJ0bXAiLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVn
aXN0ZXIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAogewpAQCAtNDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAi
OiIsIGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBm
b3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7ICsrdG1w
SW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29u
dGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpAQCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkpOwogICAg
IH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBz
KCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAi
OiIsIHRtcCh0bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAppbmRleCBkNWRkZWU4ZDU2MDc3MDMyM2IxZmQ1ZjFhY2NjY2MwNTAyYzEyNjU0Li43ZTkzMjYy
ZGZiMDk1OWRlYzJhOTI0MWZmOGM2MTFmMzNiOTJiNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTcyLDYgKzcy
LDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hl
Y2twb2ludHMoZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgpKQogICAg
ICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwgbV9tZXRh
ZGF0YShVbmxpbmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCBhNGZhN2UwNTVi
OGU5MmI2YWFhYWE1OGMxYTlkOWVjYmFiZjQ5OGYzLi5iOTUxNjVjZWYwYjg2NmI0MGU2MzEzNDI3
MWU4MTkzNDJhOTBiZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtMTQyLDYgKzE0Miw5IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7
IH0KICAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZv
KCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXNDaGVja3BvaW50
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lkIHNldEhhc0No
ZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAgLy8gU3BlY2lh
bCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAgdm9pZCBz
ZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVS
ZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OSw5ICsyMDIsOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50
UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQog
ICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJT
ZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29uc3RhbnRJ
ZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MjAsNiArNDIyLDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBtX2FnZSA6IDM7
CiAgICAgc3RhdGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsKKyAgICBib29s
IG1faGFzQ2hlY2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9s
b2NrOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAppbmRleCBiYmI4YTRiMjQ1MzEwNDAzYTdmY2VmMmIyMWUxMTgzM2VmYjkwMzY3Li5l
YjkxNzk0NTMwZGYxYTMyOTJkY2RiZWQzMTY0ZTljNzkwOWE2OWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjggKzE3NiwyOCBA
QCBpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUluZGV4KFJh
cmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGUtPm1f
Ynl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQgOiBwdWJs
aWMgVmFsdWVQcm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAgIFZpcnR1YWxS
ZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciB7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAg
ewogICAgICAgICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZmIHRoYW4gd2Ug
bmVlZC4gV2UgY291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAgICAgICAgLy8g
dG8gYmUgbW9yZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQ
dHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD46Om1hbGxvYyhtX3NpemUgKiBzaXplb2YoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCkpOworICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFs
dWVQcm9maWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClb
aV0pIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAotICAgIH5WYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKCkKKyAgICB+VmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3NpemU7ICsraSkKLSAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0aW9uPgpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgTWFsbG9jUHRyPFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQ+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXI+IG1fYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAK
aW5kZXggYzVjYTRkZTFlNGIzNjExMjE0YzM1YWIxZWEzMmRjMWNiZjQ1ZjNlOS4uYjEzOTQ3ZjBl
MThkZjA2M2E4OGIzZjIyN2NkY2RiZmVmZmVkYzMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMzUsMjIgKzM1LDIyIEBAIEpT
VmFsdWUgVmFsdWVSZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKSkuanNWYWx1ZSgpOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAg
ICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOwogICAgIGNhc2UgSW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUyKCkp
OwogICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVy
biBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94
ZWRTdHJpY3RJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOwogICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJsZSgpKSk7
CisgICAgICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxS
ZWdpc3RlcigpKS51bmJveGVkRG91YmxlKCkpKTsKICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCkpLnVuYm94ZWRDZWxsKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyKCkpLnVuYm94ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5K
U1N0YWNrOgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogI2Vsc2UKLSAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
LnVuYm94ZWRCb29sZWFuKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CiAjZW5kaWYKICAgICBjYXNl
IENvbnN0YW50OgogICAgICAgICByZXR1cm4gY29uc3RhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCmluZGV4IGQ4ZjE4YzNmZTg1NTk0ZjMy
YTI5M2FmZDg5MDkyMjM2MTM2MmVhNjMuLjVlNDNiYzcyYmJjYzRmZjk3YTY4ZjgzZGE4MzA5NGU1
OGRhM2IzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmly
dHVhbFJlZ2lzdGVyLmgKaW5kZXggMzYxOTUyOTQyZDJiODZiYWIxMmY2Y2NjN2NjMWJhMDIxZjVh
ZDA0OC4uZWIwY2NjMzhlZGJhNGU4ODNiYWExNDQxOGIwNjE2ZWVhZjNhMzI5OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaApAQCAtMzEs
MTIgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNM
b2NhbChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwoaW50
IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPCAwOwogfQogCi1pbmxpbmUgYm9vbCBv
cGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3Rl
cklzQXJndW1lbnQoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPj0gMDsKIH0K
QEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgIHsgfQogCiAgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IHNfaW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7IH0KLSAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNMb2Nh
bChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJl
dHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlz
TG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJl
Z2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0hlYWRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVn
aXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29uc3Rh
bnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2Fs
KCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCmluZGV4IGNiZGYyNjk0ZmMzM2E2NGU5NWVlYTFmM2RmODE3OGM2ZjE5MjFkZWIuLjJi
MTUyM2UyNWVhZWUzYmY0Zjg1MzRjOTkwYWQ3YWZmOTllODI4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CkBAIC0xNjM4LDExICsxNjM4LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVh
bGl0eU9wSW1wbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlCiAKICAgICBp
ZiAobV9sYXN0SW5zdHJ1Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAgICAgICAgIGF1dG8gb3Ag
PSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAgIGlmIChzcmMxLT5p
bmRleCgpID09IG9wLm1fZHN0Lm9mZnNldCgpCisgICAgICAgIGlmIChzcmMxLT52aXJ0dWFsUmVn
aXN0ZXIoKSA9PSBvcC5tX2RzdAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQot
ICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzIt
PmluZGV4KCkpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihz
cmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+
aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOworICAgICAgICAgICAgJiYgc3JjMi0+dmly
dHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpCisgICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkuaXNTdHJpbmco
KSkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQoKSktPnRy
eUdldFZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5lZCIpIHsKICAg
ICAgICAgICAgICAgICByZXdpbmQoKTsKICAgICAgICAgICAgICAgICBPcElzVW5kZWZpbmVkOjpl
bWl0KHRoaXMsIGRzdCwgb3AubV92YWx1ZSk7CkBAIC0zMjMwLDYgKzMyMzAsNyBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBBU1NFUlQoZHN0ICE9IGln
bm9yZWRSZXN1bHQoKSk7CiAgICAgVmFyYXJnc09wOjplbWl0KHRoaXMsIGRzdCwgZnVuYywgdGhp
c1JlZ2lzdGVyLCBhcmd1bWVudHMgPyBhcmd1bWVudHMgOiBWaXJ0dWFsUmVnaXN0ZXIoMCksIGZp
cnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5oYXNDaGVja3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
aW5kZXggOTNiMTNmNmRhODE5ZTMxZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2
NDM2NjcxMzgzYTBjZTQ2YWQzYzZmZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2
ICsxMDA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRy
b2xGbG93UHJvZmlsZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2Rl
LmNvbnRhaW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAg
ICAgICAgCiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRz
KCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJj
ZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VN
b2RlKCk7IH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHAKaW5kZXggYjgzZmVlMGQzYzA5ZDE0OTdhYTdlYTFkZTNlMDQ5MDYyZjIyNmMx
NC4uZTY0MDcxYjFhYTBlMzQ4OTQ0MzQzOWZmMjhmY2EyNTFiNjJiOTY1YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcApAQCAtNDAsNiArNDAsMTQg
QEAgdm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICAgICAgb3V0LnByaW50KHZhbHVlKCkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcDo6
UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlm
IChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAgICAgICAg
b3V0LnByaW50KE9wZXJhbmQ6OmZyb21CaXRzKHZhbHVlKCkpKTsKK30KKwogdm9pZCBBYnN0cmFj
dEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoa2lu
ZCgpKTsKQEAgLTQ5LDYgKzU3LDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiKCIsIERPTUpJVDo6SGVhcFJhbmdl
Ojpmcm9tUmF3KHBheWxvYWQoKS52YWx1ZTMyKCkpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmIChraW5kKCkgPT0gU3RhY2spIHsKKyAgICAgICAgb3V0LnByaW50KCIoIik7
CisgICAgICAgIHBheWxvYWQoKS5kdW1wQXNPcGVyYW5kKG91dCk7CisgICAgICAgIG91dC5wcmlu
dCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgb3V0LnByaW50KCIoIiwgcGF5
bG9hZCgpLCAiKSIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAppbmRleCBiZjk5Mzc3OTcwNDcwMmQ4ZDViMjBiNmMyZjZmNzM5NWFmZTZiODY4Li4z
YzRjZTNkNWQwMmRjM2E4MWYzYWE0MjRjZmMzZmQxYzQ0N2M1MjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRPTUpJVEhlYXBSYW5nZS5oIgorI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC0xMjMs
MTAgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fdmFsdWUoYml0d2lzZV9jYXN0
PGludHB0cl90Pihwb2ludGVyKSkKICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorCisgICAgICAgIFBheWxvYWQo
T3BlcmFuZCBvcGVyYW5kKQogICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQotICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgICAgICAgICAsIG1fdmFsdWUob3Bl
cmFuZC5hc0JpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUGF5bG9hZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgICAgIDogUGF5bG9hZChPcGVyYW5kKG9w
ZXJhbmQpKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODMsNiArMTg5LDcg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wQXNPcGVyYW5kKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9pc1RvcDsKQEAg
LTIwNCw2ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCAhPSBJ
bnZhbGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQgJiYga2luZCAhPSBIZWFwICYmIGtp
bmQgIT0gU2lkZVN0YXRlKTsKICAgICAgICAgbV92YWx1ZSA9IGVuY29kZShraW5kLCBwYXlsb2Fk
KTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPmtpbmQoKSA9PSBraW5kICYmIHRoaXMtPnBheWxvYWQo
KSA9PSBwYXlsb2FkKTsKICAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKQEAgLTIxOSw2ICsyMjcsMTEgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFw
KTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CiAgICAgfQorICAgIE9wZXJhbmQgb3Bl
cmFuZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrICYmICFw
YXlsb2FkKCkuaXNUb3AoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjpmcm9tQml0cyhwYXls
b2FkKCkudmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcCBzdXBlcnR5cGUo
KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCA1ZDdlNjk2OGM3MWYyMTYzN2Zm
OGNiNzVlZTVkNTg2Y2QyZGUyNjNiLi5mMzc0YTE5NzU2YzkxOTNmZjM5MmM4Y2NkMjhmNjQ5Nzdm
MWQzZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zODEsNyArMzgxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3Bl
cmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3Bl
cmFuZCgpKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFk
eSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlz
VHlwZSh0eXBlRmlsdGVyRm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkpKTsK
ICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC0zOTIsNyArMzkyLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBT
dGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7
CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hl
Y2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlw
ZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpA
QCAtNDAyLDEyICs0MDIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBt
X3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPm9wZXJhbmQpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjksNyArNDI5LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xv
YmJlckxpbWkKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBo
YXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50RGVmaW5pdGVseS9TZXRBcmd1bWVudE1heWJlIG1lYW5z
CiAgICAgICAgIC8vIHRoYXQgc29tZW9uZSBzZXQgdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2Yt
YmFuZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKICAgICAg
ICAgLy8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NFUlQoIW1fc3RhdGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBBU1NFUlQoIW1fc3RhdGUub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czogewpAQCAtNDU4LDYgKzQ1OCwxMiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAg
ICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVjayBpZiB0aGUgY291bnQgYmVj
b21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0dXJuCkBAIC00NzYsNyArNDgy
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIG1fc3RhdGUub3BlcmFuZChk
YXRhLT5jb3VudCkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykKLSAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgp
ICsgaSkpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAppbmRleCBkNzMyNDdi
OTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZhMDgwY2VhMzJmZDljNTkx
ZjMwZjFlN2RkNDZmMWQxMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVz
W2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlh
YmxlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUtPm9w
ZXJhbmQoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBhZjJlZGE0YWQ4OGU5Yjk3YWFkNWY0Zjkz
OTIzNzYyMTk1MmFlZjg0Li5mYTI0YzY5ZDBmZWNiN2JhZmM3MDVkODVjM2M1YWQwYzY1MzkxZThl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1p
bmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdz
TGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGNh
c2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2FkVmFyYXJn
c0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJheVdpdGhT
cHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgp
LT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVzY2Fw
ZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgp
ID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09
IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVy
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5hcmd1bWVudHNDaGlsZCgp
LCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00OTMsMTAgKzQ5NiwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5w
YXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBvaW50IHRvIGFuIGFyZ3VtZW50IG9yIGxvY2Fs
LCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnLmlzSGVhZGVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZChy
ZWcpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmFuZC5pc0hlYWRl
cigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9w
ZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTU2MCwxMiAr
NTYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9i
YmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkQnlC
bG9jayB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Js
b2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Ns
b2JiZXJlZEJ5QmxvY2spIHsKQEAgLTYyNyw3ICs2MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCBoZWFwKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0g
U3RhY2sgJiYgIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVD
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2
ZVN0YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTg0NSw5ICs4NDgsMjMgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRB
bGxvY2F0aW9uKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBWYXJhcmdzTGVuZ3RoIGNhbiBleGl0LCBzbyBpdCBiZXR0
ZXIgYmUgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKHRydWUpOworCisKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRz
QXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgb3JpZ2luLCAv
KiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hp
bGQoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2Nh
dGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIApAQCAtODYyLDEwICs4NzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2Rl
LT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VW
YWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRh
LT5jb3VudCksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2lu
LndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hl
ZEludDMyKSksCkBAIC04NzQsMTQgKzg5MSwxNSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3Jl
SW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2
YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlZy5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3Rh
Y2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0
YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZy5vZmZz
ZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhy
ZWcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQs
IG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZyksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0
aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0
YSksIEVkZ2UodmFsdWUpKTsKQEAgLTEwMTksOSArMTAzNyw3IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2Fu
ZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NEYXRhLT5vZmZz
ZXQ7CkBAIC0xMDMwLDcgKzEwNDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0
YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCB2YXJhcmdzRGF0
YS0+bGltaXQsIHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAppbmRleCA2MjYx
MTIzY2JmZWMzZWJhMTk1ZDA5YjkzMTAyNmYyNmM3MjU4NDc2Li4yMDZkNmZiZGM1NGEzNmNiODQx
OGE4YjM4NTQ2ZDg3NTc3OTkwMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCkBAIC0zMiwxMSArMzIsMTUgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFj
a1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBy
ZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKKyAgICBpZiAob3BlcmFuZC5pc1RtcCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgcmV0dXJuIChyZWcuaXNBcmd1bWVudCgpICYmIHJlZy50b0FyZ3VtZW50KCkpIHx8IHJlZy5p
c0hlYWRlcigpOwotICAgIAorCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bAogICAgICAgICAmJiByZWcgPT0gVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTUyLDEzICs1NiwxMyBAQCBib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcgogICAgIHJldHVybiBy
ZWcgPj0gYXJndW1lbnRTdGFydCAmJiByZWcgPCBhcmd1bWVudFN0YXJ0ICsgbnVtQXJndW1lbnRz
OwogfQogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUq
IGNhbmRpZGF0ZSwgT3BlcmFuZCBvcGVyYW5kKQogewotICAgIHJldHVybiBhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgp
LCByZWcpOworICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpLCBvcGVyYW5kKTsKIH0KIAogTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYgaW5z
ZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdp
biBvcmlnaW4pCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50
cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBhZGRUaGlzKQog
ewogICAgIEdyYXBoJiBncmFwaCA9IGluc2VydGlvblNldC5ncmFwaCgpOwogCkBAIC02OSwxMSAr
NzMsMTQgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAg
ICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIKICAgICAgICAgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21DbG9uZWRBcmd1bWVudHMKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBo
YW50b21DcmVhdGVSZXN0IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZm
ZXIKLSAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQsCisgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkLAogICAgICAgICBhcmd1bWVu
dHMtPm9wKCkpOwogCisgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQor
ICAgICAgICByZXR1cm4gZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlv
blNldCwgYXJndW1lbnRzLT5jaGlsZDEoKS5ub2RlKCksIG5vZGVJbmRleCwgb3JpZ2luLCBhZGRU
aGlzKTsKKwogICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCkgewotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IDA7
CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gYWRkVGhpczsK
ICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcmd1bWVudHMtPmJpdFZlY3RvcigpOwog
ICAgICAgICBOb2RlKiBjdXJyZW50U3VtID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFyZ3VtZW50cy0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CkBAIC0xMDMsNyAr
MTEwLDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogCiAgICAg
aWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7CiAgICAgICAgIHJldHVybiBpbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIo
YXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgp
KSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5j
YXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpICsgYWRkVGhpcykp
OwogICAgIH0KICAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGFy
Z3VtZW50cy0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwpAQCAtMTEzLDcgKzEy
MCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCk7CiAgICAgCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIHVuc2ln
bmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gIWFkZFRoaXM7CiAgICAgICAgIGlmIChhcmd1bWVudHNTaXplID49IG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcDsKICAgICAgICAgZWxzZQpAQCAtMTI5LDE0ICsxMzYsMTQgQEAgTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBub2RlSW5kZXgsIFNw
ZWNJbnQzMk9ubHksIEFyaXRoU3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVja2VkKSwK
ICAgICAgICAgRWRnZShhcmd1bWVudENvdW50LCBJbnQzMlVzZSksCiAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2lu
LCBqc051bWJlcigxICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkpOworICAg
ICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKG51bWJlck9mQXJndW1lbnRzVG9T
a2lwICsgIWFkZFRoaXMpLCBJbnQzMlVzZSkpOwogCiAgICAgaWYgKG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSB7CiAgICAgICAgIC8vIFRoZSBhYm92ZSBzdWJ0cmFjdGlvbiBtYXkgcHJvZHVjZSBh
IG5lZ2F0aXZlIG51bWJlciBpZiB0aGlzIG51bWJlciBpcyBub24temVyby4gV2UgY29ycmVjdCB0
aGF0IGhlcmUuCiAgICAgICAgIHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aE1heCwgb3JpZ2luLCAKICAg
ICAgICAgICAgIEVkZ2UocmVzdWx0LCBJbnQzMlVzZSksIAotICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigwKSwg
SW50MzJVc2UpKTsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVz
ZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYWRkVGhpcyksIEludDMyVXNlKSk7CiAgICAg
ICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAppbmRleCA5
YTc3MThmYmJmNTQ3YjJmNmFlMTAxZGFmMzc0YTA2YTJjM2RkZjEyLi43NGY5MzllODE2MjJkNDAy
NDZlMjM1NWQ1MDk4YTllZDJhODUyMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKQEAgLTMxLDExICszMSwxMSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIpOwotYm9vbCBhcmd1bWVudHNJ
bnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyKTsKK2Jvb2wg
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kKTsKK2Jv
b2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQpOwog
CiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9u
U2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4pOwor
ICAgIEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBO
b2RlT3JpZ2luLCBib29sIGFkZFRoaXMgPSBmYWxzZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaAppbmRleCA5NmRhYzM5YTQ0NGZmYmQzY2U1NDNmNTdmMzZjZDYxZGVjYzI4YmQ0
Li44OTdjNzBkZmZiYTA2NmI2NDljYWZkY2MxZWYwOTMzNzY4MTA0ZDEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaApAQCAtMTM5
LDggKzEzOSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50
cygpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQotICAgIEFic3RyYWN0VmFsdWUm
IG9wZXJhbmQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgeyByZXR1
cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KICAgICBBYnN0cmFj
dFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFp
bC5sb2NhbChpbmRleCk7IH0KICAgICBBYnN0cmFjdFZhbHVlJiBhcmd1bWVudChzaXplX3QgaW5k
ZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7IH0KICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNw
cAppbmRleCA3NzQzZTdkMDFmMWNhZDc4MWQ4NGFiMDNkM2MwOWM3N2Y4MDI5YmE1Li5jMmI1NWFh
NWM0YTUyMjliMWIxYTQ0MzFjMTg3YWRlZjQ2YzNkYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCkBAIC02NSwxMCArNjUsMTAgQEAg
dm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lSGVhcCgpCiAKIHZvaWQgQXZhaWxhYmlsaXR5TWFw
OjpwcnVuZUJ5TGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBDb2RlT3JpZ2luIHdoZXJlKQogewotICAg
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxzQ29weShtX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLCBtX2xvY2Fscy5udW1iZXJPZkxvY2FscygpLCBBdmFpbGFiaWxpdHk6OnVuYXZhaWxh
YmxlKCkpOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxzQ29weShPcGVyYW5kc0xp
a2UsIG1fbG9jYWxzLCBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkpOwogICAgIGdyYXBoLmZv
ckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICB3aGVyZSwKLSAgICAgICAgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAg
IGxvY2Fsc0NvcHkub3BlcmFuZChyZWcpID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOwogICAgICAg
ICB9KTsKICAgICBtX2xvY2FscyA9IFdURk1vdmUobG9jYWxzQ29weSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAppbmRleCA1MzU1MjU2MDIzZGRj
ZjI4MGRjNTk1YjMzYTdjN2ZkZWM1NGU2NGYwLi44MGMxMmJmMTgwMjVhNTYxMDU5NmRhMjRlMjNj
MDI1ZjJhYmU0ZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5TWFwLmgKQEAgLTY2LDkgKzY2LDkgQEAgc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc0Z1bmN0b3IsIHR5cGVuYW1lIEFk
ZEZ1bmN0b3I+Ci0gICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQorICAg
IHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChPcGVyYW5kIG9wLCBjb25zdCBIYXNGdW5jdG9y
JiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKICAgICB7Ci0gICAgICAgIEF2YWlsYWJpbGl0
eSBhdmFpbGFiaWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CisgICAgICAgIEF2YWlsYWJp
bGl0eSBhdmFpbGFiaWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKG9wKTsKICAgICAgICAgaWYgKCFh
dmFpbGFiaWxpdHkuaGFzTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCmluZGV4IDA1ODQ0OTYz
ZTYxMGVkMjkzYzU2MGZhYmZkMzg5YTlmMzk3ODBhMDcuLmUyMWIyOGI1MjIxZjE1NjE4YjgwNjRh
M2E3YjJkNzg2OTEzODQyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLUJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJl
Z2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgZmxvYXQgZXhl
Y3V0aW9uQ291bnQpCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2ln
bmVkIG51bVRtcHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogICAgIDogYnl0ZWNvZGVCZWdpbihi
eXRlY29kZUJlZ2luKQogICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAsIGNmYVN0cnVjdHVyZUNs
b2JiZXJTdGF0ZUF0SGVhZChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKQEAgLTQ4LDExICs0OCwxMSBA
QCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5z
aWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZwogICAgICwgaXNMaW5rZWQoZmFsc2UpCiAjZW5kaWYK
ICAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQotICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzKQotICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAg
ICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgaW50ZXJzZWN0
aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBBYnN0cmFjdFZh
bHVlOjpmdWxsVG9wKCkpCisgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMpCisgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMpCisgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMsIG51bVRtcHMpCisgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMs
IG51bVRtcHMpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAs
IGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpAQCAtNzAsNiArNzAsMTUgQEAg
dm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQogICAg
IGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxz
LCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpOwogfQogCit2b2lkIEJhc2ljQmxvY2s6OmVuc3Vy
ZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKK3sKKyAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJl
VG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YXJpYWJsZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdOdW1U
bXBzKTsKKyAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YWx1
ZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICBpbnRlcnNlY3Rpb25PZlBhc3RW
YWx1ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9w
KCkpOworfQorCiB2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VUZXJtaW5hbChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZUFuZEluZGV4IHJlc3VsdCA9IGZpbmRUZXJtaW5hbCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAppbmRleCBiNWFkZjA5
MTJkMDk0MmJlOTdlOTg3Y2RjODlmNGFlMzRkMGMwYmM4Li4xZGQzOGM3OTA4ZGM2ZjRkMWIwODVi
YzhlMDYyNTQ4MGRiNDQ5N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaApAQCAtNDYsMTEgKzQ2LDEyIEBAIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9j
a05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4g
ewogICAgIEJhc2ljQmxvY2soCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwg
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRtcHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50
KTsKICAgICB+QmFzaWNCbG9jaygpOwogICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2ln
bmVkIG5ld051bUxvY2Fscyk7CisgICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRt
cHMpOwogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5zaXpl
KCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCmlu
ZGV4IDc1MDhlMjE5ZGM3YzU4M2RiOWVhOGZjZTY0Njg1ODk5OWUwNDYwZjkuLjAwOGNmNTIyNjk1
N2M5YTgzNTg1YzVlNWUyYzEyNWYyZjhjZTRiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZv
aWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2Nr
PiYmIGJsb2NrKQogCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVf
dCBpbmRleCwgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJs
b2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25Db3VudCkp
OworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhC
eXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygp
LCBleGVjdXRpb25Db3VudCkpOwogICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAg
YXV0byogcmVzdWx0ID0gYmxvY2sucHRyKCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGJs
b2NrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCmluZGV4IGY4ZGU5NWZlYTUwOWFkMjA3NzUzMjczZGJmNjhjYzUwMjIyNTJiMWUuLjBiNjFm
MGVjYzUyYzgyYzY1NzcxMDI2NjEwYTZiMTEyMTNiMzVmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMTIsNiArMTEyLDcgQEAg
cHVibGljOgogICAgICAgICAsIG1fY29uc3RhbnRPbmUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKDEp
KSkKICAgICAgICAgLCBtX251bUFyZ3VtZW50cyhtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KQogICAgICAgICAsIG1fbnVtTG9jYWxzKG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkK
KyAgICAgICAgLCBtX251bVRtcHMobV9jb2RlQmxvY2stPm51bVRtcHMoKSkKICAgICAgICAgLCBt
X3BhcmFtZXRlclNsb3RzKDApCiAgICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDApCiAgICAg
ICAgICwgbV9pbmxpbmVTdGFja1RvcCgwKQpAQCAtMTQwLDYgKzE0MSwxNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7
CiAgICAgfQogCisgICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCisgICAg
eworICAgICAgICBWRVJCT1NFX0xPRygiICAgZW5zdXJlTG9jYWxzOiB0cnlpbmcgdG8gcmFpc2Ug
bV9udW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOwor
ICAgICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5i
bG9jayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8vIEhlbHBl
ciBmb3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4K
ICAgICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2RlVHlwZSBv
cCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNv
bnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzEsMjUgKzI4MywzMyBAQCBw
cml2YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9j
ayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNC
bG9jayo+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJn
ZXRzKTsKICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2twb2ludCgp
CisgICAgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50
SW5kZXgub2Zmc2V0KCksIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBt
X2V4aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBw
cm9jZXNzU2V0TG9jYWxRdWV1ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1Rt
cCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsK
ICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIE5vZGUqIGdldERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQu
aXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0g
ICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKKyAgICAg
ICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKIAot
ICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBnZXRMb2NhbChvcGVy
YW5kKTsKKyAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAgfQogCiAg
ICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAtMjk5LDggKzMxOSw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6
ZSgpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25z
dGFudHNbY29uc3RhbnRJbmRleF0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2sm
IGNvZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0
KCkpOwotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24ob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNv
ZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlm
IChjb25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25z
dGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM1
OSw5ICszNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBh
dCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAg
fTsKLSAgICBOb2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZh
bHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXREaXJlY3Qo
T3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0
KQogICAgIHsKLSAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZz
ZXQoKSksIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFu
ZCksIHZhbHVlKTsKIAogICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBv
dXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7
CkBAIC0zNzUsNyArMzk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBk
ZWxheWVkLmV4ZWN1dGUodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9jZXNzU2V0
TG9jYWxRdWV1ZSgpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9z
ZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQpAQCAtMzkzLDE4ICs0MTQsMTcgQEAgcHJpdmF0ZToK
ICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7
CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xh
enlPcGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3
aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2Fs
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFu
ZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9j
YWwoKTsKLQotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3Bl
cmFuZC5pc0xvY2FsKCkpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
aXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMs
IGFuZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExv
Y2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtNDI5LDIwICs0NDksMjUgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwog
ICAgICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRk
VG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVy
biBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBzZW1h
bnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2Rl
T3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQu
aXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVP
cmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmln
aW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewotICAgICAg
ICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBv
c2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7Cisg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCppbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVy
YW5kOiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251
bVRtcHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAi
IHRtcHMuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVO
YWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFyZ3VtZW50
UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2Fs
KHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgICAg
ICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBtX2NvZGVC
bG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC5uZWVk
c1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkK
ICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQogCkBAIC00NTIsNyAr
NDc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNr
QXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBCYWRJ
bmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODQsMjAgKzUwOSwyMSBAQCBwcml2YXRlOgog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50
KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRBcmd1
bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9k
ZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQg
b3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7
CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRT
ZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9
IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1l
bnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShy
ZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBmb3IgJ3Ro
aXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8gdGhlbiBtYWtlIHN1
cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1bWVudCB8fCBtX2dy
YXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1t
ZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkg
PT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzMywxNCArNTU5LDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSAt
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAg
IHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
LSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihP
cGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3VtZW50KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9u
Rm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU3Niw2ICs2MDQsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IG1fZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJs
b2NrKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSB0
bXBzIGhlcmUgYmVjYXVzZSB0bXBzIGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgZmx1c2hlZCB0byB0
aGUgc3RhY2suCiAgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2ZW5lc3NBdEJ5dGVjb2Rl
ID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIG1fZ3JhcGguYXBwcm9w
cmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQob3JpZ2luLCBpc0NhbGxlck9yaWdpbikpOwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NB
dEJ5dGVjb2RlW2xvY2FsXSkKQEAgLTU4NSwyNyArNjE0LDI3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB9KTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIHZvaWQgZmx1c2goT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hE
aXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2
b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGly
ZWN0KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsKICAgICB9CiAKLSAg
ICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0
aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVy
YW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsKICAgICAgICAg
YWRkRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4ob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGU+Ci0gICAgdm9pZCBhZGRG
bHVzaE9yUGhhbnRvbUxvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0
aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChP
cGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAg
ewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJU
KG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50
KCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIAog
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwogICAgICAgICAKQEAgLTYxNSwy
NiArNjQ0LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBo
KG5vZGVUeXBlLCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgaWYgKGFyZ3Vt
ZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2
YXJpYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBwaGFudG9tTG9jYWxEaXJlY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwaGFudG9tTG9jYWxEaXJlY3QoT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9tTG9jYWw+
KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsKICAgICB9CiAKICAgICB2
b2lkIGZsdXNoKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnkpCiAgICAgewotICAg
ICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1
c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVz
aERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hJbXBsKGlubGluZVN0YWNrRW50cnkt
Pm1faW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7CiAgICAgfQogCiAgICAgdm9pZCBm
bHVzaEZvclRlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBb
Jl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3Qo
cmVnKTsgfTsKLSAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGlu
ZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KHJl
Zyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFt
ZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsKKyAgICAgICAg
YXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJh
bmQgb3BlcmFuZCkgeyBwaGFudG9tTG9jYWxEaXJlY3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZs
dXNoRm9yVGVybWluYWxJbXBsKGN1cnJlbnRDb2RlT3JpZ2luKCksIGFkZEZsdXNoRGlyZWN0LCBh
ZGRQaGFudG9tTG9jYWxEaXJlY3QpOwogICAgIH0KIApAQCAtNzYyLDYgKzc5MCwxMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQz
KSk7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgfQorICAgIE5vZGUq
IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogY2hpbGQxKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9wID09IE1vdkhpbnQpOworICAgICAgICByZXR1cm4gYWRk
VG9HcmFwaChvcCwgT3BJbmZvKG9wZXJhbmQua2luZCgpKSwgT3BJbmZvKG9wZXJhbmQudmFsdWUo
KSksIGNoaWxkMSk7CisgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9w
SW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdl
KCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0g
bV9ncmFwaC5hZGROb2RlKApAQCAtMTA5Miw4ICsxMTI1LDEwIEBAIHByaXZhdGU6CiAKICAgICAv
LyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAgIHVu
c2lnbmVkIG1fbnVtQXJndW1lbnRzOwotICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJz
ICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4gdGhlIGZ1bmN0aW9uLgorICAgIC8vIFRoZSBudW1iZXIg
b2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgYnkgdGhlIGJ5dGVjb2RlIGZvciB0
aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHM7CisgICAgLy8gVGhlIG1heCBu
dW1iZXIgb2YgdGVtcHMgdXNlZCBmb3IgZm9yd2FyZGluZyBkYXRhIHRvIGFuIE9TUiBleGl0IHRv
IGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQgbV9udW1UbXBzOwogICAgIC8vIFRoZSBudW1iZXIg
b2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0bwog
ICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1bWVudHMgdG8gb3V0Z29pbmcgY2FsbHMgZnJvbSB0
aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVtYmVyIGluY2x1ZGVzIHRoZSBDYWxsRnJhbWUgc2xv
dHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0aGUgY2FsbGVlCkBAIC0xMTYwLDE0ICsxMTk1LDE3
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgpOwogICAg
ICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAgT3BlcmFuZCByZW1hcE9wZXJhbmQoT3BlcmFuZCBv
cGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1faW5saW5lQ2FsbEZy
YW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOworCisgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJh
bmQsIG9wZXJhbmQudmFsdWUoKSArIG1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkp
OwogCi0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkg
KyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
CiAgICAgICAgIH0KICAgICB9OwogICAgIApAQCAtMTE3NiwxMyArMTIxNCw4IEBAIHByaXZhdGU6
CiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2sgbV9pY0NvbnRleHRTdGFjazsKICAgICAKICAgICBz
dHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKLSAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKLSAgICAgICAgTm9kZSogbV92YWx1ZTsK
LSAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7Ci0gICAgICAgIAogICAgICAgICBEZWxheWVkU2V0
TG9jYWwoKSB7IH0KLSAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIG9y
aWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1v
ZGUpCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIE9w
ZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKICAgICAgICAgICAg
IDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAg
ICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAgLTExOTUsOCArMTIyOCwxMyBAQCBwcml2YXRl
OgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRBcmd1bWVudChtX29yaWdpbiwgbV9vcGVy
YW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwotICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0
TG9jYWwobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKKyAgICAgICAg
ICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsT3JUbXAobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92
YWx1ZSwgbV9zZXRNb2RlKTsKICAgICAgICAgfQorCisgICAgICAgIENvZGVPcmlnaW4gbV9vcmln
aW47CisgICAgICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgICAgICBOb2RlKiBtX3ZhbHVlIHsg
bnVsbHB0ciB9OworICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKICAgICB9OwogICAgIAogICAg
IFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1fc2V0TG9jYWxRdWV1ZTsKQEAgLTEyMDksNyAr
MTI0Nyw3IEBAIHByaXZhdGU6CiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVU
YXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VS
VChieXRlY29kZUluZGV4KTsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigq
bmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxz
LCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Js
b2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgbV9udW1UbXBz
LCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9jay5wdHIoKTsKICAgICAvLyBt
X2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdheXMgYmUgc29ydGVkIGluIGluY3JlYXNpbmcg
b3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2Nr
TGlua2luZ1RhcmdldHMuc2l6ZSgpKQpAQCAtMTIyMSw3ICsxMjU5LDcgQEAgQmFzaWNCbG9jayog
Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKIAogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJn
ZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpu
ZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2Fs
cywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNC
bG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgbV9udW1U
bXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9jay5wdHIoKTsKICAgICBt
X2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxvY2spKTsKICAgICByZXR1cm4gYmxvY2tQdHI7
CkBAIC0xNDI0LDcgKzE0NjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNp
dmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IHN0YXRpY19jYXN0PGludD4oY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IElubGluZUNhbGxGcmFtZSBpcyBW
YXJhcmdzLCB3ZSBkbyBub3Qga25vdyBob3cgbWFueSBhcmd1bWVudHMgYXJlIGFjdHVhbGx5IGZp
bGxlZCBieSBMb2FkVmFyYXJncy4gVmFyYXJncyBJbmxpbmVDYWxsRnJhbWUncwotICAgICAgICAg
ICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90
ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSBMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0
byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCisgICAgICAgICAgICAvLyBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQg
YXJndW1lbnRzIGJ5IHhrTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZy
YW1lIHdoaWNoIG1heSBiZQogICAgICAgICAgICAgLy8gYSBnb29kIHRhcmdldCB0byBqdW1wIGlu
dG8uCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTE2MTUsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgPSBy
ZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAgaW50
IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2FsbEZyYW1l
U3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsgQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxvY2FscygKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAx
ICsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAgICAgICAg
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcyhtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQoT3BlcmFuZChUbXBPcGVyYW5kLCBjb2RlQmxvY2stPm51bVRtcHMoKSkpLnZhbHVlKCkg
KyBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50
UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAg
ICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5p
c0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzcsNyArMTY3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5l
U3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNv
ZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAo
VmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVDYWxsRnJh
bWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtp
bmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVh
bCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0g
bV9jdXJyZW50SW5kZXg7CkBAIC0xNjcyLDkgKzE3MTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2Fs
bGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVy
IHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50
cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdl
IGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNh
bGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5k
ZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQg
PSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXRE
aXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9w
SW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9H
cmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldCksIHZhbHVlKTsKICAgICAgICAgICAg
IG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmln
aW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxOCwxNiArMTc1OCwxNiBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBkbyBub3QgbmVlZCB0byBt
b3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCAhPSByZWdp
c3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAg
ICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dl
dCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lu
bGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVu
dFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1l
bnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwg
T3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9zZXRMb2Nh
bFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1
bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBD
b3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9T
ZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVm
aW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBtX3NldExv
Y2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFy
Z3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0K
IApAQCAtMTg5NCwxMiArMTkzNCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJh
cmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAg
ICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJn
dW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQot
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0
ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAg
IGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkp
Lm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkudmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRh
LT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKQEAg
LTE5MDcsMTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lu
bGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZGF0
YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OwogICAgICAgICBkYXRhLT5saW1pdCA9IG1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVt
ID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsT3AgPT0gVGFp
bENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFy
Z3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFRvR3JhcGgo
TG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisKKyAg
ICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAg
ICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUo
KSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChHZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICBlbHNlIGlmIChpbmxpbmVDYWxsRnJh
bWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGdldERp
cmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lKCksIFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9n
cmFwaC5mcmVlemUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9w
SW5mbyhkYXRhKSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBOb2RlKiBhcmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQpOworICAgICAgICAgICAg
YXV0byBhcmdDb3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChPcGVyYW5k
KFRtcE9wZXJhbmQsIE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgICAgICBzZXRE
aXJlY3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0aCwgT3BJbmZvKGRhdGEp
LCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzQ2hlY2twb2ludCgpOworCisgICAg
ICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldExvY2FsT3JU
bXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBuZWVkIHRvIGtlZXAgYWxp
dmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAvLyBhbmQgYXJndW1lbnRz
QXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdlIG9ubHkgbmVlZCBhIFBo
YW50b20gZm9yCkBAIC0xOTIzLDE0ICsxOTc2LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
CiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25z
IGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAvLyBiZWZvcmUgU1NBLgog
ICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoZGF0YS0+Y291bnQp
OwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3JjZSB0aGUg
Y291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAogICAgICAgICAvLyBt
YXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5
IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAgICAgLy8gbW9zdGx5IGp1
c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnByZWRpY3QoU3BlY0ludDMy
T25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9maXRhYmxlVG9VbmJveCh0
cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJn
dW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwo
KSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50Q291
bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0
KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgdW5zaWdu
ZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTE5NTQsNyArMjAwNyw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmly
dHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5v
ZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVudHMgPj0gbWFuZGF0b3J5
TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERlZmluaXRlbHksIE9wSW5m
byh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPm9w
ZXJhbmQoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1TZXRBcmd1bWVudHM7CiAg
ICAgICAgIH0KICAgICB9OwpAQCAtMjA1NCw3ICsyMTA3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNh
bGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAg
IC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0OiAiLCByZWdpc3Rlck9m
ZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdpc3Rlck9mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgVkVSQk9T
RV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcsICJcbiIpOwogICAgIHNl
dERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gp
OwogCkBAIC01MTAzLDcgKzUxNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigp
OwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlzQ29uc3RhbnQoKSk7Ci0g
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1f
cmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhw
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVuUmVnRXhwKSwganNDb25z
dGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19yZWdl
eHApOwogICAgICAgICB9CkBAIC02MTc5LDcgKzYyMzIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9jdXJyZW50QmxvY2stPnNpemUoKSB8fCAobV9ncmFwaC5jb21waWxhdGlvbigpICYmIG1f
Y3VycmVudEJsb2NrLT5zaXplKCkgPT0gMSAmJiBtX2N1cnJlbnRCbG9jay0+YXQoMCktPm9wKCkg
PT0gQ291bnRFeGVjdXRpb24pKTsKIAotICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFu
ZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsK
KyAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVy
ID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsKIAogICAgICAgICAgICAg
aWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7IC8v
IFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJh
Y3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCkBAIC02MTk2LDcgKzYyNDksNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCi0gICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChw
cm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCkBAIC02MjI0LDE0ICs2Mjc3
LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAKIAogICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZMb2NhbHMgPSAwOwotICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAg
ICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzTG9jYWwoKSk7CiAg
ICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dyYXBoKEV4dHJhY3RDYXRjaExvY2Fs
LCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9jYWxQcmVkaWN0aW9uc1tudW1iZXJP
ZkxvY2Fsc10pKTsKICAgICAgICAgICAgICAgICArK251bWJlck9mTG9jYWxzOwotICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKHByb2ZpbGUubV9vcGVyYW5kKSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQp
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbG9jYWxzVG9TZXQudW5jaGVja2VkQXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZhbHVlKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIGlmIChudW1iZXJPZkxvY2FscykKQEAgLTYzNTksNyArNjQxMiw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9qbmVxX3B0cjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUq
IGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQo
KSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zcGVjaWFsUG9pbnRlcikpOwogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgICAgICAgICAg
Tm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBpZiAoYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewpAQCAtNjgyNyw4ICs2ODgw
LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52
aXJvbm1lbnQ+KCk7CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5p
c0NvbnN0YW50KCkgJiYgYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUuaXNDb25zdGFudCgpKTsKLSAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25n
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5
bWJvbFRhYmxlLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZh
bHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2st
PmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLm9mZnNldCgpKSk7CisgICAgICAg
ICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xU
YWJsZSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGgu
ZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChi
eXRlY29kZS5tX2luaXRpYWxWYWx1ZSkpOwogICAgICAgICAgICAgTm9kZSogc2NvcGUgPSBnZXQo
Ynl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52aXJvbm1lbnQg
PSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1ib2xUYWJsZSksIE9wSW5m
byhpbml0aWFsVmFsdWUpLCBzY29wZSk7CiAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGxleGljYWxFbnZpcm9ubWVudCk7CkBAIC03Mjc2LDggKzczMjksMTAgQEAgQnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIC8vIFRoZSBv
d25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgYmFy
cmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCiAgICAgICAg
IG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNhbGxG
cmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2NhbGxl
ci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9jYWxsZXItPm1fY29kZUJs
b2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0U3RhY2tPZmZz
ZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0g
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpZiAoY2FsbGVlKSB7CiAgICAg
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5
Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xv
c3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc2MzksNyArNzY5NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC03NjU5LDI0ICs3NzE0LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzb3ItPnByZWRlY2Vz
c29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09w
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYW5k
IGFyZ3VtZW50ID0gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQuaXNBcmd1bWVudCgpICYmICFhcmd1bWVu
dC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9y
PEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRzID0gbV9pbmxpbmVDYWxsRnJhbWVUb0FyZ3Vt
ZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0FyZ3VtZW50KCldLT5hZGRWYXJpYWJsZSh2YXJp
YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBvcCwgb3JpZ2lu
LCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgRmx1c2gsIG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFBoYW50
b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhh
bnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
T3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaXZlbmVz
c1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIFBoYW50b21Mb2NhbCwgb3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIGZsdXNoRm9yVGVybWlu
YWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERp
cmVjdCk7CkBAIC03NzQxLDYgKzc3OTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgp
CiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCkpOwogICAgIH0KIAorICAgIG1fZ3JhcGgubV90bXBzID0gbV9udW1UbXBzOwogICAgIG1fZ3Jh
cGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xv
dHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
QVBoYXNlLmNwcAppbmRleCA4ZTliYjRhY2JlNTUwMmRkYTdiMzc0Nzg0YjVhODVmZmRlNzAzYmZk
Li4zZGM3NTY4ZjFlZTJjNjk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2MjUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTcwLDIyICsxNzAsMjIgQEAgcHJp
dmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNvbnN0IE9wZXJh
bmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFu
Lm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG11c3RIYW5kbGVW
YWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5k
bGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBPcHRp
b25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICBp
ZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5v
dCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUp
IHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIG9wZXJhbmQsICJc
biIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgIFdpZGVuaW5nICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiB3aXRoICIsIHZhbHVl
LnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5nICIs
IG9wZXJhbmQsICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxvY2stPnZhbHVlc0F0SGVhZC5v
cGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0YXJnZXQubWVyZ2VPU1JF
bnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVlKCksIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2JjMTZiNjdkNjAyYmE2NDI2
YWYwZjIzODIuLjU3NzBmMDk4OTQyYzg5NmI3YWNmODIzZmNhYjk0NDRhMjI0Y2NlZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmNwcApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWNpYWxDYXNlQXJndW1l
bnRzKCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5kPigpOwogICAgICAgICBw
cm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAgcHJvcGFnYXRlUGhpczxU
bXBPcGVyYW5kPigpOwogICAgICAgICBjb21wdXRlSXNGbHVzaGVkKCk7CiAgICAgICAgIAogICAg
ICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwpAQCAtMjExLDEwICsyMTIsMjAgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5vZGUqIG5vZGUpCiAgICAg
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkp
Ci0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5v
ZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5v
ZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0
Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRP
cGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsT3BlcmFu
ZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiB7CisgICAgICAg
ICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwg
dmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5
cGUsIE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYgKzI0MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIEFTU0VSVChvdGhl
ck5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3Ro
ZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMjcwLDE1ICsyODIsMjUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNh
bm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50
T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9j
YWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5s
b2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNh
bm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFu
ZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7
CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBl
LCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9j
YWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRtcE9w
ZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8
bm9kZVR5cGUsIFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9jYWwoKSwg
bm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUt
Pm9wZXJhbmQoKSwgbm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXplTG9j
YWxzSW5CbG9jaygpCkBAIC0yODksNiArMzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIGNsZWFyVmFyaWFibGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKICAgICAgICAgY2xlYXJWYXJp
YWJsZXM8TG9jYWxPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlhYmxlczxUbXBPcGVyYW5k
PigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkgcmVmZXJlbmNl
cyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CiAgICAgICAgIC8v
IHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQsIGJ1dCBkb2Vzbid0IGFz
c3VtZSB0aGF0IHRoZSByZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBwcml2YXRlOgogICAgIHRlbXBs
YXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJvcGFnYXRlUGhpcygpCiAg
ICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sgPSBvcGVy
YW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBtX2xvY2Fs
UGhpU3RhY2s7CisgICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9
IHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHkuCiAgICAgICAgIG1fYmxv
Y2sgPSAwOwpAQCAtNDY2LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wZXJh
bmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlT
dGFja0ZvcigpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVy
YW5kKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsKLSAgICAgICAgcmV0
dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAg
ICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsKKyAg
ICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAg
IGNhc2UgVG1wT3BlcmFuZDogcmV0dXJuIG1fdG1wUGhpU3RhY2s7CisgICAgICAgIH0KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21wdXRlSXNGbHVzaGVkKCkKQEAgLTUyMSw2ICs1NDcsNyBAQCBwcml2YXRlOgogICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9hcmd1bWVu
dFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fbG9jYWxQaGlTdGFj
azsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX3RtcFBoaVN0YWNrOwogICAgIFZl
Y3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4IDIzODFjNmI4ZjhmNGJhNzYz
NGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UuLjRjY2UxNzQ4ODNlMjA0MTBkNjIyM2E2ZjQxNzJlZGRl
Njk4YWFlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCkBA
IC0xNDcsOCArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBoZWFwLnBheWxv
YWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1v
dmUoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYg
KGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrU3RhY2tN
YXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE3Miw3ICsxNzEsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChwYWlyLmtleS5oZWFwKCkua2lu
ZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fi
c3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMy
KCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBT
dGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgp
ICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBhaXIua2V5KQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTIyNiw4ICsyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQWJzdHJhY3RIZWFwIGFic3Ry
YWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAgICAgICAgICAgIGlmIChhYnN0cmFjdEhlYXAu
cGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZChtX2ZhbGxiYWNr
U3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAgIEFTU0VSVChhYnN0cmFjdEhl
YXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
OwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFk
ZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkudmFsdWUoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5vZGUsIDB9KTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0OSw4ICsyNDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKLSAgICAgICAgICAgIEFTU0VSVChsb2NhdGlv
bi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52
YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3Rh
Y2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9u
LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQogICAgICAgICAgICAgICAgICYmIGl0ZXJhdG9y
LT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRv
ci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk4LDcgKzI5NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gYSBk
dXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBvbmx5IGxpdmUgaW4gbV9mYWxsYmFja1N0YWNr
TWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5LCBUT1AgYWx3YXlzIGdvZXMgaW50byBtX2Zh
bGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZSB2YWx1ZS4KLSAg
ICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1
bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxp
bnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKKyAgICBIYXNoTWFwPGludDY0X3QsIHN0
ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDY0X3Q+OjpIYXNo
LCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2NF90Pj4gbV9hYnN0cmFjdEhl
YXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOwogCiAgICAgTWFwIG1faGVh
cE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggODhl
ZmVlN2QwMzMyOWRkYzJkY2E3MTY3MjFlODBjMTIyZDAyZTNhNi4uNjA2MzUyN2EzMzZkNmNlOTI2
YzJhNGFmMjFjZWRmNGQ4NzFlOWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKQEAgLTExMiw5ICsxMTIsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQog
ICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhpcyBkb2VzLgogICAgIGZvciAo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5s
aW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIHJlYWQoQWJz
dHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQot
ICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KIAog
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5IGFjY291bnQgd2hpY2ggbm9kZXMg
Y2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29u
c3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CkBAIC00OTgs
NyArNDk4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQo
KSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKQEAgLTc4
OSwzNiArNzg5LDQzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xv
YywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUpKTsK
KyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUt
Pm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3Ry
YWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5k
KCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0
YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewotICAgICAg
ICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5vcGVyYW5kKTsKICAgICAgICAgcmVhZChoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhl
YXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAg
QWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5k
KTsKICAgICAgICAgd3JpdGUoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tM
b2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAg
IHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKKyAgICAgICAgcmV0dXJuOyAgCisgICAgfQor
CiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAg
d3JpdGUoSGVhcCk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNv
dW50Lm9mZnNldCgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBp
LS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5v
ZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODI3LDkgKzgzNCw5IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoU3RhY2spOwogICAgICAgICAKICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkp
KSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsg
c3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVz
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3Bw
CmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBkMDljZDJhYzMwZjMuLjE1NzQ2YzA1
NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApAQCAtMzksNyArMzksNyBAQCBz
dGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQXZhaWxhYmlsaXR5
TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUo
CiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCiAgICAgICAgICAgICAgICAgcmVn
LAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCA3OTg3Yjg3MGZkNTA5Zjkz
MDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiLi43ZmZkNGQzNWI2Y2Y1YzlkZTM4MWU3ZGE2MTMzMmZk
NTI0OTY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5j
cHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRDb2RlT3Jp
Z2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNv
ZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsK
ICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVy
biBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6
OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMg
KzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRl
eChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmln
aW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBB
U1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNh
bGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6Omxhc3RD
YWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZU9yaWdpbnMuc2l6ZSgp
KTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNvZGVPcmlnaW5zLnNp
emUoKSAtIDEpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdp
bnMuc2l6ZSgpIC0gMSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6
OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA4NTQxMjMxNDc0MWU2ZjExMjYx
ZjJlOTdjNDlmZTY0NGRhZTdiYWY3Li5mMzhjODNmZGQzMGMyZjUzYjNkNTA5M2Y0MGIyYzcwZTk1
MzEwNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yOTQs
NiArMjk0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNh
c2UgSW5CeVZhbDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3Vz
dG9tOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
IGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXg6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dp
dGhWYWxpZFJhZGl4Q29uc3RhbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAKaW5kZXggMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIyNzJkNDc5OTk4YjUzOS4uNDVmYmM0
MzlkNTNiYTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcApAQCAtOTAsNyArOTAsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZUltcGwoCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQg
dGhlIERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAg
Ly8gbWFrZSBzdXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRp
b24gb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVy
YXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwogICAgIHZt
LmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhZWUxZjAwNzNiMGY0YmJjYzQ3MzRlYjY0
MWU0NjQ4YzMwNTVhMjQ0Li5jYTMzZGIyMjdkNGI5Mjc3M2ZhODZkNzJlZTNkNGQxYjg1YmY5ODNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTI0
MzIsNiArMjQzMiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIExvYWRWYXJhcmdz
OiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQg
bm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CkBAIC0yNDY0LDggKzI0NzIsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2Fz
ZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBj
YXNlIE5ld1Byb21pc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZvckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxz
LmgKaW5kZXggMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRjZmRlMjhiOS4uOTMzYTJi
ZGUyMmUxNjZjMmFlYjZkNGFjMWJiZTljZTFlNWNlZDU2YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtMzIsNiArMzIsMTAgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2UgRm9yQWxsS2lsbHNJbnRlcm5hbCB7
Citjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIC8vIFV0aWxpdGllcyBmb3Ig
ZmluZGluZyB0aGUgbGFzdCBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUgaW4gREZHIFNTQS4g
VGhpcyBhY2NvdW50cyBmb3IgbGl2ZW5lc3MgZHVlCiAvLyB0byBPU1IgZXhpdC4gVGhpcyBpcyB1
c3VhbGx5IHVzZWQgZm9yIGVudW1lcmF0aW5nIG92ZXIgYWxsIG9mIHRoZSBwcm9ncmFtIHBvaW50
cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSwKIC8vIGJ5IGV4cGxvcmluZyBhbGwgYmxvY2tzIHdoZXJl
IHRoZSBub2RlIGlzIGxpdmUgYXQgdGFpbCBhbmQgdGhlbiBleHBsb3JpbmcgYWxsIHByb2dyYW0g
cG9pbnRzIHdoZXJlIHRoZQpAQCAtNTMsMTMgKzU3LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNv
bnN0CiAgICAgCiAgICAgQ29kZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRlci0+b3JpZ2luLmZvckV4
aXQ7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3RlZDsKKyAgICBPcGVyYW5k
IGFscmVhZHlOb3RlZDsKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0aGluZyB0aGF0IGlzIGxp
dmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVlLgogICAgIGlmIChub2Rl
QWZ0ZXItPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBub2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUlu
Qnl0ZWNvZGUocmVnLCBhZnRlcikpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKLSAgICAg
ICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9k
ZUFmdGVyLT51bmxpbmtlZE9wZXJhbmQoKTsKKyAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0
ZWNvZGUob3BlcmFuZCwgYWZ0ZXIpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOwor
ICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTcwLDggKzc0LDI0IEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgLy8gb3Ro
ZXIgbG9vcCwgYmVsb3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5lQ2FsbEZyYW1lID0gYmVmb3Jl
LmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPT0gYWZ0
ZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3Jl
SW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7
CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3IoYmVmb3JlSW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFmdGVyLmJ5dGVjb2RlSW5k
ZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0ZWNvZGVJ
bmRleCgpLmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgp
KTsKKworICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NGb3JDaGVja3Bv
aW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgYXV0
byBsaXZlQWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYWZ0ZXIu
Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGludCB0bXBPZmZzZXQgPSBiZWZvcmVJbmxp
bmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAg
ICAgICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZpbHRl
cihsaXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQoWyZd
IChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihPcGVyYW5kKFRtcE9wZXJh
bmQsIHRtcCArIHRtcE9mZnNldCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBO
byBsb2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJh
bWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAgICAgRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVC
bG9jayk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVCZWZvcmUgPSBmdWxsTGl2
ZW5lc3MuZ2V0TGl2ZW5lc3MoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxjdWxh
dGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZl
QWZ0ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLCBM
aXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CkBAIC04MiwxNyArMTAyLDIxIEBA
IHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3Jl
LCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICAKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFmdGVyLmJ5dGVjb2Rl
SW5kZXgoKS5jaGVja3BvaW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9zcyBhIGNoZWNrcG9pbnQg
YnV0IGJlZm9yZSBhbmQgYWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5lQ2FsbEZyYW1lLiIpOwor
CiAgICAgLy8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRpdmUgd2F5OiBpdCBpcyBr
aWxsZWQgaWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVyLgotICAgIEJpdFZlY3Rv
ciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShhZnRlcik7Ci0gICAgZ3Jh
cGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVjdG9yIGxpdmVBZnRlciA9
IGdyYXBoLmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShhZnRlcik7CisgICAgdW5zaWduZWQg
bnVtTG9jYWxzID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpOworICAgIGdyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAg
ICAgYmVmb3JlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAg
ICAgIGlmIChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5vdGVkKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50b0xvY2Fs
KCkpKQorICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVt
TG9jYWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAg
ICBpZiAobGl2ZUFmdGVyLmdldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CiAg
ICAgICAgIH0pOwogfQogICAgIApAQCAtMTA1LDcgKzEyOSw4IEBAIHZvaWQgZm9yQWxsS2lsbGVk
Tm9kZXNBdE5vZGVJbmRleCgKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNlZW5JbkNs
b3N1cmVGbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGxlZEZ1bmN0
b3JGbGFnID0gMjsKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gZmxhZ3M7Ci0gICAgCisK
KyAgICBBU1NFUlQobm9kZUluZGV4KTsKICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CiAgICAgCiAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAtMTIwLDE1ICsxNDUsMTMg
QEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAg
ICAgICB9KTsKIAotICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7Ci0gICAgaWYgKG5vZGVJbmRl
eCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAgIE5vZGUq
IGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAgIGZvckFsbEtpbGxlZE9w
ZXJhbmRzKAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAgICAgICBbJl0gKFZpcnR1
YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAotICAgICAgICAg
ICAgICAgIHJlZywKKyAgICAgICAgICAgICAgICBvcGVyYW5kLAogICAgICAgICAgICAgICAgIFsm
XSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFn
cy5nZXQobm9kZSkgJiBzZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAgICAgICAgICB9LApAQCAt
MTU5LDYgKzE4Miw3IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIC8vIFN0YXJ0IGF0
IHRoZSBzZWNvbmQgbm9kZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBleHBlY3RlZCB0byBvbmx5
IGluc3BlY3Qgbm9kZXMgZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0aGUgYmxvY2sgdXAgdG8g
bm9kZUluZGV4IChleGNsdXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMgemVybyB0aGVuIHRoZSBm
dW5jdG9yIGhhcyBub3RoaW5nIHRvIGRvLgogICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MTsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgZGF0
YUxvZ0xuSWYoRm9yQWxsS2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxvY2FsIGF2YWlsYWJpbGl0
eSBhdCBpbmRleDogIiwgbm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxh
YmlsaXR5KTsKICAgICAgICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAg
ICAgIGdyYXBoLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSwgYmxvY2ssIG5vZGVJ
bmRleCwKICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAppbmRleCA3OTY0OTg1MzMxNjAzYzM4YmJhZWNlNDNiNDdhOGJhMDg3
OWJkODcwLi5mMzVkNjVjMmE4ZGYxOGZmYTdlZWVmNTQ2MWNhMzJhM2M0YjJhYzIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDggKzMwOCw4IEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2Rl
KiBub2RlLCBEdW1wQ29udGV4CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgq
dGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxl
QWNjZXNzRGF0YSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0
aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAiKCIsIFZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgICAg
ICBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsKICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJtYWNoaW5lOiIsIG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5v
ZGUsIER1bXBDb250ZXgKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0YWNrQWNjZXNzRGF0YSgp
KSB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVM
b2NhbC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOiIs
IGRhdGEtPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Zm9y
bWF0KTsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgCi0gICAgICAg
IG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICBpZiAobm9kZS0+
aGFzVW5saW5rZWRPcGVyYW5kKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpOwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JMZW5ndGhIaW50KCkpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQgPSAiLCBub2RlLT52ZWN0
b3JMZW5ndGhIaW50KCkpOwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNWYWx1ZSgpKQpAQCAtNTE1
LDkgKzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAgICAgICBvdXQucHJpbnQo
cHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBi
bG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT5vcCgpID09IFBoaSk7
CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1
bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2Rl
LT5sb2NhbCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAgICAgICAg
ICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5vcGVyYW5k
KCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5v
ZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hp
bGQyKCkpIHsKQEAgLTg4NCw3ICs4ODUsNyBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9j
YWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAg
ICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5s
b2NhbCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT5vcGVyYW5kKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpCiAgICAgICAg
ICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC04OTMsOSArODk0LDkgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2Fs
KEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAgICAg
ICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0Rh
dGEpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdWJzdGl0dXRlKGJs
b2NrLCBpbmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAgICAgICAgICAgIE5vZGUq
IG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2su
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpOwog
ICAgICAgICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAgICAgYmxv
Y2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9
IG5ld0dldExvY2FsOworICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dldExvY2FsOwogICAgICAg
ICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0xMTMzLDIzICsxMTM0LDQzIEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpraWxsc0Zv
cihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICByZXR1cm4ga2lsbHNGb3Io
YmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9CiAKLWJvb2wgR3JhcGg6
OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCBvcGVyYW5kLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ2hl
Y2tpbmcgb2Ygb3BlcmFuZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICBib29sIGlz
Q2FsbGVyT3JpZ2luID0gZmFsc2U7CisKICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luUHRyID0g
JmNvZGVPcmlnaW47Ci0gICAgZm9yICg7OykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVP
cmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkpOworICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNv
ZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxl
IHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKKyAgICAv
LyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgorICAgIGZvciAo
OyBjb2RlT3JpZ2luUHRyOyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2FsbEZyYW1lID8gJmlubGlu
ZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyIDogbnVsbHB0cikgeworICAgICAgICBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgdG1wT2Zmc2V0ID0gaW5saW5l
Q2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAgICAgICAgICAg
dW5zaWduZWQgb3BlcmFuZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFs
dWUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVlKCkgPj0gMCk7CisgICAg
ICAgICAgICAvLyBUaGlzIHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0byBzb21lb25lIHdlIGlu
bGluZWQuCisgICAgICAgICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1wT2Zmc2V0ICsgbWF4TnVt
Q2hlY2twb2ludFRtcHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVtVG1wcygpIHx8IG9wZXJh
bmRJbmRleCA8IHRtcE9mZnNldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgYXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywg
Y29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiBiaXRN
YXAuZ2V0KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGNvZGVPcmln
aW5QdHItPnN0YWNrT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAKLSAgICAgICAgYXV0byog
aW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAg
ICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQo
KSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICBpZiAo
cmVnLmlzQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZy5v
ZmZzZXQoKSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKIApAQCAtMTE3Niw0
MiArMTE5Nyw0MSBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAg
ICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gbGl2ZW5lc3NGb3Io
Y29kZUJsb2NrKTsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNv
ZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHJldHVybiBmdWxsTGl2
ZW5lc3Mub3BlcmFuZElzTGl2ZShyZWcub2Zmc2V0KCksIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJp
YXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdp
bikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Yg
c3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5lc3MudmlydHVhbFJlZ2lzdGVySXNMaXZlKHJlZywg
Ynl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVP
cmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBcmd1
bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFudCBpZiBpdCB3YXNu
J3QgZm9yIG91cgogICAgICAgICAvLyBvcF9jYWxsX3ZhcmFyZ3MgaW5saW5pbmcuCi0gICAgICAg
IGlmIChyZWcuaXNBcmd1bWVudCgpCisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgcmVn
LmlzQXJndW1lbnQoKQogICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9B
cmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKSkg
ewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQXJn
dW1lbnQgaXMgbGl2ZS5cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBt
YXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCi0gICAgICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUg
Zm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCi0gICAgICAgIGNvZGVPcmlnaW5QdHIgPSAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgIGlzQ2FsbGVyT3JpZ2luID0gdHJ1ZTsK
ICAgICB9CisKKyAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywg
cmV0dXJuaW5nIHRydWUuXG4iKTsKKyAgICByZXR1cm4gdHJ1ZTsgICAgCiAgICAgCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotQml0VmVjdG9yIEdyYXBoOjpsb2NhbHNM
aXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCitCaXRWZWN0b3IgR3JhcGg6Omxv
Y2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAg
Qml0VmVjdG9yIHJlc3VsdDsKLSAgICByZXN1bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVj
b2RlKAorICAgIHVuc2lnbmVkIG51bUxvY2FscyA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShudW1Mb2NhbHMgKyBibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpKTsKKyAgICBmb3JBbGxMb2NhbHNB
bmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGNvZGVPcmlnaW4sCi0gICAgICAgIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkp
OwotICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KHJlZy50b0xvY2FsKCkpOworICAgICAgICBb
Jl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3Bl
cmFuZC5pc1RtcCgpID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xv
Y2FsKCk7CisgICAgICAgICAgICByZXN1bHQucXVpY2tTZXQob2Zmc2V0KTsKICAgICAgICAgfSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MzQsOCArMTY1NCw4IEBAIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
Tm9kZSogY3VycmVuCiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBvcGVyYW5kTm9kZTsgbm9kZTsp
IHsKICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7Ci0gICAgICAgICAg
ICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAg
ICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwor
ICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+b3BlcmFuZCgpLmlzQXJndW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPm9wZXJhbmQoKS50
b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9yb290
VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50RGVmaW5pdGVseSBub2Rl
cyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEKQEAgLTE2NTUsNyArMTY3
NSw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+bG9jYWwoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCksIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IGZhYjljZjAyYTI1
OTc2ZWY0N2QxNzkwNWJhZDljZTAzZTM4MmJjZTUuLmY3YTFkODIxNGMzMDJkN2Q5NmFjMmE3N2Ew
MTg2NmE5ZDExOWY1MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTg0
MCwxMyArODQwLDEzIEBAIHB1YmxpYzoKICAgICAvLyBRdWlja2x5IHF1ZXJ5IGlmIGEgc2luZ2xl
IGxvY2FsIGlzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGlzIGZhc3RlciB0aGFuIGNh
bGxpbmcKICAgICAvLyBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIGlmIHlvdSB3aWxsIG9ubHkgcXVl
cnkgb25lIGxvY2FsLiBCdXQsIGlmIHlvdSB3YW50IHRvIGtub3cgYWxsIG9mIHRoZQogICAgIC8v
IGxvY2FscyBsaXZlLCB0aGVuIGNhbGxpbmcgdGhpcyBmb3IgZWFjaCBsb2NhbCBpcyBtdWNoIHNs
b3dlciB0aGFuIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkuCi0gICAgYm9vbCBpc0xpdmVJbkJ5dGVj
b2RlKFZpcnR1YWxSZWdpc3RlciwgQ29kZU9yaWdpbik7CisgICAgYm9vbCBpc0xpdmVJbkJ5dGVj
b2RlKE9wZXJhbmQsIENvZGVPcmlnaW4pOwogICAgIAotICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBv
ZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBk
b2Vzbid0IGdpdmUgeW91CisgICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1l
bnQgbG9jYWxzIGFuZCB0bXBzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3Qg
Z2l2ZSB5b3UKICAgICAvLyBhbnkgYXJndW1lbnRzIGJlY2F1c2UgdGhvc2UgYXJlIGFsbCBwcmVz
dW1lZCBsaXZlLiBZb3UgY2FuIGNhbGwgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSB0bwogICAgIC8v
IGFsc28gZ2V0IHRoZSBhcmd1bWVudHMuIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiBjYWxsaW5n
IGlzTGl2ZUluQnl0ZWNvZGUoKSBmb3IgZWFjaCBsb2NhbC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHZvaWQgZm9yQWxsTG9j
YWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIG5vdCByZWR1bmRh
bnRseSByZXBvcnRpbmcgYXJndW1lbnRzLiBOZWNlc3NhcnkgYmVjYXVzZSBpbiBjYXNlIG9mIGEg
dmFyYXJncwogICAgICAgICAvLyBjYWxsLCBvbmx5IHRoZSBjYWxsZWUga25vd3MgdGhhdCBhcmd1
bWVudHMgYXJlIGxpdmUgd2hpbGUgaW4gdGhlIGNhc2Ugb2YgYSBub24tdmFyYXJncwpAQCAtODgx
LDYgKzg4MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRl
Y29kZVtyZWxhdGl2ZUxvY2FsXSkKICAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwog
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJ
bmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2st
Pm51bVRtcHMoKSk7CisgICAgICAgICAgICAgICAgYXV0byBsaXZlVG1wcyA9IHRtcExpdmVuZXNz
Rm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkp
OworICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1w
KSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlubGluZUNhbGxG
cmFtZSwgT3BlcmFuZChUbXBPcGVyYW5kLCB0bXApKSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9m
IHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1
c2VmdWwgaWYKKyAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMgYW5k
IHRtcHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgogICAgIC8vIHlv
dSB3YW50IHRvIGNvbXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28gZGlmZmVy
ZW50IENvZGVPcmlnaW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNMaXZlSW5CeXRlY29kZShDb2Rl
T3JpZ2luKTsKKyAgICBCaXRWZWN0b3IgbG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVP
cmlnaW4pOwogCiAgICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IGFwcHJvcHJpYXRlTGl2ZW5l
c3NDYWxjdWxhdGlvblBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzQ2FsbGVyT3JpZ2lu
KQogICAgIHsKQEAgLTkzOCwxMiArOTQ2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAgIH0KICAgICAKLSAgICAvLyBU
ZWxscyB5b3UgYWxsIG9mIHRoZSBhcmd1bWVudHMgYW5kIGxvY2FscyBsaXZlIGF0IHRoZSBnaXZl
biBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxs
TG9jYWxzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHBy
ZXN1bWVkIGxpdmUuCisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgb3BlcmFuZHMgbGl2ZSBh
dCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCisgICAgLy8gZXh0ZW5zaW9u
IHRvIGZvckFsbExvY2Fsc09yVG1wc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVu
dHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CiAgICAgdm9pZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBmb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAgZm9yQWxsTG9jYWxzQW5k
VG1wc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOwogICAgICAgICAKICAgICAg
ICAgLy8gUmVwb3J0IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZS4KICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgYXJndW1lbnQtLTspCkBAIC0xMTE0LDYgKzExMjIsNyBAQCBwdWJsaWM6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNrd2FyZHNDRkc7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRvcnM+IG1fYmFja3dhcmRzRG9taW5hdG9yczsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM+IG1fY29udHJvbEVx
dWl2YWxlbmNlQW5hbHlzaXM7CisgICAgdW5zaWduZWQgbV90bXBzOwogICAgIHVuc2lnbmVkIG1f
bG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNpZ25l
ZCBtX3BhcmFtZXRlclNsb3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAppbmRleCA5OWFlZmZjZGMwNWExMWM0NWIwNTc0
MTI1MGY0ZDJhZWI0ZTIyOGNkLi4yMDJkMjI1MDUzZmE5ZGZiZTVjMjNjNjRiY2Y4YmUzODRlM2U3
NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcApAQCAtNDUsOCArNDUsOCBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwogSW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0
YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiAgICAgLCBtX2Fic3RyYWN0
VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCi0gICAgLCBtX3ZhcmlhYmxlcyht
X2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQot
ICAgICwgbV9ibG9jaygwKQorICAgICwgbV92YXJpYWJsZXMoT3BlcmFuZHNMaWtlLCBncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICwgbV9ibG9jayhudWxscHRyKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmgKaW5kZXggYmY1ZWFkMThlYzE2NDdlZTE2NzY2ODgzNTc0MDFmYTdmZWM3MTI5OS4uMTg2
NWU2YTFlZmZjM2RhYWVmZTU4NGNhODYyYzQ5YmMzNjg1ODUwMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaApAQCAtMTY3LDEz
ICsxNjcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJs
ZXNbaW5kZXhdKTsKICAgICB9CiAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVy
YW5kKQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMub3BlcmFuZEluZGV4KG9wZXJh
bmQpKTsKICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gdGhpcy0+b3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKTsg
fQotICAgIAogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLmxvY2FsSW5kZXgoaW5kZXgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggM2Q4
NDNjZTU4ZjIwYjQxMTYzMzlmY2RhOTU4OGFlYmE2YjdhOGMyZS4uNmY1MTE5OTg0M2Q3ZWY1N2Iz
MDU1NjlkZjM4MzA2NjZjN2Y2YzE4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKQEAgLTg1LDggKzg1LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
a09TUkV4aXRzKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JF
eGl0VGh1bmtHZW5lcmF0b3IpOwotICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewog
ICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25J
bmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVK
dW1wczsKQEAgLTk3LDEzICs5NSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygp
CiAKICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7Ci0gICAgICAgIGlmIChPcHRp
b25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewotICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBqdW1w
KCk7Ci0gICAgICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsodGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAo
KTsKKyAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CiAgICAg
fQogfQogCkBAIC0yODgsMTEgKzI4MCw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKICAgICBhdXRvIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07Ci0gICAg
ICAgIGlmICghT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRhcmdldCk7Ci0gICAgICAg
ICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXRDb2RlLT5vc3JFeGl0W2ldOwotICAgICAgICAgICAg
ZXhpdC5tX3BhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihpbmZvLm1fcGF0Y2hhYmxlSnVtcCk7Ci0gICAgICAgIH0KKyAgICAgICAg
bGlua0J1ZmZlci5saW5rKGluZm8ubV9wYXRjaGFibGVKdW1wLm1fanVtcCwgdGFyZ2V0KTsKKyAg
ICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKKyAgICAgICAgZXhp
dC5tX3BhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihpbmZvLm1fcGF0Y2hhYmxlSnVtcCk7CiAgICAgICAgIGlmIChpbmZvLm1fcmVw
bGFjZW1lbnRTb3VyY2UuaXNTZXQoKSkgewogICAgICAgICAgICAgbV9qaXRDb2RlLT5jb21tb24u
anVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVtcFJlcGxhY2VtZW50KAogICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihpbmZvLm1fcmVwbGFjZW1l
bnRTb3VyY2UpLApAQCAtNTk1LDExICs1ODUsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bm90aWNl
T1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2MK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKSAhPSB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKworICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJs
ZS0+b3BlcmFuZCgpLmlzVG1wKCkpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5k
KCkudmlydHVhbFJlZ2lzdGVyKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CiAgICAg
ICAgICAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgKICAgICAgICAgICAgICAg
ICAgICAgT1NSRW50cnlSZXNodWZmbGluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT5sb2NhbCgpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhhYzI1Y2E2MzEz
NC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlv
bihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBz
dGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBp
dCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25nLAogICAgICAgICAvLyB0
aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVzaCB0aGF0IHdlIGluc2Vy
dC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIGZsdXNoSXNEZWZpbml0
ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KSB7CiAg
ICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSkt
PmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgpID09IG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1f
Z3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBo
YW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGlu
c2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9u
SGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0Q2F0Y2hIZWFk
OwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2
ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBz
KCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAg
ICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEgKzEzMiwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBv
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5k
bGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgICAg
IGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFy
Z2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRl
Y29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGl2
ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4o
Y2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3Bl
cmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAg
ICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1NiwxMiArMTU1LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAg
ICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9j
a0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIpOworICAgICAg
ICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKE9w
ZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0cik7CiAKICAgICAgICAg
YXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBp
bmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRs
ZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENh
dGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7Cisg
ICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJh
bmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNo
TG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3OCw2ICsxNzcsOCBAQCBw
dWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwrKykKICAgICAgICAg
ICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVzaChPcGVyYW5kKFRtcE9w
ZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAgICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNl
cHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0g
U2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkp
IHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2Fs
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRj
aEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisg
ICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3Bl
cmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNo
TG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3BlcmFuZCkpOwogCiAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2Nr
QWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9n
cmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
b3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAg
ICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAg
ICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCmlu
ZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYy
OWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApAQCAtODUsNyArODUsNyBA
QCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CiAgICAgICAgIG1fZ3Jh
cGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICBibG9jay0+dGVybWluYWwoKS0+
b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsK
KyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRl
Lm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAgIH0pOwogICAgICAgICAK
QEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gTW92SGludCkgewotICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0
YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBFcG9j
aCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3Vy
cmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50
RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOworICAgICAgICAgICAgICAgIG1f
c3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBFcG9jaCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBu
b2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSArMTE2LDE1IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXgg
LSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1p
Z2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRo
YXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQocmVnKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQg
Iiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5NmY0MDRlMzNiNDYuLmI4
MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NE
YXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKLSAgICAgICAgOiBsb2NhbChsb2NhbCkK
KyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQp
CisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAsIGZvcm1hdChmb3JtYXQpCiAg
ICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWw7CisgICAgT3BlcmFu
ZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7CiAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1YmxpYzoKICAgICAgICAg
c3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2Fy
ZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05MjMsOSArOTI0LDExIEBA
IHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgor
ICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7
CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6
Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQy
KCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBAIC05NzMsOSArOTc2LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRh
Kj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQor
ICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nl
c3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2Fs
KCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVW5s
aW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZE9wZXJhbmQoKQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBA
IC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
VmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVy
YW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOworICAgICAg
ICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6
ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAgICBib29s
IGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgp
ID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9h
ZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRl
eCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0Li5lM2U5YzMyZjhkMDgx
M2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1
c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRT
dGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2
ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0
QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVI
YXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCAzMjgwZjg3YTYyNjdk
ZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi5kMTBhMjA3MDRiMDE5ZDdlODc3YWNiMjk2MzI2
YmE4OTcwMGMxM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5
IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFs
IHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJP
U1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExp
dmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4
aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAi
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAg
ICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFs
Ojp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRl
eCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
YmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0
eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlm
IChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0x
MjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAg
ICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5l
c3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5v
cmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIg
cHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYs
MjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5v
ZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazog
ewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCku
c2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFjazogewot
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0
Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hl
ZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9w
ZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQyLDE1ICsyNDAsMTggQEAgdm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgog
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPSBBdmFpbGFiaWxpdHkoRmx1
c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQo
KSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVk
SlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkp
KSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPnN0
YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hl
ZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCArIGkpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3MywyMCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJlY29yZCBob3cgdG8g
cmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0gICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihB
cmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAg
ICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAg
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihB
cmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CiAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBh
cmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRiODQzZTg5MGRjNy4uMGQ4
MjkzNTBkNGM2ZTBhMTIwODY4MzZjMGIwYjE3ODBmMmJiZTJkOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTM4MiwxMCArMzgyLDEwIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRy
eShWTSYgdm0sIENhbGxGCiAKICAgICBhdXRvIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpKTsKICAgICBB
U1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwotICAgIFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1ldGFkYXRh
KGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1ldGFk
YXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRhQnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVudHJ5QnVm
ZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxl
KSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kKS5pc0xv
Y2FsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRhdGFCdWZmZXJbaW5kZXhdID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCmluZGV4IGRjNzZiY2JhZWQ0MWVlZTA2M2RmZGJlYTg0NTA2NjU1M2Qw
Y2I0ZDYuLjYwOTY4NjYzYjY0YzJiNjg1NGU0NjE2MWY5NDk5NDY1N2UxYWVmZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGxvY2Fsc1tsb2NhbF0gPSBuZXdSb290LT5hcHBlbmRO
b2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4
dHJhY3RPU1JFbnRyeUxvY2FsLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlh
YmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxl
LT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5m
byh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSwKICAgICAgICAgICAgICAg
ICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAxOGM2NDE0NzkzNDI0NjliNDFjYThmOThmMzA4YjNh
NGM5MzNiYTk4Li4wNWRlOTU4Y2FlZWYxYjhmMDllMzJkMDk3YThmZTMyZDY3NzQyMDFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVm
LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJD
bG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR01h
eUV4aXQuaCIKQEAgLTQ3LDg5NSArNDgsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLS8vIFByb2JlIGJhc2VkIE9TUiBFeGl0LgotCi11c2luZyBDUFVTdGF0ZSA9IFBy
b2JlOjpDUFVTdGF0ZTsKLXVzaW5nIENvbnRleHQgPSBQcm9iZTo6Q29udGV4dDsKLXVzaW5nIEZy
YW1lID0gUHJvYmU6OkZyYW1lOwotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KFByb2JlOjpDb250ZXh0JiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgY29uc3QgT1NS
RXhpdEJhc2UmKTsKLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChQcm9iZTo6Q29u
dGV4dCYsIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NS
RXhpdCYpOwotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmLCB1aW50MzJfdCBvc3JF
eGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmKTsKLQotc3RhdGljIEpTVmFsdWUganNWYWx1ZUZvcihD
UFVTdGF0ZSYgY3B1LCBKU1ZhbHVlU291cmNlIHNvdXJjZSkKLXsKLSAgICBpZiAoc291cmNlLmlz
QWRkcmVzcygpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAgICAgICBzdGQ6Om1lbWNw
eSgmcmVzdWx0LCBjcHUuZ3ByPHVpbnQ4X3QqPihzb3VyY2UuYmFzZSgpKSArIHNvdXJjZS5vZmZz
ZXQoKSwgc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGNwdS5ncHI8RW5j
b2RlZEpTVmFsdWU+KHNvdXJjZS5ncHIoKSkpOwotI2Vsc2UKLSAgICBpZiAoc291cmNlLmhhc0tu
b3duVGFnKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKHNvdXJjZS50YWcoKSwgY3B1Lmdwcjxp
bnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWUoY3B1Lmdw
cjxpbnQzMl90Pihzb3VyY2UudGFnR1BSKCkpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXls
b2FkR1BSKCkpKTsKLSNlbmRpZgotfQotCi0jaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJ
U1RFUlMgPiAwCi0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQm
IGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEFTU0VSVChjb2RlQmxvY2sp
OwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJs
b2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVn
aXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxl
ZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBVQ1BVUmVnaXN0ZXIqIHBoeXNpY2FsU3RhY2tGcmFtZSA9
IGNvbnRleHQuZnA8VUNQVVJlZ2lzdGVyKj4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkg
PSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFRoZSBj
YWxsZWUgc2F2ZWQgdmFsdWVzIGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgc3RhY2ssIG5vdCB0aGUg
cmVjb3ZlcmVkIHN0YWNrLgotICAgICAgICAvLyBIZW5jZSwgd2UgcmVhZCB0aGUgdmFsdWVzIGRp
cmVjdGx5IGZyb20gdGhlIHBoeXNpY2FsIHN0YWNrIG1lbW9yeSBpbnN0ZWFkIG9mCi0gICAgICAg
IC8vIGdvaW5nIHRocm91Z2ggY29udGV4dC5zdGFjaygpLgotICAgICAgICBBU1NFUlQoIShlbnRy
eS5vZmZzZXQoKSAlIHNpemVvZihVQ1BVUmVnaXN0ZXIpKSk7Ci0gICAgICAgIGNvbnRleHQuZ3By
KGVudHJ5LnJlZygpLmdwcigpKSA9IHBoeXNpY2FsU3RhY2tGcmFtZVtlbnRyeS5vZmZzZXQoKSAv
IHNpemVvZihVQ1BVUmVnaXN0ZXIpXTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2ZUNhbGxl
ZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAg
IGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwot
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2Nr
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3Rl
cnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJT
ZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVz
LT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQo
aSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YWNrLnNldChjb250ZXh0LmZwKCksIGVudHJ5
Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7
Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgcmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxl
ZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lz
dGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lz
dGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVk1FbnRyeVJlY29yZCog
ZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwotICAgIFVDUFVS
ZWdpc3RlciogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNQVVJlZ2lzdGVy
Kj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXIpOwotCi0gICAgLy8gUmVz
dG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENh
bGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChl
bnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc2l6ZV90IHVpbnRw
dHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpOwotICAgICAg
ICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5
LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF07Ci0gICAgICAg
IGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBjb250ZXh0LmZwcihlbnRy
eS5yZWcoKS5mcHIoKSkgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihjYWxsZWVTYXZlQnVmZmVyW3Vp
bnRwdHJPZmZzZXRdKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVn
aXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2Vk
IG9uIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250
ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0KLSAg
ICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlG
cmFtZSk7Ci0gICAgdm9pZCogY2FsbGVlU2F2ZUJ1ZmZlciA9IGVudHJ5UmVjb3JkLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzQnVmZmVyOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAg
IFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7
Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7
Ci0gICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAg
ICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0
LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgICAgIGVsc2Ugewot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZl
ciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZnByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCku
ZnByKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJz
IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZv
aWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIgb2Zmc2V0VmlydHVhbFJlZ2lzdGVyLCBib29sIHdh
c0NhbGxlZFZpYVRhaWxDYWxsKQotewotICAgIEZyYW1lIGZyYW1lKGNvbnRleHQuZnAoKSwgY29u
dGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQo
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwot
ICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAg
UmVnaXN0ZXJTZXQgYmFzZWxpbmVDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0g
Y2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVu
dHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVpbnRwdHJfdCBz
YXZlZFJlZ2lzdGVyVmFsdWU7Ci0KLSAgICAgICAgaWYgKHdhc0NhbGxlZFZpYVRhaWxDYWxsICYm
IGJhc2VsaW5lQ2FsbGVlU2F2ZXMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIHNhdmVk
UmVnaXN0ZXJWYWx1ZSA9IGZyYW1lLmdldDx1aW50cHRyX3Q+KGVudHJ5Lm9mZnNldCgpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gY29udGV4dC5ncHIo
ZW50cnkucmVnKCkuZ3ByKCkpOwotCi0gICAgICAgIGZyYW1lLnNldChvZmZzZXRWaXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zmc2V0KCksIHNhdmVkUmVnaXN0ZXJWYWx1
ZSk7Ci0gICAgfQotfQotI2Vsc2UgLy8gbm90IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNU
RVJTID4gMAotCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENv
ZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBD
b2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0
YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKiwg
VmlydHVhbFJlZ2lzdGVyLCBib29sKSB7IH0KLQotI2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVu
dHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90
IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQot
ICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRD
b3VudCAtIDE7Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKLSAgICBE
aXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAotICAgICAg
ICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJl
KCksIGxlbmd0aCwgY2FwYWNpdHkpOwotCi0gICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNhbGxl
ZSk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChp
bmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAg
RnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5zZXRJbmRleFF1aWNrbHkodm0s
IGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyBKU0NlbGwqIGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYg
dm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJl
ZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICBDbG9uZWRB
cmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCi0gICAgICAg
IHZtLCBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBjYWxsZWUsIGxl
bmd0aCk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSAr
IChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0g
ICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChn
bG9iYWxPYmplY3QsIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDb250ZXh0JiBjb250ZXh0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2RlLCBjb25zdCBPcGVy
YW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4
dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9k
ZSBJRCB0byBvcGVyYW5kLgotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMu
b3BlcmFuZEZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCi0gICAgICAgICAgICAmJiBy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNaW5pZmllZElEIGlkID0gcmVjb3Zl
cnkubm9kZUlEKCk7Ci0gICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVu
dHMuZmluZChpZCk7Ci0gICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVu
dHMuZW5kKCkpIHsKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgZnJhbWUu
b3BlcmFuZChpdGVyLT52YWx1ZSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0gICAgICAgICAg
ICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgpOwotCi0g
ICAgICAgIGludCBzdGFja09mZnNldDsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAg
ICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwotCi0gICAgICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihmcmFtZS5vcGVyYW5kKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KS5hc0NlbGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFz
Q2VsbCgpKTsKLQotICAgICAgICBpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICBhcmd1bWVudENvdW50ID0gZnJhbWUub3BlcmFuZDxpbnQzMl90PihzdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsKLQotICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09iamVjdDsK
LSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERp
cmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2Nr
LCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0g
ICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdF
eGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50
Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50
c09iamVjdCkpOwotCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBv
cGVyYW5kKTsKLSAgICB9Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJh
IGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9z
dCBsaWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkgbmVlZGVk
IChoaWdoZXIgZW51bSB2YWx1ZSkuCi0vLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9uIGluY2x1
ZGVzIHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQotLy8gZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsIHsKLSAgICBOb25lLAotICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0g
ICAgVmFsdWVQcm9maWxlVXBkYXRlLAotICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhl
cgotfTsKLQotdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250
ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRW
TSgpID09ICZ2bSk7Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7Ci0KLSAgICBpZiAodmFs
aWRhdGVERkdEb2VzR0MpIHsKLSAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6
ZWQgY29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKLSAgICAgICAgLy8g
Y29kZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4KLSAgICAgICAgdm0uaGVhcC5zZXRFeHBl
Y3REb2VzR0ModHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7
Ci0gICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAgICBjb250
ZXh0LmZwKCkgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotCi0gICAgLy8g
SXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBB
bnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAotICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgot
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKLQotICAgIHVpbnQzMl90IGV4
aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUg
PSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJ
VENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLQotICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9y
Q2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7Ci0gICAgRVhDRVBUSU9OX0FT
U0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRp
b25IYW5kbGVyKCkpOwotCi0gICAgaWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAg
ICAgICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsKLQotICAgICAgICAvLyBXZSBvbmx5IG5l
ZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRo
ZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JF
eGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4
aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgICAg
ICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChl
eGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgcmVjb3Zlcnkg
PSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07
Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25S
ZWNvdmVyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQg
PT0gR2VuZXJpY1Vud2luZCkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbnVs
bHB0cjsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAg
IGlmIChleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgaWYgKGV4
aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkg
ewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGU7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
Y29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgICAgIGFycmF5UHJv
ZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCi0gICAgICAg
ICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVV
cGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50MzJfdCBhY3Rp
dmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0
aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7Ci0gICAgICAgIGRv
dWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29u
dmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBB
U1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQg
PSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQpOwotCi0gICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
Ym9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAg
ICAgICAgdm9pZCoganVtcFRhcmdldDsKLSAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7Ci0gICAg
ICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZU9mZnNldCkucHRyKCk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAo
KTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2Nh
dGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwot
ICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgotICAgICAgICBPcGVyYW5kczxWYWx1
ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFu
PiB1bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0gICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZl
bnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklU
Q29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRlZmlu
ZWRPcGVyYW5kU3BhbnMpOwotICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0g
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7Ci0KLSAg
ICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNv
ZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9w
ZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9s
ZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhpdFRvTExJ
bnQpKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7Ci0gICAg
ICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24g
PSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwot
Ci0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRp
b24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3Jp
Z2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAotICAgICAg
ICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRh
dGlvbik7Ci0gICAgICAgICAgICBleGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmls
ZXJFeGl0OwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgo
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjpt
YXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90
aGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
ID0gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdp
dGggb3BlcmFuZHMgPSAlc1xuIiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRvQ1N0cmlu
ZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9T
dHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAotICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRz
KSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0
YXRlID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgIE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAg
ICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBl
eGl0U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotCi0gICAgY29udGV4dC5zcCgpID0gY29u
dGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAg
ICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3
ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGRvIHsKLSAgICAg
ICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRp
YWxpemF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOwotCi0g
ICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlv
bkxldmVsOjpOb25lKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0
cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRpb25SZWNvdmVyeQotCi0gICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBhcnJheSBw
cm9maWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZwotICAgICAgICAvLyBtYXkgcmVseSBvbiBhIHZh
bHVlIHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQg
aXMgbGlrZWx5Ci0gICAgICAgIC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xs
IGRlY29yYXRlIGl0IGFzIFVOTElLRUxZLgotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiBy
ZWNvdmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHJlY292
ZXJ5KSkgewotICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zl
cnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5n
cHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0g
ICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1i
ZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBTcGVjdWxhdGl2ZUFkZFNlbGY6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5
LT5kZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0g
ICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1i
ZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVj
b3ZlcnktPmltbWVkaWF0ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAg
ICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgXiBKU1Zh
bHVlOjpWYWx1ZUZhbHNlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBWYWx1ZVBy
b2ZpbGVVcGRhdGUKLSAgICAgICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVlOwotICAgICAgICBpZiAo
ISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpz
VmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkK
LSAgICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJheVByb2Zp
bGVVcGRhdGUKLSAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gZXhpdFN0
YXRlLmFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVT
b3VyY2UpOwotICAgICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4
aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBwcm9maWxl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJv
ZmlsZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICAgICAgYm9vbCBkb1Byb2ZpbGUg
PSAhaW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5tb2RlID09
IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGlmIChkb1Byb2ZpbGUpIHsK
LSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNl
cnZlU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5v
YnNlcnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0aW9uIGxl
dmVsOiBPdGhlcgotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2Nh
dGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAg
ICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2lu
dGVyLgotICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9
PSB2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXhpdFN0
YXRlLnByb2ZpbGVyRXhpdCkKLSAgICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4aXQtPmlu
Y0NvdW50KCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4
aXQoKSkpCi0gICAgICAgICAgICBwcmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhpdEluZGV4
LCBleGl0KTsKLQotICAgIH0gd2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRpYWxpemF0
aW9uLgotCi0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAg
QVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKLQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRf
dD4oR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2sp
OwotI2VuZGlmCi0KLSAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0
b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgotICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8g
cmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVs
b3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29t
ZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0KLSAgICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwotICAgIHNpemVfdCBudW1iZXJPZk9w
ZXJhbmRzID0gb3BlcmFuZHMuc2l6ZSgpOwotICAgIHNpemVfdCBudW1VbmRlZmluZWRPcGVyYW5k
U3BhbnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6ZSgpOwotCi0gICAgc2l6ZV90IG5leHRV
bmRlZmluZWRTcGFuSW5kZXggPSAwOwotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3BlcmFuZElu
ZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5z
KQotICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNw
YW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVu
ZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgZm9yIChzaXplX3Qgc3BhbkluZGV4ID0gMDsg
c3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkgewotICAg
ICAgICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07Ci0gICAg
ICAgIGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zmc2V0OwotICAgICAgICBpbnQgbGFzdE9m
ZnNldCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKLQotICAgICAgICBm
b3IgKGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsgKytvZmZz
ZXQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVkKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5k
czsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZp
cnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoaW5k
ZXggPT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9
IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51bWJlck9m
UmVnaXN0ZXJzIC0gMTsKLSAgICAgICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwg
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRP
cGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRl
eF0uZmlyc3RJbmRleDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0VW5k
ZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9j
YWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycykKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOwotCi0gICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFt
ZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2Ug
SW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNW
YWx1ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAg
ICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJf
dD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LQotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2Vs
bCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFz
YW5VbnNhZmVKU1ZhbHVlKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSkuYXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkpKTsKLSNlbmRpZgotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5
LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQzMkRpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNW
YWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVV
bmJveGVkSW50MzIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkp
ID4+IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVy
eS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3RyaWN0SW50
NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2Fu
VW5zYWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlm
eU5hTihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJp
ZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZl
VW5ib3hlZERvdWJsZSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBD
b25zdGFudDoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVjb3Zlcnku
Y29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERpcmVjdEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNU
aGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZl
IHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoY29udGV4dCwgY29kZUJsb2NrKTsKLSAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwg
YmFzZWxpbmVDb2RlQmxvY2spOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVy
PihKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tS
ZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2Vs
bE1hc2spOwotI2VuZGlmCi0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250
ZXh0KTsKLQotICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJl
ZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCi0g
ICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBC
dXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKLSAgICAvLyByZWZlciB0
byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMg
aGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUuCi0gICAgLy8gTm90ZSB0aGF0IHdlIGFs
c28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVy
aWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0g
YnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0aGF0LgotCi0gICAgREZHOjplbWl0UmVz
dG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsK
LQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2Ug
YXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxzIGludG8g
dGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8g
Y291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQg
YW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xk
IEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8vIE9TUiBleGl0
LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAgICAvLwot
ICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRv
IHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0
aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAgICAgd2FudCB0byBk
byBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgotICAgIC8v
Ci0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBz
dGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVy
IE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAgcGVyZm9y
bSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwot
ICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVk
aWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBP
U1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgIHBhcnRpY3VsYXJseSBl
eHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVu
IHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICBydW5uaW5n
IGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVk
LgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhl
Y3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1V
cCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAoYSkgYW5kIChi
KSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkg
Zm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50
aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyBmcmVxdWVudGx5IGFuZCB0aGUgZnVu
Y3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8g
YmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVk
LiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBp
biB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vIGdvb2Qgam9iIG9mIGVu
c3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCi0g
ICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVj
dXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNw
ZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0
aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlm
Ci0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJl
cy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBz
ZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkuCi0KLSAgICBpZiAoVU5MSUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0Q291bnRl
ckFuZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRp
bWl6ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCi0gICAgICAgIHRyaWdnZXJSZW9wdGltaXphdGlv
bk5vdyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICByZWlmeUlu
bGluZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLSAgICBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2Rl
QmxvY2ssIGV4aXQpOwotfQotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENv
bnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNv
bnN0IE9TUkV4aXRCYXNlJiBleGl0KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1Owot
ICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5n
IGFuIE9TUiBleGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOwotICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICBj
b25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0
Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUo
KTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJT
a2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0g
ICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAg
IENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBw
aW5nVGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQpOwotICAgICAgICB2b2lkKiBjYWxsZXJG
cmFtZSA9IGNwdS5mcCgpOwotCi0gICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOwot
Ci0gICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNh
bGxGcmFtZS0+aXNUYWlsKCkpOwotICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5n
ZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkK
LSAgICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1
LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6
ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJldHVyblBD
LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0clRhZz4o
bmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGlu
ZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0dXJuUEMpOwotICAgICAgICAgICAgY2Fs
bGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVj
b2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5Q
QyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxs
ZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7Ci0KLSAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVy
LT5pbmxpbmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGNwdS5m
cDx1aW50OF90Kj4oKSArIHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpLT5zdGFja09mZnNl
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICAg
ICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRy
eVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZy
YW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZyYW1lLnNldE9wZXJhbmQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgICAgICAv
LyBSZXN0b3JlIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSdzIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4K
LSAgICAgICAgLy8gSWYgdGhpcyBpbmxpbmVkIGZyYW1lIGlzIGEgdGFpbCBjYWxsIHRoYXQgd2ls
bCByZXR1cm4gYmFjayB0byB0aGUgb3JpZ2luYWwgY2FsbGVyLCB3ZSBuZWVkIHRvCi0gICAgICAg
IC8vIGNvcHkgdGhlIHByaW9yIGNvbnRlbnRzIG9mIHRoZSB0YWcgcmVnaXN0ZXJzIGFscmVhZHkg
c2F2ZWQgZm9yIHRoZSBvdXRlciBmcmFtZSB0byB0aGlzIGZyYW1lLgotICAgICAgICBzYXZlT3JD
b3B5Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgIXRydWVDYWxsZXIpOwotCi0gICAg
ICAgIGlmIChjYWxsZXJJc0xMSW50KSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGlu
ZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAg
ICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxl
R1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+
KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50
OjpSZWdpc3RlcnM6OnBiR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Ci0gICAgICAgIEFTU0VSVChjYWxsZXJGcmFtZSk7Ci0g
ICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNl
dCgpLCBjYWxsZXJGcmFtZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkp
LmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNl
dCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVDb25zdGFudCgpKSk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlz
IGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rp
b24pKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFn
T2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90
PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBU
YWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50
KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwg
c28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgfQotCi0gICAgLy8gRG9u
J3QgbmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlu
bGluZSB0YWlsIGNhbGxzCi0gICAgaWYgKGNvZGVPcmlnaW4pIHsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotI2Vsc2UKLSAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSNlbmRpZgotICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBU
YWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYgZXhpdCkKLXsKLSAg
ICBPU1JFeGl0U3RhdGUqIGV4aXRTdGF0ZSA9IGV4aXQuZXhpdFN0YXRlLmdldCgpOwotCi0gICAg
V1RGOjpzdG9yZUxvYWRGZW5jZSgpOyAvLyBUaGUgb3B0aW1pemluZyBjb21waWxlciBleHBlY3Rz
IHRoYXQgdGhlIE9TUiBleGl0IG1lY2hhbmlzbSB3aWxsIGV4ZWN1dGUgdGhpcyBmZW5jZS4KLSAg
ICB2bS5oZWFwLndyaXRlQmFycmllcihiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAvLyBXZSBi
YXJyaWVyIGFsbCBpbmxpbmVkIGZyYW1lcyAtLSBhbmQgbm90IGp1c3QgdGhlIGN1cnJlbnQgaW5s
aW5lIHN0YWNrIC0tCi0gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoaWNoIGlubGluZWQg
ZnVuY3Rpb24gb3ducyB0aGUgdmFsdWUgcHJvZmlsZSB0aGF0Ci0gICAgLy8gd2UnbGwgdXBkYXRl
IHdoZW4gd2UgZXhpdC4gSW4gdGhlIGNhc2Ugb2YgImYoKSB7IGEoKTsgYigpOyB9IiwgaWYgYm90
aAotICAgIC8vIGEgYW5kIGIgYXJlIGlubGluZWQsIHdlIG1pZ2h0IGV4aXQgaW5zaWRlIGIgZHVl
IHRvIGEgYmFkIHZhbHVlIGxvYWRlZAotICAgIC8vIGZyb20gYS4KLSAgICAvLyBGSVhNRTogTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBzaG91bGQgcmVtZW1iZXIgd2hpY2ggQ29kZUJsb2Nr
IG93bnMKLSAgICAvLyB0aGUgdmFsdWUgcHJvZmlsZS4KLSAgICBJbmxpbmVDYWxsRnJhbWVTZXQq
IGlubGluZUNhbGxGcmFtZXMgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlu
bGluZUNhbGxGcmFtZXMuZ2V0KCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAg
ICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJh
bWVzKQotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Ci0gICAgfQotCi0gICAgYXV0byogZXhpdElubGluZUNh
bGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChl
eGl0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb250ZXh0LmZwKCkgPSBjb250ZXh0LmZwPHVp
bnQ4X3QqPigpICsgZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOwotCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGV4aXRTdGF0ZS0+anVtcFRh
cmdldDsKLSAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkgewotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNo
LCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0uY2FsbEZyYW1l
Rm9yQ2F0Y2ggPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgfQotCi0gICAgdm0udG9w
Q2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotCi0gICAgaWYgKGV4aXRTdGF0
ZS0+aXNKdW1wVG9MTEludCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQg
PSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9j
b2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLQotICAgICAgICBjb250
ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIp
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpKTsKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCkub2Zmc2V0KCkpOwotI2Vsc2UKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lz
dGVyczo6cGNHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlv
bik7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAg
ICAgICAgICAgIHZtLnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb247Ci0gICAgfQotCi0gICAgY29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGp1bXBUYXJnZXQpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4
dCYgY29udGV4dCwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0JiBleGl0KQot
ewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBD
b2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEV4
aXRLaW5kIGtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotCi0gICAgZGF0YUxvZygi
U3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIgQCBl
eGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKCIsIGJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2lu
ZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOwotICAgIGlmIChhbHRlcm5hdGl2ZSkgewotICAg
ICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRp
dmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICAgICAiLCByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigp
LAotICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgYWx0ZXJuYXRp
dmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0
YUxvZygibm8gYWx0ZXJuYXRpdmUgY29kZSBibG9jayAoaS5lLiB3ZSd2ZSBiZWVuIGpldHRpc29u
ZWQpIik7Ci0gICAgZGF0YUxvZygiLCBvc3JFeGl0Q291bnRlciA9ICIsIGNvZGVCbG9jay0+b3Ny
RXhpdENvdW50ZXIoKSwgIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEdQUnMgYXQgdGltZSBvZiBl
eGl0OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5ncHJOYW1lKGdwciksICI6IiwgUmF3
UG9pbnRlcihjb250ZXh0Lmdwcjx2b2lkKj4oZ3ByKSkpOwotICAgIH0KLSAgICBkYXRhTG9nKCJc
biIpOwotICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewot
ICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgZGF0
YUxvZygiICIsIGNvbnRleHQuZnByTmFtZShmcHIpLCAiOiIpOwotICAgICAgICB1aW50NjRfdCBi
aXRzID0gY29udGV4dC5mcHI8dWludDY0X3Q+KGZwcik7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9
IGNvbnRleHQuZnByKGZwcik7Ci0gICAgICAgIGRhdGFMb2dGKCIlbGx4OiVsZiIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oYml0cyksIHZhbHVlKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsK
LX0KLQotLy8gSklUIGJhc2VkIE9TUiBFeGl0LgotCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVh
bUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogT1NSRXhpdEJhc2Uoa2luZCwg
aml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljLCBqaXQtPm1fb3Jp
Z2luLndhc0hvaXN0ZWQpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKQEAg
LTk1OCwxNSArNzAsMTggQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JF
eGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCkgY29uc3QKIAogdm9pZCBPU1JFeGl0OjplbWl0
UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCiB7Ci0gICAgSGFzaE1hcDxNaW5pZmllZElELCBp
bnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMg
bm9kZSBJRCB0byBvcGVyYW5kLgorICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgVmlydHVhbFJlZ2lz
dGVyPiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRz
IG5vZGUgSUQgdG8gb3BlcmFuZC4KICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAKICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAogICAgICAgICAgICAg
JiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSBy
ZWNvdmVyeS5ub2RlSUQoKTsKICAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5maW5kKGlkKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5lbmQoKSkgewpAQCAtOTg3LDcgKzEwMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJl
c3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8
VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwKICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBqaXQubW92ZSgKQEAgLTk5Nyw3ICsxMTIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0
b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZh
bAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpIHsKICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTEwMjMsNyArMTM4LDcgQEAgdm9pZCBPU1JFeGl0
OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBP
cGVyYW5kczxWYWwKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0
aW9uUHRyVGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAotICAgICAgICBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CisgICAgICAgIGFscmVhZHlB
bGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAg
ICB9CiB9CiAKQEAgLTE0NjYsMTYgKzU4MSw4NCBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0
KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAg
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCiAgICAgICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2tw
b2ludCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGRuJ3QgdXNlIGEgcHJv
YmUgYnV0IGZpbGxpbmcgYWxsIHRoZSBzaWRlIHN0YXRlIG9iamVjdHMgaXMgdHJpY2t5IG90aGVy
d2lzZS4uLgorICAgICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gdmFsdWVzKG9wZXJhbmRzLm51
bWJlck9mVG1wcygpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kcy5u
dW1iZXJPZlRtcHMoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzW2ldID0gb3BlcmFuZHMudG1w
KGkpOworCisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAgICAgYXV0byogdG1wU2NyYXRj
aCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKKyAgICAgICAgaml0LnByb2JlKFs9
LCB2YWx1ZXMgPSBXVEZNb3ZlKHZhbHVlcyldIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewor
ICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5
dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdU
Rjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAg
ICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvJiByZWNvdmVyeSA9IHZhbHVlc1tpICsgdG1wT2Zmc2V0XTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0IHRoZSBGVEwg
ZG9lcyBhbmQgbWF0ZXJpYWxpemUgYWxsIHRoZSBKU1ZhbHVlcyBpbnRvIHRoZSBzY3JhdGNoIGJ1
ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgICAgICAg
ICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0
YW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
ZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odG1wU2NyYXRjaFtp
ICsgdG1wT2Zmc2V0XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odG1wU2NyYXRjaFtpICsgdG1wT2Zm
c2V0XSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2Vk
SW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0g
PSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9T
UlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1f
Y29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsg
Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lw
cGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0
ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBj
b2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3Rh
dGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihj
YWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQ
VVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNl
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVj
b2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBEbyBhbGwgZGF0YSBm
b3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgog
CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxS
ZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiBy
ZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+
Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3Bl
cmFuZC5pc1RtcCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaW50IG9wZXJh
bmQgPSByZWcub2Zmc2V0KCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVy
YW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkt
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5oCmluZGV4IGE3ZTU4NzhjMDcxNzA4YTFkYTc2YzBiMGViNTRkNTRmMWEwNGViOGUuLjllOWJj
ZWE0ODFjMWQ2ODc3OTcyZjI1OWQ2MmMxYTIzMDBiMmIxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCkBAIC0xNTAsOCArMTUwLDYgQEAgc3RydWN0IE9TUkV4aXQgOiBw
dWJsaWMgT1NSRXhpdEJhc2UgewogCiAgICAgZnJpZW5kIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21waWxlT1NSRXhpdChDYWxsRnJhbWUqKTsKIAotICAgIHN0YXRpYyB2b2lkIGV4ZWN1
dGVPU1JFeGl0KFByb2JlOjpDb250ZXh0Jik7Ci0KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXBMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8T1NSRXhpdFB0clRhZz4gbV9jb2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRCYXNlLmgKaW5kZXggMzEwOTYzZDg0NDM2YzUzMzI3ODRmMGEyOTJhNDlj
YmUxYjgyYTU5Yi4uMDAzYjYxOGNkNDQwZTQwMGFiYWFjZWMwYWZiYzNjMTI0MzVkYjk2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaApAQCAtNzAsNiArNzAs
MTEgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBHZW5l
cmljVW53aW5kOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0V4aXRpbmdUb0No
ZWNrcG9pbnRIYW5kbGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmlu
ZGV4IDJmZjNlYThiNWZiYjZmM2YyNzIxZDUwMjQ0NTYyOThiMDg0ZDUxMTUuLjBmYjQ4MjAzYmZk
YjVkNTRjOTYzZDI0ZjlkYmY3NjlkZTVhMjVmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTI5LDEyICsy
OSwxNSBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCisj
aW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5jbHVkZSAi
UHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTQzLDYgKzE0Niw5IEBAIHZvaWQqIGNhbGxl
clJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2Rl
SW5kZXggY2FsbEJ5CiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhp
dFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPigmY2hlY2twb2lu
dF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50KTsKKwogICAgIHZvaWQqIGp1
bXBUYXJnZXQ7CiAKICAgICBpZiAoY2FsbGVySXNMTEludCkgewpAQCAtMzgyLDExICszODgsMTIg
QEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwogCiAgICAgdm9pZCoganVtcFRhcmdl
dDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjaGVja3BvaW50UmV0dXJu
VGFyZ2V0OwogICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xM
SW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bms7CiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8
SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkgPyBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQpKSA6IExMSW50OjpnZXRDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIp
OwpAQCAtNDAyLDcgKzQwOSwxNCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0s
IENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICNlbmRpZgogICAg
ICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENv
ZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
IEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGluZGV4Rm9yQ2hlY2twb2ludFJldHVybiA9IGNv
ZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRleCk7CisgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9j
a0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGluZGV4Rm9yQ2hlY2twb2ludFJldHVybik7Cisg
ICAgICAgIGlmIChleGl0SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBjaGVja3Bv
aW50UmV0dXJuVGFyZ2V0ID0gY29kZUxvY2F0aW9uOworICAgICAgICAgICAgY29kZUxvY2F0aW9u
ID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPigm
Y2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSk7CisgICAgICAgIH0KKwogICAgICAgICBB
U1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9u
LnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwCmluZGV4IDIxNmM1YmFhMTRkOTZiMjliNWRkMzY5YTczYmZlY2I0YjAz
ZGMxOTkuLjdkYTZhZmQ1YzIyMWM5N2ZmOTNmNDAwY2IzNDk0NDU0ZDRkNDkyNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcApAQCAtMjEwNyw3ICsyMTA3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGlmIChtX2hlYXAuZm9sbG93KGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2RlKCkp
ICE9IGVzY2FwZWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlu
dCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
Rm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbi50YWtlVmFs
aWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ob3BlcmFuZCksCiAgICAgICAgICAgICAgICAgbWF0ZXJp
YWxpemF0aW9uLT5kZWZhdWx0RWRnZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5m
by5oCmluZGV4IGYzOWMxNGI5ZjBhNDQ4Nzg5ZDc3MmRjMjdkZjE1ODgxZTUwODY4OTUuLjc3ZWZj
ZmIyNDgwMDJhNGJmNWVhNjBhNmU2NjUyMGZlMDUxNDRiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcEluZm8uaApAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgT3BJbmZvIHsKICAgICBl
eHBsaWNpdCBPcEluZm8oSW50ZWdyYWxUeXBlIHZhbHVlKQogICAgICAgICA6IG1fdmFsdWUoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSkgeyB9CiAgICAgZXhwbGljaXQgT3BJbmZvKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZSkpKSB7IH0KLQorICAgIGV4cGxpY2l0
IE9wSW5mbyhPcGVyYW5kIG9wKSA6IG1fdmFsdWUob3AuYXNCaXRzKCkpIHsgfQogCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgZXhwbGljaXQgT3BJbmZvKFQqIHB0cikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDBkZmU3YmViNTU1MGRi
ZTZkMzk1OTNjNmYzMmVlZTA1MjJkZDJlYmEuLmZkMDk2YTVkZGY1MjRiMGE5ZGRhOWRhMDUwOTNm
MTI2Yjk2NTRkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcApAQCAtMjk0NywxNSArMjk0NywxNiBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXJyYXlJbmRleE9mVmFsdWVEb3VibGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3Qg
bWFuZGF0b3J5TWluaW11bSkKIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50IHsg
Zmlyc3RFbGVtZW50RGVzdCB9OwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklU
T3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
ICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMp
OwogICAgIAotICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBWaXJ0dWFs
UmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2Fs
bEZyYW1lLT5yKGZpcnN0RWxlbWVudCkpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoIC0gMSk7
CiAgICAgCi0gICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11
bTsgKytpKQotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNV
bmRlZmluZWQoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGggLSAxOyBpIDwgbWFuZGF0
b3J5TWluaW11bTsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50ICsgaSkg
PSBqc1VuZGVmaW5lZCgpOwogfQogCiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9k
T25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCmluZGV4IGNiYzJjOGJmYWU0
ZTk0ZDA5NWRkYzkxNTdkYjM2YWI1YTBjNmFkYzIuLmJiNDIwNjFkNTE2NmZlMjEwZDljZWRjNmM3
ZWM3MThmNDRiYmJiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKQEAgLTEwOCwxNyArMTA4LDE3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
cy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbnVsbHB0cjsK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAg
ICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM5LDIxICsxMzksMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVw
b2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlLaWxsZWQ7CisgICAg
ICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAgICAgICAgIGF1dG8gcHJvY2Vz
c0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAg
IGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAg
ICAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kOiAiLCBy
ZWcsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJh
bmQ6ICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoYW5k
bGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5S2ls
bGVkKQorICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlLaWxsZWQpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChyZWcpOworICAgICAgICAgICAg
ICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChyZWcpID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gaW5zZXJ0IGEgUGhh
bnRvbSBpZiB0aGUgbm9kZSBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIHRoZSBsYXN0CiAgICAgICAg
ICAgICAgICAgLy8gZXhpdCwgYW5kIHdhcyBib3JuIGJlZm9yZSB0aGUgbGFzdCBleGl0LgpAQCAt
MTc5LDE0ICsxNzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXlFeGl0
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBkb2VzIGV4aXQsIHdl
IG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgIC8vIHRv
IGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAgICAgICAgICAgICAg
IHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFk
eUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IG9wZXJhbmQ7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobG9j
YWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQp
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLCBwcm9jZXNz
S2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IGE1OGUxNzk2NTYwZmM2ZDk0YmI0NjNkMTQy
OTg4NmUwNzhmMGFmY2MuLmY1ZjA5NmM4ZWI1NmQ0NWZhOTg5YmI0OTM2ZjcyZDQ0ODE5NWExNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxJZkFw
cHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIo
KSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBoZWFwLm9wZXJhbmQo
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02OCw3ICs2
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdyaXRlcyB0byBhbHJl
YWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJlcml6ZSgpLgogICAg
ICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJp
YXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCku
dmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9u
YWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3RhY2spOwogICAgICAg
ICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2Fk
KCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAoKS5vcGVy
YW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2FsbElmQXBwcm9wcmlh
dGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5k
LnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKaW5kZXggNDQ3
ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4uNWI0Zjk5MjkzNDExNzljMjA0
OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcApAQCAtNzIsNyArNzIs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb25z
dCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBo
Lm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBp
bnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvcklu
ZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhh
bmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggODA1MDUxNmNiZmVj
Yzg0ZmUxOTU4NDI4YTBjZjg3Y2Q1NGVlMTE3Yi4uMjIxYzUwMWRiZDE0YzA0NTcyYTdmZTFkMTli
ZTZkMzE5N2MxM2YzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEzNjUsNiArMTM2NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVI
aW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgog
ICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgog
ICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4IDg3Mjc3NjBjNmVjYmRi
MzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcuLmZkNjEyM2ZhOWYxZDUyOWU0YzJlZTJjMGU3ZWRm
NjNmMDdmNzhkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0
U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAg
IFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFw
aCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhpcyBpcyBpbXBvcnRhbnQg
b3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAg
ZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAg
IG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCwxMSArODUsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgpOwogICAg
ICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5O
YXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5k
czxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAg
ICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXZlQXRIZWFk
W2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdLmZpbGwo
ZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNlKTsKKyAgICAgICAgICAg
IGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJv
b2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAxLDM0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIsIGxpdmUsICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZpcnR1
YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFs
UmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5k
bGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxP
cGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxl
ciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJhbmQsICIgaXMgbGl2
ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRzLmFwcGVu
ZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAg
ICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG9wID0gbm9kZS0+
b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IFB1dFN0
YWNrIHx8IG9wID09IFZhcmFyZ3NMZW5ndGggfHwgb3AgPT0gTG9hZFZhcmFyZ3MgfHwgb3AgPT0g
Rm9yd2FyZFZhcmFyZ3MgfHwgb3AgPT0gS2lsbFN0YWNrKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAg
ICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7
CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHdy
aXRlcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiB3cml0ZXMp
CiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHJlYWRz
KQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHJlYWRzKQogICAg
ICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMzQsNyArMjI5LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBkZWZlcnJlZCA9IGRlZmVy
cmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQg
Iiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFjaykgewpAQCAtMjYxLDcg
KzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzOTgKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBpc0NvbmZsaWN0aW5nID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPT0gQ29uZmxp
Y3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5k
KG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9PSBDb25mbGljdGluZ0ZsdXNoOwog
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFs
aWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsICFpc0NvbmZsaWN0aW5nKTsKQEAgLTI3NSwxNyArMjcwLDIwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5v
cCgpID09IFB1dFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5v
cGVyYW5kOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlNl
dHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gS2ls
bFN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNp
bmsgYSBQdXRTdGFjayBwYXN0IGEgS2lsbFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVz
aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBmb3IgIiwgbm9kZS0+dW5saW5r
ZWRPcGVyYW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChE
RkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MywxNiArMjkxLDE4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFk
Rmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0
byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRW
YXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9w
KCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUt
Pm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVy
YW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3
cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQs
IExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRhaWxbYmxvY2tdKQpAQCAt
MzEzLDEzICszMTMsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJD
b25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkp
KSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3Nv
ciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3Jd
W2ldLCAiIG1lcmdlcyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIGRl
ZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICIt
PiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBk
ZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWVyZ2UoZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgZGVm
ZXJyZWRbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zNTIsMTAgKzM1MiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFuZHNMaWtlLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lz
dGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmQ+IGluZGV4VG9PcGVy
YW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSk7
Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fZ3JhcGguYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisKICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1bGF0b3IubmV3VmFy
aWFibGUoKTsKICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCkg
PSB2YXJpYWJsZTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3BlcmFuZC5zaXplKCkgPT0g
dmFyaWFibGUtPmluZGV4KCkpOwpAQCAtMzcwLDEyICszNzAsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHB1dFN0YWNrc1Rv
U2luay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVm
KAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCks
CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFj
azoKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJs
ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTM4Niw3ICszODYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAogICAgICAgICAgICAgWyZd
IChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAt
PiBOb2RlKiB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRl
eFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVy
YW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zOTcsNyArMzk3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgICAgIGlm
IChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgUGhp
IGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRk
Tm9kZShTcGVjSGVhcFRvcCwgUGhpLCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4
aXQoKSk7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbWFwcGluZy5m
aWxsKG51bGxwdHIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
bWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBv
cGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9j
aywgdmFyaWFibGUpOwpAQCAtNDIxLDE1ICs0MjEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6
ICIsIG1hcHBpbmcsICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKFNTQUNh
bGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2sp
KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3Bl
cmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgw
LCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
IChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5n
ICIsIG9wZXJhbmQsICIgdG8gIiwgcGhpRGVmLT52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAg
ICAgICB9CkBAIC00MzcsMTUgKzQzNywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkZWZlcnJl
ZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRh
KiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IGRhdGEtPm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5jaGlsZDEoKS5ub2RlKCks
ICIgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC00NTMsMTYgKzQ1MywxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+
bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJl
ZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ29u
Y3JldGUoZm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpICE9IENvbmZsaWN0aW5n
Rmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpICE9IENvbmZsaWN0aW5n
Rmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZXJlIGlz
IG5vIGRlZmVycmFsLiBObyBkZWZlcnJhbCBtZWFucyB0aGF0IHRoZSBtb3N0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlIHZhbHVlIGZvciB0aGlzIHN0YWNrIHNsb3Qg
aXMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHN0YWNrLiBTbywKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGtlZXAgdGhlIEdldFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGlu
Zy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBt
YXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CkBAIC00NzIsMjAgKzQ3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGhh
dmUgc3RvcmVkIGFuZCBnZXQgcmlkIG9mIHRoZSBHZXRTdGFjay4KICAgICAgICAgICAgICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBmb3JtYXQgPT0gZGF0YS0+Zm9ybWF0LCBmb3Jt
YXQsIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IGluY29taW5nLT5k
ZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0
eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwor
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0
OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRT
dGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBh
dXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCkBAIC00OTksNyArNDk5
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2VydCBhIFB1dFN0YWNr
LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRTdGFjayBm
b3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CkBAIC01MTMs
NyArNTEzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFyZ3MgYXJlIHVu
Y29uZGl0aW9uYWwgd3JpdGVzIHRvIHRoZSBzdGFjawpAQCAtNTIxLDEzICs1MjEsMTMgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25zIHRoZXkgd3JpdGUgdG8u
IFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9jYXRpb25zIGRlYWQgcmlnaHQgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBMb2FkVmFyYXJncy9Gb3J3YXJkVmFyYXJncy4gVGhp
cyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2luawogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0g
Rm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3Mg
fHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAg
ICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0
ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rlciwg
TGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExh
enlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9IH0KICAgICAgICAgICAgIH0KQEAgLTUzOSw4ICs1MzksOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFy
aWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNy
ZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JCbG9j
a10ub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBudWxscHRyLCBpc0NvbmNyZXRlKGZvcm1hdCksIGZvcm1hdCk7CkBAIC01ODUsNyArNTg1
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUHV0U3Rh
Y2sgc2lua2luZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAppbmRleCA0MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMxMWQ2NzY4NjUwLi4wNGYy
YzBjZDM5OThiMTgxYjllOThiYmE0MjcwNDg4M2I0MGQyZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCkBAIC0xNTgsNyAr
MTU4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+bG9jYWwoKSwg
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFy
aWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudEdldHRlcnMuYWRk
KGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChu
b2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4
W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRo
YW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWFkTm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KCkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJl
Z2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUs
ICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JT
U0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwg
cGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBwaGlEZWYtPnZh
bHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNO
b25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhp
RGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5vcmlnaW4uZXhp
dE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE1v
dkhpbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywg
bm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlu
a2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdp
bi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5LDE5IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
SXNGbHVzaGVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0
U3RhY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNz
RGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2Nh
bCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGlu
ZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOwotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBj
aGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlh
YmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNoaWxkOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJl
cGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRS
ZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwg
IiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzg1
LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDog
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZhdWx0RWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQyNSwxMiArNDI1LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGV4aXRPSy4KICAgICAg
ICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihmb3Jt
YXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRp
bmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPmxvY2FsKCksICIgcHJvcGFnYXRpbmcgIiwgdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiIHRvICIsIHBoaU5vZGUp
OworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVw
c2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICIgdG8gIiwgcGhpTm9kZSk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBv
aW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJh
bmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2luZCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKaW5kZXggMTViZTQyYWMzYjY5YWY0ZGM1ODM4YTE4ZGYzOWQwNzhjYTMx
NjkxOS4uOWEzMmQ2N2E1ODc0Mjk1ODViMzdkOWFlMWE2Y2ViYzVmYzk2MmNmZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTMyMiw2ICszMjIs
NyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5s
aW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBj
YXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA3N2U5Yjc3OGNkNmViNzdiMWJmNTY1YzRj
OGVhMTA1MWU3YmI1OTY3Li5kMTlhYjc2MDE0MjVkZGU5MTE5YjJjNmM4ZGIxM2RjMDNmYjcyOTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRHZXRDYWxsZWUo
Q29kZU9yaWdpbiBvcmlnaW4sIEdQUlJlZyBjYWxsZWVHUFIpCiAgICAgICAgICAgICAgICAgY2Fs
bGVlR1BSKTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGNhbGxlZUdQUik7
CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBjYWxsZWVHUFIpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0R2V0QXJndW1lbnRTdGFydChDb2RlT3JpZ2luIG9yaWdpbiwgR1BS
UmVnIHN0YXJ0R1BSKQpAQCAtMTc3Niw3ICsxNzc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJl
YW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQp
LCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoQWJvcnRSZWFzb24gcmVh
c29uKQpAQCAtMTgyNiw3ICsxODI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1
cnJlbnRCbG9jaygpCiAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7CiAgICAg
CiAgICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICBOb2RlKiBub2RlID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgpAQCAtMTgz
NiwxMSArMTgzNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2so
KQogICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsg
Ly8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgogICAgICAgICBmb3JtYXQgPSBk
YXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsKLSAgICAgICAgbV9zdHJlYW0t
PmFwcGVuZEFuZExvZygKLSAgICAgICAgICAgIFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKAotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwKLSAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCi0gICAgICAgICAgICAgICAgZm9ybWF0KSk7CisgICAg
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW9wZXJhbmQuaXNBcmd1bWVudCgp
IHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOworICAgICAg
ICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKG9wZXJhbmQs
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAgICAgfQogCiAgICAgbV9vcmln
aW4gPSBOb2RlT3JpZ2luKCk7CkBAIC0xOTIwLDcgKzE5MTcsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAoZm9ybWF0ID09IEZsdXNoZWRK
U1ZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFs
UmVnaXN0ZXIuaXNBcmd1bWVudCgpKTsKIAogICAgICAgICBKU1ZhbHVlU291cmNlIHZhbHVlU291
cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpKTsKICAgICAgICAgCkBAIC03MzQyLDU0ICs3MzQwLDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5v
ZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKiBub2Rl
KQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgp
OwogCiAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAgICB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFyZ3Vt
ZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICB9CisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgSlNW
YWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAg
IGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKKyAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0
KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbG9jayhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpz
VmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIEdQUlRl
bXBvcmFyeSBhcmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7CisgICAgR1BSUmVnIGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhpcy5ncHIoKTsKICAgICB1bmxv
Y2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIGEg
Y2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdp
Y2UuIFRoaXMgaXMgc2FmZQotICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3Mg
aW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQot
ICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3
ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgIC8vIHBhc3Qg
dGhlIHNpemluZy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxNDQ4CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKIAotICAgIEdQUlJlZyBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIgPQotICAgICAgICBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRj
aEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncyk7CisgICAgaW50MzJS
ZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2RlKTsgIAorfQogCi0gICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJ
bmNsdWRpbmdUaGlzR1BSKTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJn
cyhOb2RlKiBub2RlKQoreworICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50
Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1
bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgR1BSUmVnIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVn
cyBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CiAKICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRn
ZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwK
LSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAgYXJnQ291
bnRJbmNsdWRpbmdUaGlzR1BSKSk7CisgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNv
dXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
IAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1
ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAorICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCiAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoZGF0YS0+bGltaXQpKSk7CiAKLSAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIG1faml0LnN0b3JlMzIoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3Vu
dCkpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRz
UmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJn
dW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZGF0
YS0+bWFuZGF0b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAg
IG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM5OSwxNyArNzM5OCwxOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgIGlu
bGluZUNhbGxGcmFtZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CisgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUoKTsKICAgICBlbHNlCiAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAorICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBH
UFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKyAgICBHUFJSZWcg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEdQ
UlJlZyBsZW5ndGhHUFIgPSBhcmd1bWVudENvdW50LmdwcigpOwogICAgIEpTVmFsdWVSZWdzIHRl
bXBSZWdzID0gdGVtcC5yZWdzKCk7Ci0gICAgICAgIAotICAgIGVtaXRHZXRMZW5ndGgoaW5saW5l
Q2FsbEZyYW1lLCBsZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0gKi8gdHJ1ZSk7CisgICAgCisg
ICAgbV9qaXQubW92ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbGVuZ3RoR1BSKTsKICAg
ICBpZiAoZGF0YS0+b2Zmc2V0KQogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoZGF0
YS0+b2Zmc2V0KSwgbGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC03NjU1LDcgKzc2NTYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICAgICAgc2NyYXRjaDFHUFIpOwogICAgICAgICB9CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSwgc2NyYXRjaDFHUFIpOwogCiAgICAgLy8gRG9uJ3QgbmVlZCBhIG1lbW9yeSBiYXJyaWVycyBz
aW5jZSB3ZSBqdXN0IGZhc3QtY3JlYXRlZCB0aGUgYWN0aXZhdGlvbiwgc28gdGhlCiAgICAgLy8g
YWN0aXZhdGlvbiBtdXN0IGJlIHlvdW5nLgpAQCAtMTIzOTMsMTQgKzEyMzk0LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTZXR0ZXIoTm9kZSogbm9kZSkKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRDYWxsZWUoTm9kZSogbm9kZSkKIHsKICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSwgcmVzdWx0LmdwcigpKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTZXRDYWxsZWUoTm9kZSog
bm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIG1faml0LnN0b3JlQ2VsbChjYWxsZWUuZ3ByKCksIEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgIG1faml0LnN0b3JlQ2VsbChj
YWxsZWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKQEAgLTEyNDE4
LDcgKzEyNDE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogewotICAgIG1faml0
LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkp
LCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7
CisgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobm9kZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggYzY0
Zjk3OGFkZjg1ZmJmMjc3YmJhNzkyMTYwNjRmNDI4MWI4ZDVhOS4uMDNkNDgzNWJmNGI3YThkZTA5
MzllZmNmYTM3MDIyYjQ2MjY5MDk0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTM5Myw2ICsxMzkzLDcgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVn
ZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAg
dm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZh
cmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjY5LDE1
ICsxNjcwLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJS
ZWcsIEdQUlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0
YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VS
VCghYnl0ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhW
YXJpYWJsZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQp
CiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50
Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlh
YmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAg
IHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSwgZm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbklu
Zm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAppbmRleCA2N2IwZTBiMzcwNGNhNTlhODkwYWM1OWM4NmRiZDBkMmEwNTZkYjgxLi4wYWYz
ZjE3MTgxNTQxMGQ5YmVmNjRhMjBmZDA5MDVkZGMwM2U2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4Mjgs
NyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAg
ICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91
bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25l
ZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50
Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQp
OworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQo
KSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MjQsNiArMzgyNCwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5v
ZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAg
ICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAg
ICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7
CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggM2U2MzhjOWI5NDllYjVlYTI2YTMxMDVkZGI4YWZlNzY2
MjE2MzM0NC4uN2IxZTI1N2Q2MGQ0Njg0NWYxYTk0MGZmNmRmZGM5M2FjODZjN2M1MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBA
IC0xOTM2LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5k
IGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4g
YXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1f
Y3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3Jt
YXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRP
cGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDY0LDYgKzQ0NjQsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0
Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsK
KyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdz
KG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IGJlZWM4NmFjN2E3ZDMzM2UzOTY3OWUyNjc1
NTkwNzRlNDY0YzliODIuLmQ3NjI4ZTVhMTE3Y2UzM2RlMWQxNjE1ZjYwNDI3NTIyMDQ3N2EyMmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFi
bGUgYXMgYmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExv
Y2FsLCBHZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAg
IAotICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4g
dXNlZE9wZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxz
ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFy
ZSB1c2VkIGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFs
c2U7CkBAIC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQo
KSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29u
dGlndWl0eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2ln
bm1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3Rlcihk
YXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0
ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRh
LT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0
aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05v
ZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTIsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAg
ICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxv
Y2FsLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVy
YW5kKHN0YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gKml0ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAg
ICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICAgICAgdXNlZExv
Y2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5z
ZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKLSAgICAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9j
YXRpb24odXNlZExvY2Fscy5zaXplKCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9j
YXRpb24odXNlZE9wZXJhbmRzLnNpemUoKSk7CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0TWFjaGlu
ZUxvY2FsID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExvY2Fscy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKCF1c2VkTG9jYWxzLmdldChpKSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZE9wZXJhbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoIXVzZWRPcGVyYW5kcy5nZXRGb3JPcGVyYW5kSW5kZXgoaSkpIHsKICAgICAgICAg
ICAgICAgICBhbGxvY2F0aW9uW2ldID0gVUlOVF9NQVg7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CkBAIC0xMzUsNDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1l
bnQoKSkgewotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlh
YmxlLT5sb2NhbCgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFy
aWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGxv
Y2FsID0gdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYgKGxvY2Fs
ID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFy
aWFibGUtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHVzZWRPcGVyYW5k
cy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gYWxsb2Nh
dGlvbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAg
IGlmIChhbGxvY2F0aW9uW2luZGV4XSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
ID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24s
IHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3Ig
KFN0YWNrQWNjZXNzRGF0YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpIHsKLSAg
ICAgICAgICAgIGlmICghZGF0YS0+bG9jYWwuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAg
ZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICBpZiAoZGF0YS0+
b3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9j
YWwgPSBkYXRhLT5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sb2NhbC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6
ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGFsbG9jYXRp
b25bZGF0YS0+bG9jYWwudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2Nh
bCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCld
ID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWdu
KGFsbG9jYXRpb24sIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2Nh
bCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPm9wZXJhbmQpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVy
KCkpCiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29w
ZVJlZ2lzdGVyKGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3Rlcigp
KSk7CisgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNl
ZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5z
aXplKCk7IGktLTspIHsKICAgICAgICAgICAgIElubGluZVZhcmlhYmxlRGF0YSBkYXRhID0gbV9n
cmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24o
Ci0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpOworCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykg
ewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5t
X2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9z
aXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIxNSw4ICsyMTUsOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihh
bGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5t
YWNoaW5lQ291bnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5jb3Vu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24o
dXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgCkBAIC0yMzEsMTcgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2Nh
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNv
bnN0IE9wZXJhbmRzPGJvb2w+JiB1c2VkT3BlcmFuZHMsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4m
IGFsbG9jYXRpb24sIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBzcmM7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2Fs
KCldOwotICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRp
b24pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpOworCisgICAgICAgIHNpemVfdCBvcGVyYW5kSW5kZXggPSB1c2VkT3BlcmFuZHMub3Bl
cmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxv
Y2F0aW9uW29wZXJhbmRJbmRleF07CisgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9N
QVgpCisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwogICAgIH0KIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9u
UGhhc2UuY3BwCmluZGV4IGViM2RkYmQ3MTg0M2Q0OWY2NWIzMmNlOTYxZmY5YTA3MTJhMWEwNTEu
LmI0OGM2ZjdmMTkwOTc3NWQ3Mjc5Nzk5MWYzZmI5ODNkZTYzOGE3MjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cApAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRyOwotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbV9ub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbV9ub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPm9wZXJhbmQoKSA9
PSBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsID0gbm9kZTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ss
IGxvY2FsKSkpCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBu
b2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG9wZXJhbmQpKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcAppbmRleCA2YWNhZmJmM2JmNTM1Yzk2OTZiZTY0OGEyMDcwYjZlZTZmNGY4YmY5Li5mMWIx
ZmY2NGRkYTUzY2Y0NTk2NzA0ZWViODMxNWYxNmJmYmU5MDllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC00MCwxNCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0
KG51bGxwdHIpOwotICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwgJnZtKTsK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcgT1NS
IGV4aXQgdGh1bmsiKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhl
bHBlcnMgaml0KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKaW5k
ZXggMDVhNTBhNTRiMjVkNTFkYmNiMTg1OGZlN2FhZGNhNDg2ODIwNWQ5ZS4uOGI1YzNmMDFhNDg1
MjBiN2FhYWFhZWJhZmY5M2MzYjI2Y2NkOTg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5l
cmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CmluZGV4IDYwZmJmODk5NWZkYWQ3ODI1NmEwNjdiODljNGVjNWY1NzEzZjFkN2UuLjc5NjY1Zjhh
Yjg1ZmMxMTE2ZDYzOWZiM2Q4YjU1ZjZlZDkwMjY4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTQ2
LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVl
Lm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNoZWNrT3AgPSBD
aGVja1N0cnVjdHVyZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcGVjQ2VsbENoZWNr
ICYgU3BlY0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KChsb2NhbCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
IDogMCkpID09IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhlIGNh
bGwgZW50cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCkBAIC0xNjgsOCArMTY4LDgg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PT0gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSA9PSBub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gZ2V0TG9jYWw7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2NhbCgq
YmxvY2ssIGluZGV4SW5CbG9jaywgdmFyaWFibGUsIGdldExvY2FsKTsKICAgICAgICAgICAgICAg
ICAgICAgCkBAIC00NDYsNyArNDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVz
dEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA5ZWU1ZTAwNzQwOWRmNTI5NGJm
Y2Y1MWI3NzZlYjhjZmNmNDdjNTBlLi5hMmQ2Y2ZjMjQ5MzRlM2RjM2M0NmMwZTI0ZDRkYTFjZTFi
MGNmNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAt
NDgzLDcgKzQ4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5waGlzW2ldOwogICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suY29u
dGFpbnMobm9kZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3Ao
KSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUt
PmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFu
ZCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51
bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxk
cmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQpA
QCAtNTE5LDEwICs1MTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJsb2NrLT5wcmVk
ZWNlc3NvcnNba107CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnBy
ZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRo
ZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZl
IHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KGxvY2FsLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jaywgYmxvY2stPnByZWRl
Y2Vzc29yc1trXSksIHByZXZOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
cHJldk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAtNTMzLDExICs1MzMsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxv
Y2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHBy
ZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9j
YWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnREZWZpbml0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnRNYXliZQpAQCAtNTQ3LDE5ICs1NDcsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJl
ZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChs
b2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0lu
QmxvY2soZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChv
cGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlz
SW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZv
dW5kKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAg
ICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKAotICAgICAgICAgICAg
ICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRM
b2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+
dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJn
dW1lbnQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwpAQCAtNjY4LDI0ICs2NjQsMjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291bnRzLmdldChub2Rl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KSA9PSBub3RTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJs
b2NrKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgYmxvY2spLCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmlu
aXRlbHkgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgLy8gT25s
eSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9j
YWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkp
ICE9IG5vdFNldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBz
ZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKICAgICAgICAgICAgICAgICAg
ICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGZvciB0aGF0IGxv
Y2FsLgotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gbm90U2V0OwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CisgICAg
ICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudE1heWJlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk2
OCwyNiArOTY0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBl
ZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7
CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4g
bnVsbCBCbG9jayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBudWxsIEJs
b2NrICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxv
Zyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQs
ICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2Nr
KiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGlu
YXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwg
KnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxv
ZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRp
b25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ss
IE5vZGUqIHByZXZOb2RlKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNv
dXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJldk5v
ZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAg
IGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJj
ZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChO
b2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDI2ZjAzMjlk
NTQzMDQxNTcyMDVlNzgxNDk4YzY0ZTBiZTk5MzIxMTAuLjk1Y2RjOTJlMmMyNDEwYTM1YzAxMzEz
MWZkYzNiN2NjYzI4MjllZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2Ug
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiBwdWJsaWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYsNyArNTQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1f
Z3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5nOlxu
Iik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODYs
NyBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1bmN0
aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBtYW5u
ZXIuCiAgICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2FuZGlk
YXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1bWVu
dHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5kKCku
aXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0byBh
biBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhu
b2RlLT51bmxpbmtlZExvY2FsKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fs
cy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
bGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgpA
QCAtMTQwLDEzICsxMzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNh
d0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
IGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRp
ZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBA
IC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hp
bGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xvYWRl
ZEZyb20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBA
IC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRHZXRCeU9m
ZnNldCkgewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlkYXRl
QnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2Rl
LCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJ1
dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBw
cml2YXRlOgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAgICAg
ICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2Ug
YXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxs
aW5nICIsIG9wZXJhbmQsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAo
cmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fscy5s
YXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2Rl
SW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RVc2Vy
SW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdlZW4g
dGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2MywxNiAr
MjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAg
ICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAi
LCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5s
b2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNU
b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAu
cGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFu
ZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJp
emUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExLDcgKzMxMCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtlIHRo
aXMgd29yay4KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
V2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgIApAQCAtMzQxLDggKzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5n
dGg6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5k
aWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
aW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBhZGRU
aGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2
MmFlZDRjMzQzMmVhNWE4MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNjODhhODdjN2Qx
NzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAg
OiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKSkpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX3By
ZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNO
b25lKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQpA
QCAtNDUsMTAgKzQ0LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRh
KCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwobG9jYWwpCi0g
ICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxl
QWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3go
ZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBAIC04
Nyw3ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3Jt
YXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNp
bGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZv
ciBhcmd1bWVudHMuCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVy
YW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0aGlz
IGRvZXNuJ3QKQEAgLTEyMSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6dGFs
bHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgp
KTsKICAgICAgICAgCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVy
VW5ib3goKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5i
b3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgp
KQogICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9y
bWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3ICsxNzUsNyBA
QCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBhcmd1
bWVudHMuCi0gICAgaWYgKG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCku
aXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlIGFy
Z3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5saW5l
ZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKaW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRh
Mjg0ZS4uYmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC00
OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmlu
ZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJs
ZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YShPcGVyYW5kKTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAg
IE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5k
KCktPm1fbG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAgQVNTRVJUKG1f
b3BlcmFuZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7
CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAgLTIw
OCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxp
ZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1c2Fn
ZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCi0gICAgVmly
dHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2Fs
OwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlwZSBt
X2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgIFZp
cnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsKIAog
ICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5kZXggMjhlNDM3ZmQ1MWZlYTQ5NjllYjQ4ZWNmMGMw
NTA4ZjBhMzdkZjgzNS4uNWIyYzFlZTkwOWI1NDhmMzk4MjcwYzQzYmQzNmVkNzJlM2Y5Y2ZiYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkBA
IC01OSwxMSArNTksMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgiTW92
SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7CisgICAgICAgIG91
dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50KAotICAg
ICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0
ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hp
bmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAogICAg
ICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5oCmluZGV4IDIwNjBkNGEyZmQyNzIyM2RkNmY2OTljNmRiYWQ2ZDIy
NDY3Yzk4MzQuLmM4Yjg0YTdjMjE2NmU3MTVlNTMxY2Y3NWQzODQ5NzRmNWMzNjAyMmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC03Niw3ICs3
Niw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgIH0gcGFpcjsKICNlbmRpZgotICAgIGlu
dDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiB9OwogCiBjbGFzcyBWYXJp
YWJsZUV2ZW50IHsKQEAgLTE2Miw3ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdoaWNoVHlw
ZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxl
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZp
cnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0
aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtp
bmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQu
bV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTgxLDEzICsxODEsMTMgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbCgKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywg
RGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAg
ICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAg
IHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVnLm9mZnNldCgpOwogICAgICAgICBWYXJpYWJs
ZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52
aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9u
Lm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExv
Y2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAg
ZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTk1LDEzICsxOTUsMTMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBWYXJp
YWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2Rl
UmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgT3Bl
cmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAg
ICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAg
ICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJl
cHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQoKTsKKyAgICAgICAg
cmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlUmVnOwogICAgICAgICBldmVudC5tX2tp
bmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNo
KTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRhdGlvbiA9IFdURk1vdmUocmVwcmVzZW50YXRp
b24pOwpAQCAtMjY1LDEzICsyNjUsMTMgQEAgcHVibGljOgogICAgIFZpcnR1YWxSZWdpc3RlciBz
cGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmly
dGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0dXJu
IG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9
Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnaXN0ZXIoKSBjb25zdAorCisg
ICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0gTW92SGludEV2ZW50KTsKLSAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZpcnR1YWxSZWcpOwor
ICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5kOwogICAgIH0KICAg
ICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZ2lzdGVyKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCmlu
ZGV4IDQ1MjZkMzliYjA5NGM0Yjg2NmU2N2VkM2UyZWUxYjQ4OTZhYmI3MjYuLjdlZDRkOTAzYzE1
OTU0NmZkNDM0YzY5NTcwOWE0ODU3NDdjZDFiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApAQCAtMTIzLDYgKzEyMyw3
IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwog
CiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOworICAgIHVuc2lnbmVkIG51bVRtcHM7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5zaWduZWQgZmlyc3RVbmRlZmluZWQgPSBpbnZh
bGlkSW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSBmYWxzZTsKQEAg
LTEzMCwzNyArMTMxLDQyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWN0KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbiA9IFsmXSAodW5zaWduZWQg
aSkgewogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZEluZGV4KQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMu
dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLm9mZnNldCgpOwotICAgICAg
ICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRl
eChpIC0gMSkub2Zmc2V0KCk7CisgICAgICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zl
cmllcy5vcGVyYW5kRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLnZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpOworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5k
Rm9ySW5kZXgoaSAtIDEpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICBpbnQg
bWluT2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZzZXQsIGxhc3RPZmZzZXQpOwogICAgICAgICB1
bmRlZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7IGZpcnN0VW5kZWZpbmVkLCBtaW5PZmZzZXQs
IGkgLSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlk
SW5kZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQgPSBbJl0gKHVu
c2lnbmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBzZXBhcmF0ZSB0aGUgc3BhbiBvZiBh
cmd1bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2NhbHMgZXZlbiBpZiB0aGV5IGhhdmUgYWRqYWNl
bnQgb3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFs
aWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLmlz
QXJndW1lbnQoaSkpCisgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXgg
JiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9y
SW5kZXgoaSkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5k
U3BhbihpKTsKIAogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZEluZGV4KSB7
CiAgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGk7Ci0gICAgICAgICAgICBmaXJzdFVuZGVm
aW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKTsKKyAgICAgICAg
ICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9y
SW5kZXgoaSkuaXNBcmd1bWVudCgpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIGF1dG8qIGlu
bGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKS0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsg
MTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCku
dG9Mb2NhbCgpICsgMTsKKyAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsg
aW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CisgICAgfSBlbHNlIHsKICAgICAgICAgbnVtVmFy
aWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOworICAgICAgICBu
dW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bVRtcHMoKTsKKyAgICB9CiAgICAgCiAgICAg
Ly8gQ3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdyZSBhdCBpbmRleCA9PSAwIHRoZW4gdGhpcyBt
dXN0IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAgLy8gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBh
bGwgdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJlY292ZXJpZXMgc2hvdWxkCiAg
ICAgLy8gcmVmbGVjdCB0aGlzLgogICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgdmFsdWVSZWNv
dmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcmlhYmxlcyk7CisgICAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdG1wcyBoZXJl
IGJlY2F1c2UgdGhleSBjYW4ndCBiZSB1c2VkIHlldC4KKyAgICAgICAgdmFsdWVSZWNvdmVyaWVz
ID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51
bVZhcmlhYmxlcywgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNv
dmVyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkpLCBEYXRhRm9ybWF0
SlMpOworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSku
dmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0xNzEsNyArMTc3LDcgQEAgdW5zaWduZWQgVmFy
aWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAg
ICAKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFu
ZCBleGVjdXRlIHRoZSBldmVudHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRT
b3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9w
ZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbnVtVmFyaWFibGVzLCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVy
YW5kU291cmNlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVk
R2VuZXJhdGlvbkluZm8+IGdlbmVyYXRpb25JbmZvczsKQEAgLTE5OCwxMiArMjA0LDEyIEBAIHVu
c2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBp
ZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQot
ICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVS
ZWdpc3RlcigpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAg
IG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShl
dmVudC5pZCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2
ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0
ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVy
YW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQo
ZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAg
ICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAg
ICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFs
dWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRh
dGFGb3JtYXQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjEyLDcgKzIxOCw3IEBA
IHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIH0KICAgICAK
ICAgICAvLyBTdGVwIDM6IENvbXB1dGUgdmFsdWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292
ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbnVtVmFyaWFibGVzKTsKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJl
Y292ZXJ5PihPcGVyYW5kc0xpa2UsIG9wZXJhbmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVT
b3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlz
VHJpdmlhbGx5UmVjb3ZlcmFibGUoKSkgewpAQCAtMjY2LDcgKzI3Miw3IEBAIHVuc2lnbmVkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5mby51LnZpcnR1
YWxSZWcpLCBpbmZvLmZvcm1hdCk7CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJbkpTU3RhY2soaW5mby51Lm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIGluZm8uZm9ybWF0
KTsKICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRl
ZCkKICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihvcGVyYW5kU291cmNlcy5zaXpl
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmlu
ZGV4IDc4MWI3MWU2OTI0MzgyODY0ODk3ZWZmN2Y5ZGU2OGU0ZWU0ZWJmMWQuLjMyY2JjMTA3NmRl
NTlkYWE0YTcyN2RhYzdkNzVmYmRjYTYwN2RlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTE5MSw2ICsxOTEsNyBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAg
IGNhc2UgQnJhbmNoOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwCmluZGV4IDMwODBkYzM0NTA5YzczMzMyNGI4MTQzZDJhOTU0ZjA4
ZWRhZjEzZmIuLmMwMDRmYWNjYzFhZDA1ZDM2Y2VkYmVkZjk2NzgyYWFiN2RjYjk4MzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAog
Rm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQotICAgIDogbV9ieXRlY29k
ZUluZGV4KFVJTlRfTUFYKQotICAgICwgbV9lbnRyeUZhaWx1cmVDb3VudCgwKQorICAgIDogbV9l
bnRyeUZhaWx1cmVDb3VudCgwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggMmY0ZTA5NjIyZDg0NGY0MjBkNjZkMzM0ZWE5ODMy
MjFlZDA2ZDI1ZC4uN2Y2ZWVhNDM3MDVlYmU5YTYzZjMxNmZhNjhlYzQ2NjY2NzBiNTE3YSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMjc0
LDcgKzI3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQg
dGhlIENvZGVCbG9jayB0byBoYXZlIGEgd2VhayBwb2ludGVyIHRvIGl0c2VsZiBiZWNhdXNlCiAg
ICAgICAgIC8vIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdldCBjb2xsZWN0ZWQuCi0g
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0
PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICAgICAgLy8gU3RhY2sgT3ZlcmZsb3cgQ2hl
Y2suCiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dyYXBoLnJlcXVpcmVkUmVn
aXN0ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CkBAIC0zNTUsNyArMzU1LDcg
QEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCksIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBP
cGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
LmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRB
dChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKQEAgLTEy
ODEsNiArMTI4MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2FsbEV2YWw6CiAgICAgICAg
ICAgICBjb21waWxlQ2FsbEV2YWwoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aCgpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICBj
b21waWxlTG9hZFZhcmFyZ3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1Myw3ICsxOTU2
LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOwotICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25v
ZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkudmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29t
cGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKQEAgLTE5NzIsNyArMTk3NSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRh
KiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRhdGEtPmZv
cm1hdCksIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgIApAQCAtNzg0MSwxMyArNzg0NCwxMyBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgpCiAgICAgewotICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSkpOwogICAgIH0KIAogICAgIHZvaWQg
Y29tcGlsZVNldENhbGxlZSgpCiAgICAgewogICAgICAgICBhdXRvIGNhbGxlZSA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2Fs
bGVlLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkKQEAgLTc4NjIsNyArNzg2NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVT
ZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICBtX291dC5zdG9y
ZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgIG1f
b3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkpLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRTY29wZSgpCkBA
IC05NDU3LDUxICs5NDYwLDUxIEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hw
b2ludCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkKKyAgICB2
b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCk7Ci0gICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAorICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisKICAgICAgICAgTFZhbHVlIGxl
bmd0aCA9IHZtQ2FsbCgKICAgICAgICAgICAgIEludDMyLCBvcGVyYXRpb25TaXplT2ZWYXJhcmdz
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBqc0FyZ3VtZW50cywKICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0
aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8vIGZyb20gdGhlIHN0YW5k
cG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBh
IHNwZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlv
biB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFy
Z3MgcmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0gICAgICAgIAorCiAgICAg
ICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQu
aW50MzJPbmUpOwogCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIFZhcmFyZ3NPdmVy
Zmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3Ro
LCBsZW5ndGhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHNldEludDMyKGxlbmd0aEluY2x1ZGlu
Z1RoaXMpOworICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkKKyAgICB7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1ZSBqc0FyZ3Vt
ZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICAgICAgTFZh
bHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVk
aW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCisgICAg
ICAgICAgICBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihsZW5ndGhJbmNsdWRpbmdUaGlzKSwg
bV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5s
aW1pdCkpKSk7IAorCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywg
cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTGFvZFZh
cmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTG9hZFZhcmFyZ3MganVz
dCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCiAgICAgICAgIC8vIG9mIGEgVmlydHVhbFJlZ2lzdGVy
LCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKICAgICAgICAgTFZhbHVlIG1hY2hpbmVT
dGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKKyAgICAgICAg
ICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKSwgbV9j
YWxsRnJhbWUpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoMykpOwogICAgICAgICAK
ICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uTG9hZFZhcmFyZ3Ms
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICBtX291dC5jYXN0VG9JbnQz
MihtYWNoaW5lU3RhcnQpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZz
ZXQpLAotICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9y
eU1pbmltdW0pKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0
SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgewotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEo
KSkgewotICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpIHsKKyAgICAgICAgICAg
IE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMt
Pm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewogICAgICAgICAgICAgICAgIGNvbXBpbGVGb3J3YXJk
VmFyYXJnc1dpdGhTcHJlYWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEwLDUw
ICs5NTEzLDI2IEBAIHByaXZhdGU6CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWU7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKQotICAgICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSgpOwogCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOyAKLSAgICAgICAgTFZhbHVl
IGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBudWxscHRyOwotICAgICAgICBBcmd1bWVudHNMZW5ndGgg
YXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFtZSk7Ci0g
ICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgewotICAgICAgICAgICAgdW5zaWdu
ZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247Ci0gICAgICAgICAgICBpZiAo
a25vd25MZW5ndGggPj0gZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAgICAgIGtub3duTGVuZ3Ro
ID0ga25vd25MZW5ndGggLSBkYXRhLT5vZmZzZXQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAga25vd25MZW5ndGggPSAwOwotICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQuY29u
c3RJbnQzMihrbm93bkxlbmd0aCk7Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0g
bV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9u
IGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCi0gICAg
ICAgICAgICBpZiAoIWRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBhcmd1
bWVudHNMZW5ndGgudmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5j
aCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVl
LCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1
cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
c3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQp
KSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
ICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJl
c3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxl
bmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5jb25zdEludDMyKDEp
KTsKLSAgICAgICAgfQotCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID0gZGF0YS0+b2Zmc2V0OworICAgICAgICBMVmFsdWUgY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5j
bHVkaW5nVGhpczsgCisgICAgICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAg
ICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5tYXhTaWduZWQobV9vdXQuc3ViKGNh
bGxlckxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApKSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAg
bGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXM7CisKKyAgICAg
ICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5p
bnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxv
dywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5j
bHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAgICAgCiAg
ICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRh
LT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQg
PSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNo
aW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk2MTIsNjUgKzk1OTEsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFz
IHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAgICAgICAg
IGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICByZXR1cm4gYXJndW1l
bnRzTGVuZ3RoLnZhbHVlOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQu
bmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3
QmxvY2soKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBt
X291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSksIHVuc3VyZShpc0xhcmdl
ciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1
bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3Vs
dCk7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlQzMl9NSU4pKTsKKyAgICAgICAgcmV0dXJu
IG1fb3V0Lm1heFNpZ25lZChtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5j
b25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSksIG1fb3V0LmludDMyWmVybyk7CiAg
ICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKICAgICB7
Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRI
YXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxp
bmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKLQotICAgICAgICBOb2RlKiBhcmd1
bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogYXJndW1lbnRz
ID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGF0aWNBcmd1bWVu
dHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOwotCi0gICAg
ICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSByZWN1cnNhYmxlTGFtYmRhKFsmXShhdXRv
IHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LT5v
cCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzZWxmKHRhcmdldC0+Y2hp
bGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZCkgewotICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gdGFyZ2V0LT5iaXRW
ZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFyZ2V0
LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rv
ci0+Z2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZihtX2dyYXBoLnZhckFyZ0No
aWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50czsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewotICAgICAg
ICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRzICs9IHRhcmdldC0+Y2FzdE9wZXJhbmQ8
SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXQtPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdGFyZ2V0LT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQo
Y2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkgewotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZy
YW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwotICAgICAgICAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29sbGVjdEFy
Z3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1Ro
aXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyk7Ci0gICAg
ICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCi0gICAgICAgICAgICBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGluZ1RoaXMsIGxlbmd0aCk7
CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRlKApAQCAtOTY4MSw3ICs5NjEyLDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEt
Pm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSBy
ZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVkU3ByZWFkTGVuZ3RocywgJnRhcmdldFN0YXJ0
XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7
CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMsICZ0
YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAt
PiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tU3ByZWFk
KQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpLCBz
dG9yZUluZGV4KTsKIApAQCAtOTcxMyw4ICs5NjQ0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAg
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICBMVmFsdWUgc291cmNl
U3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIHRhcmdldC0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVu
Z3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhzLmdldChpbmxpbmVDYWxs
RnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJn
ZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICBMVmFsdWUgc291cmNl
U3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291
dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2Fs
bEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCiAgICAgICAgICAgICBMQmFzaWNC
bG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjE2OSw4ICsxMjEwMSw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0
LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1Bh
Y2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRv
d0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoMCkpKSwgcGFja2V0LCBtX2hlYXBzLlNo
YWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIo
bV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOwog
ICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNr
ZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBAIC0xMjI2MSw3ICsxMjE5Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0Zvcihm
cmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIHJl
dHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwo
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIH0K
ICAgICAKICAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzUyNiw3ICsxNzQ1OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1fZnRsU3Rh
dGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAgICAgIG1f
b3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxTaXRlSW5kZXgu
Yml0cygpKSwKLSAgICAgICAgICAgIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSk7CisgICAgICAgICAgICB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8ICFBU1NF
UlRfRElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1fb3V0LmFi
c29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0xNzYzNCw3ICsxNzU2Niw4
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0
RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmls
ZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1l
bnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxv
Y2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9m
TG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJP
ZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMTc3MzksMTUg
KzE3NjcyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdERlc2NyaXB0b3ItPm1fdmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4
aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAu
bV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxp
ZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3Bs
YW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAgICAgICAgICAgICAgaWYg
KGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkKLSAgICAgICAgICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5v
dCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIsIGF2
YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbiku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1f
Z3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBleGl0T3JpZ2luKSkKKyAgICAgICAgICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVj
b2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBvcGVyYW5kLCAiLCBhdmFpbGFi
aWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhp
dFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOwogICAg
ICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKQEAg
LTE4MDQyLDM5ICsxNzk3NSwzOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYWxy
ZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOwogICAg
IH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9w
ZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9y
KExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNb
b3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1f
aGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCldLCBvZmZz
ZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgaW50
IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJh
bmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1
ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNl
LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNl
LCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFk
ZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwg
b2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJl
ZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
bV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLCBvZmZzZXQpOworICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCwgb2Zmc2V0KTsKICAgICB9Ci0gICAg
VHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBh
eWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRG
b3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Io
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBwYXls
b2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
ZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRl
ciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAppbmRleCA5
MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5Li4wOTFlN2YzYzliNDk4MzQw
NzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAg
ICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxuIik7CiAg
ICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsg
YXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5hc2FuVW5z
YWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLmFzYW5VbnNhZmVKU1ZhbHVl
KCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9IHZhbHVl
cy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZhbHVlICYm
IHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFyZ3VtZW50
KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYxOGUzLi4w
NGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2luZyBuYW1l
c3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IoCiAgICAg
RGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVk
IG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25l
ZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9wcm9maWxl
RGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVl
UHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2Fs
cykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2FscywgbnVt
YmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9uSnVtcDxK
U0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9j
ayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXggZGE4N2Nj
ZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMxZjZhZWNl
MDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3QgT1NSRXhp
dERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRhRm9ybWF0
IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAotICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOwor
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQg
dG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCiAgICAg
Ly8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5k
IHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4ODE3NmVl
NzIuLmEzNzg0MTBkYTliODAxNTcyNGE5ZGMxNmMzZmUxYWVjMDgwNTVkNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0
cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9y
T3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwxMSBAQAog
I2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1
ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYg
dm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAg
ICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxp
bmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCisgICAg
aWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50
KCkpIHsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3Jp
cHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7CisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAg
ICAgICAgaml0LnByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
ICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRlY29kZUlu
ZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VV
bmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAgICAgICBz
aWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisK
KyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwg
V1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0
IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9y
aWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7
CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVP
cmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVD
YWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2Fz
dDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5l
Q2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxC
eXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAg
ICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOworICAg
ICAgICB9KTsKKyAgICB9CisKICAgICAvLyBOb3cgZ2V0IHN0YXRlIG91dCBvZiB0aGUgc2NyYXRj
aCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2suIFRoZSB2YWx1ZXMgYXJl
CiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1c3QgbW92ZSB0aGVtLgogICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyBpbmRl
eC0tOykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2NyaXB0b3It
Pm1fdmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChp
bmRleCk7CisKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0
aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGlj
X2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlZykpOworICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJl
Z2lzdGVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyh2bSwgaml0LCBl
eGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCmluZGV4
IDgyOWQyYmFiMTAyNjE4MjkxOGZjZjMyZWQwNGUyM2U2N2JlOTRjNTUuLjYyNjEyOTdmMjA3YTQx
ZmMyZGUzY2Y2NDI3MWQ3N2NlOGQ5YzBjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPcGVyYXRpb25zLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBAIGV4dGVybiAiQyIgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoSlNHbG9iYWxP
YmplY3QqCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0
ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxv
Y2F0ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAg
ICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zm
c2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICAg
ICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxl
QnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IDc0OTMzZGM2MDUxNWM1ZGEwMGVhMThmYzdk
NWRiM2FkOWNlNWU5Y2YuLjJjMzA0OGZiYmUzNTE4ODczZjNhZmJiNjViMjMzOGZhMGFkNzQ1MjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKQEAgLTE3Niw2ICsxNzYs
MzggQEAgTFZhbHVlIE91dHB1dDo6bmVnKExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpOZWcsIG9yaWdpbigpLCB2YWx1ZSk7CiB9
CiAKK0xWYWx1ZSBPdXRwdXQ6Om1heFVuc2lnbmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
Cit7CisgICAgYXV0byBpc0xlZnRHcmVhdGVyID0gYWJvdmVPckVxdWFsKGxlZnQsIHJpZ2h0KTsK
KyAgICBpZiAoaXNMZWZ0R3JlYXRlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGlzTGVm
dEdyZWF0ZXItPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBpc0xlZnRHcmVh
dGVyLCBsZWZ0LCByaWdodCk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6Om1pblVuc2lnbmVkKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCit7CisgICAgYXV0byBpc0xlZnRMZXNzID0gYmVsb3dPckVx
dWFsKGxlZnQsIHJpZ2h0KTsKKyAgICBpZiAoaXNMZWZ0TGVzcy0+aGFzSW50MzIoKSkKKyAgICAg
ICAgcmV0dXJuIGlzTGVmdExlc3MtPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigp
LCBpc0xlZnRMZXNzLCBsZWZ0LCByaWdodCk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6Om1heFNpZ25l
ZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQoreworICAgIGF1dG8gaXNMZWZ0R3JlYXRlciA9
IGdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgaWYgKGlzTGVmdEdyZWF0ZXIt
Pmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBpc0xlZnRHcmVhdGVyLT5hc0ludDMyKCkgPyBs
ZWZ0IDogcmlnaHQ7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgaXNMZWZ0R3JlYXRlciwgbGVmdCwgcmlnaHQpOworfQor
CitMVmFsdWUgT3V0cHV0OjptaW5TaWduZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKK3sK
KyAgICBhdXRvIGlzTGVmdExlc3MgPSBsZXNzVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOworICAg
IGlmIChpc0xlZnRMZXNzLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gaXNMZWZ0TGVzcy0+
YXNJbnQzMigpID8gbGVmdCA6IHJpZ2h0OworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGlzTGVmdExlc3MsIGxlZnQsIHJp
Z2h0KTsKK30KKwogTFZhbHVlIE91dHB1dDo6ZG91YmxlQWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7CiAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkFkZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5MzYyYjNiZGNhMGZkNDZhMDNhYTU3MGNh
MmUuLjk2ZDNkMTMzZTg1ODE1MGY0MDZlZDE0MjNmYWM0ZGY1NWMwYTlkOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMTU2LDYgKzE1NiwxMSBAQCBwdWJsaWM6CiAg
ICAgTFZhbHVlIGNoaWxsTW9kKExWYWx1ZSwgTFZhbHVlKTsKICAgICBMVmFsdWUgbmVnKExWYWx1
ZSk7CiAKKyAgICBMVmFsdWUgbWF4VW5zaWduZWQoTFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1
ZSBtaW5VbnNpZ25lZChMVmFsdWUsIExWYWx1ZSk7CisgICAgTFZhbHVlIG1heFNpZ25lZChMVmFs
dWUsIExWYWx1ZSk7CisgICAgTFZhbHVlIG1pblNpZ25lZChMVmFsdWUsIExWYWx1ZSk7CisKICAg
ICBMVmFsdWUgZG91YmxlQWRkKExWYWx1ZSwgTFZhbHVlKTsKICAgICBMVmFsdWUgZG91YmxlU3Vi
KExWYWx1ZSwgTFZhbHVlKTsKICAgICBMVmFsdWUgZG91YmxlTXVsKExWYWx1ZSwgTFZhbHVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IDY5MzRj
M2YwZDM3OTFmNjRiYTQyOTYzZTA1NTYzZGJiYzdkZGE1YTQuLmM3MjZhZDI3YzgxNWFjNjdhNjcw
ZDI1ODA0YWE4Y2FlMjJiM2EwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGwuaApAQCAtMTAwLDcgKzEwMCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0
aW9uKAogICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkp
LAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogICAgIHJldHVybiBj
YWxsT3BlcmF0aW9uKHZtLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVu
Y3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YTVmNTI3N2RkNjMx
YWNkNGNjYmVjZDE0YjI0Y2M1ZDRhMzlhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCkBAIC0wLDAgKzEsNjQgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2NsYXNzIENoZWNrcG9pbnQKKyAg
ICBhdHRyX3JlYWRlciA6dXNlcworICAgIGF0dHJfcmVhZGVyIDpkZWZzCisgICAgYXR0cl9yZWFk
ZXIgOm5hbWUKKyAgICBhdHRyX3JlYWRlciA6aW5kZXgKKworICAgIGRlZiBpbml0aWFsaXplKG5h
bWUsIGluZGV4LCB0bXBzKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGluZGV4ID0g
aW5kZXgKKyAgICAgICAgQHVzZXMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VE
ZWYgPT0gOnVzZSB9CisgICAgICAgIEBkZWZzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVm
KXwgdXNlRGVmID09IDpkZWZpbmUgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzKG5hbWVz
cGFjZSkKKyAgICAgICAgRU9GPC0tCisgICAgY2FzZSAje25hbWVzcGFjZX06OiN7bmFtZX06CitF
T0YKKyAgICBlbmQKK2VuZAorCitjbGFzcyBDaGVja3BvaW50cworICAgIGRlZiBpbml0aWFsaXpl
KG9wY29kZSwgdG1wcywgY2hlY2twb2ludHMpCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAg
ICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1h
cF93aXRoX2luZGV4IHsgfChuYW1lLCB0bXBzKSwgaW5kZXh8IENoZWNrcG9pbnQubmV3KG5hbWUs
IGluZGV4LCB0bXBzKSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MKKyAgICAgICAgQGNo
ZWNrcG9pbnRzLmVhY2ggZG8gfGNoZWNrcG9pbnR8CisKKyAgICAgICAgZW5kCisgICAgICAgIEVP
RjwtLQorQml0TWFwPG1heE51bVRtcHM+IHRtcExpdmVuZXNzRm9yI3tAb3Bjb2RlLmNhcGl0YWxp
emVkX25hbWV9KHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBzd2l0Y2ggKGNoZWNrcG9pbnQp
IHsKKworICAgIH0KK30KK0VPRgorICAgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvT3Bjb2RlLnJiCmluZGV4IGRhYjg2ODZjYTMzYTEwMmM5YmZhMWRmMTgwM2ViYjRm
MGFiMjQ0ODUuLmRkY2NiNGMyNjAyOTNlZTkzNjQ3YThhYjUwYWMwZjA0NDliNmJiMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCkBAIC0zMCw2ICszMCw3IEBA
IGNsYXNzIE9wY29kZQogICAgIGF0dHJfcmVhZGVyIDphcmdzCiAgICAgYXR0cl9yZWFkZXIgOm1l
dGFkYXRhCiAgICAgYXR0cl9yZWFkZXIgOmV4dHJhcworICAgIGF0dHJfcmVhZGVyIDpjaGVja3Bv
aW50cwogCiAgICAgbW9kdWxlIFNpemUKICAgICAgICAgTmFycm93ID0gIk9wY29kZVNpemU6Ok5h
cnJvdyIKQEAgLTQ1LDEyICs0NiwxNCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgdGlkCiAgICAg
ZW5kCiAKLSAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1l
dGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMpCisgICAgZGVmIGluaXRpYWxpemUoc2VjdGlv
biwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0
bXBzLCBjaGVja3BvaW50cykKICAgICAgICAgQHNlY3Rpb24gPSBzZWN0aW9uCiAgICAgICAgIEBu
YW1lID0gbmFtZQogICAgICAgICBAZXh0cmFzID0gZXh0cmFzIHx8IHt9CiAgICAgICAgIEBtZXRh
ZGF0YSA9IE1ldGFkYXRhLm5ldyBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzCiAgICAg
ICAgIEBhcmdzID0gYXJncy5tYXAud2l0aF9pbmRleCB7IHwoYXJnX25hbWUsIHR5cGUpLCBpbmRl
eHwgQXJndW1lbnQubmV3IGFyZ19uYW1lLCB0eXBlLCBpbmRleCArIDEgfSB1bmxlc3MgYXJncy5u
aWw/CisgICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3Bv
aW50cy5tYXAgeyB8KGNoZWNrcG9pbnQsIF8pfCBjaGVja3BvaW50IH0gdW5sZXNzIGNoZWNrcG9p
bnRzLm5pbD8KICAgICBlbmQKIAogICAgIGRlZiBjcmVhdGVfaWQhCkBAIC0xMTgsNiArMTIxLDgg
QEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIDw8LUVPRgogc3RydWN0ICN7Y2FwaXRhbGl6ZWRfbmFt
ZX0gOiBwdWJsaWMgSW5zdHJ1Y3Rpb24gewogICAgICN7b3Bjb2RlSUR9CisgICAgI3t0ZW1wc30K
KyAgICAje2NoZWNrcG9pbnRWYWx1ZXN9CiAKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQpAQCAtMTMy
LDYgKzEzNywxOCBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJRFR5
cGV9IG9wY29kZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAgICBkZWYgY2hlY2twb2ludFZh
bHVlcworICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAgICBbImVu
dW0gQ2hlY2twb2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8Y2hl
Y2twb2ludHwgIiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0sIFsiICAgICAgICBudW1iZXJPZkNo
ZWNrcG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4iKQorICAgIGVuZAorCisgICAgZGVmIHRl
bXBzCisgICAgICAgIHJldHVybiBpZiBAdG1wcy5uaWw/CisKKyAgICAgICAgWyJlbnVtIFRtcHMg
OiB1aW50OF90IHsiXS5jb25jYXQoQHRtcHMubWFwIHt8dG1wLCB0eXBlfCAiICAgICAgICAje3Rt
cH0sIn0pLnB1c2goIiAgICB9OyIpLmpvaW4oIlxuIikKKyAgICBlbmQKKwogICAgIGRlZiBlbWl0
dGVyCiAgICAgICAgIG9wX3dpZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYsIG9wY29kZUlEVHlw
ZSwgMCkKICAgICAgICAgb3Bfd2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUzMiwgb3Bjb2RlSURU
eXBlLCAwKQpAQCAtMjAwLDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bjb2Rl
U2l6ZSBfX3NpemUsIGJvb2wgcmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRlY29kZUdlbmVyYXRv
cj4KICAgICBzdGF0aWMgYm9vbCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRvciogZ2VuI3t0eXBl
ZF9hcmdzfSN7bWV0YWRhdGFfcGFyYW19KQogICAgIHsKKyAgICAgICAgI3shQGNoZWNrcG9pbnRz
Lm5pbD8gPyAiZ2VuLT5zZXRVc2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAgICAgICAgIGlmIChf
X3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2VuLT5hbGlnbldpZGVP
cGNvZGUxNigpOwogICAgICAgICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTMy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4IDIwNGFj
NzU5ZTEzZWZmMTUxZjhjZDE3N2YzYmYxYjcwZTA3NzljYWEuLjY2ODU1YmE2NTAwODBlNGMyM2Nj
MGViZWMxMGU3OTQ5Y2RlNzY4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L1NlY3Rpb24ucmIKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgogICBlbmQKIAogICBk
ZWYgY3JlYXRlX29wY29kZShuYW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUubmV3KHNlbGYsIG5h
bWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNv
bmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSkKKyAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFt
ZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29u
ZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdLCBjb25maWdbOnRtcHNdLCBjb25maWdbOmNoZWNr
cG9pbnRzXSkKICAgZW5kCiAKICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFtZSwgb3Bjb2Rlcywg
Y29uZmlnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcAppbmRleCBmNjM5NGFjNzEwNzEyNWI3Y2FiMjFhZDJiOTExM2MwNzk1MzZhNjAwLi4wZmQ1
NjJiYjFhOTJiMDM0YzVkYzgwNjM2MDkwNWI0NjRlYjUzZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2
b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihDYWxsRnJh
bWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbAogICAgIEFTU0VSVChnbG9iYWxFeGVjLT5pc0RlcHJlY2F0
ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpKTsKIH0KIAotYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRl
Qml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKK2Jvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJp
dHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwog
ICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewpAQCAtMTAwLDEyICsxMDAsMTIg
QEAgU1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlQXNSYXdC
aXRzKCkgY29uc3QKIAogQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBj
b25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVB
c1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZy
b21CaXRzKGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogU1VQUFJFU1NfQVNBTiBDYWxsU2l0
ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygp
KSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModW5z
YWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAg
LTEyMywyOCArMTIzLDI5IEBAIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IElu
c3RydWN0aW9uKiB2cGMpCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNv
ZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgQVNTRVJU
KGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJp
dHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxvY2soKS0+Ynl0ZWNvZGVP
ZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0
KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChj
YWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxvY2soKS0+
aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKS5wdHIoKTsK
IH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZw
YykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRlY29kZUlu
ZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOworICAgIHRoaXNbQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAgQVNT
RVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxT
aXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2so
KSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIHJl
dHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVC
eXRlY29kZUluZGV4KCkpOworICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRl
eCgpLm9mZnNldCgpOwogfQogCiAjZW5kaWYKQEAgLTE2NSw4ICsxNjYsOCBAQCBCeXRlY29kZUlu
ZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAgICAgICAgIHJldHVybiBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKICAgICB9CiAjZW5kaWYKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRz
QXJlQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKTsK
IH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTgwLDcgKzE4MSw3
IEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKICAgICAgICAgcmV0dXJuIGNv
ZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICByZXR1cm4g
Q29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkp
OworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCkp
OwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IGNmYjc3MTg1
NjAzOTkzMzkxMDA0ZmMxMzIxMTgzODQyM2M1ZGM2YTkuLjA1ZjY5MTc3NDg5NTMzMWQ5MjMxMDAx
YTE1YTJjMDVhYmU4YTg5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKQEAgLTQ2LDE4ICs0NiwxOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAogICAgICAgICBleHBsaWNp
dCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAg
IDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IG1fYml0cyhi
eXRlY29kZUluZGV4LmFzQml0cygpKQogICAgICAgICB7IH0KIAotICAgICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4OyB9CisgICAgICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQorICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1aW50MzJfdCBiaXRz
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CisgICAgICAgIHVp
bnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0K
KyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0
ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IG1fYml0cyB7
IEJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKSB9OwogICAgIH07CiAKICAgICBjbGFzcyBEaXNwb3Nh
YmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAgLTc4LDcgKzc4LDcg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIGFybTY0XzMyIGV4cGVjdHMgY2FsbGVyIGZyYW1l
IGFuZCByZXR1cm4gcGMgdG8gdXNlIDggYnl0ZXMgCiAgICAgc3RydWN0IENhbGxlckZyYW1lQW5k
UEMgewogICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
OwotICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBjb25zdCBJbnN0cnVjdGlvbiogcmV0dXJu
UEM7CisgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIHZvaWQqIHJldHVyblBDOwogICAgICAg
ICBzdGF0aWMgY29uc3RleHByIGludCBzaXplSW5SZWdpc3RlcnMgPSAyICogc2l6ZW9mKENQVVJl
Z2lzdGVyKSAvIHNpemVvZihSZWdpc3Rlcik7CiAgICAgfTsKICAgICBzdGF0aWNfYXNzZXJ0KENh
bGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyA9PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykgLyBzaXplb2YoUmVnaXN0ZXIpLCAiQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJz
IGlzIGluY29ycmVjdC4iKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0dXJuUEMpOyB9CiAgICAgICAgIEFic3RyYWN0
UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0dXJuIEFic3RyYWN0UEModm0sIHRoaXMp
OyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0
OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdDsKICAg
ICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdDsKIAogICAg
ICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0OwpAQCAtMTgyLDEwICsxODIs
OCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXByZWNhdGVk
Q2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxlZSogZ2xv
YmFsQ2FsbGVlKTsKIAogICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZy
YW1lIChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdpc3RlciYg
cihpbnQpOwogICAgICAgICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAv
LyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lzdGVyJiB1
bmNoZWNrZWRSKGludCk7CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBrbm93biBu
b24tY29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNh
cHR1cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCkBAIC0y
NTQsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICB2b2lkIHNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRo
aXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnBheWxvYWQoKSA9IGNvdW50OyB9CiAg
ICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwogICAgICAgICBpbmxpbmUg
dm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZvaWQgc2V0UmV0dXJuUEMo
dm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAgICB2b2lkIHNldFJldHVy
blBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZhbHVlOyB9
CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCmluZGV4
IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEuLmFlMzU4OThmYjVjOWY0
NmQ1YjBjYWYzYzY1ZjQ3N2QzNDgxM2I5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAtMzIsMjggKzMyLDE3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihpbnQg
aW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsK
LSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0KIGlubGlu
ZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0
dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVu
Y2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKKyAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lz
dGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOworICAgIHJl
dHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1l
Ojp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHVuY2hlY2tl
ZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOworICAgIHJl
dHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1ZhbHVlIENhbGxGcmFtZTo6
Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MjA5YzNhMWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZmNDZiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkJ5dGVjb2RlSW5kZXguaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBvZmZzZXQp
IAorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ2
NF90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZzZXRdKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDMyX3Qp
KQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50MzJf
dD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkg
PT0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4o
c3RhdGljX2Nhc3Q8dWludDE2X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90KSk7Cisg
ICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRt
cHNbb2Zmc2V0XSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4OworICAgIHZvaWQqIG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7CisgICAgdWlu
dDY0X3QgdG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCA5YzFjYzQy
NjU1MGNkNWE1Y2IxZGI5OTg1YWY2NGE4OTc3ZmZjYTkyLi4yMThmNjQ4OWZlNDg3ZDc3NDVlZTIw
NDdhYjZiMTdmNDQ0N2JmOTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCeXRl
Y29kZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hT
Y29wZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0
QXJndW1lbnRzLmgiCkBAIC0xMjQsNyArMTI1LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKICAg
ICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsK
LSAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIo
Y2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29w
ZSgpOworICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVj
a2VkUihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7
CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0gY2FsbGVy
Q29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rp
b25Db250ZXh0ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpIHx8
IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7CkBAIC0y
MTcsNiArMjE4LDkgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+PSBtYXhBcmd1
bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAgICAgbGVu
Z3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UKQEAgLTI1Myw3ICsyNTcsNyBAQCB1
bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9h
ZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywg
dWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFs
dWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBp
ZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjY1LDM1ICsyNjksMzUgQEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2kKICAgICBz
d2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4o
Y2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRz
Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3Qs
IG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1l
bnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVk
QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8U2Nv
cGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0
RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SlNGaXhlZEFycmF5VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nh
c3Q8SlNGaXhlZEFycmF5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nh
c3Q8SlNGaXhlZEFycmF5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZp
cnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlU
b0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3Ro
KTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChhcmd1
bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAgICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVj
dCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmpl
Y3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdW5z
aWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdl
dEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5y
KGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZz
ZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IG9iamVjdC0+Z2V0SW5kZXhR
dWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsg
b2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFsdWU7
CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFsdWU7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMzA1LDggKzMwOSw3IEBAIHZvaWQgc2V0dXBWYXJh
cmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVjdCwK
LSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNh
bGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
MCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAgbmV3
Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsKQEAg
LTU0Niw4ICs1NDksMTMgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3It
PmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIGlm
ICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAg
ICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9pbnRzLgorI2lmIEVOQUJMRShE
RkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMgPT0gJmNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCkKKyAgICAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7CisjZW5k
aWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
bV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJl
cXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxl
cikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAgLTU2
OSw2ICs1NzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5nKQog
ICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAorICAgICAgICBtX3JldHVy
blBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC02MDUsNiArNjE0LDcgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9j
azsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZvaWQq
IG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8q
IEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKQpAQCAtODc0LDcgKzg4NCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVj
dCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAgaWYg
KFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgKyAxIC8q
IHRoaXMgKi8gPj0gbWF4QXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4o
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAKICAg
ICBpZiAoaXNKU0NhbGwpIHsKQEAgLTk0Myw3ICs5NTMsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTTwogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmpl
Y3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgeworICAg
IGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6ZSgpICsg
MSAvKiB0aGlzICovID49IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJm
bG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2EwLi5m
ZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4QXJn
dW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQg
bnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNp
Z25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2FkVmFy
YXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1Zh
bHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0
aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwg
dWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxs
ZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1ZmNl
NDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIwNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVk
RnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAg
ICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lu
bGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnJh
bWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7Cisg
ICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJh
bWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQz
MigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6
RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1bmN0
aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAgICAgICAgICAg
IGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVC
eXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJp
dHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBjOGRmMjAwYjk4
MWZmODI2YTUyZWYwNjcwZWM3ZGVlZGNiZmY2OTZlLi5jM2U4ZDBjM2RhMTEzZDk5YWMwYzhkZjQw
MTU5ODliMjkwZDY5MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6Ompp
dEFzc2VydElzTnVsbChHUFJSZWcgZ3ByKQogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNz
ZXJ0QXJndW1lbnRDb3VudFNhbmUoKQogewotICAgIEp1bXAgb2sgPSBicmFuY2gzMihCZWxvdywg
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgVHJ1c3RlZEltbTMyKDEw
MDAwMDAwKSk7CisgICAgSnVtcCBvayA9IGJyYW5jaDMyKEJlbG93LCBwYXlsb2FkRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIFRydXN0ZWRJbW0zMigx
MDAwMDAwMCkpOwogICAgIGFib3J0V2l0aFJlYXNvbihBSEluc2FuZUFyZ3VtZW50Q291bnQpOwog
ICAgIG9rLmxpbmsodGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAppbmRleCAyMjAwOWM1ZmQyYmEyMjdkNDdjZmU4NTQ5MzlmNTJkZWYyZDcxYmMy
Li41ODcwN2ZhODQzY2RkZTg3MjVjYTcyOGI4OGMxMTNmOGE5MWYyMjFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTExNDgsOSArMTE0OCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAg
ICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxS
ZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KLSAgICBzdGF0aWMg
QWRkcmVzcyBhZGRyZXNzRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJl
c3NGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCgh
b3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE2Myw5ICsx
MTY0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlk
KCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
dmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCk7
CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0
aWMgQWRkcmVzcyB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAg
QVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRG
b3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBAIC0x
MTc4LDkgKzExODAsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVy
LmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5
bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50IG9w
ZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVyYW5kIG9wZXJhbmQpCiAg
ICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAg
ICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAK
ICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKaW5kZXggODQ4NWE5ZmJkNjgzZGJlZjY1
OGY2NzA4ODEzZjc1OGQ1ZGRiOThkMS4uYjNmMGUxNjkyYzBkYWJhNzk5NTZlMWU1MTE5OThiOWYy
OWQyZDcyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcApA
QCAtMzcsNyArMzcsNyBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzYwogICAgIHN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJh
bWVBbmRQQywgY2FsbGVyRnJhbWUpKSwgc2NyYXRjaDEpOwogICAgIHN0b3JlUHRyKHNjcmF0Y2gx
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY2FsbGVyRnJhbWUpKSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSksIHNjcmF0Y2gxKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBzY3JhdGNoMSk7CiAgICAgc3RvcmVQdHIo
c2NyYXRjaDEsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCAxN2MwZWRhYTgyYjlmOTRmNTc0
MTMxMTA2MWE2NTEyOTRhNTE2Zjg1Li5iNjYxMjdhNGZiMWVjYmM2ZjE0OTIxN2JjMDAzZTEwMmUx
N2FlNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC03NTUsNyArNzU1LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKIAot
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwg
cmVnVDEpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdUMSk7CiAgICAgICAgIGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
KSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAyODAzMmEyMWFh
Y2I5YTJkOTMyMjg1ZmUxZjk2NWFkZTNlMjdhODBhLi44NzMxNWVmODQ3N2FjMTJhNzNjNTcwYWVm
OTEyNTBjNTY5YTRmMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTMzMSwxNiArMzMx
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVt
cChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVu
dW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwogICAgICAgICB2b2lkIGNvbXBp
bGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVP
cEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50
RG91YmxlKGludCBzcmMpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKGlu
dCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZEludDMy
VG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lkIGVt
aXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVy
SUQgdmFsdWUpOwogCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKICAgICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4gd3Jp
dGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCByZWdpc3RlcnMKICAgICAgICAg
Ly8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2ggcmVn
aXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVu
c2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsK
KyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
KTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBp
cyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCkBAIC00MDQsMzIgKzQw
NCwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7
IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIAotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CisgICAgICAgIHZv
aWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVn
cyBkc3QpOworICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKIAotICAgICAgICBpbnQzMl90IGdldE9wZXJhbmRD
b25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERv
dWJsZShpbnQgc3JjKTsKKyAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYyk7CisgICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBp
bnQzMl90JiBjb25zdGFudCk7CisgICAgICAgIGJvb2wgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3AsIGludDMyX3Qm
IGNvbnN0YW50KTsKIAotICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0
ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAogICAgICAgICB2b2lkIGVtaXRMb2FkKGNv
bnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAg
ICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2
b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5
bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7
CisgICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcx
LCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMiwg
UmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKLSAgICAgICAgdm9pZCBlbWl0U3RvcmUoaW50IGluZGV4
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgY29u
c3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIp
OwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJ
bnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9
IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRT
dG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wg
PSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdp
c3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rlciwg
Y29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBl
bWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29s
IGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2Up
OworICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0
b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAotICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVh
bFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CiAK
ICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRlbnRpZmllciopOwog
CkBAIC00MzgsMTcgKzQzOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlz
dCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0
ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1ZSk7CiAKICNlbHNlIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBSZWdpc3RlcklEIGRzdCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIs
IFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
VmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNy
YzIsIFJlZ2lzdGVySUQgZHN0Mik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20gPSBy
ZWdUMCk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgZHN0LCBSZWdpc3RlcklEIHBh
eWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4g
SlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKICAgICAgICAgfQpAQCAtNDU2LDI5ICs0NDks
MjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZkJvdGhKU0NlbGxz
KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lz
dGVySUQgc2NyYXRjaCk7CiAgICAgICAgIFBhdGNoYWJsZUp1bXAgZW1pdFBhdGNoYWJsZUp1bXBJ
Zk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVtYmVy
KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdp
c3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCi0gICAgICAgIHZvaWQg
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlVlJlZywgY29uc3QgSWRlbnRpZmllciopOwor
ICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChWaXJ0dWFsUmVnaXN0ZXIgYmFzZVJl
ZywgY29uc3QgSWRlbnRpZmllciopOwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9u
YWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcElt
cGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0
cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
LCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIAogICAgICAgICB2
b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBAIC02ODUsOCArNjc4LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90KTsKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVl
KiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNjk0LDIwICs2ODcsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICAgICAg
ICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHRh
ZywgR1BSUmVnIHBheWxvYWQpOwogI2VuZGlmCi0gICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVW
YXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CisgICAgICAgIHZvaWQgZW1pdEdldENs
b3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBl
bWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50
IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
Kik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpOworICAgICAgICB2
b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICB2b2lkIGVt
aXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7Cisg
ICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwg
VmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChp
bnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsKLSAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYyk7CisgICAgICAgIEpTVmFs
dWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwg
dHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFz
dChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKQEAgLTczNCw3ICs3MjcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKICAg
ICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQgdmlydHVhbFJl
Z2lzdGVySW5kZXgpOworICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICB2
b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiYgc2xvd0Nhc2VzLAogICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCkBAIC03NTQsMTMgKzc0NywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhh
c1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CkBA
IC04MDQsNyArNzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBp
bnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVw
QXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTg2NCw3ICs4NTcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAgICAgICB2b2lkIHByaW50Qnl0ZWNv
ZGVPcGVyYW5kVHlwZXMoaW50IHNyYzEsIGludCBzcmMyKTsKKyAgICAgICAgdm9pZCBwcmludEJ5
dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4IDM0NTg3NDRmYmNkZDUzYWNm
OWE0MzMyOGJjNDk0YjBmZWRjYjg5M2YuLjNhMzJjMzI2MTg5ZmFiMTk3ZDdjZjlmOTFkNWY2YjRi
MzEwMjAyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25l
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAg
ICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMTcyLDEzICsxNzIsMTMgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9CiAK
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMg
aW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50
IGltbWVkaWF0ZQpAQCAtMjMwLDEzICsyMzAsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwpAQCAtMjU2LDEzICsy
NTYsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChkc3Qs
IG9wMSwgb3AyLCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwpAQCAt
Mjg0LDEzICsyODQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVy
dCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwg
Y29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CiB9CiAKLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZv
ciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CkBAIC0zODcsNyArMzg3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVjb2Rl
Lm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29k
ZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTM5OSw3ICszOTksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVjPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCk7CkBAIC00MTUsOSArNDE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBpbnQg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJl
Y3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVn
aXN0ZXJzOjplYXgpOwpAQCAtNDkxLDkgKzQ5MSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQ
YXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGluZ1BvbGlj
eSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpA
QCAtNTM4LDggKzUzOCw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpCiB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAg
ICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01OTksOSArNTk5LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlmdFR5cGUgc25p
cHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC02
NzQsOCArNjc0LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlv
biwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3BlcmFuZCA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20g
dXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCkBAIC03MjQsOSArNzI0LDkg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRC
aW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2Zp
bGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwot
ICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CkBAIC03OTksNyArNzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGMK
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtODQ1LDkgKzg0NSw5IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElD
LCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC05
MDYsOSArOTA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCk7Ci0gICAgaW50IHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKaW5kZXggYmYyMzA2YmNlNGQ1NmYxMDlhMDM2MThiMzQwNzJmYzU3YzBlNWFjMy4uYWY5ZWVi
NjI3OWNjZTRkMTFiOTM0YWUxZjFiNWM2ZTRkNjcyMmY3NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgpAQCAtNjYsNyArNjYsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAt
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwogCiAgICAgaWYgKE9wOjpvcGNvZGVJ
RCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAgICAgc3RvcmUzMihyZWdUMCwgbWV0
YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKQEAgLTg1LDkgKzg1LDkgQEAgc3RkOjplbmFibGVfaWZfdDwKICwgdm9pZD4K
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8q
IGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNl
dCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsK
LSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwor
ICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgp
OyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHdlIG5ldmVyIHVz
ZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5tX2Zp
cnN0VmFyQXJnOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1Qx
KTsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogewogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsK
IAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdp
c3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RXhjZXB0aW9ucy5jcHAKaW5kZXggYjdkMGNhMjM1OGJlNTI1MDE4YTNmNGU5NjE2ZDljYjg0OGZm
ZjUyMS4uZTA3YTgzM2Q0Yzg1M2I5YzdhMDJkZThiNzQ2MDFkZjMwNjZiYWUyZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC01MCw3ICs1MCw3IEBA
IHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlm
IChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgZGF0YUxvZygiSW4gY2Fs
bCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZyYW1lKSwgIiBmb3IgY29kZSBibG9jayAi
LCBjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBDUkFTSCgpOworICAgICAgICBXVEZCcmVha3Bv
aW50VHJhcCgpOwogICAgIH0KICAgICAKICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IHZt
LnNoYWRvd0NoaWNrZW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5k
ZXggMjIxNDljOWJkMWI4ZWMxMTgxMmNiZTBiODU0MWJlZTkzYjEwYWIzNC4uN2JjMTRlODM1YWQx
YWQxZGQ2NzNmY2E1MDY5NjgwZTI1NWZiYzliOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKQEAgLTQ4LDE5ICs0OCwyMCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9yQXJyYXlNb2RlKGNvbnN0IEluc3RydWN0aQog
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMp
CiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgcmV0dXJuIHNyYy5p
c0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKIH0KIAot
QUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMpCitB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KHNyYykpOworICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKICAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKIHsKKyAgICBBU1NFUlQoZW50cnku
aXNIZWFkZXIoKSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkpOwogICAgIHN0b3JlMzIoZnJv
bSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTA5LDcgKzExMCw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAjZWxzZQogICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAjZW5kaWYK
LSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9u
Qml0cyksIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKICAgICAKICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzIGlzIG5l
ZWRlZC4gSklUT3BlcmF0aW9ucyB0ZW5kIHRvIHVwZGF0ZSB0aGUgdG9wIGNhbGwgZnJhbWUgb24K
ICAgICAvLyB0aGUgQysrIHNpZGUuCkBAIC0xNDMsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tP
bkV4Y2VwdGkKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3Qp
CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE1NSw3ICsxNTYsNyBAQCBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CkBA
IC0xNjcsOSArMTY4LDkgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKICAgICByZXR1cm4gY2Fs
bDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CiB9CiAKQEAgLTI4NCw5ICsyODUsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1w
bGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAjZW5kaWYKICNlbmRpZgogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYykKK0FMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
c3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICByZXR1
cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygp
ICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkg
PT0gMTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlKQpAQCAtMzYzLDI2ICszNjQsMjYgQEAgaW5saW5lIEpJVEFy
cmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiAgICAg
cmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6Omdl
dE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6
Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBk
b3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19JTkxJ
TkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCkKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRz
dCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5k
KGluZGV4KS50YWcoKSksIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTAsOSAr
MzkxLDkgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgdGFnKQogICAgIGxvYWQzMih0YWdGb3IoaW5kZXgpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1v
dmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwNiwxMzYgKzQwNywxMzMgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKQogICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1
ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldChWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BS
KCksIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwg
ZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGludCBp
bmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNl
KQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3Rl
cklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwogCiAgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1l
UmVnaXN0ZXIpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAg
ICAgICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRU
YWcoaW5kZXgsIHRhZyk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChyZWcsIHBheWxvYWQpOwor
ICAgICAgICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKICAgICBpZiAocGF5bG9hZCA9
PSBiYXNlKSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0Zvcih0
YXJnZXQsIGJhc2UpLCB0YWcpOwotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJh
c2UpLCBwYXlsb2FkKTsKKyAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBh
eWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKKyAgICBsb2Fk
MzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBsb2FkMzIodGFnRm9yKHJl
ZywgYmFzZSksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKGludCBpbmRl
eDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4MiwgUmVn
aXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQoraW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZDIoVmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBw
YXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJ
RCBwYXlsb2FkMikKIHsKLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAg
ICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKKyAgICBlbWl0TG9hZChyZWcyLCB0
YWcyLCBwYXlsb2FkMik7CisgICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklE
IHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsK
KyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsK
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVl
KTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFs
dWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihyZWcpOwogICAgICAgICBjaGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KCZpbkNvbnN0YW50UG9vbCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFi
c29sdXRlQWRkcmVzcyhieXRlUG9pbnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocGF5bG9hZEZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocGF5bG9hZEZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
UmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0b3Jl
MzIocGF5bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywg
dGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihy
ZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIo
VmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQz
MikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9y
ZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGlu
ZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
dGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBp
bmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1tMzIg
cGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXls
b2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwog
ICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGlu
ZGV4SXNDZWxsKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKLSAgICBzdG9y
ZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKHJlZykpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBh
eWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2wo
VmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29s
KQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3Jl
MzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNCb29sKQotICAg
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGlu
ZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcp
LCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKGlu
dCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIHN0
b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7CisgICAgc3RvcmVEb3VibGUodmFs
dWUsIGFkZHJlc3NGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGlu
dCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBj
b25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQg
eyBpbmRleCB9OwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9h
ZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwg
dGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9h
ZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50
LnRhZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJl
Z2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVy
SW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVn
KSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywg
UmVnaXN0ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVk
aWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRhZykp
OwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25z
dGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
IHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBjb25zdGFu
dCA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTsKQEAgLTU1NSwxMSArNTUzLDEx
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3Ax
LCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQog
CiAvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8g
YSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKQEAgLTU3MSw0NyArNTY5LDMyIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0
ZXJJRCBkc3QpCiAgICAgbG9hZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVl
UmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCks
IGRzdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVn
aXN0ZXJJRCBkc3QyKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNy
YzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0
MikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLm9mZnNldCgpLCBkc3QxLCBz
cmMyLm9mZnNldCgpLCBkc3QyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGlu
dCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3Qub2Zmc2V0KCksIGZyb20pOwotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBK
SVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVn
MiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC02
MjksMjggKzYxMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZykpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFs
UmVnaXN0ZXIgdlJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7
CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7
CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZh
bHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lz
dGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgQVNTRVJUKGlz
T3BlcmFuZENvbnN0YW50SW50KGluZGV4KSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAg
IGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFu
dEludChyZWcpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3Rh
bnRPcGVyYW5kKHJlZykuYXNJbnQzMigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAogQUxXQVlT
X0lOTElORSBKSVQ6OlBhdGNoYWJsZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50
KFJlZ2lzdGVySUQgcmVnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
aW5kZXggN2NmYTA5NWYwMGQxN2UxNDExYmU5Y2ZiODBmODA4MDZmNzg4ZjZjMS4uNDYxN2VlMjk0
YjE0ZmVmMTI0ODg4NDQxZGZkOTQ1MTAzNjVhYTVkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2
b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9
IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAg
ICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkK
ICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkp
LCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNFX0FT
U0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CiAgICAgcmV0KCk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKQEAgLTEyOSw5ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwog
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1f
Y29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVj
b2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUg
PSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQg
SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Rv
ID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFz
ZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAg
IC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0
aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2
LDcgKzE4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNb
bV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlZ1QwKTsKQEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
c1VuZGVmaW5lZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKQEAg
LTI0Niw4ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVm
aW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9y
TnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAKQEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29s
ZWFuPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CkBAIC0yNzQsOCArMjc0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHRl
c3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4
ICsyODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGlu
ICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKICAgICAKQEAgLTM2MCwxNSArMzYwLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVh
biwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93
IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3Bl
Y3RpdmVseSkuCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSkpKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVn
VDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMzkwLDE0ICszOTAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZz
ZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0g
ICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5l
cVB0cj4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBKU1Zh
bHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lh
bFBvaW50ZXIub2Zmc2V0KCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOworICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlz
Q2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCkBAIC00ODUsMTggKzQ4NSwxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
Lm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01
MTAsMjYgKzUxMCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0
KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAg
IEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSgpKTsKIH0KQEAgLTU0OCw5ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3Jj
MiwgcmVnVDEpOwogICAgIApAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9
IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVn
VDAsIHNyYzIsIHJlZ1QxKTsKIApAQCAtNjUwLDggKzY1MCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOwpAQCAtNjY0LDggKzY2NCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1lcmljPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKQEAgLTY4NCwyMCArNjg0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251
bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+
KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhy
ZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CkBAIC03MjgsMTAgKzcyOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0
aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNl
dCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uKTsK
IAogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVl
Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3du
VmFsdWUpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlu
bGluZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCkBA
IC03MzksNyArNzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBi
dWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwog
ICAgIGVsc2UKQEAgLTc0OSw3ICs3NDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRo
aXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsK
KyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3Mp
OwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVBy
b2ZpbGUmPihwcm9maWxlKSk7CkBAIC03NjYsMTAgKzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UGFyZW50U2NvcGU+KCk7Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5k
ZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQp
OwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUg
PSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3ICs3
OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2Rl
Lm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWdu
ZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3
aXRjaFN0cmluZz4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJ
bmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDAp
OwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtODY3
LDggKzg2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNy
ZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1W
YXJzKCk7CiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAg
ZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7Cisg
ICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCiAg
ICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBT
dHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1
cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0Rz
dCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIApA
QCAtOTM3LDcgKzkzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBieXRl
Y29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0
ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5j
dGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJl
ZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2NSwx
MyArOTY1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcs
IFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVt
aXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJl
Z1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAgLTk4
NSw3ICs5ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk5Niw3ICs5OTYsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFYKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0
b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5z
dGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTA0
LDggKzExMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X3JlZ2V4cChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0g
Ynl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3Jl
Z2V4cDsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQpAQCAtMTExNSwxMiArMTExNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1
bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBK
dW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAj
ZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNjEsMTEgKzExNjEs
MTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVu
Y3Rpb25EZWNsKTsKQEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlc0luZGV4ID0gYnl0
ZWNvZGUubV9hcmd2Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2Fy
Z3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjE5LDggKzEyMTksOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjM2LDkgKzEy
MzYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjgyLDkgKzEy
ODIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3Bl
cnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgp
OwpAQCAtMTM0OSwxMCArMTM0OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAg
ICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CkBAIC0xMzkwLDkgKzEzOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24g
PSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRl
Y29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAt
MTUwOSw3ICsxNTA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
b2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2Ny
YXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVn
aXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTUyMyw4ICsxNTIzLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIw
OyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNj
cmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1Qy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsK
ICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVS
ZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkpOwogfQogCkBAIC0xNTQ1LDggKzE1NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGxvYWQzMihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSksIHJlZ1QwKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJl
Z3MocmVnVDAsIHJlZ1QxKTsKICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKQEAgLTE1NTYs
OSArMTU1Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9s
ZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBi
eXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QwKTsKKyAgICBsb2FkMzIocGF5bG9hZEZv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdUMCk7
CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSnVtcCB6ZXJvTGVuZ3Ro
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSk7CiAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwpAQCAtMTU4Niw3
ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwpAQCAt
MTU5NCw5ICsxNTk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDIpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIHJlZ1QyKTsKICAg
ICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCksIHJlc3VsdFJlZ3MpOworICAgIGxvYWRW
YWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAg
ICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggYWU1YjZhZDU0Y2E4MTM2ZWNhYzFiNjQx
MWM5NTczNDMwZTVjMWY3YS4uYzQ2Mzc5YTlmOWVjY2FlNzQ0YThlN2FjODA4NTUxZmViZjJmYTU3
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApA
QCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciog
YnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVy
IHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
ICAgICBlbHNlCkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBOb1B0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYg
KGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAg
ICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUm
Pihwcm9maWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAppbmRleCAzYjQ4NTBmYWI4ZDZmYWU5MzBlOWU4NjkzYzQ0YmJmNGExZTQzOTNkLi44Y2I1NWZi
NWI3ZWY4NWYwYWMxMTlmMjJlZTJhZDE5MWFjMTkwNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE2NTQsMTggKzE2NTQsMTggQEAgU2xvd1Bh
dGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRl
ciwgdWludDMyX3QgYnl0ZWMKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxh
dGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1WYXJz
V2l0aFZhbHVlczsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAg
ICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0g
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwotICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVl
Pj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dp
dGhWYWx1ZXMpOworCisgICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFu
ZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcywg
MCk7CiAgICAgICAgIGludCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMgPSBzdGF0aWNfY2FzdDxp
bnQ+KENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2FsKG9w
ZXJhbmQpICYmIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkgPCBsb2NhbHNVc2Vk
Rm9yQ2FsbGVlU2F2ZXMpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNM
b2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tp
XSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgICAg
ICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9j
ayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CkBA
IC0xNzgzLDcgKzE3ODMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVu
dGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aQogICAgIGNvZGVCbG9j
ay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5t
X2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShj
YWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAg
fSk7CiAKQEAgLTE5MDcsOCArMTkwNyw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
b3BTY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHNjb3BlCiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9w
ZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAot
ICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKLSAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2Nv
cGUtPm5leHQoKTsKKyAgICBhdXRvJiBzY29wZVNsb3QgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
VmlydHVhbFJlZ2lzdGVyKHNjb3BlUmVnKSk7CisgICAgc2NvcGVTbG90ID0gc2NvcGVTbG90LlJl
Z2lzdGVyOjpzY29wZSgpLT5uZXh0KCk7CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkSGFzSW5zdGFuY2UpCkBAIC0yNDE2LDcgKzI0MTYsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0
Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFs
dWUoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CiAgICAgR2V0UHV0SW5m
byYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9nZXRQdXRJbmZv
OwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gQ2xvc3VyZVZhciBm
b3IgZ2V0X2Zyb21fc2NvcGUuCkBAIC0yNDU5LDggKzI0NTksOCBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0VG9TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBJbnN0cgogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKIAogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNWYWx1
ZSgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFs
dWUoKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJbmZv
OwogCiAgICAgLy8gTW9kdWxlVmFyIGRvZXMgbm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVyIHZh
bHVlIGFsaXZlIGluIERGRy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYWI5OWZkOTg3YjA2MWYyZTc2YTE3YzI4YmU4YzRlNzI2NWEy
ZDgxNS4uZTcyOWZjMDU4ZWM2OGVjMTFmMzJkNTcwNzg5Yjc3YTA5NzVkMjZmMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3LDkg
KzU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC05
Myw3ICs5Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB7CiAgICAgaWYgKGhhc0FueVNs
b3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIApAQCAtMTE3LDggKzExNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogCkBAIC0xNzcs
NyArMTc3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjA4LDcgKzIwOCw3
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1No
YXBlOgogICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1l
c0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0y
NDksNyArMjQ5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKICAgICBMYWJlbCBzdG9yZVJl
c3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAg
ICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVtaXRX
cml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBAIC0y
NzQsOCArMjc0LDggQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhD
YWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKICAgICAvLyBwcm9wZXJ0eTog
cmVnVDEKICAgICAvLyBzY3JhdGNoOiByZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hl
Y2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDEsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAg
LTMwNCwxNCArMzA0LDE0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxX
aXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGJvb2wgaXNE
aXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9k
aXJlY3Q7Ci0gICAgaW50IGJhc2U7Ci0gICAgaW50IHByb3BlcnR5OwotICAgIGludCB2YWx1ZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8g
Ynl0ZWNvZGUpIHsKLSAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwotICAgICAgICB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3Qp
CkBAIC0zMzcsMzYgKzMzNywzNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dl
dHRlci5vZmZzZXQoKSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5
VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKQEAgLTM3NSwxOCArMzc1LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3Bl
cnR5KS5pbXBsKCkpOwpAQCAtMzk1LDkgKzM5NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAt
NDMwLDcgKzQzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG8KIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwpAQCAtNDg1LDggKzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwpAQCAtNTEzLDkgKzUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwot
ICAgIGludCB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0
aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MzksNyAr
NTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlz
W21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CkBAIC01NzEsOCArNTcxLDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAK
ICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwg
YW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKQEAgLTYxNSw4ICs2
MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
SW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKQEAgLTY1
Nyw3ICs2NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKK3ZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTY3MCw4ICs2NzAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2Nh
bFNjb3BlRGVwdGg7CiAKQEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKIHsK
ICAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC03OTAsNyArNzkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQog
ICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKK3ZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogewogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1f
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CkBA
IC05MTksMTcgKzkxOSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0
R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0
KTsKICAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7CiB9Ci12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1
ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKK3ZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwpAQCAtOTM4LDcgKzkzOCw3IEBAIHZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09m
T3BlcmFuZCwgaW50IHZhbHVlLCBXCiAgICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7CkBAIC05NTAsOCArOTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAg
ICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3Qo
KTsKQEAgLTEwODYsOCArMTA4Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMsIHJlZ1QwKTsKQEAgLTEwOTksOSArMTA5OSw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMg
PSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxKTsKQEAgLTExMTAsNyArMTExMCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2ln
bmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
KSB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNp
Z25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAg
ICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
K3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKQEAgLTExNTAsOCAr
MTE1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwpAQCAtMTE2NCw4ICsxMTY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEludGVybmFsRmllbGQ+KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwpAQCAtMTE3Niw3ICsxMTc2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2Zp
ZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNlbHNlIC8vIFVT
RShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVy
LCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUK
ICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVl
Tm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewpAQCAtMTQyNSw3
ICsxNDI1LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUKICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUp
KTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpAQCAtMTUwMSw3ICsxNTAxLDcg
QEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRl
Y29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHkKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAg
IAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pTSW50ZXJmYWNlSklULmgKaW5kZXggMmNmOTE5OGY0MGVkYWFmNTNhNjFkYmYzMzkwYTZjN2Ri
Mjg2YTVjMS4uNjk5ODc2OWM1OGIwMGMwYmFjYzVjOTJmMWQ0NzZhYTU3ZTM1MzMwOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtNDUsMTIgKzQ1LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxp
bmUgSnVtcCBlbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVn
aXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICBpbmxp
bmUgSnVtcCBlbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBS
ZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKKyAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOworICAg
ICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCBkc3QpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJ
Zk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogI2VuZGlmCiAKICAgICAgICAgdm9pZCBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lz
dGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTY0LDM2ICs2NCwzNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpbmxpbmUg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgewot
ICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBwYXlsb2Fk
KTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5k
ZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9h
ZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rlcik7
CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgfQogICAg
IAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZElu
dDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAg
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgp
IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHBheWxvYWRG
b3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIo
Tm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAgICBBU1NFUlQodmlydHVh
bFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2FkUHRy
KHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1w
IEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIGlubGluZSBK
U0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJl
Z2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2Fk
UHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBBU1NF
UlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAg
ICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgSnVt
cCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICBsb2Fk
UHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAg
bG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAgICAgIGxvYWREb3VibGUo
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBkb25lLmxpbmso
dGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQpAQCAtMTAxLDIzICsxMDEsMjMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAg
ICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAg
ICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgcmV0
dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmly
dHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFj
ZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChh
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZDY0KGFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgSnVtcCBub3RJbnQzMiA9
IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIoZHN0LCBk
c3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRz
dCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90TnVtYmVyID0g
YnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNo
SWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRj
aCwgZHN0KTsKQEAgLTEzNywyNCArMTM3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CisgICAgICAgIHN0b3Jl
UHRyKGZyb20sIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGVudHJ5KSk7CiAjZWxzZQotICAg
ICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAgICAgICAgc3RvcmU2NChm
cm9tLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNlbmRpZgogICAgIH0K
IAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkpOworICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50
cnkpKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpl
bWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQog
ICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5KSk7Ci0gICAgICAgIHN0b3JlMzIoZnJv
bSwgcGF5bG9hZEZvcihlbnRyeSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKKyAgICAgICAg
c3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNlbHNl
Ci0gICAgICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSkpOworICAgICAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGVudHJ5KSkpOwogI2VuZGlmCiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVk
VGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0YWIyNjcxNTVjMTNkZjM2YTcyNDliNmMzNDMuLjllM2Q3
NjMzZjllY2ExYTQyNmVhMTllNWQ4ZTkyOTg1MzI1ZDllOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAg
ICAgICAgIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7CiAgICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBhcmd1bWVudHMK
LSAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRB
cmdDb3VudCArIDEpKSk7CisgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRBcmdDb3VudCArIDEpKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IFNwZWNpYWxpemVkVGh1bmtKSVQoVk0mIHZt
KQpAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
dm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAg
ICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBzY3Jh
dGNoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1bWVu
dChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChz
cmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFy
Z3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2FkSW50
MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRlNmRi
NDRiZGFmOWU4ZTgwZjIyYWEuLmFkYTQ1OTZiMWI0ODgzYjc0MDczNTU5YzQ2NTYwN2Q5NDE0Yjc2
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAK
QEAgLTQwMSw3ICs0MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpy
ZWdUMywgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwogI2VuZGlmCiAgICAgaml0Lm1vdmUoSlNJ
bnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwot
ICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOworICAgIGppdC5s
b2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7CiAg
ICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKIAogICAg
IC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGV4dHJhIHNsb3RzIHdlIGNhbiB1c2UKQEAgLTQ2
Miw3ICs0NjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5
Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5yZXQoKTsKICNlbHNlIC8vIFVTRShKU1ZB
TFVFNjQpIHNlY3Rpb24gYWJvdmUsIFVTRShKU1ZBTFVFMzJfNjQpIHNlY3Rpb24gYmVsb3cuCiAg
ICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDMpOwotICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQ
UjIpOworICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgSlNJbnRlcmZhY2VKSVQ6OmFy
Z3VtZW50R1BSMik7CiAgICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIo
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1l
bnRHUFIyKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGV4dHJhIHNsb3RzIHdl
IGNhbiB1c2UKQEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCk7CisgICAg
aml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
R1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJZk5vdElu
dDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJbnQzMi4KQEAgLTExMzYsOCArMTEz
Niw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9B
cmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7CiAgICAgCiAgICAgLy8gU2V0IHVwIG91ciBjYWxsIGZyYW1lLgotICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKLSAgICBqaXQuc3RvcmUzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOworICAgIGppdC5zdG9yZTMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKIAogICAgIHVuc2lnbmVk
IGV4dHJhU3RhY2tOZWVkZWQgPSAwOwogICAgIGlmICh1bnNpZ25lZCBzdGFja01pc2FsaWdubWVu
dCA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAlIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSkKQEAg
LTExNTgsNyArMTE1OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAgLy8KICAgICAv
LyBUaGF0J3MgcmVhbGx5IGFsbCB0aGVyZSBpcyB0byB0aGlzLiBXZSBoYXZlIGFsbCB0aGUgcmVn
aXN0ZXJzIHdlIG5lZWQgdG8gZG8gaXQuCiAgICAgCi0gICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEdQUkluZm86OnJl
Z1QxKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKSwgR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQubHNoaWZ0MzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuYWRkMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSksIEdQUklu
Zm86OnJlZ1QyKTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2
CiAgICAgCiAgICAgaml0Lm5lZ1B0cihHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmFkZFB0cihD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAg
aml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIEdQUkluZm86
OnJlZ1QzKTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRl
QWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIpOwog
CiAgICAgLy8gVGhyb3cgU3RhY2sgT3ZlcmZsb3cgZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludENvbW1vbi5oCmluZGV4IDk1MWQ3NjlkNjkyNDliZjNhYzk4ZjQ0MDgz
NDFmNjUxMDJhOTU1YzEuLmFmZWVjYmFjMDdiMWViMTcwZWQ2ZDQ0NjU1MDgyNTdkYTc2NTFiZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCkBAIC0yOSw3ICsy
OSw3IEBACiAvLyAtIFByaW50cyBldmVyeSBpbnN0cnVjdGlvbiBleGVjdXRlZCBpZiBPcHRpb25z
Ojp0cmFjZUxMSW50RXhlY3V0aW9uKCkgaXMgZW5hYmxlZC4KIC8vIC0gUHJpbnRzIHNvbWUgaW5m
b3JtYXRpb24gZm9yIHNvbWUgb2YgdGhlIG1vcmUgc3VidGxlIHNsb3cgcGF0aHMgaWYKIC8vICAg
T3B0aW9uczo6dHJhY2VMTEludFNsb3dQYXRoKCkgaXMgZW5hYmxlZC4KLSNkZWZpbmUgTExJTlRf
VFJBQ0lORyAwCisjZGVmaW5lIExMSU5UX1RSQUNJTkcgMQogCiAvLyBEaXNhYmxlIGlubGluZSBh
bGxvY2F0aW9uIGluIHRoZSBpbnRlcnByZXRlci4gVGhpcyBpcyBncmVhdCBpZiB5b3UncmUgY2hh
bmdpbmcKIC8vIGhvdyB0aGUgR0MgYWxsb2NhdGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3YTQ2ZThlNTc4OTdmMjc4NWNkMzM5
ZmNiZTJiYzBjOTBjZWRiMi4uOGZjYzVkYjhkODM4YjkyMjIxYjE3MmU4OWE3YzgzMmUwMmM2ZjBj
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVk
ZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0
aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5o
IgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICAg
ICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBMTElO
VF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVy
YW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVl
KCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9wZXJh
bmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRP
cGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyBy
ZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsgfQoraW5saW5l
IEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KIAog
I2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTU3
MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBDYWxsRnJhbWUqIGNh
bGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAogICAgIGNhbGxl
ZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwot
ICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxs
ZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUt
PnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkwLDcgQEAgaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZUFuZFNl
dFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNh
bGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVuZ3RoKTsKIAogICAg
IGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1l
LT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBj
KTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2FsbGVl
RnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcyNiw3IEBAIGlubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENh
bGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hl
Y2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNW
YWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKICAg
ICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkzMCw3ICsxOTMxLDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxl
KSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxG
cmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsK
IApAQCAtMTk2MSwxMSArMTk2MiwxMjMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRsZVZhcmFyZ3NDaGVja3Bv
aW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
JiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gc2lkZVN0YXRlLmdl
dFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJbnQzMigpOworCisgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgeworICAgICAgICBsb2FkVmFyYXJncyhn
bG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fYXJndW1lbnRzKS5q
c1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfSk7Cisg
ICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBKU1ZhbHVl
IHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGNvbnN0
cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxl
ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIi
KTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJlc3VsdDsKK30KKworaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sKKyAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgeworICAgICAgICBhdXRvIG5l
eHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0KCku
cHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRCeXRlY29kZS5leGVjdXRh
YmxlQWRkcmVzcygpLCAwKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQnl0ZWNv
ZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRleCA9IHBjLm5leHQoKS5pbmRleCgpOworICAgIGF1dG8g
bmV4dEJ5dGVjb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNvZGVJ
bmRleCk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgMCk7CisjZW5kaWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCosIEVu
Y29kZWRKU1ZhbHVlKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9j
aGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1l
LCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUgcmVzdWx0KQoreworICAgIC8vIFNpbmNlIGFsbCBvdXIg
Y2FsbGluZyBjaGVja3BvaW50cyBkbyByaWdodCBub3cgaXMgbW92ZSByZXN1bHQgaW50byBvdXIg
ZGVzdCB3ZSBjYW4ganVzdCBkbyB0aGF0IGhlcmUgYW5kIHJldHVybi4KKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJs
b2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRl
U3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAg
ICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsK
KworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIocGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJl
c3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJh
cmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDb25zdHJ1Y3RW
YXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgLy8gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mgc2hvdWxkIG5ldmVyIHJldHVy
biBpZiB0aGUgdGhpbmcgaXQgd2FzIGNhbGxpbmcgd2FzIGlubGluZWQuCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMp
OworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0
dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxs
RnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0
ZWNvZGVJbmRleDsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworCisg
ICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7
CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVj
a3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+
KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0
cnVjdF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZy
YW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRlU3Rh
dGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdz
OgorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBv
cF9yZXQsICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2VkIGJ5
IGFuIG9wX3JldC4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxG
cmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3Rh
dGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KHJldHVyblRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVj
dGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSog
cHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJh
bWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJhbWUp
CiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgq
dm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCBmY2Fm
ODBkYTFjYjVjNDZjNTBlZTdmN2Y1ODA1MzNmN2Y1M2NlMDQxLi5jZDQ1YWYxMGIzMTNhOTE2YjBk
M2VlYzBiZGJhMTZlY2Y4ZmQ4YWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRUaHVua3MuaApAQCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpTVmFs
dWU7CiBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9KYXZhU2NyaXB0
KHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1FbnRy
eVRvTmF0aXZlKHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CisgICAgdm9pZCBjaGVja3Bv
aW50X29zcl9leGl0X2VudHJ5cG9pbnQoKTsKKyAgICB2b2lkIGNoZWNrcG9pbnRfb3NyX2V4aXRf
ZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCgpOwogfQogCiBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBmcmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0Li4w
YjllM2RmODYyNzU5ODI3YzQxNzIzMGVkMmRjZGRmMWU1YzkyYzAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDkx
LDcgKzEwOTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1l
LCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAg
ICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50
ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwog
ZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1l
dGFkYXRhLCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3AoY29u
c3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwg
bWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJl
Q2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhj
ZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9u
W3QzXSwgLm5vRXhjZXB0aW9uCiAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90
cmFtcG9saW5lCi0ubm9FeGNlcHRpb246Cisubm9FeGNlcHRpb246ICAgIAorZW5kCisKK21hY3Jv
IGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwg
ZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgIGNhbGxTbG93UGF0aChm
cmFtZVNsb3dQYXRoKQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lKQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKICAgICBpZiBKU1ZB
TFVFNjQKICAgICAgICAgbW92ZSByMSwgc3AKQEAgLTE5OTksNiArMjAwMywyMiBAQCBvcChsbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBp
bnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5jdGlv
bkZvckNvbnN0cnVjdCkKIGVuZCkKIAoraWYgbm90IENfTE9PUCBhbmQgbm90IENfTE9PUF9XSU4K
KyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlw
b2ludAorICAgIF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9p
bnQ6CisgICAgICAgIG1vdmUgcjAsIGEyCisgICAgICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRo
X2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpCisgICAgICAgIGJyYW5jaElm
RXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAgICAg
ICBqbXAgcjAKKworICAgIGdsb2JhbCBfY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50Cisg
ICAgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludDoKKyAgICAgICAgIyBGSVhNRTogV2Ug
Y2FuIHByb2JhYmx5IGRpc3BhdGNoIHRvIHRoZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0bHkg
YnV0IHRoaXMgd2FzIGVhc2llciAKKyAgICAgICAgIyBhbmQgcHJvYmFibHkgZG9lc24ndCBtYXR0
ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVj
a3BvaW50X29zcl9leGl0KQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3df
ZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIwCitlbmQKIAogIyBMYXN0
bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBv
cnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4g
dXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IDNkZDJl
YjQ4Y2JiYTZlZjVjZDk4ODYzOWM3OTExZTIyYTcxMzMxNDguLmJkZTAyYzYzNGIwOTgyYWQ5YTMy
YzRlNDg0ZWYzY2FmNzMwN2I3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC00Miw2ICs0MiwxNyBAQCBtYWNy
byBuZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQogICAgIGptcCBbdDEsIHQwLCBQdHJTaXplXSwgQnl0
ZWNvZGVQdHJUYWcKIGVuZAogCittYWNybyBzdG9yZVBDKCkKKyAgICBsc2hpZnRpIGNvbnN0ZXhw
ciBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQsIFBDCisgICAgc3RvcmVpIFBDLCBMTElu
dFJldHVyblBDW2Nmcl0KKyAgICByc2hpZnRpIGNvbnN0ZXhwciBCeXRlY29kZUluZGV4OjpjaGVj
a3BvaW50U2hpZnQsIFBDCitlbmQKKworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTEludFJl
dHVyblBDW2Nmcl0sIFBDCisgICAgcnNoaWZ0aSBjb25zdGV4cHIgQnl0ZWNvZGVJbmRleDo6Y2hl
Y2twb2ludFNoaWZ0LCBQQworZW5kCisKIG1hY3JvIGdldHVPcGVyYW5kTmFycm93KG9wY29kZVN0
cnVjdCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIgY29uc3RleHByICVvcGNvZGVTdHJ1Y3Ql
XyVmaWVsZE5hbWUlX2luZGV4W1BCLCBQQywgMV0sIGRzdAogZW5kCkBAIC05Miw3ICsxMDMsNyBA
QCBlbmQKIAogIyBBZnRlciBjYWxsaW5nLCBjYWxsaW5nIGJ5dGVjb2RlIGlzIGNsYWltaW5nIGlu
cHV0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQuCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXpl
LCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdP
ZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkUEMoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQ
QgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwgUEIK
ICAgICBnZXQoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2RzdCwgdDEpCkBAIC0zOTAsNyArNDAxLDcg
QEAgZW5kCiAKICMgQ2FsbCBhIHNsb3cgcGF0aCBmb3IgY2FsbCBvcGNvZGVzLgogbWFjcm8gY2Fs
bENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRD
b3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9y
Q0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0zOTksMjAgKzQx
MCwyMCBAQCBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQKIAog
bWFjcm8gY2FsbFRyYXBIYW5kbGVyKHRocm93SGFuZGxlcikKLSAgICBzdG9yZWkgUEMsIEFyZ3Vt
ZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0
ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQogICAgIGNDYWxs
MihfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAgICBidHBueiByMCwgdGhyb3dIYW5k
bGVyCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxv
YWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklU
Rm9yTG9vcCgpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVCgKICAgICAgICAgMSwKICAgICAgICAgbWFj
cm8oKQotICAgICAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nm
cl0KKyAgICAgICAgICAgIHN0b3JlUEMoKQogICAgICAgICAgICAgcHJlcGFyZVN0YXRlRm9yQ0Nh
bGwoKQogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpA
QCAtNDIxLDcgKzQzMiw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAg
ICAgICAgIG1vdmUgcjEsIHNwCiAgICAgICAgICAgICBqbXAgcjAsIEpTRW50cnlQdHJUYWcKICAg
ICAgICAgLnJlY292ZXI6Ci0gICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zm
c2V0W2Nmcl0sIFBDCisgICAgICAgICAgICBsb2FkUEMoKQogICAgICAgICBlbmQpCiBlbmQKIApA
QCAtMjA1Nyw3ICsyMDY4LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQ
YXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRkcCBj
ZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNpemUs
IG9wY29kZVN0cnVjdCwgbV9hcmdjLCB0MikKLSAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENv
dW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICAgICAgc3RvcmVQQygpCiAgICAgICAgIHN0b3JlaSB0
MiwgQXJndW1lbnRDb3VudCArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMsIHNw
CiAgICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKaW5kZXggODQwZjg5Yjg4ZDQy
MGNjM2I3NWM4M2Q2YzU3ODI0MTU0MDJmMzM2Ni4uOGY1MDVjYzY5OWNkNGFlMzdlZjM0NTAwZmRm
YmU2OTk5ODA3Y2RhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaApA
QCAtMTMzLDYgKzEzMywxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tOb3RO
ZWVkZWQoKSB7IGNsZWFyTmVlZHNPdmVyZmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVuY3Rv
ciYgZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5zdXJl
Q2FwYWNpdHkoY291bnQpOworICAgICAgICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVuYyhy
ZWludGVycHJldF9jYXN0PEpTVmFsdWUqPigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJpdmF0
ZToKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eShp
bnQgbmV3Q2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCmluZGV4IGY4ZDk3OTk1ODc0NTIyNmE0N2U2ZjhiNmM1NTg2MGMxOGZjZTg3YTEu
LmZmYjc0NTlhNmFkY2NiYWIxNmRhOGE0ZWY4YjE3MTFkODcyYTFhZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTE3ODgsNiArMTc4OCw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgaGFz
VGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNpZ25l
ZCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KICAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAg
IHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKQEAg
LTE4MjAsNiArMTgyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5
cGUgOiAyOwogICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDogMTsKICAgICB1bnNpZ25lZCBt
X2NvZGVUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIAogICAg
IENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9k
ZTsKQEAgLTIwMTgsNiArMjAyMCw3IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSoKIAogICAgICwg
bV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAg
LCBtX2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhjYWNoZWRDb2RlQmxvY2suaGFzQ2hl
Y2twb2ludHMoKSkKIAogICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMo
KSkKICAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKQEAgLTIy
MDYsNiArMjIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJs
b2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zCiAgICAgbV9wYXJzZU1vZGUg
PSBjb2RlQmxvY2subV9wYXJzZU1vZGU7CiAgICAgbV9jb2RlR2VuZXJhdGlvbk1vZGUgPSBjb2Rl
QmxvY2subV9jb2RlR2VuZXJhdGlvbk1vZGU7CiAgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5t
X2NvZGVUeXBlOworICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVja3Bv
aW50czsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFk
YXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9y
YXJlRGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAppbmRleCBhYjE4ODlkMDE2NzU5YzFhNTA4Y2MzZmZmZDlkMGU5N2Jh
ZDg3NDBkLi5hYzM5NjRlN2M0ZWMyNmQ0MTY3Y2YxZjE5YTUyMTViNjZjYjAzNzcwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAg
LTk5LDggKzk5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7ICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUgR0VU
KG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCi0jZGVm
aW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCisjZGVm
aW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpKQorI2RlZmlu
ZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQpKQogCiAjZGVmaW5lIFJFVFVS
Tl9UV08oZmlyc3QsIHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAgICAgICBcCkBAIC0xMTQwLDggKzExNDAsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCiB7CiAgICAg
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmly
b25tZW50PigpOwotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7
Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3Bl
UmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VUX0Mo
Ynl0ZWNvZGUubV9zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRpYWxW
YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgQVNT
RVJUKGluaXRpYWxWYWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBqc1RE
WlZhbHVlKCkpOwpAQCAtMTE1Niw4ICsxMTU1LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1c2hfd2l0aF9zY29wZSkKICAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29k
ZS5tX25ld1Njb3BlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVD
S19FWENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVudFNj
b3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVu
dFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIG5ld1Njb3BlKSk7CiB9CiAKQEAgLTExNjYsNyArMTE2
NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwogICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVT
Y29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQp
OwogCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTgwLDcgKzExNzgsNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNv
ZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVkU2Nv
cGUgPSBKU1Njb3BlOjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKICAgICAv
LyBQcm94eSBjYW4gdGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQcm94eSBpbiB3aXRoIHN0YXRl
bWVudCdzIEB1bnNjb3BhYmxlcy4KICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTE0MTcsNyAr
MTQxNSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogewog
ICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVy
PigpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGJ5dGVj
b2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgQVNTRVJUKGJ5dGVjb2Rl
Lm1faW1tdXRhYmxlQnV0dGVyZmx5LmlzQ29uc3RhbnQoKSk7CiAgICAgSlNJbW11dGFibGVCdXR0
ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1dHRl
cmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5qc1ZhbHVlKCkuYXND
ZWxsKCkpOwogICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIApAQCAtMTQzNiw3ICsxNDM0LDcgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIC8vIFdlIGFsc28g
Y2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMg
c2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgLy8gYSBj
b21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAg
ICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRl
cmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7Cisg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1
dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogCkBAIC0xNDgxLDQgKzE0NzksMTYgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NwcmVhZCkKICAgICBSRVRVUk4oSlNGaXhlZEFycmF5
OjpjcmVhdGVGcm9tQXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwgYXJyYXkpKTsKIH0KIAorZXh0ZXJu
ICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpOworZXh0ZXJuICJDIiB2
b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpCit7CisgICAgZGF0YUxvZ0xuKFJh
d1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkpKTsKK30KKworLy8gZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CisvLyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1
Y3Rpb24qIHBjLCApCisvLyB7CisKKy8vIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRiZDE5
MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQxYjc4
ZTYzMTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciog
ZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25z
dHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9
CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtNDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1
Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3Ry
dWN0RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25z
dHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0KIEpT
T2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBj
b25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25z
dHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5l
d1RhcmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmExMWQ3
Y2VlMjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2JhZWI2
Y2FjMTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0
cnVjdERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAKIC8v
IENvbnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENhbGxE
YXRhIGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpTX0VY
UE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdl
KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlz
dCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25z
dHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUg
bmV3VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVj
dFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFlZmFm
ZDQzYTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cApAQCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1l
bnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChpbmRl
eCwgaW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYXBw
ZWRBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGgg
KyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAgZm9y
IChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihz
dGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50
RGVzdFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkg
PCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0
KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZz
ZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1l
bnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1l
bnRzU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEuLjhk
OTY0MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVu
dHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAg
fQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1ZWJi
N2VlMWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVlYjI3
MmNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9kaWZp
ZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3Ro
KTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgs
IHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9
IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2RpZmll
ZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CmluZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFiZjVm
MmVlMTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtMjk3
LDcgKzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3Vt
ZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMw
NSw5ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3Vt
ZW50KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERl
c3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHko
aSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZp
cnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOworICAg
ICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZz
ZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
aW5kZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5MTcx
MWVlZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJheTo6
ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRC
dWZmZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0K
IAotdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZQogICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5h
dCh0aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZz
ZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwxMSAr
MTI5NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQp
ID0gdi5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYuZ2V0
KCk7CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
Y2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9iYWxP
YmplY3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGds
b2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmluZGV4
IDMxNzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5MjU0
Y2MxYTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFy
Z3VtZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSog
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2Jz
ZXJ2YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ZpeGVkQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFy
cmF5LmNwcAppbmRleCAyOGNiMjhlNzY5NDcxMTIzODVjNzRmNTViNTNlNTBjZmIyNmRmMTM4Li5h
OTFlNjNkY2ZkOTBiZWQxZmZkZmM5YTQ5OWYzMjdhZWIzZTA5MTEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKQEAgLTQyLDEzICs0MiwxMyBA
QCB2b2lkIEpTRml4ZWRBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3Qt
PmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5zaXplKCkpOwogfQogCi12b2lkIEpTRml4ZWRBcnJheTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgSlNGaXhlZEFycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IG1fc2l6ZSkKLSAgICAgICAgICAgIGNhbGxGcmFt
ZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAgICAgICAg
ICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
aXhlZEFycmF5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXku
aAppbmRleCBjZDc2ZWIzZDNmMjAyMjQzZmViN2U3OTllMzNlMDFiM2Y4MTc2NmMyLi41ZWIwNTMx
ZGU5MzRmNjg1ODg3YzA1NTNkYWU3MjE3NTg5OGMwNjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KT4oc2l6ZW9mKEpTRml4ZWRBcnJheSkpOwogICAgIH0KIAotICAgIHZvaWQg
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHN0
YXRpYyB2b2lkIGR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRl
cmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRl
cmZseS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDljMC4u
ZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcApA
QCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7Cisg
ICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0g
anNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggMjAwOGU0NzlmMDUwYzVmOWY5ODk3ODA5
ODJlZWNhZWQxMWM1ODJiNy4uODlmNTI5OWQ2YzEyNTg4NGU5MzA3MzgwMzE3NzdiZjYwNDgwMDg2
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJs
ZUJ1dHRlcmZseS5oCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZhYTM2
OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6Ondp
bGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9IG1fdm07CiAgICAgaWYg
KHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0tPmhhc0NoZWNr
cG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hlY2tw
b2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAgICB2bS0+ZHJhaW5NaWNy
b3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5Njgw
OGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1dGFi
bGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZt
KCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0
YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZt
KCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkpLT5j
bG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0
YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29u
c3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkpLmdl
dCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
aW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEwNTBjZGU4NmNiMjUyMWU1NDExNi4uM2Q3NzU3YjJl
MTdkZGMxYzE4Y2FmMTEzNGNhOTk0MTI4OGI1ZDQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMiArNTA5LDYgQEAgc3RhdGljIHZvaWQgcmVj
b21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpv
bmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRa
b25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IE9wdGlv
bnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplOwogCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAvLyBGSVhNRTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3b3Jr
IG9uIDMyLWJpdDoKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3OTU2Ci0gICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNlbmRp
ZgotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6
ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggMDNmMjg1MjQ0ZGI5OTAyZWFiYTk2ZDY5NzdlM2I3ZDM5
MTk3ZGU1Mi4uNGQxNTZjZjczZGZjZDU0ZmZhODNkY2Q3OThlZDdlYWQ2YzViYWJhMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC0xNDksNyArMTQ5
LDYgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxz
ZTsKICAgICB2KEJvb2wsIHZlcmJvc2VDb21waWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoQm9vbCwgdmVyYm9zZUZUTENvbXBpbGF0aW9uLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihCb29sLCBsb2dDb21waWxhdGlvbkNoYW5nZXMsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKLSAgICB2KEJvb2wsIHVzZVByb2JlT1NSRXhpdCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgcHJpbnRFYWNoT1NSRXhpdCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmFsaWRhdGVHcmFwaCwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCAwODFkOTc4YTdiMmE2MjY2YWM1NTJjMzc5ZDM4NDUw
MDVkYzExZjEwLi4zYzc0MGQ0OGY2MjQxYjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5ZGIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAK
QEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChW
TSYgdm0sIHVpbnQzMl90IGkpCiAgICAgICAgIHN0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmNs
ZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRz
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwg
Zmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgK
aW5kZXggZjg1ZTQ3ZGZiZWU4Y2E3YzM3MDRmMjllZDRjYjFiNGU5NzIwNDQ1Ny4uZTU4Y2IyMmVm
ZDQ4YzY3NGJmNWIxYjExMjgwYjUxYWJjMGRlMDg0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz46Omlz
TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fdGFibGUtPmxlbmd0aCgpKTsKICAg
ICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKaW5kZXggYWYwYWE0ZTczNWQ2ZDhiYjQ4OWU4MDM4MWQwMGI2NTEyZmVlZjgzMC4u
ZjVmMDFiZDI4NzQwZGI2MWRmMmY4MDQ0NzRmZTc2MDc4NDljOGJkZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkJvb2xlYW5P
YmplY3QuaCIKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0YWJsZXMuaCIKICNpbmNsdWRlICJCeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTEwMzEsNiArMTAzMiwyMCBAQCB2b2lk
IFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZh
dGl2ZVJvb3RzKQogfQogI2VuZGlmCiAKK3ZvaWQgVk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZT4mJiBwYXlsb2FkKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2hlY2twb2ludFNpZGVTdGF0
ZS5hZGQoY2FsbEZyYW1lLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgYXV0byBzaWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUu
dGFrZShjYWxsRnJhbWUpOworICAgIHJldHVybiBzaWRlU3RhdGU7Cit9CisKIHZvaWQgbG9nU2Fu
aXRpemVTdGFjayhWTSYgdm0pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5pdGl6ZVN0
YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApp
bmRleCBhZjIwMTk4MGU1MGE5M2JiNjAxOGZiMzZkYmRmNWZiMTQ0ODdlNDMxLi42NDNmYThkNGI5
YzMyOGVmZTA2NDJhZjZlNWZmOGI3YWI0MjExMTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKQEAgLTEwMyw2ICsxMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEJ1aWx0aW5F
eGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxs
RnJhbWU7CitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTk0OSw2
ICs5NTAsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKIAorICAgIHZvaWQgYWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gZmlu
ZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKik7CisgICAgYm9vbCBoYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja3BvaW50U2lkZVN0YXRlLnNp
emUoKTsgfQorCiAgICAgVk1FbnRyeVNjb3BlKiBlbnRyeVNjb3BlOwogCiAgICAgSlNPYmplY3Qq
IHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CkBAIC0xMTk5LDYg
KzEyMDQsNyBAQCBwcml2YXRlOgogICAgIExvY2sgbV9zY3JhdGNoQnVmZmVyTG9jazsKICAgICBW
ZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IG1fc2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6ZV90IG1fc2l6
ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgeyAwIH07CisgICAgSGFzaE1hcDxDYWxsRnJhbWUqLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNrcG9pbnRTaWRl
U3RhdGU7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxl
ZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJvbEZs
b3dQcm9maWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uQ29kZUJsb2NrLmgKaW5kZXggZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1
YTU2Ny4uMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdmMTkyNDczNTJjMGY4YiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAg
LTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgY29u
c3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KICAgICBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdHJ1Y3Rpb25z
OyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKGludCBpbmRl
eCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoT3B0aW9uczo6ZHVtcEdl
bmVyYXRlZFdhc21CeXRlY29kZXMoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07CisgICAgICAgIHJldHVybiBtX2Nv
bnN0YW50VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsKICAgICB9CiAKICAgICB2b2lkIHNl
dEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4
IGFiMTc0MDZhZmI3MzRhNzA4ZGYxMWRiYjY4MDE1MThiNzY2NWZiNDIuLmVlMmIzMjdkMmFmNTQ3
MTk2ODc5NjlhYzI1MmE4NGM3ODhlZjZlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtMjQyLDYgKzI0Miw5IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiog
cGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCisgICAgLy8gV2UgbmVlZCB0aGlzIGZv
ciBhdXRvZ2VuZXJhdGVkIHRlbXBsYXRlcyB1c2VkIGJ5IEpTIGJ5dGVjb2Rlcy4KKyAgICB2b2lk
IHNldFVzZXNDaGVja3BvaW50cygpIGNvbnN0IHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
IH0KKwogICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayopIHsg
fQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcAppbmRleCA1YThlYmI4MWQyZGJlZTAzYWM2OTMyYWNlZjZmYmI0NzI3MmVjODRiLi5jMjQw
NjkwOTM5ZDJjZTAxNGExNzNiMmUzNzljMmRiMTk5MmQzZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzUsNyArNzUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3Rl
cikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1Zh
bHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIub2Zm
c2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29u
c3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNt
OjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
LCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IGE0OTczZWJiYTA0Njhh
NjVkYjk1YzhiYTgzMjY0YWQ4ZmE4NmRkZDkuLjdhNzI1YjBiYzE1YjZlOWI2NTY2MTVhZTY5N2Uw
ZmM4N2Y4M2QxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5
cG9pbnRTbG93KCkKIAogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5z
dWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnN0b3JlNjQoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVn
ID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CkBAIC0yNDMsNyArMjQzLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVu
dHJ5cG9pbnRTbG93KCkKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBtaXNtYXRjaGVk
IGFyaXR5CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NjU2NAogICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
dywKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMSkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxKSkpOwogCiAgICAgaWYgKHVz
ZVRhZ1JlZ2lzdGVycygpKQogICAgICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAg
IC8vIDIuIFdlIG5lZWQgdG8ga25vdyB0byByZXN0b3JlIHRoZSBwcmV2aW91cyB3YXNtIGNvbnRl
eHQuCiAgICAgaWYgKCFtX2pzVG9XYXNtSUNDYWxsZWUpCiAgICAgICAgIG1fanNUb1dhc21JQ0Nh
bGxlZS5zZXQodm0sIHRoaXMsIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0KCksIHRoaXMpKTsKLSAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogCiAgICAg
ewogICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGp1c3QgZG8gYW4gaW5kaXJlY3QganVt
cC4gQnV0IHdlIHNob3VsZCB0ZWFjaCB0aGUgTW9kdWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYz
MmMzZWZjMDAwYmQxOGU5ZTM2OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUz
NjZhNzUwNTRkY2M2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBz
aXplX3QgbmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFyKHNp
emVfdCk7CiAgICAgdm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50
NjRfdCBmaW5kUnVuT2ZaZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXplX3Qg
Y291bnQoc2l6ZV90IHN0YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25z
dDsKQEAgLTEwMiw2ICsxMDMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yPShi
b29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5kZXgs
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgY29uc3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90IG1f
aW5kZXg7CkBAIC0xMTEsNiArMTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUp
OyB9CiAgICAgCisgICAgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0IGl0
ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRDbGVh
cihCaXRtYXAmKTsKICAgICB2b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAtMjI0
LDYgKzIzNCwxMyBAQCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpj
bGVhckFsbCgpCiAgICAgbWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwogfQog
Cit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUg
dm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRzW2ld
OworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBp
bmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVu
c2V0KHNpemVfdCBzdGFydCkgY29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5lIGJv
b2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAm
IG90aGVyKSBjb25zdAogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0
ZXJhdG9yCit7CisgICAgQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIGluZGV4KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVu
YW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7CisgICAg
cmV0dXJuICgqY29uc3RfY2FzdDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhpcykp
W2luZGV4XTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRU
eXBlPgogaW5saW5lIHVuc2lnbmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhhc2go
KSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oIGIv
U291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCmluZGV4IDg4NWI3YjE3M2IxMWE2MDFiZTI5
YTMzMmFiOWQyYTQxNGQ1NjIxMjIuLmEzOGM5NmMzNDkzZTlkMTBkNTZhODBiNWJkNzVmMWQ0YTZj
YmYzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKQEAgLTQ2NCw2ICs0NjQsOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBv
cGVyYXRvcnw9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgPSB2YWx1ZSA6ICp0
aGlzOyB9CisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3ImPShib29sIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZSA/ICp0aGlzIDogKnRoaXMgPSB2YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIHVp
bnQzMl90KiBtX3dvcmQgeyBudWxscHRyIH07CiAgICAgdWludDMyX3QgbV9tYXNrIHsgMCB9OwpA
QCAtNTA5LDcgKzUxMiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFy
QWxsKCk7CiAgICAgfQotICAgIAorCisgICAgLy8gRm9yIHRlbXBsYXRpbmcgYXMgVmVjdG9yPGJv
b2w+CisgICAgdm9pZCBmaWxsKGJvb2wgdmFsdWUpIHsgdmFsdWUgPyBzZXRBbGwoKSA6IGNsZWFy
QWxsKCk7IH0KKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpIHsgcmVzaXplKG5ld1NpemUp
OyB9CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdp
biwgc2l6ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgYml0dmVjdG9yIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggODdjNzIyNTU0NzI4YjA0NTI0ZjZiNDIzZmMwMWQxYTVjMDcw
M2JmNS4uNTgyOGJiMGVlMGZkZGRjYTlmZTMxMzQ5YWVmZGI2MjlhYzU4NDRmOSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDE5LTEyLTEzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEg
Ynl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNTIzMgorCisgICAgICAgIFJlbW92ZSBwcm9iZSBPU1IgZXhpdCBvcHRpb24gc2luY2Ugd2Ug
YXJlIG5vdCB1c2luZyB0aGF0IGFueW1vcmUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAy
MDE5LTEyLTEzICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgbWFjQ2F0YWx5c3QgYnVpbGQgYWZ0ZXIgcjI1MzQ4Ngpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1Nj
cmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggNTE0MjNhNzU4YWY4MjA0MmU5NThhMTg4
ZTYyZDczZmM3MDgzNTViNy4uNjU1Nzc0MGY3ZGExN2UwMWU1YmQxMjI0OTNjYjAzN2I3ZjRlY2I3
ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9U
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC00OTgsNyArNDk4LDYgQEAgTk9f
Q0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRG
b3JKSVRBZnRlcldhcm1VcD0xMDAKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZl
bD0xIl0KIEIzTzBfT1BUSU9OUyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNp
c2VBbmFseXNpcz0xMDAiLCAiLS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0g
WyItLXVzZUZUTEpJVD10cnVlIl0KLVBST0JFX09TUl9FWElUX09QVElPTiA9IFsiLS11c2VQcm9i
ZU9TUkV4aXQ9dHJ1ZSJdCiBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgPSBbIi0tZm9yY2VPU1JF
eGl0VG9MTEludD10cnVlIl0KIAogcmVxdWlyZV9yZWxhdGl2ZSAid2Via2l0cnVieS9qc2Mtc3Ry
ZXNzLXRlc3Qtd3JpdGVyLSN7JHRlc3RXcml0ZXJ9IgpAQCAtNzEzLDcgKzcxMiw3IEBAIGRlZiBy
dW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVm
IHJ1bkZUTE5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAg
cnVuKCJmdGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRl
R3JhcGg9dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJD
QWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVf
T1NSX0VYSVRfT1BUSU9OICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4o
ImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFw
aD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxv
Y2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVROb1B1dFN0YWNrVmFs
aWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOSw3ICs3MjgsNyBAQCBk
ZWYgcnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KQogZW5kCiAKIGRlZiBydW5ERkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQot
ICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VT
TFlfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09QVElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJkZmctZWFnZXIi
LCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0Vf
TExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAog
CiBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCAxZjUzN2FhYjY4M2E0MWExMTMwNjJmMWJiNmRhMTA0ZmI0ZjkwYjdhLi5iNWNmMWI4MzUz
MzA3MDk4ZDRjNWYyZmE2ODUzMGVjYzk4N2RhZjllIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5n
ZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTEyLTEz
ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9G
VEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2xv
YWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanM6CisgICAgICAg
IChjaGVja0VxdWFsKToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8g
dGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwt
YW5kLWV4aXQtc3RyaWN0LmpzOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisKIDIwMTktMTItMTMg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBiYWQgZXhjZXB0
aW9uIGFzc2VydGlvbiBpbiBFeGNlcHRpb25IZWxwZXJzLmNwcCdzIGNyZWF0ZUVycm9yKCkuCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwt
YW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5s
aW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwppbmRleCAzNjE4ZjhjYmIzZDMyMTEzNDBlNmEw
NzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBjZjQ5ZDg4ZTNmZmU5MTJiMWUxNmFhNDdkNTBm
OTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVk
LWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJn
cy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKQEAgLTE4LDggKzE4LDggQEAg
ZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOwogICAgIGlmIChhLmIgIT0gYi5i
KQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJz
dXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQotICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAi
IHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMubGVuZ3RoICE9PSBiLmMubGVuZ3RoKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBh
LmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5sZW5ndGg7CiAgICAgZm9yICh2YXIgaSA9IGEu
Yy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCiAgICAgICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkg
KyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385674</attachid>
            <date>2019-12-13 20:55:32 -0800</date>
            <delta_ts>2019-12-13 21:02:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191213205519.patch</filename>
            <type>text/plain</type>
            <size>615373</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDViYzhiNjRiY2JjNzEyYmQ2NDFmNjg1MTBkNmFmMjU2NzhmODA5Li5iZmRkM2Y1ZDM1ZWI5MGJm
NjRkYWFlYmM5Mzg5Y2Y1ZGJhNjJkNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NjggQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGUgdGhlIHByb2JlLWJhc2VkIE9TUiBleGl0
IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uIHRodXMgdGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQgY29kZSBzaW5jZSBpdAorICAgICAgICB3b3VsZCBiZSBhIG5vbi10cml2aWFs
IGFtb3VudCBvZiB3b3JrIHRvIGdldCBjaGVja3BvaW50cyB3b3JraW5nCisgICAgICAgIHdpdGgg
cHJvYmUgT1NSLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAg
ICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUluZGV4OjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6YXNCaXRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjplbnVt
VmFsdWVzRXF1YWxBc0ludGVncmFsKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZSk6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNBbHdheXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNMaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZUlu
ZGV4Rm9yRXhpdCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1UbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6
OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29k
ZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6dW5tYXBPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAg
ICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJh
bmQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6Ok9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpr
aW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kOjp2aXJ0dWFsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1RtcCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNI
ZWFkZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0FyZ3VtZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJpdHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZM
b2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZUbXBzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXApOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omxv
Y2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRG
b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldEZvck9wZXJh
bmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvckluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdl
dENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6On5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcjo6flZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCk6CisgICAg
ICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpk
dW1wKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBh
cnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpm
bHVzaERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNo
T3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFu
dG9tTG9jYWxEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0
T1NSKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RG
R0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5k
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5C
eXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRs
ZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9j
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdU
b0NoZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5m
by5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
YWxsZWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xh
eW91dFBoYXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5k
bGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVu
a3MuaDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JF
bnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
OjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBm
dGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjptYXhVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjptaW5VbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptYXhTaWduZWQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bWluU2lnbmVkKToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50
cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBn
ZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmN1cnJlbnRWUEMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKEpTQzo6Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU6OmdldFRtcCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6c2l6ZU9m
VmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklU
OjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9y
ZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudElu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFs
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlND
OjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRo
dW5rSklUKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRjaE5leHRJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVy
Zmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OmR1bXBSZWdpc3Rlcik6CisgICAg
ICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToK
KyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6
CisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJy
YXksIGFuZCB1c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0YmE4ZTBhN2Ix
NzQ2MDEwNzdlNjUzYmZlZmZkYTFlZTQzOGI0Y2FkLi4zNGMyMmM2ZDhkODBhNjdiMWNlM2JlNTZm
ZDVhMzY0MTUzMTE5OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTEyLTEzICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxk
IGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAg
ICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6
b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0
KToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0
UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6
b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAg
ICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEZhc3RCaXRWZWN0b3IgKG1vcmUp
IHRlbXBsYXRlIGNvbXBhdGFibGUgd2l0aCBWZWN0b3I8Ym9vbD4gc28gb3RoZXIgY29udGFpbmVy
cworICAgICAgICB1c2luZyBhIFZlY3RvcjxUPiBtZW1iZXIgY2FuIHVzZSBGYXN0Qml0VmVjdG9y
IGluc3RlYWQgaWYgdGhlIFQgaXMgYm9vbC4KKworICAgICAgICBBbHNvLCBhZGQgc29tZSBoYW5k
eSBtZXRob2RzIHRvIEJpdG1hcC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJh
dG9yKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6Cisg
ICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVy
ZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJh
dG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpmaWxsKToKKyAgICAgICAgKFdU
Rjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisKIDIwMTktMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgSGVhcDo6ZmluYWxpemUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQ5OTZjMWU0YmQ2MTY1NWMyYzkxNTkyMjJlMGI0ZWJlZTRlMTcwN2YuLjNlZjFmOTA5OTIx
NDcwMTc0ZGI1MzkxZmJjOWM3M2Q4YzNkNWQwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzIsNiArOTMyLDcgQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcyMURBQzM0M0Mw
MEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1
MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9t
aXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzYwMCw2ICszNjAxLDcgQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIz
RXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2Ny
aXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0
aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAw
RTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBw
YXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzYxNCw2ICszNjE2LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8q
IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0Qx
QkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1
NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVy
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVs
cGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAw
NTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2
NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU5NTAsNiArNTk1NSw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBD
YWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENh
bGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BT
dGFja0lubGluZXMuaCAqLywKQEAgLTg1ODEsNyArODU4Nyw5IEBACiAJCQkJQTUyNzA0ODUxRDAy
N0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJ
CQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAq
LywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMg
Ki8sCkBAIC04NTkyLDYgKzg2MDAsNyBAQAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAv
KiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBS
ZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4
NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEw
MDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIx
MDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MDkzLDYgKzkx
MDIsNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQy
NjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFB
OTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMu
LjY4ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aApAQCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0g
ICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggMzVkMDE3
NTZkNTMyYTcxZWMwN2ZlNDAzZWY3YTUyNTBiNWZjNmY2MS4uNDFiYzk2MWExNTMwODVmYmE4NTUw
NjVjMzliNmM2ZGE2ZmIyYTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMjYz
LDIwICsyNjMsMjAgQEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29t
cGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KLXN0cnVjdCBPcGVyYW5kIHsKK3N0cnVjdCBCM09wZXJhbmQgewogICAgIGNv
bnN0IGNoYXIqIG5hbWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgT3BlcmFuZDxp
bnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVy
YW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5cGVkZWYgT3Bl
cmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50NjRfdD4gSW50
NjRPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlw
ZWRlZiBCM09wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8
aW50OF90PiBJbnQ4T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIE9wZXJh
bmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQorI2RlZmluZSBNQUtFX09QRVJB
TkQodmFsdWUpIEIzT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3Rp
bmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQordm9pZCBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+JiBv
cGVyYW5kcykKIHsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDAuKSB9KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigtMC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVXaXRo
SW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci1WZWN0b3I8T3BlcmFuZDxGbG9hdFR5
cGU+PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQorVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+
PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQogewotICAgIFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlw
ZT4+IG9wZXJhbmRzOworICAgIFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7
CiAgICAgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMob3BlcmFuZHMpOwogICAgIHJldHVy
biBvcGVyYW5kczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcAppbmRleCA2MDU4ZmIwNjIwMzk0NmM0Y2Q1NmVmNmE5ODM4NzlkMmQ2
YzgxZmI2Li44MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNhZTVjMGVlM2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAg
LTYzLDcgKzYzLDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLAogCiB2b2lkIEJ5dGVjb2RlRHVt
cGVyQmFzZTo6ZHVtcFZhbHVlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgbV9vdXQucHJp
bnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcub2Zmc2V0KCkpLmRhdGEoKSk7CisgICAgbV9vdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcpLmRhdGEoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFRyYWl0cz4KQEAgLTgzLDEyICs4MywxMiBAQCB0ZW1wbGF0ZSB2b2lkIEJ5dGVjb2Rl
RHVtcGVyQmFzZTo6ZHVtcFZhbHVlKEdlbmVyaWNCb3VuZExhYmVsPFdhc206OkdlbmVyYXRvclRy
YQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKGludCByKSBjb25z
dAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVn
aXN0ZXIgcikgY29uc3QKIHsKLSAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgocikpCisg
ICAgaWYgKHIuaXNDb25zdGFudCgpKQogICAgICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIpOwog
Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0ZXIocikpOworICAgIHJldHVybiB0
b0NTdHJpbmcocik7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCbG9jaz4KQEAgLTk4LDEwICs5OCwx
MCBAQCBpbnQgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4K
LUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAogewotICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25z
dGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgpLCAiKSIpOworICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25zdGFu
dChyZWcpOworICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgcmVnLCAiKSIpOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEJ5dGVjb2Rl
RHVtcGVyOjpkdW1wQ29uc3RhbnRzKCkKICAgICB9CiB9CiAKLUNTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI6OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVy
Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25zdAogewogICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAgYXV0byB2YWx1ZSA9IGZv
cm1hdENvbnN0YW50KGJsb2NrLT5nZXRDb25zdGFudFR5cGUoaW5kZXgpLCBibG9jay0+Z2V0Q29u
c3RhbnQoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmgKaW5kZXggMGQ3MTY3NTAzOTRiMTVkNGViNWU4N2M1YTg4MjUxMDc1ZWZlMDNl
ZS4uZWRiMTEyOTIxYWY3NTNlNjNkODYxMzcyZmJkZTBlZWY4OWZjYTE1OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcFZhbHVlKFQgdikgeyBtX291dC5wcmludCh2KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rl
cikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldCkgY29uc3QgPSAwOwogCiAgICAgQnl0ZWNvZGVEdW1wZXJCYXNl
KFByaW50U3RyZWFtJiBvdXQpCkBAIC05MSwxMSArOTEsMTEgQEAgcHJvdGVjdGVkOgogCiAgICAg
dm9pZCBkdW1wQnl0ZWNvZGUoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0
IElDU3RhdHVzTWFwJik7CiAKLSAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25z
dCBvdmVycmlkZTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgQ1N0
cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKIAogICAgIEJsb2NrKiBt
X2Jsb2NrOwogfTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIEpTQzo6
Qnl0ZWNvZGVEdW1wZXI8RnVuY3Rpb25Db2RlQmxvY2s+OjpCeXRlY29kZUR1bXBlcjsKIAogICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRl
eCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lz
dGVyIGluZGV4KSBjb25zdCBvdmVycmlkZTsKICAgICBDU3RyaW5nIGZvcm1hdENvbnN0YW50KFR5
cGUsIHVpbnQ2NF90KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJhOTA0MDFhNzExN2RjMGY5ZjI2
ZTE5MTM3ZWIyYzMxNTliLi5iODEyZmI0MWJmOWFiZTY2NGY0NDc1OTEzZTljZTM0MjlkYjQxMmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
Y3BwCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMiw2ICszNCw4IEBAIG5hbWVz
cGFjZSBKU0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1wKFdURjo6UHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9mZnNldCgpKTsKKyAgICBpZiAoY2hl
Y2twb2ludCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIsIGNoZWNrcG9pbnQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMxZjcyYWMyMDczMWMxZDNiY2U5MzUx
NThkZi4uNjA4NzAwYzU3YWQ3MDE3MmMyY2IwMGYxMDlhNWM0MTMxNzQyZDViMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0
cmVhbTsKQEAgLTMzLDI4ICszNCwzOSBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKKwogY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJs
aWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUluZGV4KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChkZWxldGVk
VmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZhbHVlKCku
YXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQot
ICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3Qg
Y2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZz
ZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0Owor
ICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAibnVt
YmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMgLSAx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpn
ZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9
CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXgg
ZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09
IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1
aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlk
T2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQogICAg
IGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRvciAhPShj
b25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KIApAQCAtNjksMTMgKzgxLDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0
IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWlu
dDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRP
ZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQz
Ml90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NFUlQoY2hl
Y2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNvZGVJbmRl
eCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29kZUluZGV4
KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBjaGVja3Bv
aW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1
aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJlc3VsdC5t
X29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIKaW5kZXggNzFiZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3ODdhZmZh
NC4uZGYwYmRlYjFjYjBmMDU0MDgwN2U5YWZhN2UyOTMxNGExNzBjMjdkZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3ICs1OSw3
IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2ZpbGUsCi0g
ICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkJpbmFy
eUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwxMyBAQCBv
cCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAg
ICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgwNSw2ICs4
MTIsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAg
IH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmls
LAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cywKQEAgLTg0NSw2ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAog
ICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAg
IGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAg
ZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0K
IAogb3AgOnJldCwKQEAgLTk5Miw3ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJv
d25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6
dGhyb3csCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBiNmNmZjEwMTE0
M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2ZDNjOTE2Y2U1
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBAIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5
cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEg
djEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6
dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50VHlwZTIgPSB0
eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOworICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2
Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9
PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVtQ2hlY2twb2lu
dFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxtYXhOdW1DaGVj
a3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2Fs
bFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wVGFpbENhbGxW
YXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVh
bEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6
bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJn
Q291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgaWYgKGNoZWNr
cG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisgICAgICAgICAgICByZXN1bHQuc2V0
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
CmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzkuLjNlNWVkYzBh
NjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIKICNpbmNsdWRl
ICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFw
aDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxpbmUgYm9vbCBv
cGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRUaGF0
SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJh
bmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmluZGV4IDNkMTJl
MTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEwOWI3ODk2N2Yx
MDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaApA
QCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuICFWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlzTG9jYWwoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJlZy50b0xvY2Fs
KCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkg
fHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDg2
OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1YTFiZDJjMTYz
ZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVT
dHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNsb25l
ZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnBy
ZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmVwbGFj
ZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1l
bnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUp
OworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVn
aXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAgICBib29sIHNo
b3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRDb2RlLT53YXND
b21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENvZGUtPndhc0Nv
bXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEsNyArNjQyLDcg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRv
IGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fdmFyICE9
IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRD
b25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwpAQCAtNzA5
LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVM
b2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9
IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29u
c3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7
CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIg
cGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0
IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0xMDg2LDYgKzEw
ODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVj
b2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXguY2hlY2twb2lu
dCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24ubmV4dCgpLmlu
ZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4MTEsMTAgKzE4
MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5p
cXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkpOwor
ICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocHJv
ZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9maWxlcy0+bV9i
dWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOworICAg
ICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRz
W2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0yNzEzLDcgKzI3
MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8qIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQg
OiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9maWxlQnVja2V0
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDA5MmM3YWFjODQyNmMx
ZTRjOWQ1OWY1NGY5MWU1NTYzNmMzNzRhMWYuLjc5NjM0MzVlYWIzNzQ0ZTk2Y2RlYTU0ZTY4ZDQ4
YmYxMjNlMDAwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKQEAgLTE1OCw2ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxlZUxvY2Fscygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQgbnVtVmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50
VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1f
bnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJz
KTsgfQpAQCAtMjI2LDIwICsyMjcsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVk
Vk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3Bv
aW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgp
CisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYm
ICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0ZXIoKSAmJiAh
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAo
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9y
YXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVybiBp
bmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gbV9udW1W
YXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRs
ZXIpOwpAQCAtNTc4LDEwICs1NzksOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXgg
Pj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25bcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9
CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KQEAgLTc3MSw2ICs3NzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJl
c3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9yRXhpdChCeXRl
Y29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JFeGl0KCkgeyBt
X29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3MSw3ICs4NzIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCi0gICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+IG1f
Y2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAKICAgICAgICAg
RGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAgfTsKQEAgLTkz
OCwxMCArOTM5LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJz
KGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKLSAgICB2
b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBy
ZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3Zt
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1MWM3MzE4ZWJj
MDQzMS4uMThhZjI0MjJiMTAwMWYyNWY5MDk2ODJlNGQ5ZWIwMWE1OWI2NTQ5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAsNyArMTYwLDkg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJhbWUq
IHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOworICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsKKworICAgIGJv
b2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAg
ICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQg
Zm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygp
IGNvbnN0OwpAQCAtMjc4LDYgKzI4MCwxNiBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVy
YXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdAogICAgICAgICAmJiBpbmxpbmVD
YWxsRnJhbWUoKSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWUoKTsKIH0KIAoraW5saW5lIGJvb2wg
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAor
eworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChD
b2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9y
aWdpbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFi
NTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLmFiYTlmMmQzZGYwZWJjN2RmYzUwZDc4MWY2MzEz
YWI5ZDA3MGQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwog
CisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVzbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1w
IGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4K
IGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2
ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlz
TGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lz
dGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBw
b2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZl
Y3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1F
OiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8
UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0
Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uMzkwNDk0Zjk0NTRhNzAyMmU0NWM4OTdjYmEwOTU5ZGQx
YmY5NzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVP
cmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisg
ICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7
CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBp
c0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Nj
b3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJs
ZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsx
OTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUn
cyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNp
b24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElu
bGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAg
ICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xv
c3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihz
dGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9m
ZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1
cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0OSw3ICsyNTgsNyBAQCBpbmxpbmUgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVP
cmlnaQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLWlubGluZSB2
b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhp
czsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMTggQEAgaW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQog
ICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorQUxX
QVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJh
bmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6IG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIHJldHVybiBv
cGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihyZWcub2Zmc2V0
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnOworICAg
ICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmlu
ZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5
NTU1MmViZjM4ZjdiNGFiMmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2
ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIK
KyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAt
NjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJh
bmQudmFsdWUoKSArIG1fb3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCgpIGNvbnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkw
LDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3Bl
cmFuZCBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlI
YXNoIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1
NTc4OWRmZmRlNjdmMzk2Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4
YmMwNjcwNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsK
ICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwot
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgp
OworICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFs
dWVSZWcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7Cisg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEs
NyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFs
dWUgdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNv
ZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgK
aW5kZXggNWQ4MWM0YzkwMGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBj
MDBmYmQ0NGM4NTVhMzg5ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldDsKLSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kOwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWVi
MzczNDU5NDQ2ZGM3NGNkMTIwMjc1NjI1NzYuLjVkYWQzYTlkZDFkMzAzMTllMzE2YWJhNDFhNzIw
ZTZhNGE2NTEwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CkBAIC0zNSwxMTEgKzM1LDIyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFy
Z3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVt
Q2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25lIHRoYXQgZXhpc3Rz
IGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBi
eXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJh
bmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFu
ZCgpID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1l
bnRPcGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsg
fQorCisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAg
ICAgICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS5pc0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3Bl
cmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVy
YW5kKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0K
KyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWlu
dDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgp
OyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVy
YW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3Vt
ZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5s
aW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQ7CisgICAgaW50IG1fb3BlcmFu
ZDsKK307CisKK0FMV0FZU19JTkxJTkUgYm9vbCBPcGVyYW5kOjpvcGVyYXRvcj09KGNvbnN0IE9w
ZXJhbmQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZSgpID09IG90aGVyLnZhbHVlKCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpID09
IG90aGVyLnZpcnR1YWxSZWdpc3RlcigpOworfQorCitpbmxpbmUgYm9vbCBPcGVyYW5kOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkg
Pj0gMDsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpOworfQorCitpbmxp
bmUgT3BlcmFuZCBPcGVyYW5kOjpmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBPcGVy
YW5kIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxPcGVyYW5kPih2YWx1ZSk7CisgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpY19hc3NlcnQo
c2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZih1aW50NjRfdCksICJPcGVyYW5kOjphc0JpdHMoKSBy
ZWxpZXMgb24gdGhpcy4iKTsKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2Ug
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKLSAg
ICBPcGVyYW5kcygpCi0gICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykK
KyAgICAvLyB1c2luZyBTdG9yYWdlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKKyAgICAvLyB1c2luZyBSZWZUeXBlID0gdHlwZW5hbWUgc3RkOjpjb25k
aXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yOjpCaXRSZWZl
cmVuY2UsIFQmPjsKKyAgICAvLyB1c2luZyBDb25zdFJlZlR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKKyAg
ICB1c2luZyBTdG9yYWdlID0gVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKKyAg
ICB1c2luZyBSZWZUeXBlID0gVCY7CisgICAgdXNpbmcgQ29uc3RSZWZUeXBlID0gY29uc3QgVCY7
CisKKyAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNp
emVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCiAgICAgewotICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5l
ZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1
bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAg
ICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkp
OwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFy
Z3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCiAgICAgewotICAgICAg
ICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsK
KyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
KTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlr
ZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKKyAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQog
ICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkgKyBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhl
ci5zaXplKCkpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQot
ICAgIAorCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Bcmd1bWVudHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQotICAgIAorICAgIHNpemVfdCBu
dW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9CisgICAgc2l6ZV90
IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9m
QXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisKKyAgICBzaXplX3QgdG1wSW5kZXgo
c2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRt
cHMoKSk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CisgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlk
eDsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX251bUFyZ3VtZW50cyArIGlkeDsKKyAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIGlkeDsKICAgICB9CisKKyAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6
ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAK
LSAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFs
dWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQotICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNp
emVfdCBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsKLSAgICB9CisgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGFy
Z3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgo
aWR4KV07IH0KICAgICAKLSAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1tsb2NhbEluZGV4KGlkeCldOyB9Ci0gICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIFJlZlR5cGUgbG9j
YWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAg
IENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2lu
ZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZUbXBzKCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fscygp
OworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkxvY2FscygpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgotICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCisgICAgUmVmVHlwZSBhdEZvcihz
aXplX3QgaWR4KQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3Bl
cmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9w
ZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1l
bnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJl
dHVybiBsb2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAg
IHJldHVybiBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJh
bmRLaW5kIG9wZXJhbmRLaW5kPgotICAgIGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0
CisgICAgQ29uc3RSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9w
ZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVy
biB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAg
IGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisK
KyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVl
ID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAg
ICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxv
Y2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBuZXdTaXplID0g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6
ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHNpemVfdCBvbGRO
dW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
Ci0gICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBUKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTnVtVG1wczsgKytpKQorICAgICAgICAgICAgbV92YWx1
ZXNbbmV3U2l6ZSAtIDEgLSBpXSA9IG1fdmFsdWVzW3RtcEluZGV4KG9sZE51bVRtcHMgLSAxIC0g
aSldOworCisgICAgICAgIG1fbnVtTG9jYWxzID0gc2l6ZTsKKyAgICAgICAgaWYgKGVuc3VyZWRW
YWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUgLSBvbGROdW1Mb2Nh
bHM7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2Fs
cyArIGkpXSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5z
dXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUpCisgICAgdm9pZCBl
bnN1cmVUbXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAg
ewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6
ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXpl
IDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mVG1wcygpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOworCisgICAgICAgIGlmIChlbnN1
cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXph
dGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXpl
OyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBU
JiB2YWx1ZSkKQEAgLTE2NCw4NCArMjc0LDc2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlk
eCA+PSBudW1iZXJPZkxvY2FscygpIHx8IGxvY2FsKGlkeCkgPT0gVCgpKTsKICAgICAgICAgc2V0
TG9jYWwoaWR4LCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgo
aW50IG9wZXJhbmQpIGNvbnN0CisKKyAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBn
ZXRGb3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PE9wZXJhbmRzKj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KKworICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1
cm4gYXJndW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9j
YWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJu
IGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKLSAgICBzaXplX3Qg
b3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CisgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChPcGVyYW5kIG9wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wZXJhbmRJbmRleCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAo
IW9wLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOwogICAgIH0K
ICAgICAKLSAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFJlZlR5cGUgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkp
OworICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIAotICAg
IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBSZWZUeXBl
IG9wZXJhbmQoT3BlcmFuZCBvcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kKHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJu
IHRtcChvcC52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVy
YW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJh
bmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBU
Jj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KKyAg
ICBDb25zdFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQogICAgIAotICAg
IGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxz
KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgp
KSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQotICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKG9wLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcC52YWx1ZSgpID49IDAp
OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3AudmFsdWUoKSkgPCBu
dW1iZXJPZlRtcHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChvcC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQg
b3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3Bl
cmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5vcGVyYW5kKG9wZXJh
bmQpID0gdmFsdWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNl
dE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgfQogCiAgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25z
dCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQot
ICAgIFQmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAg
Y29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7
IH0KLQotICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4IDwgbV9udW1Bcmd1bWVudHM7IH0KLSAgICBib29sIGlzTG9jYWwoc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgb3BlcmFuZEZvcklu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBSZWZUeXBlIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBS
ZWZUeXBlIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKwor
ICAgIE9wZXJhbmQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpLm9mZnNldCgpOwotICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZv
ckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICBlbHNlIGlmIChpbmRleCA8
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7
CisgICAgICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0
T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHNldEFy
Z3VtZW50Rmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCksIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c2V0TG9jYWxGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFs
dWUpOwotICAgIH0KLSAgICAKKwogICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKQEAgLTI1Nyw2
ICszNTksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHMoKSA9PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mTG9jYWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChu
dW1iZXJPZlRtcHMoKSA9PSBvdGhlci5udW1iZXJPZlRtcHMoKSk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gbV92YWx1ZXMgPT0gb3RoZXIubV92YWx1ZXM7CiAgICAgfQpAQCAtMjY1LDkgKzM2
OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4KLSAgICBWZWN0b3I8VCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFsdWVzOwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1l
bnRzOworICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJn
dW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJl
IHRtcHMuCisgICAgU3RvcmFnZSBtX3ZhbHVlczsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
cyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
ZXJhbmRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCmluZGV4IDY1ZmVkZGEwNzMwYTgzOTFmODMxNTYzZGJkZWI4MTZhZjkyNTY2ZmQu
LjBiMWNjMWYyZDE5N2FkMDgzNjVhOGY3ODU2MWZkZjY3YTdkOWVkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKQEAgLTMwLDYgKzMw
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIG91dC5w
cmludCgidG1wIiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKIHsKQEAgLTQ0LDYgKzUyLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRl
eCwgIjoiLCBpbkNvbnRleHQobG9jYWwobG9jYWxJbmRleCksIGNvbnRleHQpKTsKICAgICB9Cisg
ICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9mVG1wcygpOyAr
K3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBp
bkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOworICAgIH0KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KQEAgLTYwLDYgKzczLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGxvY2FsKGxvY2FsSW5kZXgpKTsK
ICAgICB9CisgICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9m
VG1wcygpOyArK3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRl
eCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKaW5kZXggZDVkZGVlOGQ1NjA3NzAzMjNiMWZkNWYxYWNjY2NjMDUwMmMxMjY1NC4uN2U5
MzI2MmRmYjA5NTlkZWMyYTkyNDFmZjhjNjExZjMzYjkyYjQ0NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC03Miw2
ICs3Miw3IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlCiAgICAgLCBtX2NvZGVUeXBlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkpCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hh
c0NoZWNrcG9pbnRzKGZhbHNlKQogICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkK
ICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1f
bWV0YWRhdGEoVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpjcmVhdGUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggYTRmYTdl
MDU1YjhlOTJiNmFhYWFhNThjMWE5ZDllY2JhYmY0OThmMy4uYjk1MTY1Y2VmMGI4NjZiNDBlNjMx
MzQyNzFlODE5MzQyYTkwYmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTE0Miw2ICsxNDIsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOyB9CiAgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9u
SW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAorICAgIGJvb2wgaGFzQ2hlY2tw
b2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CisgICAgdm9pZCBzZXRI
YXNDaGVja3BvaW50cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KKwogICAgIC8vIFNw
ZWNpYWwgcmVnaXN0ZXJzCiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQogICAgIHZv
aWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Nj
b3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9CkBAIC0xOTksOSArMjAyLDggQEAgcHVibGlj
OgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KICAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlm
aWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsgfQpAQCAtNDIwLDYgKzQyMiw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9kaWRPcHRpbWl6ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9hZ2Ug
OiAzOwogICAgIHN0YXRpY19hc3NlcnQoKCgxVSA8PCAzKSAtIDEpID49IG1heEFnZSk7CisgICAg
Ym9vbCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKaW5kZXggYmJiOGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFlMTE4MzNlZmI5MDM2
Ny4uZWI5MTc5NDUzMGRmMWEzMjkyZGNkYmVkMzE2NGU5Yzc5MDlhNjlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApAQCAtMTc2LDI4ICsxNzYs
MjggQEAgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRl
eChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHIKICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
LT5tX2J5dGVjb2RlSW5kZXg7CiB9CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDog
cHVibGljIFZhbHVlUHJvZmlsZSB7Ci0gICAgaW50IG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogfTsKIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIgeworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQorICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgICAgICA6IG1fc2l6ZShzaXplKQog
ICAgIHsKICAgICAgICAgLy8gRklYTUU6IFZhbHVlUHJvZmlsZSBoYXMgbW9yZSBzdHVmZiB0aGFu
IHdlIG5lZWQuIFdlIGNvdWxkIG9wdGltaXplIHRoZXNlIHZhbHVlIHByb2ZpbGVzCiAgICAgICAg
IC8vIHRvIGJlIG1vcmUgc3BhY2UgZWZmaWNpZW50LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDEzCi0gICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0p
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKLSAgICB+
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcigpCisgICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlciB7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0
cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPiBtX2J1ZmZlcjsKKyAgICBNYWxsb2NQdHI8VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
Y3BwCmluZGV4IGM1Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0
N2YwZTE4ZGYwNjNhODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBA
QCBKU1ZhbHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0CiB7CiAgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS51bmJveGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUy
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1
MigpKTsKICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5h
TihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUo
KSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpKS51bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVy
biBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkQm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAg
Y2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5
NGYzMmEyOTNhZmQ4OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMw
OTRlNThkYTNiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAy
MWY1YWQwNDguLmViMGNjYzM4ZWRiYTRlODgzYmFhMTQ0MThiMDYxNmVlYWYzYTMyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAg
LTMxLDEyICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFu
ZElzTG9jYWwoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2Fs
KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVn
aXN0ZXJJc0FyZ3VtZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7
CiB9CkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElz
TG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNI
ZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVh
bFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAppbmRleCBmODBhN2M0ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2Uz
Li40ODFiNWYyYjE5ZDU5NWYxMjAzYjc3ZDc3OWYyMzRmMDIxMzg4Y2MyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcApAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAg
ICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRv
IG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3Jj
MS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVh
bFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5
KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNy
YzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzIt
PnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkp
LT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7
CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5l
ZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIyOSw2ICszMjI5LDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAh
PSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMs
IHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDAp
LCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1ZmZlZjBlZjI2Y2I1MWU2ZjkuLjQyZGI5
N2Q2NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTEw
MDcsNiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRD
b250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVHZW5lcmF0aW9u
TW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNvbnRyb2xGbG93UHJvZmlsZXIpOyB9
CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAgICB2b2lkIHNldFVzZXNDaGVja3Bv
aW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KIAogICAgICAgICBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnBh
cnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYy
MjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQw
LDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhl
YXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAg
ICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJz
dHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBS
YW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgi
KCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQu
cHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIs
IHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2
OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNs
dWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAt
MTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXls
b2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAg
ICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVl
KG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFu
ZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7
CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQg
IT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAm
JiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5
bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXls
b2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0
SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5k
IG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAm
JiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMo
cGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0
eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRhY2I1NDBkNDBhZTE3
OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uM2NjZTJkZjcyN2I2OTE4MWY0YjZiNTVkMTU4NzVi
YTZlNmQ3NTQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRl
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFs
cmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1
ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkp
KSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJh
bmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJl
IGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBl
KHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUo
KSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRl
Lm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVu
dHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBt
ZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0
LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAg
ICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1OCw2ICs0NTgsMTIg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAg
ICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50
IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDc2LDcg
KzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJh
bmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAg
ICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZz
ZXQoKSArIGkpKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKaW5kZXggZDcz
MjQ3YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4uODljMDhmYTA4MGNlYTMyZmQ5
YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3Zhcmlh
Ymxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2
YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxl
LT5vcGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgIG91dC5w
cmludCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYyZWRhNGFkODhlOWI5N2FhZDVm
NGY5MzkyMzc2MjE5NTJhZWY4NC4uZmEyNGM2OWQwZmVjYjdiYWZjNzA1ZDg1YzNjNWFkMGM2NTM5
MWU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSArMzU4LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAg
ICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlX
aXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5jaGls
ZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBl
c2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3Ao
KSA9PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheUJ1
ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+YXJndW1lbnRzQ2hp
bGQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtNDkzLDEwICs0OTYs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhl
YXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0byBhbiBhcmd1bWVudCBvciBs
b2NhbCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQgU2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJh
bmQocmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhbmQuaXNI
ZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC01NjAs
MTIgKzU2MywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
Q2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJl
ZEJ5QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRo
aXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNDbG9iYmVyZWRCeUJsb2NrKSB7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVh
cCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgp
ID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5s
aW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04NDUsOSArODQ4LDIzIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5h
dGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwgc28gaXQg
YmV0dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKKworCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG9yaWdp
biwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTg2MiwxMCArODc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50
YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzTm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdz
RGF0YS0+Y291bnQpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9y
aWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZs
dXNoZWRJbnQzMikpLApAQCAtODc0LDE0ICs4OTEsMTUgQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgICAgICAgICBhdXRvIHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBz
dG9yZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtp
bGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcu
b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcElu
Zm8ocmVnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZI
aW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2lu
LndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpLCBFZGdlKHZhbHVlKSk7CkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+
b2Zmc2V0OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAx
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJn
c0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJn
c0RhdGEtPmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXgg
NjI2MTEyM2NiZmVjM2ViYTE5NWQwOWI5MzEwMjZmMjZjNzI1ODQ3Ni4uMjA2ZDZmYmRjNTRhMzZj
Yjg0MThhOGIzODU0NmQ4NzU3Nzk5MDFiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCBy
ZWcuaXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC01MiwxMyArNTYsMTMgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICByZXR1
cm4gcmVnID49IGFyZ3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51bUFyZ3Vt
ZW50czsKIH0KIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0
ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChO
b2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKSwgcmVnKTsKKyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9CiAKIE5v
ZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQm
IGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVP
cmlnaW4gb3JpZ2luKQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1
bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgYWRkVGhp
cykKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApAQCAtNjks
MTEgKzczLDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAg
ICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAgIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
QnVmZmVyCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkLAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAgICAgYXJn
dW1lbnRzLT5vcCgpKTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkKKyAgICAgICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNl
cnRpb25TZXQsIGFyZ3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9yaWdpbiwg
YWRkVGhpcyk7CisKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMg
PSAwOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IGFkZFRo
aXM7CiAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRWZWN0b3Io
KTsKICAgICAgICAgTm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpAQCAtMTAz
LDcgKzExMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKIAog
ICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5v
cCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVt
YmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5n
dGgoKSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50
cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRo
aXMpKTsKICAgICB9CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAgLTExMyw3
ICsxMjAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAg
ICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+PSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0IEBAIE5v
ZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9kZUluZGV4
LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tl
ZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9y
aWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsK
KyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCArICFhZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCkgewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1
Y2UgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJl
Y3QgdGhhdCBoZXJlLgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwg
CiAgICAgICAgICAgICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIo
MCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRG
b3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVzZSkpOwog
ICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5k
ZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5ZTgxNjIy
ZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wgYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rlcik7Citi
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCk7
Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5k
KTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2Vy
dGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2lu
KTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRl
eCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2My
OGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAg
LTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1
bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZh
bHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIHsg
cmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJz
dHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNB
dFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJhNS4uYzJi
NTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEw
IEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0
eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsK
LSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVtYmVyT2ZB
cmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFu
ZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFw
aC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAg
ICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAg
ICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1NTI1NjAy
M2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0
ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAg
ewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFt
ZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkK
KyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3QgSGFzRnVu
Y3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFi
aWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICBBdmFp
bGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAgICAgIGlm
ICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCAwNTg0
NDk2M2U2MTBlZDI5M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYxNTYxOGI4
MDY0YTNhN2IyZDc4NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0
IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5
dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1
bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVn
aW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgs
MTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2Vu
ZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMs
IG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
LSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAg
ICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYgKzcwLDE1
IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykK
ICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxv
Y2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjpl
bnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVu
c3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAg
dmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0aW9uT2ZQ
YXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVs
bFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWlu
YWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggYjVh
ZGYwOTEyZDA5NDJiZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRjNmY0ZDFi
MDg1YmM4ZTA2MjU0ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKQEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4g
QmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxv
Y2s+IHsKICAgICBCYXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25D
b3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1
bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdO
dW1UbXBzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMu
c2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cAppbmRleCA3NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4wMDhjZjUy
MjY5NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBA
QCB2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNC
bG9jaz4mJiBibG9jaykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChz
aXplX3QgaW5kZXgsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291
bnQpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxv
Y2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRt
cHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwog
ICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92
ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAppbmRleCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQwOGI3Li4x
ZTg2MWRjMWE3NGQ5NzU4MzU4MDhmZTg4ZTg2NzkzNDBhODNhZmE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYgKzExMSw3
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJl
cigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkpCisgICAgICAgICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAg
ICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQog
ICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOwogICAgIH0KIAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQor
ICAgIHsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRvIHJh
aXNlIG1fbnVtVG1wcyBmcm9tICIsIG1fbnVtVG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4i
KTsKKyAgICAgICAgaWYgKG5ld051bVRtcHMgPD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX251bVRtcHMgPSBuZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3Jh
cGguYmxvY2soaSktPmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBI
ZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0
b3I+CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5
cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwpAQCAtMjcwLDI1ICsyODIsMzMg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJh
c2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxl
VGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwcm9ncmVzc0NoZWNrcG9p
bnQoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKKyAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KKyAgICAg
ICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAg
ICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKKyAgICB9CisKKyAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQu
aXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAg
ICAgICAKICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFu
ZCk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7
CiAgICAgfQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5
dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsK
IAotICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAKLSAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgotICAgICAgICByZXR1cm4gZ2V0TG9jYWwo
b3BlcmFuZCk7CisgICAgICAgIHJldHVybiBnZXRMb2NhbE9yVG1wKG9wZXJhbmQpOwogICAgIH0K
IAogICAgIE5vZGUqIGdldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKQEAgLTI5OCw4ICszMTgs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRz
LnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1f
Y29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ29kZUJs
b2NrJiBjb2RlQmxvY2sgPSAqbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kLm9m
ZnNldCgpKTsKLSAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
Y29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCkBA
IC0zNTgsOSArMzc4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGluaXRpYWxpemluZyBsb2Nh
bHMgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgogICAgICAgICBJbW1lZGlhdGVOYWtlZFNldAog
ICAgIH07Ci0gICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2Rl
KiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorCisgICAgTm9kZSogc2V0RGly
ZWN0KE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKICAgICB7Ci0gICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQu
b2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9w
ZXJhbmQpLCB2YWx1ZSk7CiAKICAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnltb3JlIGJlY2F1
c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICAgICBtX2V4aXRPSyA9IGZh
bHNlOwpAQCAtMzc0LDcgKzM5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gZGVsYXllZC5leGVjdXRlKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgcHJvY2Vz
c1NldExvY2FsUXVldWUoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKQEAgLTM5MiwxOCArNDEzLDE3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNT
RVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkgPT0gbV9jdXJyZW50SW5k
ZXgpOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5vcGVyYW5kKCkp
OwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAgICAgICAgIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92
ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRM
b2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbE9yVG1wKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50
b0xvY2FsKCk7Ci0KLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
IG9wZXJhbmQuaXNMb2NhbCgpKTsKKyAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICAv
LyBUaGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRh
dGFzLCBhbmQgMikKICAgICAgICAgLy8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBH
ZXRMb2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IKQEAgLTQyOCwyMCArNDQ4LDI1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOwogICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYg
c2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldExvY2FsT3JUbXAoY29uc3Qg
Q29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUs
IFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICBTZXRGb3JTY29wZTxD
b2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGlj
T3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKLSAg
ICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1l
bnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgp
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpID49IG1fbnVtVG1wcykg
eworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigqaW5saW5lQ2FsbEZyYW1lKCkpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQg
b3BlcmFuZDogIiwgb3BlcmFuZCwgIiBidXQgY3VycmVudCBudW1iZXIgb2YgdG1wcyBpczogIiwg
bV9udW1UbXBzLCAiIGNvZGUgYmxvY2sgaGFzOiAiLCBtX3Byb2ZpbGVkQmxvY2stPm51bVRtcHMo
KSwgIiB0bXBzLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRp
YXRlTmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAg
ICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9j
b2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgu
bmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVy
KCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUx
LDcgKzQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VD
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwg
QmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDgsMjEgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0
QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAg
IE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVy
YW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAg
ICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJy
ZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBh
cmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFy
Z3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEocmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9y
ICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFr
ZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwg
bV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9
IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQp
OworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OCwxNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0
KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAg
ICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRp
b24oT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVu
dChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRp
b25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NzUsNiArNjAzLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5k
bGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQg
dG8gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRl
Y29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFw
cHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4p
KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVu
ZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBAIC01ODQsMjcgKzYxMywyNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZs
dXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVz
aERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAg
ICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRp
b24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQg
YWRkRmx1c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9j
YWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFT
U0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25z
dGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02
MTQsMjYgKzY0MywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9H
cmFwaChub2RlVHlwZSwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChh
cmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFi
bGUodmFyaWFibGUpOwogICAgIH0KIAotICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxv
Y2FsPihvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBmbHVzaChJbmxpbmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsK
LSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmly
dHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFk
ZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsg
Zmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0Vu
dHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZv
aWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGly
ZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJ
bmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVj
dChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxs
RnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAg
ICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBP
cGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAg
ICBmbHVzaEZvclRlcm1pbmFsSW1wbChjdXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVj
dCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3ODksMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNo
aWxkMykpOwogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBO
b2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxk
MSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJu
IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhvcGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZh
bHVlKCkpLCBjaGlsZDEpOworICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9w
LCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0g
RWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwOTEsOCArMTEyNCwxMCBAQCBwcml2YXRlOgogCiAg
ICAgLy8gVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAg
ICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAo
dmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVt
YmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBm
b3IgdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBt
YXggbnVtYmVyIG9mIHRlbXBzIHVzZWQgZm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhp
dCB0byBjaGVja3BvaW50LgorICAgIHVuc2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVt
YmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQg
dG8KICAgICAvLyBwcmVhbGxvY2F0ZSBmb3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZy
b20gdGhpcyBmcmFtZS4gVGhpcwogICAgIC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1l
IHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5
NCwxNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsK
ICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIGNvbnN0CisgICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJh
bmQgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBP
cGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFu
dCgpKTsKIAotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNl
dCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0OwogICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNzUsMTMgKzEyMTMsOCBAQCBwcml2
YXRlOgogICAgIElDU3RhdHVzQ29udGV4dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAg
ICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFs
dWU7Ci0gICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXll
ZFNldExvY2FsKCkgeyB9Ci0gICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2lu
JiBvcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlKQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2lu
LCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAg
ICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
CiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCkBAIC0xMTk0LDggKzEyMjcsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1f
b3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXIt
PnNldExvY2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAg
ICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQs
IG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAgICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1f
b3JpZ2luOworICAgICAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1
ZSB7IG51bGxwdHIgfTsKKyAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAK
ICAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4
LDcgKzEyNDYsNyBAQCBwcml2YXRlOgogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9j
YXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBB
U1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxv
Y2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFz
aWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVt
VG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAg
Ly8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFz
aW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9i
bG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKQEAgLTEyMjAsNyArMTI1OCw3IEBAIEJhc2ljQmxv
Y2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVu
dGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJl
ZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1M
b2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1f
bnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAg
ICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2Nr
UHRyOwpAQCAtMTQyMyw3ICsxNDYxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVj
dXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUg
aXMgVmFyYXJncywgd2UgZG8gbm90IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxs
eSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAg
ICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9m
IHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51
ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmls
bGVkIGFyZ3VtZW50cyBieSB4a0xvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBl
ciBmcmFtZSB3aGljaCBtYXkgYmUKICAgICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVt
cCBpbnRvLgogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xNjE0LDE2ICsxNjUyLDE4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIENhCiAgICAgQVNTRVJUKCEobnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90cyAlIHN0YWNr
QWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVw
ID0gcmVnaXN0ZXJPZmZzZXQgLSBudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzOwogICAgIAotICAg
IGludCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkub2Zmc2V0KCkgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKyAgICBPcGVyYW5kIGlubGluZUNhbGxG
cmFtZVN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAKICAgICBlbnN1cmVMb2NhbHMo
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgp
ICsgMSArCisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnRvTG9jYWwoKSArIDEgKwogICAg
ICAgICBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIGNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpOwogICAgIAorICAgIGVuc3VyZVRtcHMobV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKE9wZXJhbmQoVG1wT3BlcmFuZCwgY29kZUJsb2NrLT5udW1UbXBzKCkpKS52YWx1
ZSgpICsgbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKKwogICAgIHNpemVfdCBhcmd1
bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwog
CiAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOworICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAogICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxscHRyOwogICAgIGlmIChjYWxs
ZWUuaXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xNjM2LDcgKzE2NzYsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBDYQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSogY2FsbGVyU3RhY2tUb3AgPSBtX2lu
bGluZVN0YWNrVG9wOwogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlz
LCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgY2FsbGVlLmZ1bmN0aW9uKCksIHJlc3VsdCwKLSAgICAg
ICAgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKKyAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQudmlydHVhbFJlZ2lzdGVyKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBh
Y3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgQnl0ZWNvZGVJbmRleCBvbGRJbmRl
eCA9IG1fY3VycmVudEluZGV4OwpAQCAtMTY3MSw5ICsxNzExLDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQ2EKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3ZSBiZWdpbiBleGVjdXRpbmcgdGhl
IGNhbGxlZSwgd2UgbmVlZCBPU1IgZXhpdCB0byBiZSBhd2FyZSBvZiB3aGVyZSBpdCBjYW4gcmVj
b3ZlciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZXR0ZXIsIGxvYzkgYW5kIGxvYzEwLiBUaGUgTW92
SGludHMgaW4gdGhlIGlubGluZWQKICAgICAgICAgLy8gY2FsbGVlIG1ha2UgaXQgc28gdGhhdCBp
ZiB3ZSBleGl0IGF0IDxIRVJFPiwgd2UgY2FuIHJlY292ZXIgbG9jOSBhbmQgbG9jMTAuCiAgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQg
PSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRv
R2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2Rl
T3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTcsMTYgKzE3NTcsMTYgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcywgd2UgZG8gbm90IG5lZWQg
dG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgIT0g
cmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9m
ZnNldCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50
VG9HZXQpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvU2V0ID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJn
dW1lbnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFy
Z3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwg
YXJndW1lbnRUb1NldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcml0eUZp
eHVwQ291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB1
bmRlZmluZWQpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92
SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgbV9z
ZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigp
LCBhcmd1bWVudFRvU2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAg
ICB9CiAKQEAgLTE4OTMsMTIgKzE5MzMsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBjYWxsVGFyZ2V0Tm9kZSwgdGhp
c0FyZ3VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGludCByZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
ID0KLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudmlydHVhbFJlZ2lz
dGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMb2NhbHMoVmlydHVhbFJl
Z2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAgICAgIAogICAg
ICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3Rh
cnQpKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkp
LnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKICAgICAgICAg
ZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgMSk7
CkBAIC0xOTA2LDExICsxOTQ2LDI0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFy
Z3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAg
IGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAgICAgZGF0YS0+bGltaXQgPSBt
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWlu
aW11bSA9IG1hbmRhdG9yeU1pbmltdW07Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbE9wID09
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRW
YXJhcmdzLCBPcEluZm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRUb0dy
YXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOwor
CisgICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKKyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoR2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lQ2Fs
bEZyYW1lKCktPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBn
ZXREaXJlY3QocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdz
LCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAg
ICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3Bl
cmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICAgICAg
c2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhk
YXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQoKTsKKwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXRMb2Nh
bE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVw
IGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3Vt
ZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQg
YSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdp
c3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVh
c29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNT
QS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNv
dW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2Ug
dGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAg
Ly8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5p
dGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3Rs
eSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5i
b3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxv
Y2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVu
dENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVu
c2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDYsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRh
dG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBP
cEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRz
OwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNiw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygK
ICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0
ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZF
UkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAg
ICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZs
dXNoKTsKIApAQCAtNTEwMiw3ICs1MTU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29k
ZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJl
Z0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpz
Q29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdf
cmVnZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMxLDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAm
JiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5v
cCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1
ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAg
ICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gp
OyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBi
ZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ4LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIyMywxNCAr
NjI3NiwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkp
OwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hM
b2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVt
YmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCks
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVy
YW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZh
bHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFw
aC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAg
ICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4MjYsOCAr
Njg3OSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNh
bEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7
Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRp
YWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmco
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dy
YXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0g
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25t
ZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBP
cEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1f
ZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNzI3NSw4ICs3MzI4LDEwIEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAvLyBU
aGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBh
IGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgogICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRl
QmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9j
YWxsZXItPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2Nv
ZGVCbG9jay0+bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNr
T2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID09IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewog
ICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNv
dmVyeTo6Y29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsID0gZmFsc2U7CkBAIC03NjM4LDcgKzc2OTMsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNzY1OCwyNCArNzcxMywyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzc29yLT5wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZp
bmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9w
LCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgT3Bl
cmFuZCBhcmd1bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50LmlzQXJndW1lbnQoKSAmJiAhYXJn
dW1lbnQuaXNIZWFkZXIoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxBcmd1bWVudFBvc2l0aW9uKj4mIGFyZ3VtZW50cyA9IG1faW5saW5lQ2FsbEZyYW1lVG9B
cmd1bWVudFBvc2l0aW9ucy5nZXQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHNbYXJndW1lbnQudG9Bcmd1bWVudCgpXS0+YWRkVmFyaWFibGUo
dmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgb3AsIG9y
aWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIEZsdXNoLCBvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQ
aGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2
ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBQaGFudG9tTG9jYWwsIG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBmbHVzaEZvclRl
cm1pbmFsSW1wbChvcmlnaW4uc2VtYW50aWMsIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9j
YWxEaXJlY3QpOwpAQCAtNzc0MCw2ICs3Nzk1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpKTsKICAgICB9CiAKKyAgICBtX2dyYXBoLm1fdG1wcyA9IG1fbnVtVG1wczsKICAgICBt
X2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRl
clNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKaW5kZXggOGU5YmI0YWNiZTU1MDJkZGE3YjM3NDc4NGI1YTg1ZmZkZTcw
M2JmZC4uM2RjNzU2OGYxZWUyYzY5NzcyMjY4Y2M5NmRlYTRhMDVjNjIzNjI1MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE3MCwyMiArMTcwLDIyIEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBjb25zdCBP
cGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
T3B0aW9uYWw8SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFu
b2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBvcGVyYW5k
LCAiXG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICBXaWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIgd2l0aCAiLCB2
YWx1ZS52YWx1ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBXaWRlbmlu
ZyAiLCBvcGVyYW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHRhcmdldCA9IGJsb2NrLT52YWx1ZXNBdEhl
YWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdGFyZ2V0Lm1lcmdl
T1NSRW50cnlWYWx1ZShtX2dyYXBoLCB2YWx1ZS52YWx1ZSgpLCBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSwgbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAppbmRleCBkOThmZDRhZjQ0MGYwN2NiYzE2YjY3ZDYwMmJh
NjQyNmFmMGYyMzgyLi41NzcwZjA5ODk0MmM4OTZiN2FjZjgyM2ZjYWI5NDQ0YTIyNGNjZWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBzcGVjaWFsQ2FzZUFy
Z3VtZW50cygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKICAgICAg
ICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXM8VG1wT3BlcmFuZD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hlZCgpOwogICAgICAgICAK
ICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAgLTIxMSwxMCArMjEyLDIw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQog
ICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
c3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1l
bnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9w
ZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFu
ZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogeworICAg
ICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8VG1wT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5v
ZGVUeXBlLCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBBU1NFUlQo
b3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9
IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1
bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRv
bUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJs
ZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5k
KCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsT3BlcmFu
ZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2Rl
VHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50
b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
bXBPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2Fs
Rm9yPG5vZGVUeXBlLCBUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJh
bmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXQoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2Fs
KCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChu
b2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6
ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg5LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBjbGVhclZhcmlhYmxlczxBcmd1bWVudE9wZXJhbmQ+KCk7CiAgICAgICAgIGNsZWFy
VmFyaWFibGVzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8VG1wT3Bl
cmFuZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVy
ZW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAogICAgICAg
ICAvLyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24n
dCBhc3N1bWUgdGhhdCB0aGUgcmVmCkBAIC0zODgsNyArNDExLDcgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICB2b2lkIHByb3BhZ2F0ZVBoaXMo
KQogICAgIHsKLSAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0g
b3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9s
b2NhbFBoaVN0YWNrOworICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3Rh
Y2sgPSBwaGlTdGFja0ZvcjxvcGVyYW5kS2luZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVu
c3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5LgogICAgICAgICBt
X2Jsb2NrID0gMDsKQEAgLTQ2Niw5ICs0ODksMTIgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxP
cGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYg
cGhpU3RhY2tGb3IoKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50
T3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Ci0gICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsK
KyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7
CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAg
ICAgICBjYXNlIFRtcE9wZXJhbmQ6IHJldHVybiBtX3RtcFBoaVN0YWNrOworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcHV0ZUlzRmx1c2hlZCgpCkBAIC01MjEsNiArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fYXJn
dW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2xvY2FsUGhp
U3RhY2s7CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV90bXBQaGlTdGFjazsKICAg
ICBWZWN0b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAppbmRleCAyMzgxYzZiOGY4ZjRi
YTc2MzRiYjY2YjEyMzk0NzFiNWE2MTY2N2NlLi40Y2NlMTc0ODgzZTIwNDEwZDYyMjNhNmY0MTcy
ZWRkZTY5OGFhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cApAQCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFN0YWNrOiB7CiAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9w
KCkpOwotICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
cmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAg
IGlmIChjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgbV9mYWxsYmFja1N0
YWNrTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNzIsNyArMTcxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGlmICghY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAocGFpci5rZXkuaGVhcCgp
LmtpbmQoKSA9PSBTdGFjaykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFs
dWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5l
bmQoKSAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBwYWlyLmtleSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yMjYsOCArMjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBh
YnN0cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CiAgICAgICAgICAgICBpZiAoYWJzdHJhY3RI
ZWFwLnBheWxvYWQoKS5pc1RvcCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBhZGQobV9mYWxs
YmFja1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWJzdHJh
Y3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUz
MigpKTsKLSAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01h
cC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCksIG51bGxwdHIpOworICAgICAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFj
dEhlYXAucGF5bG9hZCgpLnZhbHVlKCksIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9uLCBub2RlLCAwfSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksOCArMjQ3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBTaWRlU3RhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBjYXNlIFN0YWNrOiB7Ci0gICAgICAgICAgICBBU1NFUlQobG9j
YXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpID09IGxvY2F0aW9uLmhlYXAoKS5wYXlsb2Fk
KCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2Nh
dGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKICAgICAgICAgICAgICAgICAmJiBpdGVy
YXRvci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlLT52YWx1ZTsKQEAgLTI5OCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgIC8v
IGEgZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1fZmFsbGJhY2tT
dGFja01hcC4KICAgICAvLwogICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBnb2VzIGludG8g
bV9mYWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlxdWUgdmFsdWUu
Ci0gICAgSGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBE
ZWZhdWx0SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8aW50MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgSGFzaE1hcDxpbnQ2NF90
LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQ2NF90Pjo6
SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50NjRfdD4+IG1fYWJzdHJh
Y3RIZWFwU3RhY2tNYXA7CiAgICAgTWFwIG1fZmFsbGJhY2tTdGFja01hcDsKIAogICAgIE1hcCBt
X2hlYXBNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4
IDg5YmM2NDFmNTI2YmI1M2ZmMDM3ZjczY2Y5NTBiYWM2NDZkNDk5NTQuLmUwYTA3YzdjZTZlNGQ1
MjRkOTY1NDRjNWQwMDgzMmMyYzM5NWI5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCkBAIC0xMTEsOSArMTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRl
RnUKICAgICAvLyBzY2FuIHdvdWxkIHJlYWQuIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBm
b3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9
IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ss
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9
CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNwZWNpZmljYWxseSBhY2NvdW50IHdoaWNoIG5v
ZGVzIGNhbiByZWFkIGZyb20gdGhlIHNjb3BlCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBLaWxsU3RhY2s6Ci0g
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7
CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAt
NDk3LDcgKzQ5Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5sb2NhbCgpKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVy
YW5kKCkpKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBA
IC03ODgsMzYgKzc4OCw0MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3Rh
Y2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2Rl
KSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3Bl
cmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJh
Y3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAg
ICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3Bl
cmFuZCk7CiAgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0
YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CisgICAgICAgIHJldHVybjsgIAorICAg
IH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAg
ICAgIHdyaXRlKEhlYXApOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRh
LT5jb3VudC5vZmZzZXQoKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1p
dDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3Rh
cnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyNiw5ICs4MzMsOSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7Cisg
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50
PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFy
dCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2
ZW5lc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcAppbmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0
NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcg
QEAgc3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJp
bGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVj
b2RlKAogICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAg
IHJlZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUw
OWY5MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2FkYi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEz
MzJmZDUyNDk2NTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29k
ZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVu
ZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAt
IDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICBy
ZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERp
c3Bvc2FibGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0
LDEzICs2NCwxMyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRl
SW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2Rl
T3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAg
ICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjps
YXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNp
emUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lu
cy5zaXplKCkgLSAxKSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVP
cmlnaW5zLnNpemUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggODU0MTIzMTQ3NDFlNmYx
MTI2MWYyZTk3YzQ5ZmU2NDRkYWU3YmFmNy4uZjM4YzgzZmRkMzBjMmY1M2IzZDUwOTNmNDBiMmM3
MGU5NTMxMDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
Mjk0LDYgKzI5NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VP
ZkN1c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJp
bmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1
ZmJjNDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0
aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwog
ICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxp
emF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBH
ZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAg
ICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZt
LmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAg
ICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWVlMWYwMDczYjBmNGJiY2M0NzM0
ZWI2NDFlNDY0OGMzMDU1YTI0NC4uY2EzM2RiMjI3ZDRiOTI3NzNmYTg2ZDcyZWUzZDRkMWI4NWJm
OTgzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBA
IC0yNDMyLDYgKzI0MzIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKwogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0
aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ2NCw4ICsyNDcyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAg
IGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAg
ICAgY2FzZSBOZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGb3JBbGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxL
aWxscy5oCmluZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLjkz
M2EyYmRlMjJlMTY2YzJhZWI2ZDRhYzFiYmU5Y2UxZTVjZWQ1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJu
YWwgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMg
Zm9yIGZpbmRpbmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBT
U0EuIFRoaXMgYWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMg
aXMgdXN1YWxseSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBw
b2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3
aGVyZSB0aGUgbm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9n
cmFtIHBvaW50cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVy
LCBjb25zdAogICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5m
b3JFeGl0OwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3Bl
cmFuZCBhbHJlYWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBp
cyBsaXZlIGF0IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAo
bm9kZUFmdGVyLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gbm9kZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xp
dmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0g
ICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG5vZGVBZnRlci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5k
KTsKKyAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC03MCw4ICs3NCwyNCBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgIC8v
IG90aGVyIGxvb3AsIGJlbG93LgogICAgIGF1dG8qIGJlZm9yZUlubGluZUNhbGxGcmFtZSA9IGJl
Zm9yZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1lID09
IGFmdGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGludCBzdGFja09mZnNldCA9IGJl
Zm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGJlZm9yZUlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhZnRlci5ieXRlY29k
ZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9p
bnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAg
IGF1dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFm
dGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBpbnQgdG1wT2Zmc2V0ID0gYmVmb3Jl
SW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOwor
ICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5m
aWx0ZXIobGl2ZUFmdGVyKTsKKworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0
KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoT3BlcmFuZChUbXBP
cGVyYW5kLCB0bXAgKyB0bXBPZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Ly8gTm8gbG9jYWxzIGNhbiBkaWUgYXQgYSBjaGVja3BvaW50LgorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2Fs
bEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAgICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihj
b2RlQmxvY2spOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVs
bExpdmVuZXNzLmdldExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYg
bGl2ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgo
KSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwpAQCAtODIsMTcgKzEwMiwy
MSBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJl
Zm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgICAgICAgICAgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhZnRlci5ieXRl
Y29kZUluZGV4KCkuY2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmluZyBhY3Jvc3MgYSBjaGVja3Bv
aW50IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFuIGlubGluZUNhbGxGcmFtZS4i
KTsKKwogICAgIC8vIERldGVjdCBraWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQg
aXMga2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBCaXRW
ZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwotICAg
IGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZlQWZ0
ZXIgPSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOworICAgIHVuc2ln
bmVkIG51bUxvY2FscyA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAg
ICAgICAgIGJlZm9yZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAg
ICAgICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3RlZCkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9M
b2NhbCgpKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/
IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAg
ICAgICAgaWYgKGxpdmVBZnRlci5nZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQp
OwogICAgICAgICB9KTsKIH0KICAgICAKQEAgLTEwNSw3ICsxMjksOCBAQCB2b2lkIGZvckFsbEtp
bGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWVu
SW5DbG9zdXJlRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxsZWRG
dW5jdG9yRmxhZyA9IDI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IGZsYWdzOwotICAg
IAorCisgICAgQVNTRVJUKG5vZGVJbmRleCk7CiAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwogICAgIAogICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKQEAgLTEyMCwxNSArMTQ1
LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSk7CiAKLSAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOwotICAgIGlmIChub2Rl
SW5kZXgpCi0gICAgICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKKyAgICBO
b2RlKiBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CiAKICAgICBmb3JBbGxLaWxs
ZWRPcGVyYW5kcygKICAgICAgICAgZ3JhcGgsIGJlZm9yZSwgbm9kZSwKLSAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAgICAg
ICAgICAgICAgICByZWcsCisgICAgICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAgICAgICAg
ICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmxhZ3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xvc3VyZUZsYWc7CiAgICAgICAgICAgICAgICAgfSwK
QEAgLTE1OSw2ICsxODIsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAgICAvLyBTdGFy
dCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8g
b25seSBpbnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVw
IHRvIG5vZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0
aGUgZnVuY3RvciBoYXMgbm90aGluZyB0byBkby4KICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
IGRhdGFMb2dMbklmKEZvckFsbEtpbGxzSW50ZXJuYWw6OnZlcmJvc2UsICJsb2NhbCBhdmFpbGFi
aWxpdHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRleCwgIiAiLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2
YWlsYWJpbGl0eSk7CiAgICAgICAgIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAg
ICAgICAgICBncmFwaCwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHksIGJsb2NrLCBu
b2RlSW5kZXgsCiAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggNzk2NDk4NTMzMTYwM2MzOGJiYWVjZTQzYjQ3YThi
YTA4NzliZDg3MC4uZjM1ZDY1YzJhOGRmMThmZmE3ZWVlZjU0NjFjYTMyYTNjNGIyYWMyMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTMwOCw4ICszMDgsOCBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwg
Tm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigiLCBWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgICAg
ICAgICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CiAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKQEAgLTMxNywxMyArMzE3LDEzIEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2Rl
KiBub2RlLCBEdW1wQ29udGV4CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNTdGFja0FjY2Vzc0Rh
dGEoKSkgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7CisgICAgICAg
IG91dC5wcmludChjb21tYSwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIGlmIChkYXRhLT5tYWNo
aW5lTG9jYWwuaXNWYWxpZCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGlu
ZToiLCBkYXRhLT5tYWNoaW5lTG9jYWwpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEt
PmZvcm1hdCk7CiAgICAgfQotICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZExvY2FsKCkpIAotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgaWYgKG5v
ZGUtPmhhc1VubGlua2VkT3BlcmFuZCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKTsKICAgICBpZiAobm9kZS0+aGFzVmVjdG9yTGVuZ3RoSGludCgp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ2ZWN0b3JMZW5ndGhIaW50ID0gIiwgbm9kZS0+
dmVjdG9yTGVuZ3RoSGludCgpKTsKICAgICBpZiAobm9kZS0+aGFzTGF6eUpTVmFsdWUoKSkKQEAg
LTUxNSw5ICs1MTUsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgQmFzaWNCbG9jayoKICAgICAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+b3AoKSA9PSBQ
aGkpOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5v
ZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhp
Tm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAg
ICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+b3Bl
cmFuZCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CiAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBw
aGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PmNoaWxkMigpKSB7CkBAIC04ODQsNyArODg1LDcgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdl
dExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEK
ICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICBp
ZiAobm9kZS0+b3BlcmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKQogICAg
ICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtODkzLDkgKzg5NCw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRM
b2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAg
ICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nl
c3NEYXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3Vic3RpdHV0
ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICBO
b2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJs
b2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgp
KTsKICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAg
IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KSkgPSBuZXdHZXRMb2NhbDsKKyAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkgPSBuZXdHZXRMb2NhbDsKICAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMTEzMywyMyArMTEzNCw0MyBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6a2ls
bHNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgcmV0dXJuIGtpbGxz
Rm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOwogfQogCi1ib29sIEdy
YXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFu
ZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2co
IkNoZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgYm9v
bCBpc0NhbGxlck9yaWdpbiA9IGZhbHNlOworCiAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0
ciA9ICZjb2RlT3JpZ2luOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBj
b2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpKTsKKyAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAvLyBXZSBuZWVkIHRvIGhh
bmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCisg
ICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KKyAgICBm
b3IgKDsgY29kZU9yaWdpblB0cjsgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZSA/ICZp
bmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlciA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcE9mZnNldCA9IGlu
bGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5k
LnZhbHVlKCkpOworCisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC52YWx1ZSgpID49IDApOwor
ICAgICAgICAgICAgLy8gVGhpcyB0bXAgc2hvdWxkIGhhdmUgYmVsb25nZWQgdG8gc29tZW9uZSB3
ZSBpbmxpbmVkLgorICAgICAgICAgICAgaWYgKG9wZXJhbmRJbmRleCA+IHRtcE9mZnNldCArIG1h
eE51bUNoZWNrcG9pbnRUbXBzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBv
cGVyYW5kSW5kZXggPCB0bXBPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGF1dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxv
Y2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4g
Yml0TWFwLmdldChvcGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOworICAgICAgICB9CisKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBjb2Rl
T3JpZ2luUHRyLT5zdGFja09mZnNldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nKCJyZWcgPSAiLCByZWcsICJcbiIpOwogCi0gICAgICAgIGF1
dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwot
ICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0
KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgeworICAgICAgICBpZiAob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zm
c2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgewogICAgICAgICAgICAg
aWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZWcub2Zmc2V0KCkgPCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAKQEAgLTEx
NzYsNDIgKzExOTcsNDEgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNz
Rm9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZnVs
bExpdmVuZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHBy
b3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJP
cmlnaW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0
IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShy
ZWcsIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpj
b2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
QXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQg
d2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5nLgotICAg
ICAgICBpZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYm
IHJlZy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVn
LnRvQXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXpl
KCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IkFyZ3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ug
d2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVj
b2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRyID0gJmlu
bGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdpbiA9IHRy
dWU7CiAgICAgfQorCisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3Rh
Y2ssIHJldHVybmluZyB0cnVlLlxuIik7CisgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9j
YWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9yIEdyYXBo
Ojpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewog
ICAgIEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNMaXZlSW5C
eXRlY29kZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9jYWxzICsg
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9yQWxsTG9j
YWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2Nh
bCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAg
ICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQu
dG9Mb2NhbCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM0LDggKzE2NTQsOCBAQCBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5vZGU7IG5v
ZGU7KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAg
ICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQoKS5pc0Fy
Z3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5vcGVyYW5k
KCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1f
cm9vdFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkg
bm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0xNjU1LDcg
KzE2NzUsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAg
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBmYWI5Y2Yw
MmEyNTk3NmVmNDdkMTc5MDViYWQ5Y2UwM2UzODJiY2U1Li5mN2ExZDgyMTRjMzAyZDdkOTZhYzJh
NzdhMDE4NjZhOWQxMTlmNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBA
IC04NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBpZiBhIHNp
bmdsZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhh
biBjYWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5
IHF1ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0aGUKICAg
ICAvLyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVj
aCBzbG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5IGdldCBh
bGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRo
aXMgZG9lc24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFy
Z3VtZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vz
bid0IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwg
cHJlc3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgdG8KICAg
ICAvLyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gY2Fs
bGluZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lkIGZvckFs
bExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBub3QgcmVk
dW5kYW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBv
ZiBhIHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dzIHRoYXQg
YXJndW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAg
LTg4MSw2ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0
Qnl0ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVn
KTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJs
b2NrLT5udW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZl
bmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90
IHRtcCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUsIE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wKSkpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwNCw5ICs5MTIsOSBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFs
bCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0
bHkgdXNlZnVsIGlmCisgICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbG9jYWxz
IGFuZCB0bXBzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKICAgICAv
LyB5b3Ugd2FudCB0byBjb21wYXJlIHR3byBzZXRzIG9mIGxpdmUgbG9jYWxzIGZyb20gdHdvIGRp
ZmZlcmVudCBDb2RlT3JpZ2lucy4KLSAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUo
Q29kZU9yaWdpbik7CisgICAgQml0VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luKTsKIAogICAgIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBhcHByb3ByaWF0ZUxp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludChDb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0NhbGxlck9y
aWdpbikKICAgICB7CkBAIC05MzgsMTIgKzk0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZTsKICAgICB9CiAgICAgCi0gICAg
Ly8gVGVsbHMgeW91IGFsbCBvZiB0aGUgYXJndW1lbnRzIGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUg
Z2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCi0gICAgLy8gZXh0ZW5zaW9uIHRvIGZv
ckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5
cyBwcmVzdW1lZCBsaXZlLgorICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxp
dmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAorICAgIC8vIGV4dGVu
c2lvbiB0byBmb3JBbGxMb2NhbHNPclRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJn
dW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgogICAgIHZvaWQgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yQWxsTG9jYWxz
TGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CisgICAgICAgIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFzIGJlaW5nIGxpdmUuCiAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KQpAQCAtMTExNCw2ICsxMTIyLDcgQEAgcHVibGljOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzOworICAgIHVuc2lnbmVkIG1fdG1wczsKICAgICB1bnNpZ25l
ZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5z
aWduZWQgbV9wYXJhbWV0ZXJTbG90czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggOTlhZWZmY2RjMDVhMTFjNDVi
MDU3NDEyNTBmNGQyYWViNGUyMjhjZC4uMjAyZDIyNTA1M2ZhOWRmYmU1YzIzYzY0YmNmOGJlMzg0
ZTNlNzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTQ1LDggKzQ1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9hYnN0
cmFjdFZhbHVlcygqZ3JhcGgubV9hYnN0cmFjdFZhbHVlc0NhY2hlKQotICAgICwgbV92YXJpYWJs
ZXMobV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5tX2xvY2FsVmFy
cykKLSAgICAsIG1fYmxvY2soMCkKKyAgICAsIG1fdmFyaWFibGVzKE9wZXJhbmRzTGlrZSwgZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIG1fYmxvY2sobnVsbHB0cikKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5oCmluZGV4IGJmNWVhZDE4ZWMxNjQ3ZWUxNjc2Njg4MzU3NDAxZmE3ZmVjNzEyOTku
LjE4NjVlNmExZWZmYzNkYWFlZmU1ODRjYTg2MmM0OWJjMzY4NTg1MDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKQEAgLTE2
NywxMyArMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFy
aWFibGVzW2luZGV4XSk7CiAgICAgfQogCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQg
b3BlcmFuZCkKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLm9wZXJhbmRJbmRleChv
cGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIHRoaXMtPm9wZXJhbmQob3BlcmFuZC5vZmZzZXQo
KSk7IH0KLSAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5sb2NhbEluZGV4KGluZGV4
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4
IDNkODQzY2U1OGYyMGI0MTE2MzM5ZmNkYTk1ODhhZWJhNmI3YThjMmUuLjZmNTExOTk4NDNkN2Vm
NTdiMzA1NTY5ZGYzODMwNjY2YzdmNmMxODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC04NSw4ICs4NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIo
b3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRvIG9zckV4aXRUaHVua0xhYmVsID0gQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWls
dXJlSnVtcHM7CkBAIC05NywxMyArOTUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhp
dHMoKQogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS5vc3JFeGl0SW5kZXgpOwotICAgICAgICBpZiAo
T3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAgICAgICAgICAgIEp1bXAgdGFyZ2V0ID0g
anVtcCgpOwotICAgICAgICAgICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRodW5rTGFi
ZWxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKHRhcmdldCwgb3NyRXhpdFRodW5rTGFiZWwpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVK
dW1wKCk7CisgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOwog
ICAgIH0KIH0KIApAQCAtMjg4LDExICsyODAsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgYXV0byB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBP
U1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwot
ICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoaW5mby5tX3BhdGNoYWJsZUp1bXAubV9qdW1wLCB0YXJnZXQpOwotICAg
ICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAgICAg
ICAgIGV4aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwotICAgICAgICB9CisgICAg
ICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRhcmdldCk7
CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07CisgICAgICAg
IGV4aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwogICAgICAgICBpZiAoaW5mby5t
X3JlcGxhY2VtZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29t
bW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3JlcGxh
Y2VtZW50U291cmNlKSwKQEAgLTU5NSwxMSArNTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5v
dGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkg
IT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFy
aWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2Vy
dmF0aW9uUGhhc2UuY3BwCmluZGV4IDQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkzZTA4YWMyNWNh
NjMxMzQuLjQ1ZWNiNDZhYTI0NDNiYTFiOTU1NzE2YmMxZjQyYTcwOGExYTA0ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9j
YXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9j
ayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7
CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4gV2UganVzdCB1
c2UgaXQgZm9yIGFzc2VydGlvbnMuIElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywKICAgICAgICAg
Ly8gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2ggdGhhdCB3ZSBp
bnNlcnQuCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBmbHVzaElzRGVm
aW5pdGVseUludmFsaWQgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkg
ewogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpbmRleDsgaS0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0
KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+bG9jYWwoKSA9PSBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFj
ayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGFsbEdvb2QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgaGFuZGxlQmxvY2tGb3JUcnlDYXRjaChCYXNpY0Jsb2NrKiBibG9jaywgSW5zZXJ0aW9uU2V0
JiBpbnNlcnRpb25TZXQpCiAgICAgewogICAgICAgICBIYW5kbGVySW5mbyogY3VycmVudEV4Y2Vw
dGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdENhdGNo
SGVhZDsKLSAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIE9wZXJhbmRzPGJvb2w+
IGxpdmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
VG1wcygpKTsKIAogICAgICAgICBIYW5kbGVySW5mbyogY2FjaGVkSGFuZGxlclJlc3VsdDsKICAg
ICAgICAgQ29kZU9yaWdpbiBjYWNoZWRDb2RlT3JpZ2luOwpAQCAtMTMzLDExICsxMzIsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gb3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICAgICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+
aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOworICAgICAgICAgICAgICAg
ICAgICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CiAKICAgICAgICAgICAgICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGhhbmRsZXIt
PnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUlu
Qnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSks
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3Jp
Z2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5vcGVyYW5k
KG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7CkBAIC0xNTYsMTIgKzE1NSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3VsdDsKICAg
ICAgICAgfTsKIAotICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50
QmxvY2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMo
KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsKKyAg
ICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0
YShPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG51bGxwdHIpOwogCiAgICAg
ICAgIGF1dG8gZmx1c2hFdmVyeXRoaW5nID0gWyZdIChOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWdu
ZWQgaW5kZXgpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRFeGNlcHRpb25I
YW5kbGVyKTsKLSAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZl
QXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkg
eworICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5v
cGVyYW5kKG9wZXJhbmQpKSB7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRG
bHVzaExvY2F0aW9uKGJsb2NrLCBpbmRleCwgb3BlcmFuZCkpOwogCkBAIC0xNzgsNiArMTc3LDgg
QEAgcHVibGljOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gMDsgbG9jYWwg
PCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsKyspCiAgICAg
ICAgICAgICAgICAgZmx1c2godmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgdG1wID0gMDsgdG1wIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZlRtcHMoKTsgKyt0bXApCisgICAgICAgICAgICAgICAgZmx1c2goT3BlcmFuZChU
bXBPcGVyYW5kLCB0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5Miw5ICsx
OTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50TWF5
YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5s
b2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2ZUF0
Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsK
LQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFk
Lm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRG
bHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1cnJlbnRC
bG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNr
KG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3Vy
cmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw5ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NF
UlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAo
KSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAK
ICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFuZCk7CiAg
ICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNw
cAppbmRleCA3M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5mZmY5NmJm
Y2Y2MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBt
X2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFs
KCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7CisgICAgICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0g
bV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
RXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6
IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3Vy
cmVudEVwb2NoKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFw
aCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUlu
ZGV4IC0gMSksIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBp
dCBtaWdodCBjbGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5z
dCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJl
ZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQob3BlcmFu
ZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5k
IGF0ICIsIG5vZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJlNjU1ZjUyNTFmOTZmNDA0ZTMzYjQ2
Li5iODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0IFN0YWNrQWNj
ZXNzRGF0YSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9jYWwobG9j
YWwpCisgICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9y
bWF0KQorICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0
KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIE9w
ZXJhbmQgb3BlcmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZs
dXNoRm9ybWF0IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5MDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTIzLDkgKzkyNCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxk
MSgpOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIGNo
aWxkMigpOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTczLDkgKzk3
Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNz
RGF0YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
KCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPm9wZXJhbmQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVM
b2NhbCgpCkBAIC05ODMsNyArOTg2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFi
bGVBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhh
c1VubGlua2VkTG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgpAQCAtOTk2LDEwICs5OTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5kIHVubGlua2Vk
T3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKLSAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90PigpKTsKKyAg
ICAgICAgQVNTRVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJh
bmQ6OmZyb21CaXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3ICsxMzUzLDcgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7CisgICAgICAg
IHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwg
b3AoKSA9PSBWYXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEq
IGxvYWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggMjRjNzMzZDM4NzAyNzlmNGE1NmI0ZTY4OGJmMGJmMDZhYzI0YzFkNC4uZTNlOWMzMmY4
ZDA4MTNhNmFkYTIyYWFjY2QzNzQ0MmQ0ZWJkOWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAvKiBUaGVzZSBh
cmUgdXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8o
UHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0y
MDIsNiArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEdldEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggMzI4MGY4N2E2
MjY3ZGYwMzRjODRlMzMxODUzMGM3NDE5ZTU1ZTk3ZS4uZDEwYTIwNzA0YjAxOWQ3ZTg3N2FjYjI5
NjMyNmJhODk3MDBjMTNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSwxMSAr
MzUsOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRl
cm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFz
cyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JB
bGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5m
b3JFeGl0LAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQs
ICIgIik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwog
ICAgICAgICB9OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+
aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTIwLDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxp
dmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgw
KS0+b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFm
dGVyIHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwOCwyOCAr
MjA2LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9k
ZShOb2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9j
YWwpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6
IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
LnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZs
dXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5vcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewot
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBAIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJn
czoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFpbGFiaWxpdHko
Rmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZhaWxhYmlsaXR5
KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBpKSkgPQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkg
KyBpKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5zdGFydCArIGkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93
IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRp
b24oQXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewog
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsK
ICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRp
b24oQXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkg
ewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRQTG9jLCBub2RlLCBp
KSwgYXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTViMGM3Yzk0Yjg0M2U4OTBkYzcu
LjBkODI5MzUwZDRjNmUwYTEyMDg2ODM2YzBiMGIxNzgwZjJiYmUyZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0zODIsMTAgKzM4MiwxMCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NS
RW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAg
ICAgQVNTRVJUKGluc3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRh
ZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5t
ZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0YUJ1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRy
eUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCku
aXNMb2NhbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkYXRhQnVmZmVyW2luZGV4
XSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCBkYzc2YmNiYWVkNDFlZWUwNjNkZmRiZWE4NDUwNjY1
NTNkMGNiNGQ2Li42MDk2ODY2M2I2NGMyYjY4NTRlNDYxNjFmOTQ5OTQ2NTdlMWFlZmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBsb2NhbHNbbG9jYWxdID0gbmV3Um9vdC0+YXBw
ZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigp
LCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3Bl
Y05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBP
cEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSksCiAgICAgICAgICAg
ICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggMThjNjQxNDc5MzQyNDY5YjQxY2E4Zjk4ZjMw
OGIzYTRjOTMzYmE5OC4uMDVkZTk1OGNhZWVmMWI4ZjA5ZTMyZDA5N2E4ZmUzMmQ2Nzc0MjAxYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVz
ZURlZi5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVk
ZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJE
RkdNYXlFeGl0LmgiCkBAIC00Nyw4OTUgKzQ4LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBQcm9iZSBiYXNlZCBPU1IgRXhpdC4KLQotdXNpbmcgQ1BVU3RhdGUg
PSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2lu
ZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0
IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6
OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ss
IE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiwgdWludDMyX3Qg
b3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVG
b3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJj
ZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgc3RkOjpt
ZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4oc291cmNlLmJhc2UoKSkgKyBzb3VyY2Uu
b2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShjcHUuZ3By
PEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsKLSNlbHNlCi0gICAgaWYgKHNvdXJjZS5o
YXNLbm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShzb3VyY2UudGFnKCksIGNwdS5n
cHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlKGNw
dS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2Uu
cGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJs
b2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0
b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCks
IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBj
YWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVUNQVVJlZ2lzdGVyKiBwaHlzaWNhbFN0YWNrRnJh
bWUgPSBjb250ZXh0LmZwPFVDUFVSZWdpc3Rlcio+KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3Rl
cnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBU
aGUgY2FsbGVlIHNhdmVkIHZhbHVlcyBjb21lIGZyb20gdGhlIG9yaWdpbmFsIHN0YWNrLCBub3Qg
dGhlIHJlY292ZXJlZCBzdGFjay4KLSAgICAgICAgLy8gSGVuY2UsIHdlIHJlYWQgdGhlIHZhbHVl
cyBkaXJlY3RseSBmcm9tIHRoZSBwaHlzaWNhbCBzdGFjayBtZW1vcnkgaW5zdGVhZCBvZgotICAg
ICAgICAvLyBnb2luZyB0aHJvdWdoIGNvbnRleHQuc3RhY2soKS4KLSAgICAgICAgQVNTRVJUKCEo
ZW50cnkub2Zmc2V0KCkgJSBzaXplb2YoVUNQVVJlZ2lzdGVyKSkpOwotICAgICAgICBjb250ZXh0
LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBwaHlzaWNhbFN0YWNrRnJhbWVbZW50cnkub2Zmc2V0
KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKV07Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsK
LSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lz
dGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVT
YXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291
bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMt
PmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFjay5zZXQoY29udGV4dC5mcCgpLCBl
bnRyeS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIo
KSkpOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lk
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250
ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1D
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCBy
ZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFZNRW50cnlSZWNv
cmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICBV
Q1BVUmVnaXN0ZXIqIGNhbGxlZVNhdmVCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFVDUFVSZWdp
c3Rlcio+KGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyKTsKLQotICAgIC8v
IFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBh
bGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHNpemVfdCB1
aW50cHRyT2Zmc2V0ID0gZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKTsKLSAg
ICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBjb250ZXh0Lmdwcihl
bnRyeS5yZWcoKS5ncHIoKSkgPSBjYWxsZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdOwotICAg
ICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgY29udGV4dC5mcHIo
ZW50cnkucmVnKCkuZnByKCkpID0gYml0d2lzZV9jYXN0PGRvdWJsZT4oY2FsbGVlU2F2ZUJ1ZmZl
clt1aW50cHRyT2Zmc2V0XSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50
IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBC
YXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAq
Y29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwot
Ci0gICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVu
dHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVCdWZmZXIgPSBlbnRyeVJlY29yZC0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxD
YWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
LSAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+
c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkr
KykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0
KGkpOwotICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAg
ICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29u
dGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkpOwotICAgICAgICBlbHNl
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVC
dWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJl
ZygpLmZwcigpKSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtp
dC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJlZ2lz
dGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNlZCBv
biBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRp
YyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyIG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9v
bCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygp
KTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdl
dChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB1aW50cHRy
X3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlmICh3YXNDYWxsZWRWaWFUYWlsQ2Fs
bCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBz
YXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0cl90PihlbnRyeS5vZmZzZXQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGNvbnRleHQu
Z3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBmcmFtZS5zZXQob2Zmc2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9mZnNldCgpLCBzYXZlZFJlZ2lzdGVy
VmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQm
LCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9
Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9j
ayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlRGlyZWN0QXJn
dW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50
MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7
Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3Vt
ZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc3RkOjptYXgobGVuZ3RoLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgLSAxKSk7Ci0g
ICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKLSAg
ICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVj
dHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBj
YWxsZWUpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkg
KyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwot
ICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+c2V0SW5kZXhRdWlja2x5
KHZtLCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1z
dGF0aWMgSlNDZWxsKiBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAg
Vk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVm
ZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwot
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgQ2xv
bmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAotICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVl
LCBsZW5ndGgpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+
KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDAp
OwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERGRzo6SklUQ29kZSogZGZnSklUQ29kZSwgY29uc3Qg
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQotewotICAgIEZyYW1lIGZyYW1lKGNv
bnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwg
aW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRz
IG5vZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAotICAgICAgICAgICAg
JiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJl
Y292ZXJ5Lm5vZGVJRCgpOwotICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmZpbmQoaWQpOwotICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZy
YW1lLm9wZXJhbmQoaXRlci0+dmFsdWUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPQotICAgICAg
ICAgICAgZGZnSklUQ29kZS0+bWluaWZpZWRERkcuYXQoaWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LQotICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgICAgICBzdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gMDsKLQotICAgICAgICBK
U0Z1bmN0aW9uKiBjYWxsZWU7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZnJhbWUub3BlcmFuZChzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQo
KS5hc0NlbGwoKSk7Ci0KLSAgICAgICAgaW50MzJfdCBhcmd1bWVudENvdW50OwotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAg
ICAgICAgICAgYXJndW1lbnRDb3VudCA9IGZyYW1lLm9wZXJhbmQ8aW50MzJfdD4oc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0KLSAgICAgICAgSlNDZWxsKiBhcmd1bWVudHNPYmpl
Y3Q7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
OgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVy
aW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1
bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShhcmd1
bWVudHNPYmplY3QpKTsKLQotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChp
ZCwgb3BlcmFuZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBl
eHRyYSBpbml0aWFsaXphdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUgaW4gb3JkZXIKLS8vIG9m
IG1vc3QgbGlrZWx5IG5lZWRlZCAobG93ZXIgZW51bSB2YWx1ZSkgdG8gbGVhc3QgbGlrZWx5IG5l
ZWRlZCAoaGlnaGVyIGVudW0gdmFsdWUpLgotLy8gRWFjaCBsZXZlbCBpbml0aWFsaXphdGlvbiBp
bmNsdWRlcyB0aGUgcHJldmlvdXMgbG93ZXIgZW51bSB2YWx1ZSAoc2VlIHVzZSBvZiB0aGUKLS8v
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2YWx1ZSBiZWxvdykuCi1lbnVtIGNsYXNzIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCB7Ci0gICAgTm9uZSwKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5
LAotICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwKLSAgICBBcnJheVByb2ZpbGVVcGRhdGUsCi0gICAg
T3RoZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIEFTU0VSVCgmY2FsbEZyYW1lLT5kZXByZWNh
dGVkVk0oKSA9PSAmdm0pOwotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotCi0gICAgaWYg
KHZhbGlkYXRlREZHRG9lc0dDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0
aW1pemVkIGNvZGUuIFNvLCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0aW1pemVkCi0gICAgICAg
IC8vIGNvZGUgcnVubmluZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAgICAgIHZtLmhlYXAuc2V0
RXhwZWN0RG9lc0dDKHRydWUpOwotICAgIH0KLQotICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRj
aCkgewotICAgICAgICBjYWxsRnJhbWUgPSB2bS5jYWxsRnJhbWVGb3JDYXRjaDsKLSAgICAgICAg
Y29udGV4dC5mcCgpID0gY2FsbEZyYW1lOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLQotICAg
IC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVy
ZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJs
ZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Ci0KLSAgICB1aW50MzJf
dCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7Ci0gICAgREZHOjpKSVRDb2RlKiBkZmdKSVRD
b2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIE9TUkV4aXQmIGV4aXQgPSBk
ZmdKSVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0KLSAgICBBU1NFUlQoIXZtLmNhbGxGcmFt
ZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpOwotICAgIEVYQ0VQVElP
Tl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKTsKLQotICAgIGlmIChVTkxJS0VMWSghZXhpdC5leGl0U3RhdGUpKSB7
Ci0gICAgICAgIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmU7Ci0KLSAgICAgICAgLy8gV2Ugb25s
eSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9jayBvbmNlIGZvciBlYWNoIE9TUkV4aXQgcmVjb3Jk
LiBUaGUgY29tcHV0ZWQKLSAgICAgICAgLy8gcmVzdWx0cyB3aWxsIGJlIGNhY2hlZCBpbiB0aGUg
T1NSRXhpdFN0YXRlIHJlY29yZCBmb3IgdXNlIG9mIHRoZSByZXN0IG9mIHRoZQotICAgICAgICAv
LyBleGl0IHJhbXAgY29kZS4KLQotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBudWxscHRyOwotICAgICAgICBp
ZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIHJlY292
ZXJ5ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5k
ZXhdOwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0
aW9uUmVjb3ZlcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9r
aW5kID09IEdlbmVyaWNVbndpbmQpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAg
ICAgICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIGlm
IChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5
cGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQotICAg
ICAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9m
aWxlVXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludDMyX3Qg
YWN0aXZlVGhyZXNob2xkID0gYmFzZWxpbmVDb2RlQmxvY2stPmFkanVzdGVkQ291bnRlclZhbHVl
KE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpOwotICAgICAg
ICBkb3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0Fu
ZENvbnZlcnRUb0ludChhY3RpdmVUaHJlc2hvbGQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGFkanVzdGVkVGhyZXNob2xkID4gMCk7Ci0gICAgICAgIGFkanVzdGVkVGhyZXNo
b2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKLQotICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAg
ICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwg
Y29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7
Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgICAgIGlmIChleGl0VG9MTEludCkgewot
ICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2Rl
TWFwKCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2Rl
TG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwotICAgICAgICAgICAganVtcFRh
cmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICAgICAgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5k
U3Bhbj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICBkZmdKSVRDb2RlLT52YXJpYWJs
ZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGRm
Z0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzLCAmdW5k
ZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90IHN0YWNrUG9pbnRlck9mZnNl
dCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21t
b24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpOwot
Ci0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0
LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywgV1RGTW92ZSh1bmRlZmlu
ZWRPcGVyYW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJl
c2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJheVByb2ZpbGUsIGV4aXRU
b0xMSW50KSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewot
ICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS5tX3BlckJ5dGVj
b2RlUHJvZmlsZXI7Ci0gICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0
aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQo
KTsKLQotICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBp
bGF0aW9uLT5hZGRPU1JFeGl0KAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgUHJvZmlsZXI6
Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luKSwKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZh
bGlkYXRpb24pOwotICAgICAgICAgICAgZXhpdC5leGl0U3RhdGUtPnByb2ZpbGVyRXhpdCA9IHBy
b2ZpbGVyRXhpdDsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpP
dGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0
ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVs
OjpPdGhlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUtPmV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDsKLQotICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCkpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nRigiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NT
dHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBleGl0S2lu
ZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVy
YW5kcykpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPU1JFeGl0U3RhdGUmIGV4
aXRTdGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gZXhpdFN0YXRlLmJhc2VsaW5lQ29kZUJsb2NrOwotICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0U3RhdGUub3BlcmFuZHM7
Ci0gICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZpbmVkT3BlcmFuZFNwYW5z
ID0gZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLQotICAgIGNvbnRleHQuc3AoKSA9
IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zmc2V0Owot
Ci0gICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRvIHdoaWxlIGxvb3AgaXMg
c28gd2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0ZS4KLSAgICBkbyB7Ci0g
ICAgICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RhdGljX2Nhc3Q8RXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsPihleGl0U3RhdGUuZXh0cmFJbml0aWFsaXphdGlvbkxldmVsKTsK
LQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09IEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6Tm9uZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2lu
IGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFNwZWN1bGF0aW9uUmVjb3ZlcnkKLQotICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0aW9uIHJlY292ZXJ5IGZpcnN0IGJlY2F1c2UgYXJy
YXkgcHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9maWxpbmcKLSAgICAgICAgLy8gbWF5IHJlbHkgb24g
YSB2YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBIb3dldmVyLCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGF0
IGl0IGlzIGxpa2VseQotICAgICAgICAvLyB0byBoYXZlIGEgcmVjb3ZlcnkgdmFsdWUuIFNvLCB3
ZSdsbCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VMWS4KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVy
eSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVjb3Zlcnk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShy
ZWNvdmVyeSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAg
ICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJl
Y292ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSBj
cHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+c3JjKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zl
cnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAgICAgICAgY3B1Lmdwcihy
ZWNvdmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAt
IHJlY292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAg
ICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBCb29s
ZWFuU3BlY3VsYXRpb25DaGVjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIF4g
SlNWYWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5KQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogVmFs
dWVQcm9maWxlVXBkYXRlCi0gICAgICAgIEpTVmFsdWUgcHJvZmlsZWRWYWx1ZTsKLSAgICAgICAg
aWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIHByb2ZpbGVkVmFsdWUg
PSBqc1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgaWYg
KE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2Zp
bGUpCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5yZXBvcnRWYWx1ZShwcm9maWxlZFZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogQXJyYXlQ
cm9maWxlVXBkYXRlCi0gICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGV4
aXRTdGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghIWV4aXQubV9qc1Zh
bHVlU291cmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8
fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJv
ZmlsZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgICAgIGJvb2wgZG9Qcm9m
aWxlID0gIWluc3RydWN0aW9uLT5pczxPcEdldEJ5SWQ+KCkgfHwgaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKS5tZXRhZGF0YShwcm9maWxlZENvZGVCbG9jaykubV9tb2RlTWV0YWRhdGEubW9k
ZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBpZiAoZG9Qcm9maWxl
KSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm9maWxlZFZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
b2JzZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmls
ZS0+b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gRXh0cmEgaW5pdGlsaXphdGlv
biBsZXZlbDogT3RoZXIKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9raW5kID09IEdlbmVy
aWNVbndpbmQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBv
cF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAg
ICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sg
cG9pbnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZw
KCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4
aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgICAgICBleGl0U3RhdGUucHJvZmlsZXJFeGl0
LT5pbmNDb3VudCgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpKQotICAgICAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRleHQsIHZtLm9zckV4aXRJ
bmRleCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxlIChmYWxzZSk7IC8vIEVuZCBleHRyYSBpbml0aWFs
aXphdGlvbi4KLQotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwot
ICAgIEFTU0VSVCghKGNvbnRleHQuZnA8dWludHB0cl90PigpICYgMHg3KSk7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIEFTU0VSVChjcHUuZ3ByPGlu
dDY0X3Q+KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok5vdENlbGxN
YXNrKTsKLSNlbmRpZgotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFu
ZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAvLyBOb3RlOiB3ZSBuZWVk
IHRvIHJlY292ZXIgdmFsdWVzIGJlZm9yZSByZXN0b3JpbmcgY2FsbGVlIHNhdmUgcmVnaXN0ZXJz
IGJlbG93Ci0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3ZlcnkgbWF5IHJlbHkgb24gdmFsdWVzIGlu
IHNvbWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotCi0gICAgaW50IGNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2st
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVy
T2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUoKTsKLSAgICBzaXplX3QgbnVtVW5kZWZpbmVkT3Bl
cmFuZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zLnNpemUoKTsKLQotICAgIHNpemVfdCBu
ZXh0VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsKLSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZE9wZXJh
bmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgaWYgKG51bVVuZGVmaW5lZE9wZXJhbmRT
cGFucykKLSAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJh
bmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotCi0gICAgSlNWYWx1
ZSB1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwotICAgIGZvciAoc2l6ZV90IHNwYW5JbmRleCA9
IDA7IHNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFuczsgKytzcGFuSW5kZXgpIHsK
LSAgICAgICAgYXV0byYgc3BhbiA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tzcGFuSW5kZXhdOwot
ICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSBzcGFuLm1pbk9mZnNldDsKLSAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSBmaXJzdE9mZnNldCArIHNwYW4ubnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLSAgICAg
ICAgZm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RPZmZzZXQ7IG9mZnNldCA8IGxhc3RPZmZzZXQ7ICsr
b2Zmc2V0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvZmZzZXQsIHVuZGVmaW5lZCk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mT3Bl
cmFuZHM7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5k
cy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KGluZGV4ID09IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRl
eCArPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleCsrXS5udW1i
ZXJPZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFVuZGVmaW5lZFNwYW5JbmRl
eCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZp
bmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFu
SW5kZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV4
dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50
b0xvY2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKLQotICAg
ICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmZwcjxKU1ZhbHVlPihyZWNvdmVyeS5mcHIo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBj
YXNlIEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZ3By
PEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0g
ICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkudGFnR1BSKCkpLCBjcHUuZ3ByPGlu
dDMyX3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8SlNDZWxsKj4ocmVjb3ZlcnkuZ3By
KCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hl
ZENlbGwoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjcHUuZ3ByPGJvb2w+KHJlY292ZXJ5LmdwcigpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIEJvb2xlYW5EaXNw
bGFjZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNlbHNlCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkucGF5bG9hZCgpKSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlVW5ib3hlZEludDMyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5Lmdw
cigpKSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQ1MigpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1MkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVj
b3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0cmlj
dEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBw
dXJpZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5mcHIoKSkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cHVyaWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVu
c2FmZVVuYm94ZWREb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIHJlY292
ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXJl
Y3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1l
bnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgeWV0
LgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5kIHRoZW4g
c2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAgcmVzdG9yZUNhbGxlZVNh
dmVzRm9yKGNvbnRleHQsIGNvZGVCbG9jayk7Ci0gICAgc2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnRl
eHQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY3B1Lmdw
cihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdp
c3Rlcj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBjcHUuZ3ByKEdQUkluZm86Om5vdENlbGxN
YXNrUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok5v
dENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Y29udGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNv
dmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50
cwotICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhl
ci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVm
ZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0
aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3
ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBt
YXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29w
ZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLQotICAgIERGRzo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoY29udGV4dCwgY29kZUJsb2NrLCBkZmdKSVRDb2RlLCBvcGVyYW5k
cyk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNl
IHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBp
bnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAg
IC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBl
eGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhl
IG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1Ig
ZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAg
Ly8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5j
ZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNl
IG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQg
dG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAg
ICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQg
aXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBu
ZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBl
cmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAg
Ly8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBp
bW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMg
b2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFy
bHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywg
ZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVu
bmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdn
ZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhl
IGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFu
ZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVu
aXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVz
c2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhl
IGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAg
IC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdn
ZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBo
b3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBv
ZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQp
LAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUg
ZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBv
ZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRo
YW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFu
ZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFp
bHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ug
d2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpLgotCi0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+dXBkYXRlT1NSRXhpdENv
dW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShleGl0U3RhdGUpID09IENvZGVCbG9jazo6
T3B0aW1pemVBY3Rpb246OlJlb3B0aW1pemVOb3cpKQotICAgICAgICB0cmlnZ2VyUmVvcHRpbWl6
YXRpb25Ob3coYmFzZWxpbmVDb2RlQmxvY2ssIGNvZGVCbG9jaywgJmV4aXQpOwotCi0gICAgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci0g
ICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNvbnRleHQsIHZtLCBjb2RlQmxvY2ssIGJhc2VsaW5l
Q29kZUJsb2NrLCBleGl0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2Nr
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKLXsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNw
dTsKLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0YWNrIHdoZW4gcGVyZm9y
bWluZyBhbiBPU1IgZXhpdAotICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxs
cy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTEx
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICBmcmFtZS5zZXRPcGVyYW5kPENvZGVCbG9jayo+KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotCi0g
ICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKLSAgICBmb3IgKGNvZGVPcmlnaW4gPSAm
ZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2Fs
bGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jaygqY29kZU9yaWdpbiwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kOwotICAg
ICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJT
a2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKLSAgICAgICAgdm9pZCogY2Fs
bGVyRnJhbWUgPSBjcHUuZnAoKTsKLQotICAgICAgICBib29sIGNhbGxlcklzTExJbnQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAgICAgICAgICAgIHZvaWQqIHJldHVyblBDID0gZnJh
bWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpOwotI2lmIENQVShBUk02
NEUpCi0gICAgICAgICAgICB2b2lkKiBvbGRFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9
IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAr
IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICByZXR1cm5QQyA9IHJldGFnQ29kZVB0cihyZXR1
cm5QQywgYml0d2lzZV9jYXN0PFB0clRhZz4ob2xkRW50cnlTUCksIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIHJldHVyblBDKTsKLSAgICAgICAgICAg
IGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5i
eXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0
dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVl
Q2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNh
bGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tP
ZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAg
ICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxs
RnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVt
cFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3
RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAg
ICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3Rl
cnMuCi0gICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0
IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJl
YWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2
ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQot
ICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsK
LSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5l
Q2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFU
YWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJs
ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZv
aWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBM
TEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUp
OwotICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVP
ZmZzZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdP
ZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1ZhbHVlKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28g
dGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQs
IFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50
MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwot
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25z
dGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBh
cnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8v
IERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRp
ZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0
d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCi17
Ci0gICAgT1NSRXhpdFN0YXRlKiBleGl0U3RhdGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLQot
ICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsgLy8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhw
ZWN0cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNoYW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2Uu
Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgLy8g
V2UgYmFycmllciBhbGwgaW5saW5lZCBmcmFtZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50
IGlubGluZSBzdGFjayAtLQotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxp
bmVkIGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVlIHByb2ZpbGUgdGhhdAotICAgIC8vIHdlJ2xsIHVw
ZGF0ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBjYXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlm
IGJvdGgKLSAgICAvLyBhIGFuZCBiIGFyZSBpbmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBi
IGR1ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQKLSAgICAvLyBmcm9tIGEuCi0gICAgLy8gRklYTUU6
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVC
bG9jayBvd25zCi0gICAgLy8gdGhlIHZhbHVlIHByb2ZpbGUuCi0gICAgSW5saW5lQ2FsbEZyYW1l
U2V0KiBpbmxpbmVDYWxsRnJhbWVzID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0g
ICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2Fs
bEZyYW1lcykKLSAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgIH0KLQotICAgIGF1dG8qIGV4aXRJbmxp
bmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBp
ZiAoZXhpdElubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5m
cDx1aW50OF90Kj4oKSArIGV4aXRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLQotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1
bXBUYXJnZXQ7Ci0gICAgQVNTRVJUKGp1bXBUYXJnZXQpOwotCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9j
YXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0gICAgICAgIHZtLmNhbGxG
cmFtZUZvckNhdGNoID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIH0KLQotICAgIHZt
LnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLQotICAgIGlmIChleGl0
U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JF
eGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0
Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9y
RXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0KLSAgICAgICAg
Y29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpLm9mZnNldCgpKTsKLSNlbHNlCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgICAgICB2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudElu
c3RydWN0aW9uOwotICAgIH0KLQotICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENv
bnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhp
dCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4o
KTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAg
ICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLQotICAgIGRhdGFM
b2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygi
IEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhp
dEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKLSAgICBpZiAoYWx0ZXJuYXRpdmUpIHsK
LSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLAotICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKSwKLSAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGRhdGFMb2coIm5vIGFsdGVybmF0aXZlIGNvZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0
aXNvbmVkKSIpOwotICAgIGRhdGFMb2coIiwgb3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2st
Pm9zckV4aXRDb3VudGVyKCksICJcbiIpOwotICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUg
b2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdp
c3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIs
IFJhd1BvaW50ZXIoY29udGV4dC5ncHI8dm9pZCo+KGdwcikpKTsKLSAgICB9Ci0gICAgZGF0YUxv
ZygiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
IHsKLSAgICAgICAgRlBSUmVnIGZwciA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAg
IGRhdGFMb2coIiAiLCBjb250ZXh0LmZwck5hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0
X3QgYml0cyA9IGNvbnRleHQuZnByPHVpbnQ2NF90PihmcHIpOwotICAgICAgICBkb3VibGUgdmFs
dWUgPSBjb250ZXh0LmZwcihmcHIpOwotICAgICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxu
Iik7Ci19Ci0KLS8vIEpJVCBiYXNlZCBPU1IgRXhpdC4KLQogT1NSRXhpdDo6T1NSRXhpdChFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBz
dHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtp
bmQsIGppdC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5t
X29yaWdpbi53YXNIb2lzdGVkKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2Up
CkBAIC05NTgsMTUgKzcwLDE4IEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4g
T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6
ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJ
RCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1l
bnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxS
ZWdpc3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAg
ICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5k
LmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBNaW5pZmllZElEIGlk
ID0gcmVjb3Zlcnkubm9kZUlEKCk7CiAgICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZW5kKCkpIHsKQEAgLTk4Nyw3ICsxMDIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJh
bmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSks
CiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaml0Lm1vdmUoCkBAIC05OTcsNyArMTEyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0
UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5k
czxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEzOCw3IEBAIHZvaWQgT1NS
RXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29u
c3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAg
YWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOworICAgICAgICBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsODQgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxl
RXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25z
dAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7
CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNo
ZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBh
IHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBv
dGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5k
cy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRz
LnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGF1dG8qIHRtcFNj
cmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CisgICAgICAgIGppdC5wcm9i
ZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1l
LCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUg
PSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNl
dF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUg
RlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRj
aCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5j
b25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRtcFNjcmF0
Y2hbaSArIHRtcE9mZnNldF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRt
cE9mZnNldF0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBz
W2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhp
dC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2Fs
bEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lk
ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVv
ZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBi
eXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRh
dGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFj
ay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0
dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkg
JiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBv
cGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYg
b3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45
ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEyMzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUwLDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0
IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAgIGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZyYW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBl
eGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjky
YTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYg
KzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
R2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5n
VG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAppbmRleCAyZmYzZWE4YjVmYmI2ZjNmMjcyMWQ1MDI0NDU2Mjk4YjA4NGQ1MTE1Li4wZmI0ODIw
M2JmZGI1ZDU0Yzk2M2QyNGY5ZGJmNzY5ZGU1YTI1ZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwx
MiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1
ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTE0Myw2ICsxNDYsOSBAQCB2b2lkKiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRl
Y29kZUluZGV4IGNhbGxCeQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9T
UkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oJmNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCk7CisKICAgICB2b2lk
KiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTM4MiwxMSArMzg4
LDEyIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKIAogICAgIHZvaWQqIGp1bXBU
YXJnZXQ7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY2hlY2twb2ludFJl
dHVyblRhcmdldDsKICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0
VG9MTEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rOwogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVj
b2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNv
bnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IGJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpID8gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9j
YXN0PHZvaWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSkgOiBMTEludDo6Z2V0
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJl
Z1QyKTsKQEAgLTQwMiw3ICs0MDksMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0m
IHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYK
ICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5q
aXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAg
ICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4g
PSBjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4p
OworICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgY2hl
Y2twb2ludFJldHVyblRhcmdldCA9IGNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2Nh
dGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lk
Kj4oJmNoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCkpOworICAgICAgICB9CisKICAgICAg
ICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNi
NGIwM2RjMTk5Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9k
ZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43
N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAg
ICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVl
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBs
aWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBi
OTQ4OGExMDMyODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3
NzY5MmRiMTA3Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKQEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoK
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IG1hbmRhdG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dCB7IGZpcnN0RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1l
bnRzKTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
JmNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAt
IDEpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1h
bmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCAr
IGkpID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Rk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhi
ZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi5iYjQyMDYxZDUxNjZmZTIxMGQ5Y2Vk
YzZjN2VjNzE4ZjQ0YmJiYjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC0xMDgsMTcgKzEwOCwxNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG51bGxw
dHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnRNYXliZToKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzOSwyMSArMTM5LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJl
bnRFcG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOwor
ICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHBy
b2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAg
ICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
ICAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZDog
IiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBv
cGVyYW5kOiAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkg
aGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFk
eUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBh
IFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAogICAg
ICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4K
QEAgLTE3OSwxNCArMTc5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5
RXhpdCkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0
LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAv
LyB0byBiZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFs
cmVhZHlLaWxsZWQgPSBsb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVy
YW5kOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KGxvY2FsKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVy
YW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYz
ZDE0Mjk4ODZlMDc4ZjBhZmNjLi5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVh
MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VM
b2NhbENsb2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxs
SWZBcHByb3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVy
YW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8g
YWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4K
ICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHBy
b3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRp
dGlvbmFsV3JpdGUsIGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAg
ICAgICAgCi0gICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5
bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCku
b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJv
cHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3Bl
cmFuZC50b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4
IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5
YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11
c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZj
YmZlY2M4NGZlMTk1ODQyOGEwY2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUx
ZDE5YmU2ZDMxOTdjMTNmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEz
NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZl
Y2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBl
N2VkZjYzZjA3Zjc4ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoK
ICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0
YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGlj
OgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5m
aWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9v
bD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAg
ICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBib29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlz
IGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5h
cHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgp
ID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5v
ZGUtPm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQ
dXRTdGFjayB8fCBvcCA9PSBWYXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9w
ID09IEZvcndhcmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9Owog
CiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUp
IHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7
IH0pOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
OiB3cml0ZXMpCisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3Jp
dGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiBy
ZWFkcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBk
ZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVk
IGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2
MSw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENv
bmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVz
aDsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9k
ZS0+b3AoKSA9PSBQdXRTdGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJTZXR0aW5nIGZsdXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJh
bmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09
IEtpbGxTdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBzaW5rIGEgUHV0U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5n
Rmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0g
RGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAg
IGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5k
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3
YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBu
b2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQg
b3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVy
aXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxl
ciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVy
YW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkK
QEAgLTMxMywxMyArMzEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsg
aS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQ29uc2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRl
eChpKSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNj
ZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAi
LCBkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQg
IiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0s
IGRlZmVycmVkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxS
ZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRv
T3BlcmFuZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgo
aSkpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5l
d1ZhcmlhYmxlKCk7CiAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJh
bmQpID0gdmFyaWFibGU7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgp
ID09IHZhcmlhYmxlLT5pbmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFj
a3NUb1NpbmsuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5l
d0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQo
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJh
bmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0
U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAg
IFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9j
aykgLT4gTm9kZSogewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
aW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQo
b3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcg
KzM5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5n
IFBoaSBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBo
LmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFs
aWRFeGl0KCkpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBp
bmcuZmlsbChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxl
ID0gb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQo
YmxvY2ssIHZhcmlhYmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiOiAiLCBtYXBwaW5nLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJs
b2NrKSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4
KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFw
cGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAg
ICAgICAgICAgfQpAQCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVm
ZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCAiIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQob3BlcmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRh
dGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVm
ZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c0NvbmNyZXRlKGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGlj
dGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGlj
dGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVy
ZSBpcyBubyBkZWZlcnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBz
bG90IGlzIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBrZWVwIHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1h
cHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtNDcyLDIwICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBoYXZlIHN0b3JlZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwg
Zm9ybWF0LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRh
LT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWlu
Zy0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRl
bnRpdHkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVz
aDsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcg
KzQ5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRT
dGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3Rh
Y2sgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAt
NTEzLDcgKzUxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFy
ZSB1bmNvbmRpdGlvbmFsIHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRl
IHRvLiBUaGlzIG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3Mu
IFRoaXMgbWVhbnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFB1dFN0YWNrcyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXpl
KAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwg
d3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5k
LCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfSB9CiAgICAgICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxh
dG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5k
W3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDcmVhdGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29y
QmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcg
KzU4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1
dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAKaW5kZXggNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4u
MDRmMmMwY2QzOTk4YjE4MWI5ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4
LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2Fs
KCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCks
IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJz
LmFkZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5h
ZGQobm9kZSwgY2hpbGROb2RlKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJ
bmRleFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgLy8gUHJ1bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhl
ciB0aGFuIGNvbXBpbGUgdGltZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAg
ICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVu
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBu
b2RlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIs
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxl
Rm9yU1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9p
bnQsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAg
ICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVm
LT52YWx1ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBT
cGVjTm9uZSwgTW92SGludCwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCks
Ci0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSks
IHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgp
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2lu
LmV4aXRPSykKQEAgLTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBNb3ZIaW50OiB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51
bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uZXhpdE9LID0gZmFsc2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwx
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1B1dFN0YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1h
cHBpbmc6ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2
YXJpYWJsZS0+b3BlcmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGls
ZDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJSZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5v
ZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAg
LTM4NSw3ICszODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVs
dEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQy
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAg
ICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3Io
Zm9ybWF0KTsKIAotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5z
ZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIs
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlO
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGlu
ZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4
Y2EzMTY5MTkuLjlhMzJkNjdhNTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiAr
MzIyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENh
bGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNDhjMjhjMWI3NGE2Yjg1OGY3Mzg1
NDMyYzRhZDc2M2Y4ZDE2MzgzYS4uNjU5MjY3YTkzM2ZkOGExMmEyMWQwMzQ3NTA4ZDEyMzcyMGE2
MzgwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0Q2Fs
bGVlKENvZGVPcmlnaW4gb3JpZ2luLCBHUFJSZWcgY2FsbGVlR1BSKQogICAgICAgICAgICAgICAg
IGNhbGxlZUdQUik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBjYWxsZWVH
UFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgY2FsbGVlR1BSKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcnQoQ29kZU9yaWdpbiBvcmlnaW4s
IEdQUlJlZyBzdGFydEdQUikKQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1f
c3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNo
aWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExv
ZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29u
IHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDdXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwog
ICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9
IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAg
ICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAg
LTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJs
b2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0
ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3Ry
ZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAg
ICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOwor
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1l
bnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAg
ICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVy
YW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1f
b3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkxOSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVz
aGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1
ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQo
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2Rl
KiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSog
bm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBh
cmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
IEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsK
KyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9m
ZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRz
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50
cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBH
UFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAg
dW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBp
cyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5
IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBW
TSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFu
Y2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hl
cmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBw
YXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNj
cmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGlu
dDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZh
cmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1
bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQg
YXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1
ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCks
IEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFs
dWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpT
VmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwK
KyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1
c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudElu
Y2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3Vu
dCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5l
Q291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3Vt
ZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1h
bmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCks
IGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
ICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgsMTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOworICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0
ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BS
UmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAg
ICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVn
cyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlu
bGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAg
IAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7
CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtNzY1NCw3ICs3NjU1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2Rl
KiBub2RlKQogICAgICAgICAgICAgICAgIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZQotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSksIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSksIHNjcmF0Y2gxR1BSKTsKIAogICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmll
cnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQogICAg
IC8vIGFjdGl2YXRpb24gbXVzdCBiZSB5b3VuZy4KQEAgLTEyNDMwLDE0ICsxMjQzMSwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2V0dGVyKE5vZGUqIG5vZGUpCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2FsbGVlKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2FsbGVlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICBtX2ppdC5zdG9yZUNlbGwoY2FsbGVlLmdwcigpLCBKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICBtX2ppdC5zdG9yZUNl
bGwoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkBAIC0x
MjQ1NSw3ICsxMjQ1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKIHsKLSAgICBt
X2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5vZGUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4
IGM2NGY5NzhhZGY4NWZiZjI3N2JiYTc5MjE2MDY0ZjQyODFiOGQ1YTkuLjAzZDQ4MzViZjRiN2E4
ZGUwOTM5ZWZjZmEzNzAyMmI0NjI2OTA5NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEzOTMsNiArMTM5Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5l
d1JlZ2V4cChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxv
YWRWYXJhcmdzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSopOwpAQCAtMTY2
OSwxNSArMTY3MCwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2Uo
R1BSUmVnLCBHUFJSZWcpOwogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcs
IERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlUmVnLCBWaXJ0dWFs
UmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgeworICAgICAgICBB
U1NFUlQoIWJ5dGVjb2RlUmVnLmlzQXJndW1lbnQoKSB8fCBieXRlY29kZVJlZy52aXJ0dWFsUmVn
aXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRM
b2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYnl0ZWNvZGVSZWcsIG1hY2hpbmVSZWcsIGZvcm1h
dCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXQgZm9y
bWF0KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fY3Vy
cmVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICByZWNvcmRTZXRMb2NhbCh2
YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOworICAg
ICAgICByZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCksIGZvcm1hdCk7CiAgICAgfQogCiAgICAgR2VuZXJhdGlvbkluZm8mIGdlbmVyYXRp
b25JbmZvRnJvbVZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKaW5kZXggNjdiMGUwYjM3MDRjYTU5YTg5MGFjNTljODZkYmQwZDJhMDU2ZGI4MS4u
MGFmM2YxNzE4MTU0MTBkOWJlZjY0YTIwZmQwOTA1ZGRjMDNlNjdmNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0x
ODI4LDcgKzE4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsK
IAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0
IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNz
aWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMTkxMiw3ICsxOTEyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3Vy
cmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRE
ZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVy
YW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODI0LDYgKzM4MjQsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2Fs
bChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAg
ICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5v
ZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDNlNjM4YzliOTQ5ZWI1ZWEyNmEzMTA1ZGRiOGFm
ZTc2NjIxNjMzNDQuLjdiMWUyNTdkNjBkNDY4NDVmMWE5NDBmZjZkZmRjOTNhYzg2YzdjNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cApAQCAtMTkzNiw3ICsxOTM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxl
IGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBi
ZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTIwMDcsNyAr
MjAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2Nh
bChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRh
Rm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDQ2NCw2ICs0NDY0
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFy
YXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAppbmRleCBiZWVjODZhYzdhN2QzMzNlMzk2Nzll
MjY3NTU5MDc0ZTQ2NGM5YjgyLi5kNzYyOGU1YTExN2NlMzNkZTFkMTYxNWY2MDQyNzUyMjA0Nzdh
MjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0cmVhdCBhIHZh
cmlhYmxlIGFzIGJlaW5nICJ1c2VkIiBpZiB0aGVyZSBleGlzdHMgYW4gYWNjZXNzIHRvIGl0IChT
ZXRMb2NhbCwgR2V0TG9jYWwsCiAgICAgICAgIC8vIEZsdXNoLCBQaGFudG9tTG9jYWwpLgogICAg
ICAgICAKLSAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CisgICAgICAgIE9wZXJhbmRzPGJv
b2w+IHVzZWRPcGVyYW5kcygwLCBncmFwaCgpLm1fbG9jYWxWYXJzLCBncmFwaCgpLm1fdG1wcywg
ZmFsc2UpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhh
dCBhcmUgdXNlZCBmcm9tIElSLgogICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9
IGZhbHNlOwpAQCAtNjcsMjMgKzY3LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCku
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVy
YW5kKCksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAg
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKGRhdGEtPmNvdW50LCB0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24gdGhl
IGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
c3NpZ25tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0
ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0g
Ly8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgogICAgICAgICAgICAgICAgICAgICBo
YXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTkyLDkgKzkxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBT
dGFja0FjY2Vzc0RhdGEqIHN0YWNrID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay0+bG9jYWwuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2stPm9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHN0YWNr
LT5sb2NhbC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0
T3BlcmFuZChzdGFjay0+b3BlcmFuZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDgsMjEgKzEw
NywyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9ICppdGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1
YWxSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewotICAgICAgICAgICAgICAgIHVz
ZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFu
ZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCi0gICAgICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBh
bGxvY2F0aW9uKHVzZWRMb2NhbHMuc2l6ZSgpKTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBh
bGxvY2F0aW9uKHVzZWRPcGVyYW5kcy5zaXplKCkpOwogICAgICAgICBtX2dyYXBoLm1fbmV4dE1h
Y2hpbmVMb2NhbCA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMb2NhbHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghdXNlZExvY2Fscy5nZXQoaSkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRPcGVyYW5kcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCF1c2VkT3BlcmFuZHMuZ2V0Rm9yT3BlcmFuZEluZGV4KGkpKSB7CiAgICAg
ICAgICAgICAgICAgYWxsb2NhdGlvbltpXSA9IFVJTlRfTUFYOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTM1LDQ5ICsxMzQsNTAgQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0Fy
Z3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2
YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9
IHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVf
dCBsb2NhbCA9IHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIGlmIChs
b2NhbCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IHZhcmlhYmxlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSB1c2VkT3Bl
cmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICAgICAgaWYgKGluZGV4ID49IGFs
bG9jYXRpb24uc2l6ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCisgICAgICAg
ICAgICBpZiAoYWxsb2NhdGlvbltpbmRleF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0
aW9uLCB2YXJpYWJsZS0+b3BlcmFuZCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Zm9yIChTdGFja0FjY2Vzc0RhdGEqIGRhdGEgOiBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhKSB7
Ci0gICAgICAgICAgICBpZiAoIWRhdGEtPmxvY2FsLmlzTG9jYWwoKSkgewotICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgaWYgKGRh
dGEtPm9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGlu
ZUxvY2FsID0gZGF0YS0+b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bG9jYWwudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9u
LnNpemUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChhbGxv
Y2F0aW9uW2RhdGEtPmxvY2FsLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0xvY2FsKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5vcGVyYW5kLnRv
TG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPm9wZXJhbmQudG9Mb2Nh
bCgpXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFz
c2lnbihhbGxvY2F0aW9uLCBkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
TG9jYWwgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5vcGVyYW5kKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFtX2dyYXBoLm5lZWRzU2NvcGVSZWdp
c3RlcigpKQogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0
U2NvcGVSZWdpc3Rlcihhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0
ZXIoKSkpOworICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWdu
KHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkp
OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURh
dGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9
IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNz
aWduKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQt
LTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3Jh
cGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVu
dFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5j
b3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3Np
Z24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+
Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNz
aWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMjMxLDE3ICsyMzEsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFs
bG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2ln
bihjb25zdCBPcGVyYW5kczxib29sPiYgdXNlZE9wZXJhbmRzLCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiBhbGxvY2F0aW9uLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gc3JjOwotICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewot
ICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9M
b2NhbCgpXTsKLSAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxv
Y2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKTsKKworICAgICAgICBzaXplX3Qgb3BlcmFuZEluZGV4ID0gdXNlZE9wZXJhbmRz
Lm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0g
YWxsb2NhdGlvbltvcGVyYW5kSW5kZXhdOworICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKICAgICB9CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcAppbmRleCBlYjNkZGJkNzE4NDNkNDlmNjViMzJjZTk2MWZmOWEwNzEyYTFh
MDUxLi5iNDhjNmY3ZjE5MDk3NzVkNzI3OTc5OTFmM2ZiOTgzZGU2MzhhNzI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHAKQEAgLTI4NSwxNyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG1fbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG1fbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5vcGVyYW5k
KCkgPT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbCA9IG5vZGU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0
YWNrLCBsb2NhbCkpKQorICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFw
aCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAKaW5kZXggNmFjYWZiZjNiZjUzNWM5Njk2YmU2NDhhMjA3MGI2ZWU2ZjRmOGJmOS4u
ZjFiMWZmNjRkZGE1M2NmNDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJz
IGppdChudWxscHRyKTsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2
bSk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZH
IE9TUiBleGl0IHRodW5rIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0Nh
bGxIZWxwZXJzIGppdChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5o
CmluZGV4IDA1YTUwYTU0YjI1ZDUxZGJjYjE4NThmZTdhYWRjYTQ4NjgyMDVkOWUuLjhiNWMzZjAx
YTQ4NTIwYjdhYWFhYWViYWZmOTNjM2IyNmNjZDk4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERG
RyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5r
R2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAppbmRleCA2MGZiZjg5OTVmZGFkNzgyNTZhMDY3Yjg5YzRlYzVmNTcxM2YxZDdlLi43OTY2
NWY4YWI4NWZjMTExNmQ2MzlmYjNkOGI1NWY2ZWQ5MDI2OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAg
LTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjaGVja09w
ID0gQ2hlY2tTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3BlY0NlbGxD
aGVjayAmIFNwZWNFbXB0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgobG9jYWwgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCA6IDApKSA9PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBURFogdmFsdWUuIFRo
ZSBjYWxsIGVudHJ5cG9pbnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERaLApAQCAtMTY4LDggKzE2
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJh
bmQoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExvY2FsOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9j
YWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4m
IG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggOWVlNWUwMDc0MDlkZjUy
OTRiZmNmNTFiNzc2ZWI4Y2ZjZjQ3YzUwZS4uYTJkNmNmYzI0OTM0ZTNkYzNjNDZjMGUyNGQ0ZGEx
Y2UxYjBjZjViNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
QEAgLTQ4Myw3ICs0ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+cGhpc1tpXTsKICAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2Nr
LmNvbnRhaW5zKG5vZGUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUt
Pm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBu
b2RlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9w
ZXJhbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFw
aC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBj
aGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChp
KSkKQEAgLTUxOSwxMCArNTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+
cHJlZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2Fs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9j
ayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3Qg
aGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2ssIGJsb2NrLT5w
cmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTUzMywxMSArNTMz
LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50RGVmaW5pdGVseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50TWF5YmUKQEAgLTU0NywxOSArNTQ3LDE1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5v
dCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+
aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2Nr
LT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2Up
LCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAotICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwot
ICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4g
c2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2OCwyNCArNjY0LDI0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQo
bm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBibG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnRE
ZWZpbml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIC8v
IE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNl
dExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZl
IGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBmb3IgdGhh
dCBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAg
ICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0Owor
ICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC05NjgsMjYgKzk2NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4g
IiwgZWRnZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogYmxvY2spCiAg
ICAgewogICAgICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKGxvY2FsLCAi
IGluIG51bGwgQmxvY2sgIik7CisgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gbnVs
bCBCbG9jayAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRh
dGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVy
YW5kLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNC
bG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCisgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRl
c3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2Nr
ICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CisgICAgICAgIGRh
dGFMb2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3Rp
bmF0aW9uQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJs
b2NrLCBOb2RlKiBwcmV2Tm9kZSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2Nr
KiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nKHBy
ZXZOb2RlLCAiIGZvciAiLCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOworICAg
ICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBvcGVyYW5kLCAiIGluIEJsb2NrICIsICpz
b3VyY2VCbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoTm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCAyNmYw
MzI5ZDU0MzA0MTU3MjA1ZTc4MTQ5OGM2NGUwYmU5OTMyMTEwLi45NWNkYzkyZTJjMjQxMGEzNWMw
MTMxMzFmZGMzYjdjY2MyODI5ZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTQxLDExICs0MSw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNw
YWNlIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogcHVibGljOgogICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQog
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5nIikKQEAgLTU2LDcgKzU0
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCBtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZhcmFyZ3MgZm9yd2FyZGlu
ZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDcg
Kzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNhbGxzIGludG8gdGhpcyBm
dW5jdGlvbiB0byBiZSByYXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGluIGEgc2ltcGxlIE8obikg
bWFubmVyLgogICAgICAgICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gYmxvY2stPmF0KGNh
bmRpZGF0ZU5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZygiSGFuZGxpbmcgY2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSBlbGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzIGlmIHRoZSBidXR0ZXJmbHkgaXMgb25seQpAQCAtMTA1LDcgKzEwMyw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE3LDkgKzExNSwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpLmlzVG1wKCksICJXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhIHRtcCByZWZlcnJpbmcg
dG8gYW4gYXJndW1lbnRzIG9iamVjdC4iKTsKICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4
ID0gbm9kZUluZGV4OwotICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFp
bnMobm9kZS0+dW5saW5rZWRMb2NhbCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRM
b2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFs
UmVnaXN0ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrVmFyYXJn
czoKQEAgLTE0MCwxMyArMTM5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzYXdFc2NhcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICBpZiAoc2F3RXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgICAgIGNh
c2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBj
YW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4
OwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxs
VmFyYXJnczoKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoK
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUt
PmNoaWxkMigpID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2Nh
cGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpID09IGNhbmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNM
b2FkZWRGcm9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5v
ZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjI2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXZhbGlkR2V0
QnlPZmZzZXQpIHsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1dHRlcmZseSA6IGNhbmRp
ZGF0ZUJ1dHRlcmZsaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMo
bm9kZSwgYnV0dGVyZmx5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBCdXR0ZXJmbHkgZXNjYXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLAotICAg
ICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgcmVnLCAiIHdoaWxl
IHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
S2lsbGluZyAiLCBvcGVyYW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3RE
dW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWxldmFudExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJlZykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNbaV0pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fsc1tpLS1dID0gcmVsZXZhbnRMb2Nh
bHMubGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0g
bm9kZUluZGV4OwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgIGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2VySW5kZXggPSAiLCBsYXN0
VXNlckluZGV4LCAiLCAiLCBibG9jay0+YXQobGFzdFVzZXJJbmRleCksICJcbiIpOwogICAgICAg
ICAKICAgICAgICAgLy8gV2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERldGVybWluZSBpZiBiZXR3
ZWVuIHRoZSBjYW5kaWRhdGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMgYW55CkBAIC0yNjMs
MTYgKzI2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2Rl
LT51bmxpbmtlZExvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoK
LSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUs
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2Ug
YXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CkBAIC0yODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+bG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPm9wZXJhbmQoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjk3LDEzICsyOTcsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgp
LmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyho
ZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCByZWcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBoZWFwLm9w
ZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc0ludGVyZmVyZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9i
YmVyaXplKCkpOwogICAgICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJmZXJlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTMxMSw3ICszMTAs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gbWFr
ZSB0aGlzIHdvcmsuCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFdpbGwgZG8gZm9yd2FyZGluZyFcbiIpOwogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAKQEAgLTM0MSw4ICszNDAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRoZXNlLgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdz
TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0g
Y2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVu
Z3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgLyog
YWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5h
cmd1bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFy
Z3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDhlYmZmYjQzNWVkNGRiZjYw
MmJkNjJhZWQ0YzM0MzJlYTVhODI5MDIuLjJhYzJlZTM5YjRjY2FkMzA4MTI1YjRlNmVjYzg4YTg3
YzdkMTc5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQot
ICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWluKCkpKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgIDog
bV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxz
ZSkKQEAgLTQ1LDEwICs0NCwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNz
RGF0YSgpCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlh
YmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgOiBtX2xvY2FsKGxvY2Fs
KQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJp
YWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNO
b25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVu
Ym94KGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQpA
QCAtODcsNyArODYsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0QWNjb3JkaW5nVG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMg
ZmFjaWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29y
ayBmb3IgYXJndW1lbnRzLgotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICBpZiAo
b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4g
dGhpcyBkb2Vzbid0CkBAIC0xMjEsNyArMTIwLDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6
OnRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKQogewogICAgIEFTU0VSVChpc1Jv
b3QoKSk7CiAgICAgICAgIAotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGRO
ZXZlclVuYm94KCkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZl
clVuYm94KCkKICAgICAgICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUlu
ZGV4KSkKICAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJs
ZUZvcm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgCkBAIC0xNzYsNyArMTc1
LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1bnQgZm9yIG1hY2hpbmUg
YXJndW1lbnRzLgotICAgIGlmIChtX2xvY2FsLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFu
ZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRo
ZSBhcmd1bWVudC1hd2FyZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBhbGwgb2YgYW4gKGlu
bGluZWQgb3IgbWFjaGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCmluZGV4IDFkMzg5MmY5ZWMwOWNiYTIwNDNmYTI1NGU2MDk0MjMy
MDE0YTI4NGUuLmJlMmZiNTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNmY2VmZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaApA
QCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlv
bkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFy
aWFibGVBY2Nlc3NEYXRhKTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsKKyAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEoT3BlcmFuZCk7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkK
KyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0g
ZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgICAgIEFTU0VS
VChtX29wZXJhbmQgPT0gZmluZCgpLT5tX29wZXJhbmQpOworICAgICAgICByZXR1cm4gbV9vcGVy
YW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hpbmVMb2NhbCgpCkBA
IC0yMDgsMTAgKzIwOCwxMCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNp
bXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCiAgICAgLy8g
dXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KIAotICAg
IFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVM
b2NhbDsKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAgICAgU3BlY3VsYXRlZFR5
cGUgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbjsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7
CiAKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCmluZGV4IDI4ZTQzN2ZkNTFmZWE0OTY5ZWI0OGVj
ZjBjMDUwOGYwYTM3ZGY4MzUuLjViMmMxZWU5MDliNTQ4ZjM5ODI3MGM0M2JkMzZlZDcyZTNmOWNm
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNw
cApAQCAtNTksMTEgKzU5LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIsIGlkKCksICIpIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICBvdXQucHJpbnQo
Ik1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAiKSIpOworICAgICAg
ICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgb3BlcmFuZCgpLCAiKSIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAgICAgIG91dC5wcmludCgK
LSAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+
IGJ5dGVjb2RlOiIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICJTZXRMb2NhbCht
YWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIG9wZXJhbmQoKSwK
ICAgICAgICAgICAgICIsICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpLCAiKSIp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAppbmRleCAyMDYwZDRhMmZkMjcyMjNkZDZmNjk5YzZkYmFk
NmQyMjQ2N2M5ODM0Li5jOGI4NGE3YzIxNjZlNzE1ZTUzMWNmNzVkMzg0OTc0ZjVjMzYwMjJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaApAQCAtNzYs
NyArNzYsNyBAQCB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7CiAjZW5kaWYKLSAg
ICBpbnQzMl90IHZpcnR1YWxSZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogfTsKIAogY2xhc3Mg
VmFyaWFibGVFdmVudCB7CkBAIC0xNjIsNyArMTYyLDcgQEAgcHVibGljOgogICAgICAgICBXaGlj
aFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJp
YWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlv
bi52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICByZXByZXNl
bnRhdGlvbi5vcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBldmVudC5tX2tpbmQg
PSBraW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2
ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE4MSwxMyArMTgxLDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwoCi0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVS
ZWcsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAg
ICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAg
ICAgICB3aGljaC52aXJ0dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsKICAgICAgICAgVmFy
aWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRp
b24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRh
dGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVudC5tX2tpbmQgPSBT
ZXRMb2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAg
ICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5NSwxMyArMTk1LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
VmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3RlciBieXRl
Y29kZVJlZykKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQs
IE9wZXJhbmQgYnl0ZWNvZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50
OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygp
OwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAg
ICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAg
ICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAgICAgICAgZXZlbnQu
bV9raW5kID0gTW92SGludEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3
aGljaCk7CiAgICAgICAgIGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKHJlcHJlc2Vu
dGF0aW9uKTsKQEAgLTI2NSwxMyArMjY1LDEzIEBAIHB1YmxpYzoKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09
IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJl
dHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkgY29uc3QK
KworICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9r
aW5kID09IFNldExvY2FsRXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVudCk7Ci0gICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVn
KTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZDsKICAgICB9
CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3RlcigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAppbmRleCA0NTI2ZDM5YmIwOTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2Li43ZWQ0ZDkw
M2MxNTk1NDZmZDQzNGM2OTU3MDlhNDg1NzQ3Y2QxYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTEyMyw2ICsx
MjMsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24o
KTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0g
aW52YWxpZEluZGV4OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7
CkBAIC0xMzAsMzcgKzEzMSw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNv
bnN0cnVjdCgKICAgICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2ln
bmVkIGkpIHsKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVy
aWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAg
ICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9y
SW5kZXgoaSAtIDEpLm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJl
Y292ZXJpZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKTsKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3Bl
cmFuZEZvckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAg
aW50IG1pbk9mZnNldCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAg
ICAgdW5kZWZpbmVkT3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zm
c2V0LCBpIC0gZmlyc3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52
YWxpZEluZGV4OwogICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZd
ICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4g
b2YgYXJndW1lbnRzIGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFk
amFjZW50IG9wZXJhbmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBp
bnZhbGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmll
cy5pc0FyZ3VtZW50KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZElu
ZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3Bl
cmFuZFNwYW4oaSk7CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRl
eCkgewogICAgICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RV
bmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAg
ICAgICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRv
KiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLnRvTG9jYWwoKSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMo
KSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51
bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAg
ICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAog
ICAgIC8vIENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRo
aXMgbXVzdCBiZSBhbiBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNh
c2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3Vs
ZAogICAgIC8vIHJlZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVl
UmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBudW1WYXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMg
aGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3Zl
cmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBudW1WYXJpYWJsZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVl
UmVjb3Zlcmllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ld
ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudW1WYXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDcgKzE3Nyw3IEBAIHVuc2lnbmVk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07
CiAgICAgCiAgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0
ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVy
YW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAg
ICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
b3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5p
ZmllZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7CkBAIC0xOTgsMTIgKzIwNCwxMiBA
QCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICAg
ICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3Rlcigp
KSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVj
b2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOworICAgICAgICAgICAgaWYg
KG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAg
ICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3Vy
Y2UoZXZlbnQuaWQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0TG9j
YWxFdmVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50
LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0
T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9y
bWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisg
ICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCks
IFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVu
dC5kYXRhRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIxMiw3ICsyMTgs
NyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICB9CiAg
ICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVS
ZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZh
bHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJj
ZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTI2Niw3ICsyNzIsNyBAQCB1bnNpZ25l
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52
aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZv
cm1hdCk7CiAgICAgfQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBh
cmF0ZWQpCiAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMu
c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAppbmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEw
NzZkZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoK
ICAgICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1
NGYwOGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29k
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0
ZWNvZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6
IG1fZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGMyZGRhZGE1YzQzM2RmOTE5YTE0NzMxYmZm
NDEyMWE0ZTE5YjcwODIuLjM2Nzk0Y2QyOGZjNjU4OTAxNDM1NmJlOWNmZGNhODA5MDQ0MTYxMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAg
LTI3NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVz
ZQogICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVk
LgotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93
IENoZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1
NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
ID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAw
LCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBA
IC0xMjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAg
ICAgICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAg
ICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyAr
MTk1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsK
LSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsg
bV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lk
IGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAg
ICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRh
LT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MTksMTMgKzc5MjIsMTMg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2
b2lkIGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRy
KGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCkBAIC03OTQwLDcgKzc5NDMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21w
aWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQu
c3RvcmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUo
KQpAQCAtOTUzNSw1MSArOTUzOCw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBh
dGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisg
ICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRz
ID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1
ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFy
YXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBz
dGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZy
b20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwog
ICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1f
b3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdz
T3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxl
bmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNs
dWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAg
eworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNB
cmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZs
b3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aElu
Y2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAor
ICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhp
cyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxh
b2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdz
IGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdp
c3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNo
aW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3Io
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAg
ICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCks
IG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAg
ICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJh
cmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRv
SW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5k
YXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5j
b25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hp
bGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAg
ICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwog
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9y
d2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU4
OCw1MCArOTU5MSwyNiBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkK
KyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExW
YWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVu
Z3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUp
OwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAg
aWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxl
bmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0
LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJh
dGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgot
ICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0g
YXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zm
c2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5n
dGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQz
MigxKSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGlu
Z1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0
aEluY2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisg
ICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQubWF4U2lnbmVkKG1fb3V0LnN1
YihjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzOworCisg
ICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9v
dXQuaW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0
aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3Io
ZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0
YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+
bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05NjkwLDY1ICs5NjY5LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlv
biBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAg
ICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50c0xlbmd0aC52YWx1ZTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1f
b3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5n
dGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1
ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNM
YXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIo
YXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBt
X291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhS
ZXN1bHQpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CisgICAgICAgIHJl
dHVybiBtX291dC5tYXhTaWduZWQobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCBtX291dC5pbnQzMlplcm8p
OwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCiAg
ICAgewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZh
dWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8
SW5saW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgTm9kZSog
YXJndW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGFyZ3Vt
ZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJn
dW1lbnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKLQot
ICAgICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVjdXJzYWJsZUxhbWJkYShbJl0o
YXV0byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAgICAgICAgICAgaWYgKHRhcmdl
dC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VsZih0YXJnZXQt
PmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IHRhcmdldC0+
Yml0VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRh
cmdldC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRW
ZWN0b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYobV9ncmFwaC52YXJB
cmdDaGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyArPSB0YXJnZXQtPmNhc3RPcGVy
YW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0LT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBw
ZW5kKGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNh
bGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKLSAgICAg
ICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbGxl
Y3RBcmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRp
bmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOwot
ICAgICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQotICAgICAgICAgICAg
bGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5n
dGgpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTk3NTksNyArOTY5MCw3
IEBAIHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0Zvcihk
YXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFk
ID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMsICZ0YXJnZXRT
dGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFs
dWUgeworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlz
LCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRl
eCkgLT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNw
cmVhZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUo
KSwgc3RvcmVJbmRleCk7CiAKQEAgLTk3OTEsOCArOTcyMiw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwog
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgTFZhbHVlIHNv
dXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJn
ZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAgICAgICAgTFZhbHVlIHNwcmVh
ZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5l
Q2FsbEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
dGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgTFZhbHVlIHNv
dXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0g
bV9vdXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTIyNDcsOCArMTIxNzksOCBA
QCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBwYWNrZXQsIG1faGVh
cHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0ciht
X291dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tl
bl9QYWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2Fk
UHRyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDApKSksIHBhY2tldCwgbV9oZWFw
cy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVl
KTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dD
aGlja2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAtMTIzMzksNyArMTIyNzEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NG
b3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXND
ZWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRy
KGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAg
ICB9CiAgICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MDQsNyArMTc1MzYs
NyBAQCBwcml2YXRlOgogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0
bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAg
ICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUlu
ZGV4LmJpdHMoKSksCi0gICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpOworICAgICAgICAgICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291
dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTIsNyArMTc2
NDQsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3Ny
RXhpdERlc2NyaXB0b3JzLmFsbG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHBy
b2ZpbGUsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFy
Z3VtZW50cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZUbXBzKCkpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODE3
LDE1ICsxNzc1MCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5t
X3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5
TWFwLm1fbG9jYWxzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgu
bV9wbGFuLm1vZGUoKSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAg
IGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2Nh
bCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAi
LCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmln
aW4pLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAm
JiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBi
eXRlY29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZh
aWxhYmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5k
YXRhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9
IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsK
ICAgICAgICAgICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkp
CkBAIC0xODEyNSwzOSArMTgwNTgsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0
LmFscmVhZHlSZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsK
ICAgICB9CiAgICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGlu
dCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFi
bGVzW29wZXJhbmRdLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNl
LCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwg
b2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBP
cGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBv
cGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihM
VmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUg
YmFzZSwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
YmFzZSwgb3BlcmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJl
c3NGb3IoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRl
ciBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCksIG9mZnNldCk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlm
IChvcGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fw
dHVyZWQsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQot
ICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRl
ciBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXls
b2FkRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIg
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRyZXNzRm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFu
ZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5k
ZXggOTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5
ODM0MDc2YThkNmY5MTc0MmNjYjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KAogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIp
OwogICAgIAogICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRz
KCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNh
blVuc2FmZUpTVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNW
YWx1ZSgpOwogICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2
YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1
ZSAmJiB2YWx1ZU9uU3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1
bWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5jcHAKaW5kZXggMDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThl
My4uMDRjODU3OTllNGQ0NjkyM2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcg
bmFtZXNwYWNlIERGRzsKIAogT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAog
ICAgIERhdGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgdmFsdWVQcm9maWxlLAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1iZXJPZkxvY2FscykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5z
aWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJv
ZmlsZURhdGFGb3JtYXQocHJvZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2
YWx1ZVByb2ZpbGUpCi0gICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZM
b2NhbHMpCisgICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMs
IG51bWJlck9mVG1wcykKIHsKIH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1
bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2Rl
QmxvY2sqIGZ0CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRh
ODdjY2YzMjczZmU0YmUzNjA2ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2
YWVjZTA5N2FkOGE0ZDFlMjdiODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCkBAIC02OSw3ICs2OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9T
UkV4aXREZXNjcmlwdG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZv
cm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxz
KTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9m
TG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgog
ICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlk
IGFuZCB3ZSdsbCBoYXZlIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgx
NzZlZTcyLi5hMzc4NDEwZGE5YjgwMTU3MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEg
QEAKICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNp
bmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIApAQCAtNDc0LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQK
IAogICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2tw
b2ludCgpKSB7CisgICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rl
c2NyaXB0b3ItPm1fdmFsdWVzLnRtcEluZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07
CisgICAgICAgIGppdC5wcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAg
ICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNv
ZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjpt
YWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAg
ICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRd
OworCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJh
bWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBj
b25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNv
ZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMo
KSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5s
aW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlu
bGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBj
YWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAg
ICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsK
KyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNj
cmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVz
IGFyZQogICAgIC8vIGFscmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsg
aW5kZXgtLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlw
dG9yLT5tX3ZhbHVlcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpOworCisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwg
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykp
CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0
YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5k
ZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpKSk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGpp
dCwgZXhpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApp
bmRleCA3ZjdjZDM4MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFi
ZDllYjNiNDcxMzM3NDRmODQzZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xv
YmFsT2JqZWN0KgogICAgICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcg
YnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8g
YWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQu
CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5
Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0
YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAg
ICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4
ZmM3ZDVkYjNhZDljZTVlOWNmLi4yYzMwNDhmYmJlMzUxODg3M2YzYWZiYjY1YjIzMzhmYTBhZDc0
NTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xNzYsNiAr
MTc2LDM4IEBAIExWYWx1ZSBPdXRwdXQ6Om5lZyhMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6TmVnLCBvcmlnaW4oKSwgdmFsdWUp
OwogfQogCitMVmFsdWUgT3V0cHV0OjptYXhVbnNpZ25lZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KQoreworICAgIGF1dG8gaXNMZWZ0R3JlYXRlciA9IGFib3ZlT3JFcXVhbChsZWZ0LCByaWdo
dCk7CisgICAgaWYgKGlzTGVmdEdyZWF0ZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBp
c0xlZnRHcmVhdGVyLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgaXNMZWZ0
R3JlYXRlciwgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptaW5VbnNpZ25lZChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQoreworICAgIGF1dG8gaXNMZWZ0TGVzcyA9IGJlbG93
T3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgaWYgKGlzTGVmdExlc3MtPmhhc0ludDMyKCkpCisg
ICAgICAgIHJldHVybiBpc0xlZnRMZXNzLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmln
aW4oKSwgaXNMZWZ0TGVzcywgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptYXhT
aWduZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKK3sKKyAgICBhdXRvIGlzTGVmdEdyZWF0
ZXIgPSBncmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOworICAgIGlmIChpc0xlZnRHcmVh
dGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gaXNMZWZ0R3JlYXRlci0+YXNJbnQzMigp
ID8gbGVmdCA6IHJpZ2h0OworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGlzTGVmdEdyZWF0ZXIsIGxlZnQsIHJpZ2h0KTsK
K30KKworTFZhbHVlIE91dHB1dDo6bWluU2lnbmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
Cit7CisgICAgYXV0byBpc0xlZnRMZXNzID0gbGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsK
KyAgICBpZiAoaXNMZWZ0TGVzcy0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdExl
c3MtPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBpc0xlZnRMZXNzLCBsZWZ0
LCByaWdodCk7Cit9CisKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUFkZChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KQogewogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAppbmRleCBjNTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1
NzBjYTJlLi45NmQzZDEzM2U4NTgxNTBmNDA2ZWQxNDIzZmFjNGRmNTVjMGE5ZDhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTE1Niw2ICsxNTYsMTEgQEAgcHVibGlj
OgogICAgIExWYWx1ZSBjaGlsbE1vZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIG5lZyhM
VmFsdWUpOwogCisgICAgTFZhbHVlIG1heFVuc2lnbmVkKExWYWx1ZSwgTFZhbHVlKTsKKyAgICBM
VmFsdWUgbWluVW5zaWduZWQoTFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtYXhTaWduZWQo
TFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtaW5TaWduZWQoTFZhbHVlLCBMVmFsdWUpOwor
CiAgICAgTFZhbHVlIGRvdWJsZUFkZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJs
ZVN1YihMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJsZU11bChMVmFsdWUsIExWYWx1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2
OTM0YzNmMGQzNzkxZjY0YmE0Mjk2M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3
YTY3MGQyNTgwNGFhOGNhZTIyYjNhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9w
ZXJhdGlvbigKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0
cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1
cm4gY2FsbE9wZXJhdGlvbih2bSwgdXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQs
IGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdk
ZDYzMWFjZDRjY2JlY2QxNGIyNGNjNWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBA
CisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50
CisgICAgYXR0cl9yZWFkZXIgOnVzZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJf
cmVhZGVyIDpuYW1lCisgICAgYXR0cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6
ZShuYW1lLCBpbmRleCwgdG1wcykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRl
eCA9IGluZGV4CisgICAgICAgIEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwg
dXNlRGVmID09IDp1c2UgfQorICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVz
ZURlZil8IHVzZURlZiA9PSA6ZGVmaW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhu
YW1lc3BhY2UpCisgICAgICAgIEVPRjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9
OgorRU9GCisgICAgZW5kCitlbmQKKworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlh
bGl6ZShvcGNvZGUsIHRtcHMsIGNoZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2Rl
CisgICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50
cy5tYXBfd2l0aF9pbmRleCB7IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhu
YW1lLCBpbmRleCwgdG1wcykgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAg
IEBjaGVja3BvaW50cy5lYWNoIGRvIHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAg
ICBFT0Y8LS0KK0JpdE1hcDxtYXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBp
dGFsaXplZF9uYW1lfSh1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3Bv
aW50KSB7CisKKyAgICB9Cit9CitFT0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL09wY29kZS5yYgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNl
YmI0ZjBhYjI0NDg1Li5kZGNjYjRjMjYwMjkzZWU5MzY0N2E4YWI1MGFjMGYwNDQ5YjZiYjBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAs
NyBAQCBjbGFzcyBPcGNvZGUKICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVy
IDptZXRhZGF0YQogICAgIGF0dHJfcmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hl
Y2twb2ludHMKIAogICAgIG1vZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXpl
OjpOYXJyb3ciCkBAIC00NSwxMiArNDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAog
ICAgIGVuZAogCi0gICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdz
LCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNl
Y3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVy
cywgdG1wcywgY2hlY2twb2ludHMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAg
ICBAbmFtZSA9IG5hbWUKICAgICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBA
bWV0YWRhdGEgPSBNZXRhZGF0YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwog
ICAgICAgICBAYXJncyA9IGFyZ3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwg
aW5kZXh8IEFyZ3VtZW50Lm5ldyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFy
Z3MubmlsPworICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hl
Y2twb2ludHMubWFwIHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVj
a3BvaW50cy5uaWw/CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEy
MSw4IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVk
X25hbWV9IDogcHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVt
cHN9CisgICAgI3tjaGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAg
LTEzMiw2ICsxMzcsMTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2Rl
SURUeXBlfSBvcGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9p
bnRWYWx1ZXMKKyAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAg
WyJlbnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsg
fGNoZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9LCBbIiAgICAgICAgbnVtYmVy
T2ZDaGVja3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4oIlxuIikKKyAgICBlbmQKKworICAgIGRl
ZiB0ZW1wcworICAgICAgICByZXR1cm4gaWYgQHRtcHMubmlsPworCisgICAgICAgIFsiZW51bSBU
bXBzIDogdWludDhfdCB7Il0uY29uY2F0KEB0bXBzLm1hcCB7fHRtcCwgdHlwZXwgIiAgICAgICAg
I3t0bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYg
ZW1pdHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJ
RFR5cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29k
ZUlEVHlwZSwgMCkKQEAgLTIwMCw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9w
Y29kZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5l
cmF0b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7
dHlwZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3Bv
aW50cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBp
ZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25X
aWRlT3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6Oldp
ZGUzMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlv
bi5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAy
MDRhYzc1OWUxM2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRj
MjNjYzBlYmVjMTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAK
ICAgZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxm
LCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFd
LCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYs
IG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0s
IGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpj
aGVja3BvaW50c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29k
ZXMsIGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAKaW5kZXggZjYzOTRhYzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5NTM2YTYwMC4u
MGZkNTYyYmIxYTkyYjAzNGM1ZGM4MDYzNjA5MDViNDY0ZWI1M2VhNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2Fs
bEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGwKICAgICBBU1NFUlQoZ2xvYmFsRXhlYy0+aXNEZXBy
ZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSk7CiB9CiAKLWJvb2wgQ2FsbEZyYW1lOjpjYWxs
U2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0Citib29sIENhbGxGcmFtZTo6Y2FsbFNp
dGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygp
KTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKQEAgLTEwMCwxMiArMTAw
LDEyIEBAIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFz
UmF3Qml0cygpIGNvbnN0CiAKIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNhbGxT
aXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
Ojpmcm9tQml0cyhjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9CiAKIFNVUFBSRVNTX0FTQU4gQ2Fs
bFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAg
IHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0Jp
dHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRz
KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CkBAIC0xMjMsMjggKzEyMywyOSBAQCB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhjb25z
dCBJbnN0cnVjdGlvbiogdnBjKQogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5
dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFT
U0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNp
dGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCktPmJ5dGVj
b2RlT2Zmc2V0KGN1cnJlbnRWUEMoKSk7ICAgICAKIH0KIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAog
ewotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NF
UlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2Nr
KCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkucHRy
KCk7CiB9CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9u
KiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShjb2RlQmxvY2soKS0+Ynl0ZWNv
ZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRh
ZygpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0cygpKTsKKyAgICB0aGlzW0Nh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gY2FsbFNpdGUuYml0cygpOworICAg
IEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpj
YWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJs
b2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKLSAg
ICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRz
QXJlQnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2Rl
SW5kZXgoKS5vZmZzZXQoKTsKIH0KIAogI2VuZGlmCkBAIC0xNjUsOCArMTY2LDggQEAgQnl0ZWNv
ZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKQogICAgICAgICByZXR1cm4gY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgfQogI2VuZGlmCi0gICAgQVNTRVJUKGNhbGxTaXRl
Qml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxT
aXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5
dGVjb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4
KCk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAgLTE4MCw3ICsx
ODEsNyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVy
biBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0
dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkpKTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRl
eCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCBjZmI3
NzE4NTYwMzk5MzM5MTAwNGZjMTMyMTE4Mzg0MjNjNWRjNmE5Li4wNWY2OTE3NzQ4OTUzMzFkOTIz
MTAwMWExNWEyYzA1YWJlOGE4OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCkBAIC00NiwxOCArNDYsMTggQEAgbmFtZXNwYWNlIEpTQyAgewog
ICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKICAgICAgICAgZXhw
bGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBtX2Jp
dHMoYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkKICAgICAgICAgeyB9CiAKLSAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OyB9Ci0g
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleDsgfQorICAg
ICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0K
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAgICAgdWludDMyX3Qg
Yml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQorICAgICAg
ICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4
OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJpdHMoKSk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50MzJfdCBtX2Jp
dHMgeyBCeXRlY29kZUluZGV4KCkuYXNCaXRzKCkgfTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlz
cG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC03OCw3ICs3
OCw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxlciBm
cmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJGcmFt
ZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24qIHJl
dHVyblBDOworICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVvZihD
UFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fzc2Vy
dChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycyBpcyBpbmNvcnJlY3QuIik7CkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENhbGxlckZyYW1lQW5kUEMsIHJldHVyblBDKTsgfQogICAgICAgICBBYnN0
cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBDKHZtLCB0
aGlzKTsgfQogCi0gICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBj
b25zdDsKKyAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3Q7
CiAgICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3Q7CiAK
ICAgICAgICAgdW5zaWduZWQgY2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdDsKQEAgLTE4MiwxMCAr
MTgyLDggQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgdm9pZCBpbml0RGVwcmVj
YXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUq
IGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNv
ZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2NrKS4KLSAgICAgICAgUmVnaXN0
ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAg
ICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFudAotICAgICAgICBSZWdpc3Rl
ciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEga25v
d24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdp
c3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRl
ciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQpA
QCAtMjU0LDcgKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgdm9pZCBzZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
Pih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5wYXlsb2FkKCkgPSBjb3VudDsg
fQogICAgICAgICBpbmxpbmUgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqKTsKICAgICAgICAgaW5s
aW5lIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVCbG9jayopOwotICAgICAgICB2b2lkIHNldFJldHVy
blBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPih2YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBzZXRS
ZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSB2YWx1
ZTsgfQogCiAgICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZSgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApp
bmRleCBhOTdkZWNhNTNiY2UxNzkyODliMGMzODBkMDRlOGYyYTg2MDQ3N2QxLi5hZTM1ODk4ZmI1
YzlmNDZkNWIwY2FmM2M2NWY0NzdkMzQ4MTNiOTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMyLDI4ICszMiwx
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIo
aW50IGluZGV4KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2Nr
KCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQot
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCiBp
bmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAg
IHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1l
Ojp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07CisgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWdpc3Rlcio+KCZ0aGlzLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRSZWdpc3RlcihyZWcpKTsKKyAg
ICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxG
cmFtZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiB1bmNo
ZWNrZWRSKHJlZy5vZmZzZXQoKSk7CisgICAgQVNTRVJUKCFyZWcuaXNDb25zdGFudCgpKTsKKyAg
ICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBDYWxsRnJh
bWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMzYTFiZTRmNThkYWVhODA3ZTNiYWZlZjBkNGJhMDJmZjQ2
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldFRtcChzaXplX3Qgb2Zm
c2V0KSAKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1
aW50NjRfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHRtcHNbb2Zmc2V0
XSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQz
Ml90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9m
KFQpID09IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBzaXplb2YodWludDhfdCkp
OworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50OF90
Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleDsKKyAgICB2b2lkKiBuZXh0SW5zdHJ1Y3Rpb25KdW1wVGFyZ2V0OworICAg
IHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdOworfTsKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZTdh
M2QyMmJlOGNjY2IzMTJmZDExNWI3NDhhMDJlZGQ2OGZmMzUwNS4uYzEwMTMxZTczM2RmOThjYjZj
MDNmYzJjNzgyODBjNmMzMTA0Mjk2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
Qnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNh
dGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRp
cmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpTVmFsdWUgZXZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIENhbGxTaXRl
SW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7
CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2Nr
KCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNr
ZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6
c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVu
Y2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpLlJlZ2lzdGVyOjpzY29w
ZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxpbmtlZENvZGVCbG9jayA9IGNh
bGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1
bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24o
KSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpA
QCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90CiAgICAgfQogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAgIGlmIChsZW5ndGggPj0gbWF4
QXJndW1lbnRzKQorICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlKTsKKwogICAgIGlmIChsZW5ndGggPj0gZmlyc3RWYXJBcmdPZmZzZXQpCiAgICAgICAg
IGxlbmd0aCAtPSBmaXJzdFZhckFyZ09mZnNldDsKICAgICBlbHNlCkBAIC0yNDksNyArMjUzLDcg
QEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lk
IGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1bWVu
dHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQordm9pZCBsb2FkVmFyYXJncyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCiB7CiAg
ICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMuaXNDZWxsKCkpIHx8ICFsZW5ndGgpCiAgICAgICAg
IHJldHVybjsKQEAgLTI2MSwzMSArMjY1LDMxIEBAIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpCiAg
ICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1R5cGU6
CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50
cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0
RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PERpcmVjdEFyZ3Vt
ZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnRE
ZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNjb3BlZEFy
Z3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PFNj
b3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0
PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBm
aXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1l
bnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5
VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CiAgICAgICAgIHJldHVybjsgCiAgICAgZGVmYXVsdDogewogICAgICAgICBBU1NFUlQoYXJn
dW1lbnRzLmlzT2JqZWN0KCkpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpT
T2JqZWN0Kj4oY2VsbCk7CiAgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSkgewogICAgICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmpl
Y3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2Jq
ZWN0KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zm
c2V0LCBsZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHVu
c2lnbmVkIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGggJiYgb2JqZWN0LT5jYW5H
ZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBvYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBvYmplY3QtPmdldEluZGV4
UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgaSAr
IG9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHZhbHVl
OworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHZhbHVlOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9IH0KQEAgLTI5Nyw4ICszMDEsNyBAQCB2b2lkIHNldHVwVmFy
YXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBDYWxsRgogICAgIAogICAgIGxvYWRWYXJhcmdzKAogICAgICAgICBnbG9iYWxPYmplY3Qs
Ci0gICAgICAgIGNhbGxGcmFtZSwKLSAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0KDApLAorICAgICAgICBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZj
YWxsRnJhbWUtPnIoY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0
KDApKSksCiAgICAgICAgIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwogICAgIAogICAgIG5l
d0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobGVuZ3RoICsgMSk7CkBA
IC01MzgsOCArNTQxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9y
LT5jb2RlQmxvY2soKTsKIAogICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBp
ZiAoIW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7Cisg
ICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBzdXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBjaGVja3BvaW50cy4KKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICAgICAgICAgIGlmIChtX3JldHVyblBDID09ICZjaGVja3BvaW50X29zcl9l
eGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQpCisgICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPnZtKCkuZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUobV9jYWxsRnJhbWUpOworI2Vu
ZGlmCisgICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewogICAgICAgICAgICAgICAg
IG1faGFuZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBS
ZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgICAgICAgICAgICAgIGlmIChtX2hhbmRs
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CkBAIC01
NjEsNiArNTY5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2hvdWxkU3RvcFVud2luZGluZykK
ICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKKyAgICAgICAgbV9yZXR1
cm5QQyA9IG1fY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCk7CiAgICAgICAgIHJldHVybiBT
dGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0KIApAQCAtNTk3LDYgKzYwNiw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYgbV9jb2RlQmxv
Y2s7CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgbXV0YWJsZSBjb25zdCB2b2lk
KiBtX3JldHVyblBDIHsgbnVsbHB0ciB9OwogfTsKIAogTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNl
cHRpb24qIGV4Y2VwdGlvbikKQEAgLTg2Niw3ICs4NzYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlQ2FsbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVj
dCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKQorICAgIGlm
IChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6ZSgpICsgMSAv
KiB0aGlzICovID49IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJu
KHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAg
ICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJl
dGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSAr
IDEgLyogdGhpcyAqLyA+PSBtYXhBcmd1bWVudHMpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgKaW5kZXggODZjMzI0NjkyMDRlOWFlNTkxMWZlY2VhOTAyYWU5N2NhYjU1ZDNhMC4u
ZmYxYjRlODYxMDRjOTYyNTk3NzllMjUyNzkyMmFmMzM0N2NmMjk0NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFy
Z3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVk
IG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5z
aWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZh
cmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNW
YWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2Fs
bGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBkNzFhNTk3MWRkYzhmMGY1ZWE2NzhkNWZj
ZTQ4ZTM5NmUyMmE4NzU0Li44MThmNGRiMmI2N2RlMzkzYTE3OTg0ZGQ1MDY4YTg0MmQyMWZiMDUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5l
ZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAg
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9p
bmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2Zy
YW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOwor
ICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZy
YW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50
MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2suZ2V0KCk7CkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6
OkZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwgV1RGOjpGdW5j
dGlvbjwKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiAhaXNJbmxpbmVkKSB7CiAgICAgICAgICAg
ICBpbmRlbnQrKzsKIAotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJl
Qnl0ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVJbmRleCgpKSB7CiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KGluZGVudCwgYnl0ZWNvZGVJbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggYzhkZjIwMGI5
ODFmZjgyNmE1MmVmMDY3MGVjN2RlZWRjYmZmNjk2ZS4uYzNlOGQwYzNkYTExM2Q5OWFjMGM4ZGY0
MDE1OTg5YjI5MGQ2OTM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpq
aXRBc3NlcnRJc051bGwoR1BSUmVnIGdwcikKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCkKIHsKLSAgICBKdW1wIG9rID0gYnJhbmNoMzIoQmVsb3cs
IHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIFRydXN0ZWRJbW0zMigx
MDAwMDAwMCkpOworICAgIEp1bXAgb2sgPSBicmFuY2gzMihCZWxvdywgcGF5bG9hZEZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBUcnVzdGVkSW1tMzIo
MTAwMDAwMDApKTsKICAgICBhYm9ydFdpdGhSZWFzb24oQUhJbnNhbmVBcmd1bWVudENvdW50KTsK
ICAgICBvay5saW5rKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggMjIwMDljNWZkMmJhMjI3ZDQ3Y2ZlODU0OTM5ZjUyZGVmMmQ3MWJj
Mi4uNTg3MDdmYTg0M2NkZGU4NzI1Y2E3MjhiODhjMTEzZjhhOTFmMjIxYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xMTQ4LDkgKzExNDgsMTAg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAg
ICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFs
UmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGlj
IEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRy
ZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQo
IW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSAr
MTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxp
ZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQp
OwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3Rh
dGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAg
IEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAt
MTE3OCw5ICsxMTgwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rl
ci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBh
eWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKGludCBv
cGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAg
ICAgcmV0dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQog
CiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCmluZGV4IDg0ODVhOWZiZDY4M2RiZWY2
NThmNjcwODgxM2Y3NThkNWRkYjk4ZDEuLmIzZjBlMTY5MmMwZGFiYTc5OTU2ZTFlNTExOTk4Yjlm
MjlkMmQ3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAK
QEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9s
b2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2MKICAgICBzdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKENhbGxlckZy
YW1lQW5kUEMsIGNhbGxlckZyYW1lKSksIHNjcmF0Y2gxKTsKICAgICBzdG9yZVB0cihzY3JhdGNo
MSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGNhbGxlckZyYW1lKSkpOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLCBzY3JhdGNoMSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgc2NyYXRjaDEpOwogICAgIHN0b3JlUHRy
KHNjcmF0Y2gxLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUp
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMTdjMGVkYWE4MmI5Zjk0ZjU3
NDEzMTEwNjFhNjUxMjk0YTUxNmY4NS4uYjY2MTI3YTRmYjFlY2JjNmYxNDkyMTdiYzAwM2UxMDJl
MTdhZTU3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNzU1LDcgKzc1NSw3IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAK
LSAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCks
IHJlZ1QxKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgcmVnVDEpOwogICAgICAgICBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggMjgwMzJhMjFh
YWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEyYTczYzU3MGFl
ZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEsMTYgKzMz
MSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBl
bnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9pZCBjb21w
aWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxl
T3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShp
bnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQz
MlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3Rl
cklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlv
bmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdy
aXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAg
IC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJl
Z2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1
bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7
CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUg
aXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0
MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUg
eyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2
b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJl
Z3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5k
Q29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnRE
b3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAg
ICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90
JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdp
c3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZChj
b25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAg
ICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAg
dm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBh
eWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIp
OworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFn
MSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIs
IFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNv
bnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVy
KTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
SW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0
U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29s
ID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIs
IGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQg
ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9v
bCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNl
KTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRT
dG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1
YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwog
CiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqKTsK
IApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExp
c3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lz
dGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBV
U0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50
IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMy
LCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBz
cmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0g
cmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQp
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGlu
IEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5
LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxs
cyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAg
ICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdp
c3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVKdW1w
SWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJl
cihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVn
aXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAgICB2b2lk
IGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsK
KyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VS
ZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9u
YWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJ
bXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6
ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVy
dCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAg
dm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3OCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9p
ZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
dW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1
ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCArNjg3LDIwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAgICAg
ICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0
YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJl
VmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAg
ICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQg
ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAg
ICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGlu
dCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAgICAgICAg
dm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgdm9pZCBl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOwor
ICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQo
aW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0g
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBKU1Zh
bHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlz
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zh
c3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmls
ZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7CiAg
ICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAg
dm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEzICs3NDcsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpo
YXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVu
dHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpA
QCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
aW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1l
dGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmludEJ5dGVj
b2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRC
eXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVy
IHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2Fj
ZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0
YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGludCBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQog
ewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGlu
dCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyAr
MjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVu
c2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0
LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAg
LTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCks
IGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29k
ZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTksNyArMzk5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3Jy
ZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJl
Z2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0
UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xp
Y3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9
IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
QEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBKSVQ6OmVt
aXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNu
aXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0
ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAt
Njc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9t
IHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQ
cm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9m
aWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
LSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0
ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAt
OTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGludCByZXN1
bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVhYzMuLmFmOWVl
YjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
LXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2Rl
SUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIG1l
dGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3Ry
dWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+
CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZv
KiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZz
ZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7
Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsK
KyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQo
KTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBuZXZlciB1
c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9m
aXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdU
MSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7
CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVn
aXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhm
ZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAsNyArNTAsNyBA
QCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBp
ZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNh
bGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sg
IiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgV1RGQnJlYWtw
b2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2
bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmlu
ZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLjdiYzE0ZTgzNWFk
MWFkMWRkNjczZmNhNTA2OTY4MGUyNTVmYmM5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJbnN0cnVjdGkK
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3Jj
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJldHVybiBzcmMu
aXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKQor
QUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVn
aXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5
LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBzdG9yZTMyKGZy
b20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTEwOSw3ICsxMTAsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhbWUoKQogI2Vsc2UKICAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogI2VuZGlm
Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcyBpcyBu
ZWVkZWQuIEpJVE9wZXJhdGlvbnMgdGVuZCB0byB1cGRhdGUgdGhlIHRvcCBjYWxsIGZyYW1lIG9u
CiAgICAgLy8gdGhlIEMrKyBzaWRlLgpAQCAtMTQzLDcgKzE0NCw3IEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0
KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24p
OwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xNTUsNyArMTU2LDcgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwpA
QCAtMTY3LDkgKzE2OCw5IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiAgICAgcmV0dXJuIGNh
bGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIGludCB2UmVnKQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQorICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogfQogCkBAIC0yODQsOSArMjg1LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2Ft
cGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQogI2VuZGlmCiAjZW5kaWYKIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpCitBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVy
IHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CisgICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmco
KSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgp
ID09IDE7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKQEAgLTM2MywyNiArMzY0LDI2IEBAIGlubGluZSBKSVRB
cnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQogICAg
IHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCi1BTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6
OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVy
biBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
ZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5M
SU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihk
c3QpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFu
ZChpbmRleCkudGFnKCkpLCB0YWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzkwLDkg
KzM5MSw5IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3Rl
cklEIHRhZykKICAgICBsb2FkMzIodGFnRm9yKGluZGV4KSwgdGFnKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHBheWxvYWQpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBt
b3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkucGF5bG9hZCgpKSwgcGF5bG9hZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MDYsMTM2ICs0MDcsMTMzIEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCkKICAgICBtb3ZlKEltbTMyKHYudGFnKCkpLCB0YWcpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFs
dWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXQoVmlydHVhbFJlZ2lz
dGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRMb2FkKHNyYywgZHN0LnRhZ0dQ
UigpLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRTdG9yZShkc3QsIGZyb20udGFnR1BSKCks
IGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChpbnQg
aW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFz
ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKIAogICAgIGlmIChiYXNlID09IGNhbGxGcmFt
ZVJlZ2lzdGVyKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBheWxvYWQgIT0gYmFzZSk7Ci0g
ICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9hZCk7Ci0gICAgICAgIGVtaXRMb2Fk
VGFnKGluZGV4LCB0YWcpOworICAgICAgICBlbWl0TG9hZFBheWxvYWQocmVnLCBwYXlsb2FkKTsK
KyAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07CiAgICAgaWYgKHBheWxvYWQg
PT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCi0gICAgICAgIGxvYWQzMih0YWdGb3Io
dGFyZ2V0LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBi
YXNlKSwgcGF5bG9hZCk7CisgICAgICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBw
YXlsb2FkKTsKLSAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7CisgICAgbG9h
ZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7CisgICAgbG9hZDMyKHRhZ0Zvcihy
ZWcsIGJhc2UpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihpbnQgaW5k
ZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJl
Z2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQg
cGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVy
SUQgcGF5bG9hZDIpCiB7Ci0gICAgZW1pdExvYWQoaW5kZXgyLCB0YWcyLCBwYXlsb2FkMik7Ci0g
ICAgZW1pdExvYWQoaW5kZXgxLCB0YWcxLCBwYXlsb2FkMSk7CisgICAgZW1pdExvYWQocmVnMiwg
dGFnMiwgcGF5bG9hZDIpOworICAgIGVtaXRMb2FkKHJlZzEsIHRhZzEsIHBheWxvYWQxKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7
CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7
CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZh
bHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lz
dGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIocmVnKTsKICAgICAgICAgY2hhciogYnl0ZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShB
YnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKHBheWxvYWRGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQs
IFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQg
YmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKLSAgICBzdG9y
ZTMyKHBheWxvYWQsIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3RvcmUzMih0YWcs
IHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
cmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMih0YWcsIHRhZ0ZvcihyZWcsIGJhc2UpKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMy
KFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50
MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3Rv
cmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0ludDMyKQot
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0Zvcihp
bmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQg
aW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgVHJ1c3RlZEltbTMy
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsK
ICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBp
bmRleElzQ2VsbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCiB7Ci0gICAgc3Rv
cmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0NlbGwpCi0gICAgICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihyZWcpKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNCb29sKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29s
KFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9v
bCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9y
ZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQm9vbCkKLSAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0Zvcihp
bmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFn
KSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShp
bnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
RG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBz
dG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihpbmRleCkpOworICAgIHN0b3JlRG91YmxlKHZh
bHVlLCBhZGRyZXNzRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShp
bnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0IEpTVmFsdWUg
Y29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0
IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnBheWxvYWQoKSksIHBheWxv
YWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFudC50YWcoKSks
IHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnBheWxv
YWQoKSksIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFu
dC50YWcoKSksIHRhZ0ZvcihyZWcsIGJhc2UpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KQoraW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxS
ZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHJl
ZykpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZykKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcs
IFJlZ2lzdGVySUQgdGFnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1l
ZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAgICAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh0YWcp
KTsKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElu
dChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMy
KCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29u
c3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCitB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQp
CiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAgICAgY29uc3Rh
bnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CkBAIC01NTUsMTEgKzU1Mywx
MSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9w
MSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRv
IGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRz
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CkBAIC01NzEsNDcgKzU2OSwzMiBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQogICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyksIGRzdCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1
ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJl
Z2lzdGVySUQgZHN0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLm9mZnNldCgp
LCBkc3QpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3Qy
KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVh
bFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJl
Z2lzdGVySUQgZHN0MikKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBz
cmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRz
dDIpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMS5vZmZzZXQoKSwgZHN0MSwg
c3JjMi5vZmZzZXQoKSwgZHN0Mik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3Qp
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQog
ewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQotewotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKLX0KLQogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAg
SklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJl
ZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOwpAQCAt
NjI5LDI4ICs2MTIsMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWcpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVh
bFJlZ2lzdGVyIHZSZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVk
aWF0ZSh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVy
SUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgp
OworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcp
OwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFs
dWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2
YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdp
c3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIEFTU0VSVChp
c09wZXJhbmRDb25zdGFudEludChpbmRleCkpOwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLmFzSW50MzIoKSksIHZhbHVlKTsKKyAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQocmVnKSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0
YW50T3BlcmFuZChyZWcpLmFzSW50MzIoKSksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJsZUp1bXBJZk5vdElu
dChSZWdpc3RlcklEIHJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CmluZGV4IDdjZmEwOTVmMDBkMTdlMTQxMWJlOWNmYjgwZjgwODA2Zjc4OGY2YzEuLjQ2MTdlZTI5
NGIxNGZlZjEyNDg4ODQ0MWRmZDk0NTEwMzY1YWE1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNTYsMTAgKzU2LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
dm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMg
PSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwog
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7Cisg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
CiAgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUp
KSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBi
dXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CiB9CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
IHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5t
X2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRl
Y29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVl
ID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKQEAgLTE1NSw5ICsxNTUsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCiAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJh
c2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KICAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KQEAgLTE4
Niw3ICsxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2Zz
W21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIApAQCAtMjA0LDggKzIwNCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklU
OjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCByZWdUMCk7CkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CkBA
IC0yNDYsOCArMjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRP
ck51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwogCkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVk
X29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9v
bGVhbj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOwpAQCAtMjc0LDggKzI3NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB0
ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0yODYs
OCArMjg2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzT2JqZWN0PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBp
biAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNDMsOCArMzQzLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2MCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19w
cmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKIAogICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25vdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
Z1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTM5MCwxNCArMzkwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zm
c2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwot
ICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBAIC00NDUsNyArNDQ1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpudW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NzAsOCArNDcwLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXFQdHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgSlNW
YWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNp
YWxQb2ludGVyLm9mZnNldCgpKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5k
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5p
c0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIApAQCAtNDg1LDE4ICs0ODUsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAt
NTEwLDI2ICs1MTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMu
b2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMs
IHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKICAg
ICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIodm0oKSk7CiB9CkBAIC01NDgsOSArNTQ4LDkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNy
YzIsIHJlZ1QxKTsKICAgICAKQEAgLTU5Miw4ICs1OTIsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
U3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIg
PSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJl
Z1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTY1MCw4ICs2NTAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApKTsKQEAgLTY2NCw4ICs2NjQsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvTnVtZXJpYz4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CkBAIC02ODQsMjAgKzY4NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19u
dW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOwpAQCAtNzI4LDEwICs3MjgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2Vw
dGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgp
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbi5vZmZz
ZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbik7
CiAKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpKSwg
cmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1
ZS5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93
blZhbHVlKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJWE1FOiBjb25zaWRlciBp
bmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGluZwpA
QCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciog
YnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVy
IHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
ICAgICBlbHNlCkBAIC03NDksNyArNzQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0
aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7
CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7CiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdz
KTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQ
cm9maWxlJj4ocHJvZmlsZSkpOwpAQCAtNzY2LDEwICs3NjYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFBhcmVudFNjb3BlPigpOwotICAgIGludCBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZWdUMCk7
CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwogICAgIHNpemVfdCB0YWJsZUlu
ZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0
KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7
CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJh
Y2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxl
ID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC03OTQsNyAr
Nzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29k
ZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2ln
bmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgxMSw3ICs4MTEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
d2l0Y2hTdHJpbmc+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxl
SW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0
aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgzNCw4ICs4MzQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1Qw
KTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTg2
Nyw4ICs4NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CkBAIC05MDMsNyArOTAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVt
VmFycygpOwogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zmc2V0KCkpOwor
ICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAog
ICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC05MTMsNyArOTEzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7CiAgICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAgLTkyNCw3ICs5MjQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
U3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0
dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdC5vZmZz
ZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAK
QEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgY2FsbGVlID0gYnl0
ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5
dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVu
Y3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVS
ZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC05NjUs
MTMgKzk2NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCBy
ZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCkBAIC05
ODUsNyArOTg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC05OTYsNyArOTk2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCkBAIC0xMDI0LDEwICsxMDI0LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVj
dG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJ
bnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwpAQCAtMTEw
NCw4ICsxMTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGUKIHZvaWQgSklUOjplbWl0X29w
X25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHJlZ2V4cCA9
IGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9y
ZWdleHA7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKIH0KQEAgLTExMTUsMTIgKzExMTUsMTIgQEAgdm9pZCBKSVQ6OmVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
SnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCks
IHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwog
I2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5m
dW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCkBAIC0xMTYxLDExICsxMTYx
LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNv
bW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCk7CkBAIC0xMjA3LDEwICsxMjA3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZXNJbmRleCA9IGJ5
dGVjb2RlLm1fYXJndi5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9h
cmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOwogfQpAQCAtMTIxOSw4ICsxMjE5LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLApAQCAtMTIzNiw5ICsx
MjM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJl
UHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTI4Miw5ICsx
MjgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAgICAgCkBAIC0xMzMwLDkgKzEzMzAsOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9w
ZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKQEAgLTEzNDksMTAgKzEzNDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KIHZvaWQg
SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAg
IFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAg
ICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM5MCw5ICsxMzkwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0MTQsOSArMTQxNCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDQwLDcgKzE0NDAs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9u
ID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247Ci0gICAgaW50IHZhbHVlVG9Qcm9maWxlID0gYnl0
ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKQEAg
LTE1MDksNyArMTUwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0CiAgICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTE1MjMsOCArMTUyMyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BS
MDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBz
Y3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwg
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1Qz
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdU
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7
CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVl
UmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpKTsKIH0KIApAQCAtMTU0NSw4ICsxNTQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BBcmd1bWVudENvdW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBsb2FkMzIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVS
ZWdzKHJlZ1QwLCByZWdUMSk7CiAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CkBAIC0xNTU2
LDkgKzE1NTYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3Rf
bGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0g
Ynl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CisgICAgbG9hZDMyKHBheWxvYWRG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgcmVnVDAp
OwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAgemVyb0xlbmd0
aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tp
cCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKQEAgLTE1ODYs
NyArMTU4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKQEAg
LTE1OTQsOSArMTU5NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QyKTsKKyAgICBsb2FkMzIocGF5bG9hZEZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdUMik7CiAg
ICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAg
ICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0
MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
QEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIq
IGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZl
ciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7
CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlm
IChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxl
KSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAg
ICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxl
Jj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVm
YjViN2VmODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQ
YXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50
ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGls
YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFy
c1dpdGhWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAg
ICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9
IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1
ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNX
aXRoVmFsdWVzKTsKKworICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhh
bmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMs
IDApOwogICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8
aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVl
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChv
cGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNl
ZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRs
ZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
TG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNb
aV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAg
ICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwpA
QCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICBjb2RlQmxv
Y2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEu
bV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUo
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpOwogICAg
IH0pOwogCkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UG9wU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBzY29wZQogICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVn
aXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNj
b3BlLT5uZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5S
ZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVj
dCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1Zh
bHVlKCkpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwogICAgIEdldFB1dElu
Zm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5m
bzsKIAogICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIg
Zm9yIGdldF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSW5zdHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
ayk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0
Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFs
dWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlKS5qc1Zh
bHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5m
bzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2
YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVh
MmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5
ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAt
OTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogewogICAgIGlmIChoYXNBbnlT
bG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3
LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIwOCw3ICsyMDgs
NyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3Ag
Ynl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNlIENvbnRpZ3VvdXNT
aGFwZToKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGlt
ZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmll
cihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAt
MjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVS
ZXN1bHQodGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwog
ICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAt
Mjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRo
Q2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6
IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNo
ZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBA
IC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFs
V2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlz
RGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0OwotICAgIGludCBiYXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRv
IGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0g
ICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAg
ICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0
KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iu
b2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9n
ZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJC
eVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9w
ZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAg
LTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGlu
dCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTM5LDcg
KzUzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhp
c1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpOwog
CiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUs
IGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBAIC02MTUsOCAr
NjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CkBAIC02
NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNo
cG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwg
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCit2b2lkIEpJVDo6
ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAsOCArNjcwLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9j
YWxTY29wZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7
CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgSklUOjplbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykK
ICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFy
KGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpA
QCAtOTE5LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNl
dCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgbG9h
ZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NP
Zk9wZXJhbmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwog
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwog
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7CkBAIC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRl
Y29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNp
Z25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5z
aWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAg
ICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUp
Cit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDgg
KzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
CiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1
ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUs
NyArMTQyNSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBl
KSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAg
ICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJmMzM5MGE2Yzdk
YjI4NmE1YzEuLjY5OTg3NjljNThiMDBjMGJhY2M1YzkyZjFkNDc2YWE1N2UzNTMzMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1LDEyICs0NSwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW5s
aW5lIEp1bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIodW5z
aWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgaW5s
aW5lIEp1bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQ
UmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIGlubGluZSBKdW1w
IGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAg
ICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgZHN0KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1w
SWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdp
c3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC02NCwzNiArNjQsMzYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIHsK
LSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgcGF5bG9h
ZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBheWxv
YWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXIp
OwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKKyAg
ICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZO
b3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0
YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIH0KICAg
ICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4
KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2Fk
Rm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1
YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0
cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAgIHJldHVybiBicmFu
Y2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVy
SW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxS
ZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9h
ZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgQVNT
RVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAg
ICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1
bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgbG9h
ZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAg
IGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAgICAgICBsb2FkRG91Ymxl
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkRG91
YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAgLTEwMSwyMyArMTAxLDIz
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlu
bGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwo
dW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAg
ICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAg
ICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHJl
dHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQo
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChh
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIEp1bXAgbm90SW50MzIg
PSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKGRzdCwg
ZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAotICAgIGlubGluZSBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBk
c3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51bWJlciA9
IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5j
aElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0
Y2gsIGRzdCk7CkBAIC0xMzcsMjQgKzEzNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOworICAgICAgICBzdG9y
ZVB0cihmcm9tLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpOwogI2Vsc2UKLSAg
ICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5KSk7CisgICAgICAgIHN0b3JlNjQo
ZnJvbSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7CiAjZW5kaWYKICAgICB9
CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGVu
dHJ5KSkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6
ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkK
ICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwotICAgICAgICBzdG9yZTMyKGZy
b20sIHBheWxvYWRGb3IoZW50cnkpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7CisgICAgICAg
IHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7CiAjZWxz
ZQotICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAgICAgICAgc3Rv
cmU2NChmcm9tLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNlbmRpZgog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXpl
ZFRodW5rSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtK
SVQuaAppbmRleCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEzZGYzNmE3MjQ5YjZjMzQzLi45ZTNk
NzYzM2Y5ZWNhMWE0MjZlYTE5ZTVkOGU5Mjk4NTMyNWQ5ZThiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNDMsNyArNDMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAg
ICAgICAgICBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwogICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRz
Ci0gICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVk
QXJnQ291bnQgKyAxKSkpOworICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBleHBsaWNpdCBTcGVjaWFsaXplZFRodW5rSklUKFZNJiB2
bSkKQEAgLTU1LDEzICs1NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgbG9hZERvdWJsZUFyZ3VtZW50KGludCBhcmd1bWVudCwgRlBSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMg
PSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAg
ICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZERvdWJsZShzcmMsIGRzdCwgc2Ny
YXRjaCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRDZWxsQXJndW1l
bnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCkKICAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
YXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWRKU0NlbGwo
c3JjLCBkc3QpKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRJbnQzMkFyZ3VtZW50KGludCBh
cmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZhaWxUYXJnZXQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1l
bnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIGZhaWxUYXJnZXQgPSBlbWl0TG9hZElu
dDMyKHNyYywgZHN0KTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA1MjQxZTVmN2NjMzMyYTY0ZTBkZTZk
YjQ0YmRhZjllOGU4MGYyMmFhLi5hZGE0NTk2YjFiNDg4M2I3NDA3MzU1OWM0NjU2MDdkOTQxNGI3
NjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CkBAIC00MDEsNyArNDAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6
cmVnVDMsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKICNlbmRpZgogICAgIGppdC5tb3ZlKEpT
SW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsK
LSAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQu
bG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOwog
ICAgIGppdC5hZGQzMihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7CiAKICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBleHRyYSBzbG90cyB3ZSBjYW4gdXNlCkBAIC00
NjIsNyArNDYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0
eUZpeHVwR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQucmV0KCk7CiAjZWxzZSAvLyBVU0UoSlNW
QUxVRTY0KSBzZWN0aW9uIGFib3ZlLCBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uIGJlbG93Lgog
ICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRH
UFIyKTsKKyAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIEpTSW50ZXJmYWNlSklUOjph
cmd1bWVudEdQUjIpOwogICAgIGppdC5hZGQzMihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMy
KENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3Vt
ZW50R1BSMik7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBleHRyYSBzbG90cyB3
ZSBjYW4gdXNlCkBAIC0xMDMyLDggKzEwMzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGFic1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKICAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICB1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXQoMCk7Ci0gICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVySW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApOworICAg
IGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IEdQUkluZm86OnJlZ1QwKTsKICAgICBhdXRvIG5vdEludGVnZXIgPSBqaXQuYnJhbmNoSWZOb3RJ
bnQzMihHUFJJbmZvOjpyZWdUMCk7CiAKICAgICAvLyBBYnMgSW50MzIuCkBAIC0xMTM2LDggKzEx
MzYsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05v
QXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdgogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwogICAgIAogICAgIC8vIFNldCB1cCBvdXIgY2FsbCBmcmFtZS4KLSAgICBqaXQuc3Rv
cmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6
OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7Ci0gICAgaml0LnN0b3JlMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsKKyAgICBqaXQuc3RvcmUzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAKICAgICB1bnNpZ25l
ZCBleHRyYVN0YWNrTmVlZGVkID0gMDsKICAgICBpZiAodW5zaWduZWQgc3RhY2tNaXNhbGlnbm1l
bnQgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgJSBzdGFja0FsaWdubWVudEJ5dGVzKCkpCkBA
IC0xMTU4LDcgKzExNTgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdgogICAgIC8vCiAgICAg
Ly8gVGhhdCdzIHJlYWxseSBhbGwgdGhlcmUgaXMgdG8gdGhpcy4gV2UgaGF2ZSBhbGwgdGhlIHJl
Z2lzdGVycyB3ZSBuZWVkIHRvIGRvIGl0LgogICAgIAotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgR1BSSW5mbzo6cmVnVDEpOwog
ICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyksIEdQ
UkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmxzaGlmdDMyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDMpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmFkZDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJ
bmZvOjpyZWdUMik7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYg
dgogICAgIAogICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwotICAg
IGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBHUFJJbmZv
OjpyZWdUMyk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVTdGFja1NwYWNlID0gaml0LmJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0
ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QyKTsK
IAogICAgIC8vIFRocm93IFN0YWNrIE92ZXJmbG93IGV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRDb21tb24uaAppbmRleCA5NTFkNzY5ZDY5MjQ5YmYzYWM5OGY0NDA4
MzQxZjY1MTAyYTk1NWMxLi5hZmVlY2JhYzA3YjFlYjE3MGVkNmQ0NDY1NTA4MjU3ZGE3NjUxYmRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaApAQCAtMjksNyAr
MjksNyBAQAogLy8gLSBQcmludHMgZXZlcnkgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQgaWYgT3B0aW9u
czo6dHJhY2VMTEludEV4ZWN1dGlvbigpIGlzIGVuYWJsZWQuCiAvLyAtIFByaW50cyBzb21lIGlu
Zm9ybWF0aW9uIGZvciBzb21lIG9mIHRoZSBtb3JlIHN1YnRsZSBzbG93IHBhdGhzIGlmCiAvLyAg
IE9wdGlvbnM6OnRyYWNlTExJbnRTbG93UGF0aCgpIGlzIGVuYWJsZWQuCi0jZGVmaW5lIExMSU5U
X1RSQUNJTkcgMAorI2RlZmluZSBMTElOVF9UUkFDSU5HIDEKIAogLy8gRGlzYWJsZSBpbmxpbmUg
YWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgaXMgZ3JlYXQgaWYgeW91J3JlIGNo
YW5naW5nCiAvLyBob3cgdGhlIEdDIGFsbG9jYXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDM1N2E0NmU4ZTU3ODk3ZjI3ODVjZDMz
OWZjYmUyYmMwYzkwY2VkYjIuLjhmY2M1ZGI4ZDgzOGI5MjIyMWIxNzJlODlhN2M4MzJlMDJjNmYw
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1
ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1Bh
dGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUu
aCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAg
ICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgTExJ
TlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3Bl
cmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5k
KSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1
ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVy
YW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50
T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsg
cmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGlu
ZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAK
ICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAg
ICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTE1
NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5dGVjb2RlLm1fYXJndjsKICAgICAKICAgICBjYWxs
ZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsK
LSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2Fs
bGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1l
LT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwogICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKQEAgLTE2ODksNyArMTY5MCw3IEBAIGlubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRT
ZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChj
YWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAg
ICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFt
ZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAg
ICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhw
Yyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxl
ZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7CkBAIC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRD
YWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNo
ZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFz
VmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldFJldHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAg
ICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE5MzAsNyArMTkzMSw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmls
ZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxs
RnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7
CiAKQEAgLTE5NjEsMTEgKzE5NjIsMTIzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+CitzdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2tw
b2ludChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS5n
ZXRUbXA8SlNWYWx1ZT4oT3Bjb2RlOjphcmdDb3VudCkuYXNVSW50MzIoKTsKKworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBidWZmZXIpIHsKKyAgICAgICAgbG9hZFZhcmFyZ3Mo
Z2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cyku
anNWYWx1ZSgpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0pOwor
ICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQoKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgSlNWYWx1
ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxs
ZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAi
Iik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7Cit9CisKK2lubGluZSBT
bG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCit7CisgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAgICAgYXV0byBu
ZXh0Qnl0ZWNvZGUgPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPigqcGMubmV4dCgp
LnB0cigpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0Qnl0ZWNvZGUuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgMCk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEJ5dGVj
b2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAgICBhdXRv
IG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5dGVjb2Rl
SW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIDApOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBF
bmNvZGVkSlNWYWx1ZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhf
Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkKK3sKKyAgICAvLyBTaW5jZSBhbGwgb3Vy
IGNhbGxpbmcgY2hlY2twb2ludHMgZG8gcmlnaHQgbm93IGlzIG1vdmUgcmVzdWx0IGludG8gb3Vy
IGRlc3Qgd2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJlIGFuZCByZXR1cm4uCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVC
bG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lk
ZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7Cisg
ICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7
CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKHBjLT5hczxPcENhbGxWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ29uc3RydWN0
VmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIC8vIG9wX3RhaWxfY2FsbF92YXJhcmdzIHNob3VsZCBuZXZlciByZXR1
cm4gaWYgdGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5nIHdhcyBpbmxpbmVkLgorICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBj
KTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOworZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2Fs
bEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5
dGVjb2RlSW5kZXg7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKKwor
ICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgp
OworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENhbGxWYXJhcmdz
PigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxG
cmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLCAqc2lkZVN0
YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJn
czoKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYy5uZXh0KCktPm9wY29kZUlEKCkgPT0g
b3BfcmV0LCAiV2Ugc3Ryb25nbHkgYXNzdW1lIGFsbCB0YWlsIGNhbGxzIGFyZSBmb2xsb3dlZCBi
eSBhbiBvcF9yZXQuIik7CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxs
RnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigpLCAqc2lkZVN0
YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0SW5zdHJ1
Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBl
IGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUq
IHByb3RvRnJhbWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZy
YW1lOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0KICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbEZyYW1l
KQogICAgICAgICBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KnZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKaW5kZXggZmNh
ZjgwZGExY2I1YzQ2YzUwZWU3ZjdmNTgwNTMzZjdmNTNjZTA0MS4uY2Q0NWFmMTBiMzEzYTkxNmIw
ZDNlZWMwYmRiYTE2ZWNmOGZkOGFiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50VGh1bmtzLmgKQEAgLTM2LDYgKzM2LDggQEAgdHlwZWRlZiBpbnQ2NF90IEVuY29kZWRKU1Zh
bHVlOwogZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvSmF2YVNjcmlw
dCh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOwogICAgIEVuY29kZWRKU1ZhbHVlIHZtRW50
cnlUb05hdGl2ZSh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOworICAgIHZvaWQgY2hlY2tw
b2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KCk7CisgICAgdm9pZCBjaGVja3BvaW50X29zcl9leGl0
X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQoKTsKIH0KIAogaW5saW5lIEVuY29kZWRKU1Zh
bHVlIHZtRW50cnlUb1dhc20odm9pZCogY29kZSwgVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogZnJh
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20KaW5kZXggZTE3MzRkY2Y2MWI0Y2ZjNTUxMmZhMjg1NjAxYmNhYjMwYzg4ZjJlNC4u
MGI5ZTNkZjg2Mjc1OTgyN2M0MTcyMzBlZDJkY2RkZjFlNWM5MmMwMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtMTA5
MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wTmFt
ZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JFeGl0UmV0dXJuTGFiZWwob3BOYW1lLCBzaXplKQogCiAg
ICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCi0gICAgbG9hZGkgQXJndW1lbnRDb3Vu
dCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMK
IGVuZAogCiBtYWNybyBhcnJheVByb2ZpbGUob2Zmc2V0LCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBt
ZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4MzksMTMgKzE4MzksMTcgQEAgZW5kKQogY2FsbE9wKGNv
bnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUs
IG1ldGFkYXRhKSBlbmQpCiAKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFy
ZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCittYWNybyBicmFuY2hJZkV4
Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCiAg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QzXSwgdDMKICAgICBidHB6IFZNOjptX2V4Y2VwdGlv
blt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhf
dHJhbXBvbGluZQotLm5vRXhjZXB0aW9uOgorLm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCittYWNy
byBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gs
IGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1BhdGgo
ZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYgSlNW
QUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0xOTk5LDYgKzIwMDMsMjIgQEAgb3AobGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAg
aW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKEludGVybmFsRnVuY3Rpb246Om1fZnVuY3Rp
b25Gb3JDb25zdHJ1Y3QpCiBlbmQpCiAKK2lmIG5vdCBDX0xPT1AgYW5kIG5vdCBDX0xPT1BfV0lO
CisgICAgZ2xvYmFsIF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5
cG9pbnQKKyAgICBfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBv
aW50OgorICAgICAgICBtb3ZlIHIwLCBhMgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0
aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKQorICAgICAgICBicmFuY2hJ
ZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAg
ICAgam1wIHIwCisKKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludAor
ICAgIF9jaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQ6CisgICAgICAgICMgRklYTUU6IFdl
IGNhbiBwcm9iYWJseSBkaXNwYXRjaCB0byB0aGUgY2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5
IGJ1dCB0aGlzIHdhcyBlYXNpZXIgCisgICAgICAgICMgYW5kIHByb2JhYmx5IGRvZXNuJ3QgbWF0
dGVyIGZvciBwZXJmb3JtYW5jZS4KKyAgICAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY2hl
Y2twb2ludF9vc3JfZXhpdCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93
X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMAorZW5kCiAKICMgTGFz
dGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBw
b3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVu
IHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCAzZGQy
ZWI0OGNiYmE2ZWY1Y2Q5ODg2MzljNzkxMWUyMmE3MTMzMTQ4Li5iZGUwMmM2MzRiMDk4MmFkOWEz
MmM0ZTQ4NGVmM2NhZjczMDdiN2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIsMTcgQEAgbWFj
cm8gbmV4dEluc3RydWN0aW9uV2lkZTMyKCkKICAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5
dGVjb2RlUHRyVGFnCiBlbmQKIAorbWFjcm8gc3RvcmVQQygpCisgICAgbHNoaWZ0aSBjb25zdGV4
cHIgQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0LCBQQworICAgIHN0b3JlaSBQQywgTExJ
bnRSZXR1cm5QQ1tjZnJdCisgICAgcnNoaWZ0aSBjb25zdGV4cHIgQnl0ZWNvZGVJbmRleDo6Y2hl
Y2twb2ludFNoaWZ0LCBQQworZW5kCisKK21hY3JvIGxvYWRQQygpCisgICAgbG9hZGkgTExJbnRS
ZXR1cm5QQ1tjZnJdLCBQQworICAgIHJzaGlmdGkgY29uc3RleHByIEJ5dGVjb2RlSW5kZXg6OmNo
ZWNrcG9pbnRTaGlmdCwgUEMKK2VuZAorCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcGNvZGVT
dHJ1Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2RlU3RydWN0
JV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZApAQCAtOTIsNyArMTAzLDcg
QEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFpbWluZyBp
bnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6
ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFn
T2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZFBDKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
UEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBC
CiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzkwLDcgKzQwMSw3
IEBAIGVuZAogCiAjIENhbGwgYSBzbG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNh
bGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50
Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZv
ckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpAQCAtMzk5LDIwICs0
MTAsMjAgQEAgbWFjcm8gY2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQogZW5kCiAK
IG1hY3JvIGNhbGxUcmFwSGFuZGxlcih0aHJvd0hhbmRsZXIpCi0gICAgc3RvcmVpIFBDLCBBcmd1
bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3Rh
dGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2Fs
bDIoX2xsaW50X3Nsb3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFu
ZGxlcgotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBs
b2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJ
VEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAgICAgICAgIDEsCiAgICAgICAgIG1h
Y3JvKCkKLSAgICAgICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtj
ZnJdCisgICAgICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgICAgIHByZXBhcmVTdGF0ZUZvckND
YWxsKCkKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEK
QEAgLTQyMSw3ICs0MzIsNyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAg
ICAgICAgICBtb3ZlIHIxLCBzcAogICAgICAgICAgICAgam1wIHIwLCBKU0VudHJ5UHRyVGFnCiAg
ICAgICAgIC5yZWNvdmVyOgotICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09m
ZnNldFtjZnJdLCBQQworICAgICAgICAgICAgbG9hZFBDKCkKICAgICAgICAgZW5kKQogZW5kCiAK
QEAgLTIwNTcsNyArMjA2OCw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93
UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAg
Y2ZyLCB0MwogICAgICAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICAgICAgZ2V0dShzaXpl
LCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgdDIpCi0gICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRD
b3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkg
dDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBz
cAogICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExp
bmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFn
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4IDg0MGY4OWI4OGQ0
MjBjYzNiNzVjODNkNmM1NzgyNDE1NDAyZjMzNjYuLjhmNTA1Y2M2OTljZDRhZTM3ZWYzNDUwMGZk
ZmJlNjk5OTgwN2NkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgK
QEAgLTEzMyw2ICsxMzMsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBvdmVyZmxvd0NoZWNrTm90
TmVlZGVkKCkgeyBjbGVhck5lZWRzT3ZlcmZsb3dDaGVjaygpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZmlsbChzaXplX3QgY291bnQsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmMpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAgICAgIGVuc3Vy
ZUNhcGFjaXR5KGNvdW50KTsKKyAgICAgICAgaWYgKEJhc2U6Omhhc092ZXJmbG93ZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zaXplID0gY291bnQ7CisgICAgICAgIGZ1bmMo
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJnNsb3RGb3IoMCkpKTsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eSgpOwogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHko
aW50IG5ld0NhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAppbmRleCBmOGQ5Nzk5NTg3NDUyMjZhNDdlNmY4YjZjNTU4NjBjMThmY2U4N2Ex
Li5mZmI3NDU5YTZhZGNjYmFiMTZkYThhNGVmOGIxNzExZDg3MmExYWY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xNzg4LDYgKzE3ODgs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGhh
c1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWdu
ZWQgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAg
ICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAg
ICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCkBA
IC0xODIwLDYgKzE4MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRU
eXBlIDogMjsKICAgICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAgICAgdW5zaWduZWQg
bV9jb2RlVHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVja3BvaW50cyA6IDE7CiAKICAg
ICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1v
ZGU7CkBAIC0yMDE4LDYgKzIwMjAsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqCiAKICAgICAs
IG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAg
ICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2FjaGVkQ29kZUJsb2NrLmhhc0No
ZWNrcG9pbnRzKCkpCiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVz
KCkpCiAgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKCkpCkBAIC0y
MjA2LDYgKzIyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVC
bG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29ucwogICAgIG1fcGFyc2VNb2Rl
ID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdlbmVyYXRpb25Nb2RlID0gY29k
ZUJsb2NrLm1fY29kZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2su
bV9jb2RlVHlwZTsKKyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2tw
b2ludHM7CiAKICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRh
ZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1f
cmFyZURhdGEuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAKaW5kZXggZjM1OGQ0OGE1MGRlNzNlYWIzODU2OTliM2E2ZjUxMTNi
YmJlOWJiYS4uZTI3ZmUzY2E5NzhiMzk0NDgyNjE2N2Q0YTA2MWEyZWFkNGY5MjYxNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBA
IC05OCw4ICs5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJFR0lOX05PX1NFVF9QQygpOyAg
ICAgICAgICAgICAgICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RVQlMoKQogCi0jZGVmaW5lIEdF
VChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2Rl
ZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpKQorI2Rl
ZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkKKyNkZWZp
bmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKIAogI2RlZmluZSBSRVRV
Uk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTEzOSw4ICsxMTM5LDcgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQogewogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZp
cm9ubWVudD4oKTsKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgp
OwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29w
ZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwog
ICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEdFVF9D
KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBpbml0aWFs
VmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgpOwogICAgIEFT
U0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNU
RFpWYWx1ZSgpKTsKQEAgLTExNTUsOCArMTE1NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNv
ZGUubV9uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRT
Y29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJl
bnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2N1cnJlbnRTY29wZSku
UmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQogCkBAIC0xMTY1LDcgKzEx
NjMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3Rp
bmdfZnVuY19kZWNsX2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsKICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihi
eXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3Bl
KiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZl
U2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50
KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTE3OSw3ICsxMTc3LDcgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNj
b3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAgICAg
Ly8gUHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0
ZW1lbnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xNDI0LDcg
KzE0MjIsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKIHsK
ICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJheUJ1ZmZl
cj4oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRl
Y29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOworICAgIEFTU0VSVChieXRlY29k
ZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwogICAgIEpTSW1tdXRhYmxlQnV0
dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0
ZXJmbHkqPihHRVRfQyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFz
Q2VsbCgpKTsKICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NDMsNyArMTQ0MSw3IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICAvLyBXZSBhbHNv
IGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRz
IHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEg
Y29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAg
ICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0
ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwor
ICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVC
dXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApAQCAtMTQ4OCw0ICsxNDg2LDE2IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zcHJlYWQpCiAgICAgUkVUVVJOKEpTSW1tdXRhYmxl
QnV0dGVyZmx5OjpjcmVhdGVGcm9tQXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwgYXJyYXkpKTsKIH0K
IAorZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpOworZXh0
ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpCit7CisgICAgZGF0
YUxvZ0xuKFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkpKTsKK30KKworLy8g
ZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CisvLyBleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjLCApCisvLyB7CisKKy8vIH0KKwogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRh
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmlu
ZGV4IDRiZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNh
ODhlZmQxYjc4ZTYzMTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2Jq
ZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVz
c2FnZSk7Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtNDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlw
ZSwgY29uc3RydWN0RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2Jq
ZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAog
fQogCi0KIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBj
b25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBK
U1ZhbHVlIG5ld1RhcmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBh
ZTAwYmExMWQ3Y2VlMjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFm
OWY5M2JhZWI2Y2FjMTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0
YSB7CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3
aXRoIENhbGxEYXRhIGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhl
bS4KIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29u
c3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklW
QVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVj
dG9yLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYs
IEpTVmFsdWUgbmV3VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3Qs
IENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3Ry
dWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFj
MmRkOWFlZmFmZDQzYTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUw
OWYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcApAQCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVu
bWFwQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50
cy5hdChpbmRleCwgaW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFy
Z3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlm
ICghbV9tYXBwZWRBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1p
bihsZW5ndGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAg
ICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmly
c3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAg
Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCAr
IGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0
W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5l
cmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnRE
ZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFw
cGVkQXJndW1lbnRzU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3
NzJlMGEuLjhkOTY0MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQs
NyArMTQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJl
Y3RBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0
aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAw
Y2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRh
YjNkYWVlYjI3MmNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
c2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWdu
ZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9B
cmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3Vt
ZW50c1B0ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAg
ICBNb2RpZmllZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oCmluZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYu
LmUwYWFiZjVmMmVlMTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aApAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2Rp
ZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVz
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTMwNSw5ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01h
cHBlZEFyZ3VtZW50KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRl
eFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZz
ZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3Qs
IGkgKyBvZmZzZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKaW5kZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4u
NmQwNzU5MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQg
SlNBcnJheTo6ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2Vk
QXJndW1lbnRCdWZmZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3Qs
IGkpKTsKIH0KIAotdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJz
dEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNB
cnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZQogICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKS5hdCh0aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCAr
IGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAg
ICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
MTI5NCwxMSArMTI5NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkg
LSBvZmZzZXQpID0gdi5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0
XSA9IHYuZ2V0KCk7CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdl
dChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRd
ID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCmluZGV4IDMxNzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1
YjVmZjQ5MjU0Y2MxYTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCos
IE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMz
ZGFhOTlhNTkzNmRlYTE5YTFjNDljMC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJj
MTkxMWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11
dGFibGVCdXR0ZXJmbHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFi
bGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1t
dXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJs
aWNMZW5ndGgoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsg
aSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0g
Z2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0
RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXgg
YTE4MmRjNjYxOGZhYWJiZmNiM2NlNjNlMDdjMTcxNWRmOGQxZDQ5Yi4uNDgyZTAyNmEyMWY1NjJk
YjVlMzcyNjM3MzA3OWE1ZWM1NTU0OTc4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgogICAg
IHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBhNmViMGVhNWY2YWFkZWIzN2QyNzc5
NGY3YzkxM2Y2ODE2ODM0OTdlLi4xNmFhMzY5ZjQ4NTA3MDYxYzA2MzYxNTE4YWUxNWQyYmM2OGZi
NmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTIwNCw2
ICsyMDQsNyBAQCB2b2lkIEpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKCkKIHsgICAKICAgICBSZWZQ
dHI8Vk0+IHZtID0gbV92bTsKICAgICBpZiAodm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
V0lUSF9NRVNTQUdFKCF2bS0+aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpLCAiUmVsZWFzaW5n
IEpTTG9jayBidXQgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGUgc3RpbGwgYXZhaWxhYmxl
Iik7CiAgICAgICAgIHZtLT5kcmFpbk1pY3JvdGFza3MoKTsKIAogICAgICAgICBpZiAoIXZtLT50
b3BDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKaW5kZXggZGIwNTI1NDg4MjUzMzlhNmIxMzJi
YTRlNDQyYjIxMWQ2ZGUzN2JhMC4uNTk2ODA4Y2FmYzBiMGY0Yzg0NzBiZDc1OWVkOWY0OTE2YzY2
NDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZSogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsTwogCiAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2suc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwgdW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZSk7CiAKLSAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9s
VGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRh
YmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0o
KSkpOworICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQo
Z2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29u
c3RhbnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmpl
Y3QtPnZtKCkpKTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA0MTM4N2M4NTBhOTk1YWQ1NzQyMTA1MGNk
ZTg2Y2IyNTIxZTU0MTE2Li4zZDc3NTdiMmUxN2RkYzFjMThjYWYxMTM0Y2E5OTQxMjg4YjVkNDU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTA5LDEy
ICs1MDksNiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBp
ZiAoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA8IE9wdGlvbnM6OnJlc2VydmVkWm9u
ZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplKQogICAgICAgICBPcHRpb25zOjpzb2Z0
UmVzZXJ2ZWRab25lU2l6ZSgpID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11
bVJlc2VydmVkWm9uZVNpemU7CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIC8vIEZJWE1F
OiBNYWtlIHByb2JlIE9TUiBleGl0IHdvcmsgb24gMzItYml0OgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYKLSAgICBPcHRpb25zOjp1c2VQcm9i
ZU9TUkV4aXQoKSA9IGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVD
YWNoZSgpKQogICAgICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCAwM2YyODUy
NDRkYjk5MDJlYWJhOTZkNjk3N2UzYjdkMzkxOTdkZTUyLi40ZDE1NmNmNzNkZmNkNTRmZmE4M2Rj
ZDc5OGVkN2VhZDZjNWJhYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgKQEAgLTE0OSw3ICsxNDksNiBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJB
c3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoQm9vbCwgdmVyYm9zZUNvbXBpbGF0
aW9uLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2ZXJib3NlRlRMQ29t
cGlsYXRpb24sIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGxvZ0NvbXBp
bGF0aW9uQ2hhbmdlcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoQm9vbCwgdXNl
UHJvYmVPU1JFeGl0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBwcmlu
dEVhY2hPU1JFeGl0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2YWxp
ZGF0ZUdyYXBoLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2YWxpZGF0
ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4MWQ5
NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2MDVm
YmY1MjViZGRmMjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2NvcGVk
QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAgc3Rv
cmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5lcmlj
QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0
RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5
VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYyOWVk
NGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUwODRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1
bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRl
eCwgbV90YWJsZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5ZDU0ZmRjZDg0NzNkNzIz
ZmJhZWNhNTEzNDkwNjFkOTUyMDI0YjkxLi43MDc4MzM0YTU1MmI1YTE2Yzk2OWQzMWFlMWQxMDg5
ZDk5OTEzNzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5FeGVj
dXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpA
QCAtMTAyOSw2ICsxMDMwLDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhD
b25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYKIAordm9pZCBW
TTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc3RkOjp1
bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxvYWQpCit7CisgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdURk1vdmUocGF5bG9h
ZCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gVk06OmZp
bmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIHNpZGVTdGF0
ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHNp
ZGVTdGF0ZTsKK30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJhbWUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGU5YTkwZjA5MGFmNWFhOGY4YTNiMTczZjIx
NGViZWEyMzZhMzlkNDAuLmQwMTU0YjVkYzBmZmZjN2E0MmJkYTg1ZTQ0YzEyYTBkMjlmNmNjYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENv
bW1vbklkZW50aWZpZXJzOwpAQCAtOTQ4LDYgKzk0OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogCisgICAgdm9p
ZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJh
bWUqKTsKKyAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVudHJ5U2NvcGUqIGVu
dHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVj
dCB7IG51bGxwdHIgfTsKQEAgLTExOTgsNiArMTIwMyw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBt
X3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gbV9zY3JhdGNo
QnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsKKyAg
ICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0
IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJv
bEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5
NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdl
N2YxOTI0NzM1MmMwZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBj
b25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25z
dCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0
X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlw
ZSBnZXRDb25zdGFudFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWlu
dDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlw
ZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAg
ICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4
KCldOwogICAgIH0KIAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJ
bnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggYWIxNzQwNmFmYjczNGE3MDhkZjExZGJiNjgwMTUx
OGI3NjY1ZmI0Mi4uZWUyYjMyN2QyYWY1NDcxOTY4Nzk2OWFjMjUyYTg0Yzc4OGVmNmU5NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3Bw
CkBAIC0yNDIsNiArMjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rp
b25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07
CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQg
YnkgSlMgYnl0ZWNvZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBV
TlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRy
b2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDVhOGViYjgxZDJkYmVlMDNhYzY5
MzJhY2VmNmZiYjQ3MjcyZWM4NGIuLmMyNDA2OTA5MzlkMmNlMDE0YTE3M2IyZTM3OWMyZGIxOTky
ZDNkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0
aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3Bw
CkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogCiAj
ZGVmaW5lIFJFQUQodmlydHVhbFJlZ2lzdGVyKSBcCiAgICAgKHZpcnR1YWxSZWdpc3Rlci5pc0Nv
bnN0YW50KCkgXAotICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NLKCktPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkpIFwKKyAgICAgICAgPyBKU1ZhbHVlOjpk
ZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIpKSBcCiAgICAg
ICAgIDogY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcikpCiAKIGlubGluZSBib29sIGppdENv
bXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUsIFdhc206OkZ1
bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAKaW5kZXggYTQ5NzNlYmJhMDQ2OGE2NWRiOTVjOGJhODMyNjRhZDhmYTg2ZGRkOS4uN2E3
MjViMGJjMTViNmU5YjY1NjYxNWFlNjk3ZTBmYzg3ZjgzZDFmMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTIy
MCw3ICsyMjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogCiAgICAgaml0LmVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7CiAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxI
ZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5z
dG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OmFkZHJl
c3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsKIAogICAg
IGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1Nw
aWxsKSB7CiAgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKQEAg
LTI0Myw3ICsyNDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgaGFuZGxlIG1pc21hdGNoZWQgYXJpdHkKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTY0CiAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxKSkpOworICAgICAgICBDQ2FsbEhl
bHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSArIDEpKSk7CiAKICAgICBpZiAodXNlVGFnUmVnaXN0ZXJzKCkpCiAgICAgICAgIGppdC5l
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpq
c0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgLy8gMi4gV2UgbmVlZCB0byBrbm93IHRvIHJlc3Rv
cmUgdGhlIHByZXZpb3VzIHdhc20gY29udGV4dC4KICAgICBpZiAoIW1fanNUb1dhc21JQ0NhbGxl
ZSkKICAgICAgICAgbV9qc1RvV2FzbUlDQ2FsbGVlLnNldCh2bSwgdGhpcywgSlNUb1dhc21JQ0Nh
bGxlZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QoKSwgdGhpcykpOwotICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qc1RvV2FzbUlDQ2FsbGVlLmdldCgpKSwg
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qc1RvV2FzbUlDQ2FsbGVl
LmdldCgpKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSk7CiAKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkg
d2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNoIHRoZSBNb2R1
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNlL1dURi93dGYv
Qml0bWFwLmgKaW5kZXggNGM2ZjVkNDQyNjMyYzNlZmMwMDBiZDE4ZTllMzY5NDUyZmFmMWMxMC4u
YjQ2ZGE5ZTg1YWI5YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQml0bWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKQEAgLTUx
LDYgKzUxLDcgQEAgcHVibGljOgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3Qp
IGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7Cisg
ICAgdm9pZCBpbnZlcnQoKTsKICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNpemVfdCBydW5M
ZW5ndGgpIGNvbnN0OwogICAgIHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAwKSBjb25zdDsK
ICAgICBzaXplX3QgaXNFbXB0eSgpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMywxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAorICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3I9KGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fYml0bWFwLT5zZXQobV9pbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBCaXRtYXAqIG1f
Yml0bWFwOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKQEAgLTExMSw2ICsxMTgsOSBAQCBwdWJs
aWM6CiAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywg
ZmluZEJpdCgwLCB0cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgYml0bWFwU2l6ZSk7IH0KICAgICAKKyAgICBpdGVyYXRvciBvcGVyYXRv
cltdKHNpemVfdCk7CisgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0
OworCiAgICAgdm9pZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5kQ2xl
YXIoQml0bWFwJik7CiAgICAgCkBAIC0yMjQsNiArMjM0LDEzIEBAIGlubGluZSB2b2lkIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQoYml0cy5kYXRh
KCksIDAsIHNpemVvZihiaXRzKSk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0
eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT46OmludmVydCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQor
ICAgICAgICBiaXRzW2ldID0gfmJpdHNbaV07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBT
aXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUs
IFdvcmRUeXBlPjo6bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewpAQCAt
NDA5LDYgKzQyNiwxOSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjpvcGVyYXRvciE9KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUg
V29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVy
YXRvcltdKHNpemVfdCBpbmRleCkgLT4gaXRlcmF0b3IKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBz
aXplKCkpOworICAgIHJldHVybiBpdGVyYXRvcigqdGhpcywgaW5kZXgpOworfQorCit0ZW1wbGF0
ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
LT4gY29uc3QgaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT4qPih0aGlzKSlbaW5kZXhdOworfQorCiB0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgK
aW5kZXggODg1YjdiMTczYjExYTYwMWJlMjlhMzMyYWI5ZDJhNDE0ZDU2MjEyMi4uYTM4Yzk2YzM0
OTNlOWQxMGQ1NmE4MGI1YmQ3NWYxZDRhNmNiZjMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvRmFzdEJpdFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaApA
QCAtNDY0LDYgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0K
IAorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9vbCB2YWx1ZSkgeyByZXR1cm4g
dmFsdWUgPyAqdGhpcyA9IHZhbHVlIDogKnRoaXM7IH0KKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBv
cGVyYXRvciY9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgOiAqdGhpcyA9IHZh
bHVlOyB9CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29yZCB7IG51bGxwdHIgfTsKICAg
ICB1aW50MzJfdCBtX21hc2sgeyAwIH07CkBAIC01MDksNyArNTEyLDExIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBG
b3IgdGVtcGxhdGluZyBhcyBWZWN0b3I8Ym9vbD4KKyAgICB2b2lkIGZpbGwoYm9vbCB2YWx1ZSkg
eyB2YWx1ZSA/IHNldEFsbCgpIDogY2xlYXJBbGwoKTsgfQorICAgIHZvaWQgZ3JvdyhzaXplX3Qg
bmV3U2l6ZSkgeyByZXNpemUobmV3U2l6ZSk7IH0KKwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4N2M3MjI1NTQ3
MjhiMDQ1MjRmNmI0MjNmYzAxZDFhNWMwNzAzYmY1Li41ODI4YmIwZWUwZmRkZGNhOWZlMzEzNDlh
ZWZkYjYyOWFjNTg0NGY5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0
byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmVtb3ZlIHByb2Jl
IE9TUiBleGl0IG9wdGlvbiBzaW5jZSB3ZSBhcmUgbm90IHVzaW5nIHRoYXQgYW55bW9yZS4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMTItMTMgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IHRoZSBtYWNDYXRh
bHlzdCBidWlsZCBhZnRlciByMjUzNDg2CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRl
eCA1MTQyM2E3NThhZjgyMDQyZTk1OGExODhlNjJkNzNmYzcwODM1NWI3Li42NTU3NzQwZjdkYTE3
ZTAxZTViZDEyMjQ5M2NiMDM3YjdmNGVjYjdlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVz
dHMKQEAgLTQ5OCw3ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0tdXNlQ29uY3VycmVu
dEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMAogQjNPMV9PUFRJ
T05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0gWyItLW1heERG
R05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRlZmF1bHRCM09w
dExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQotUFJPQkVfT1NS
X0VYSVRfT1BUSU9OID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZPUkNFX0xMSU5UX0VY
SVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQogCiByZXF1aXJlX3Jl
bGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3skdGVzdFdyaXRlcn0i
CkBAIC03MTMsNyArNzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBs
aW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9m
aWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMg
KyBOT19DSklUX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmct
cHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVy
PXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVm
IHJ1bkZUTE5vQ0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKQpAQCAtNzI5LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxpZGF0aW9uKCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyKCpvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09Q
VElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BU
SU9OICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKKyAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09O
VElOVU9VU0xZX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRl
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5n
ZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZjYzM3OThmYWQ0MzZj
Y2IxZDg4M2I1MTlmYTEuLjdkMjkxOTk5YmU5ZjYwMDU3NDNlNmRmYWI1MjJjZjI5NmViMjkxYmYg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRo
ZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFu
ZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorCisyMDE5LTEyLTEzICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwg
c2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2xvYWQt
dmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanM6CisgICAgICAgIChj
aGVja0VxdWFsKToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJyYXksIGFuZCB1c2UgSlNJbW11
dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12
YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKaW5k
ZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3MzIzMTkwY2Y0
OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mv
bG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcworKysgYi9K
U1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3Ry
aWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgewogICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiAr
IGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEuYy5sZW5ndGgg
IT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVu
Z3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBpZiAoYS5jLmxl
bmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2Yg
YywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIgKyBiLmMubGVu
Z3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAgICAgIGlmIChh
LmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2Yg
YywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385676</attachid>
            <date>2019-12-13 21:02:38 -0800</date>
            <delta_ts>2019-12-13 21:06:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191213210226.patch</filename>
            <type>text/plain</type>
            <size>615375</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDViYzhiNjRiY2JjNzEyYmQ2NDFmNjg1MTBkNmFmMjU2NzhmODA5Li5iZmRkM2Y1ZDM1ZWI5MGJm
NjRkYWFlYmM5Mzg5Y2Y1ZGJhNjJkNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NjggQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGUgdGhlIHByb2JlLWJhc2VkIE9TUiBleGl0
IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uIHRodXMgdGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQgY29kZSBzaW5jZSBpdAorICAgICAgICB3b3VsZCBiZSBhIG5vbi10cml2aWFs
IGFtb3VudCBvZiB3b3JrIHRvIGdldCBjaGVja3BvaW50cyB3b3JraW5nCisgICAgICAgIHdpdGgg
cHJvYmUgT1NSLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAg
ICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUluZGV4OjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6YXNCaXRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjplbnVt
VmFsdWVzRXF1YWxBc0ludGVncmFsKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZSk6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNBbHdheXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNMaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZUlu
ZGV4Rm9yRXhpdCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1UbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6
OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29k
ZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6dW5tYXBPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAg
ICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJh
bmQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6Ok9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpr
aW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kOjp2aXJ0dWFsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1RtcCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNI
ZWFkZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0FyZ3VtZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJpdHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZM
b2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZUbXBzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXApOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omxv
Y2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRG
b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldEZvck9wZXJh
bmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvckluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdl
dENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6On5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcjo6flZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCk6CisgICAg
ICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpk
dW1wKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBh
cnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpm
bHVzaERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNo
T3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFu
dG9tTG9jYWxEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0
T1NSKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RG
R0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5k
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5C
eXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRs
ZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9j
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdU
b0NoZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5m
by5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
YWxsZWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xh
eW91dFBoYXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5k
bGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVu
a3MuaDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JF
bnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
OjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBm
dGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjptYXhVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjptaW5VbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptYXhTaWduZWQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bWluU2lnbmVkKToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50
cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBn
ZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmN1cnJlbnRWUEMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKEpTQzo6Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU6OmdldFRtcCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6c2l6ZU9m
VmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklU
OjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9y
ZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudElu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFs
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlND
OjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRo
dW5rSklUKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRjaE5leHRJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVy
Zmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OmR1bXBSZWdpc3Rlcik6CisgICAg
ICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToK
KyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6
CisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJy
YXksIGFuZCB1c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0YmE4ZTBhN2Ix
NzQ2MDEwNzdlNjUzYmZlZmZkYTFlZTQzOGI0Y2FkLi4zNGMyMmM2ZDhkODBhNjdiMWNlM2JlNTZm
ZDVhMzY0MTUzMTE5OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTEyLTEzICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxk
IGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAg
ICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6
b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0
KToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0
UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6
b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAg
ICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEZhc3RCaXRWZWN0b3IgKG1vcmUp
IHRlbXBsYXRlIGNvbXBhdGFibGUgd2l0aCBWZWN0b3I8Ym9vbD4gc28gb3RoZXIgY29udGFpbmVy
cworICAgICAgICB1c2luZyBhIFZlY3RvcjxUPiBtZW1iZXIgY2FuIHVzZSBGYXN0Qml0VmVjdG9y
IGluc3RlYWQgaWYgdGhlIFQgaXMgYm9vbC4KKworICAgICAgICBBbHNvLCBhZGQgc29tZSBoYW5k
eSBtZXRob2RzIHRvIEJpdG1hcC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJh
dG9yKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6Cisg
ICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVy
ZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJh
dG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpmaWxsKToKKyAgICAgICAgKFdU
Rjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisKIDIwMTktMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgSGVhcDo6ZmluYWxpemUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQ5OTZjMWU0YmQ2MTY1NWMyYzkxNTkyMjJlMGI0ZWJlZTRlMTcwN2YuLjNlZjFmOTA5OTIx
NDcwMTc0ZGI1MzkxZmJjOWM3M2Q4YzNkNWQwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzIsNiArOTMyLDcgQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcyMURBQzM0M0Mw
MEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1
MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9t
aXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzYwMCw2ICszNjAxLDcgQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIz
RXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2Ny
aXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0
aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAw
RTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBw
YXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzYxNCw2ICszNjE2LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8q
IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0Qx
QkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1
NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVy
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVs
cGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAw
NTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2
NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU5NTAsNiArNTk1NSw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBD
YWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENh
bGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BT
dGFja0lubGluZXMuaCAqLywKQEAgLTg1ODEsNyArODU4Nyw5IEBACiAJCQkJQTUyNzA0ODUxRDAy
N0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJ
CQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAq
LywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMg
Ki8sCkBAIC04NTkyLDYgKzg2MDAsNyBAQAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAv
KiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBS
ZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4
NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEw
MDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIx
MDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MDkzLDYgKzkx
MDIsNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQy
NjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFB
OTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMu
LjY4ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aApAQCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0g
ICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggMzVkMDE3
NTZkNTMyYTcxZWMwN2ZlNDAzZWY3YTUyNTBiNWZjNmY2MS4uNDFiYzk2MWExNTMwODVmYmE4NTUw
NjVjMzliNmM2ZGE2ZmIyYTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMjYz
LDIwICsyNjMsMjAgQEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29t
cGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KLXN0cnVjdCBPcGVyYW5kIHsKK3N0cnVjdCBCM09wZXJhbmQgewogICAgIGNv
bnN0IGNoYXIqIG5hbWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgT3BlcmFuZDxp
bnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVy
YW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5cGVkZWYgT3Bl
cmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50NjRfdD4gSW50
NjRPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlw
ZWRlZiBCM09wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8
aW50OF90PiBJbnQ4T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIE9wZXJh
bmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQorI2RlZmluZSBNQUtFX09QRVJB
TkQodmFsdWUpIEIzT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3Rp
bmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQordm9pZCBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+JiBv
cGVyYW5kcykKIHsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDAuKSB9KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigtMC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVXaXRo
SW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci1WZWN0b3I8T3BlcmFuZDxGbG9hdFR5
cGU+PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQorVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+
PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQogewotICAgIFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlw
ZT4+IG9wZXJhbmRzOworICAgIFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7
CiAgICAgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMob3BlcmFuZHMpOwogICAgIHJldHVy
biBvcGVyYW5kczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcAppbmRleCA2MDU4ZmIwNjIwMzk0NmM0Y2Q1NmVmNmE5ODM4NzlkMmQ2
YzgxZmI2Li44MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNhZTVjMGVlM2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAg
LTYzLDcgKzYzLDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLAogCiB2b2lkIEJ5dGVjb2RlRHVt
cGVyQmFzZTo6ZHVtcFZhbHVlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgbV9vdXQucHJp
bnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcub2Zmc2V0KCkpLmRhdGEoKSk7CisgICAgbV9vdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcpLmRhdGEoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFRyYWl0cz4KQEAgLTgzLDEyICs4MywxMiBAQCB0ZW1wbGF0ZSB2b2lkIEJ5dGVjb2Rl
RHVtcGVyQmFzZTo6ZHVtcFZhbHVlKEdlbmVyaWNCb3VuZExhYmVsPFdhc206OkdlbmVyYXRvclRy
YQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKGludCByKSBjb25z
dAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVn
aXN0ZXIgcikgY29uc3QKIHsKLSAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgocikpCisg
ICAgaWYgKHIuaXNDb25zdGFudCgpKQogICAgICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIpOwog
Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0ZXIocikpOworICAgIHJldHVybiB0
b0NTdHJpbmcocik7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCbG9jaz4KQEAgLTk4LDEwICs5OCwx
MCBAQCBpbnQgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4K
LUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAogewotICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25z
dGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgpLCAiKSIpOworICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25zdGFu
dChyZWcpOworICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgcmVnLCAiKSIpOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEJ5dGVjb2Rl
RHVtcGVyOjpkdW1wQ29uc3RhbnRzKCkKICAgICB9CiB9CiAKLUNTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI6OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVy
Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25zdAogewogICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAgYXV0byB2YWx1ZSA9IGZv
cm1hdENvbnN0YW50KGJsb2NrLT5nZXRDb25zdGFudFR5cGUoaW5kZXgpLCBibG9jay0+Z2V0Q29u
c3RhbnQoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmgKaW5kZXggMGQ3MTY3NTAzOTRiMTVkNGViNWU4N2M1YTg4MjUxMDc1ZWZlMDNl
ZS4uZWRiMTEyOTIxYWY3NTNlNjNkODYxMzcyZmJkZTBlZWY4OWZjYTE1OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcFZhbHVlKFQgdikgeyBtX291dC5wcmludCh2KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rl
cikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldCkgY29uc3QgPSAwOwogCiAgICAgQnl0ZWNvZGVEdW1wZXJCYXNl
KFByaW50U3RyZWFtJiBvdXQpCkBAIC05MSwxMSArOTEsMTEgQEAgcHJvdGVjdGVkOgogCiAgICAg
dm9pZCBkdW1wQnl0ZWNvZGUoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0
IElDU3RhdHVzTWFwJik7CiAKLSAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25z
dCBvdmVycmlkZTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgQ1N0
cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKIAogICAgIEJsb2NrKiBt
X2Jsb2NrOwogfTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIEpTQzo6
Qnl0ZWNvZGVEdW1wZXI8RnVuY3Rpb25Db2RlQmxvY2s+OjpCeXRlY29kZUR1bXBlcjsKIAogICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRl
eCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lz
dGVyIGluZGV4KSBjb25zdCBvdmVycmlkZTsKICAgICBDU3RyaW5nIGZvcm1hdENvbnN0YW50KFR5
cGUsIHVpbnQ2NF90KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJhOTA0MDFhNzExN2RjMGY5ZjI2
ZTE5MTM3ZWIyYzMxNTliLi5iODEyZmI0MWJmOWFiZTY2NGY0NDc1OTEzZTljZTM0MjlkYjQxMmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
Y3BwCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMiw2ICszNCw4IEBAIG5hbWVz
cGFjZSBKU0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1wKFdURjo6UHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9mZnNldCgpKTsKKyAgICBpZiAoY2hl
Y2twb2ludCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIsIGNoZWNrcG9pbnQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMxZjcyYWMyMDczMWMxZDNiY2U5MzUx
NThkZi4uNjA4NzAwYzU3YWQ3MDE3MmMyY2IwMGYxMDlhNWM0MTMxNzQyZDViMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0
cmVhbTsKQEAgLTMzLDI4ICszNCwzOSBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKKwogY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJs
aWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUluZGV4KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChkZWxldGVk
VmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZhbHVlKCku
YXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQot
ICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3Qg
Y2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZz
ZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0Owor
ICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAibnVt
YmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMgLSAx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpn
ZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9
CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXgg
ZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09
IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1
aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlk
T2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQogICAg
IGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRvciAhPShj
b25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KIApAQCAtNjksMTMgKzgxLDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0
IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWlu
dDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRP
ZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQz
Ml90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NFUlQoY2hl
Y2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNvZGVJbmRl
eCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29kZUluZGV4
KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBjaGVja3Bv
aW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1
aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJlc3VsdC5t
X29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIKaW5kZXggNzFiZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3ODdhZmZh
NC4uZGYwYmRlYjFjYjBmMDU0MDgwN2U5YWZhN2UyOTMxNGExNzBjMjdkZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3ICs1OSw3
IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2ZpbGUsCi0g
ICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkJpbmFy
eUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwxMyBAQCBv
cCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAg
ICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgwNSw2ICs4
MTIsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAg
IH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmls
LAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cywKQEAgLTg0NSw2ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAog
ICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAg
IGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAg
ZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0K
IAogb3AgOnJldCwKQEAgLTk5Miw3ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJv
d25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6
dGhyb3csCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBiNmNmZjEwMTE0
M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2ZDNjOTE2Y2U1
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBAIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5
cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEg
djEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6
dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50VHlwZTIgPSB0
eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOworICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2
Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9
PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVtQ2hlY2twb2lu
dFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxtYXhOdW1DaGVj
a3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2Fs
bFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wVGFpbENhbGxW
YXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVh
bEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6
bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJn
Q291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgaWYgKGNoZWNr
cG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisgICAgICAgICAgICByZXN1bHQuc2V0
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
CmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzkuLjNlNWVkYzBh
NjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIKICNpbmNsdWRl
ICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFw
aDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxpbmUgYm9vbCBv
cGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRUaGF0
SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJh
bmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmluZGV4IDNkMTJl
MTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEwOWI3ODk2N2Yx
MDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaApA
QCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuICFWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlzTG9jYWwoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJlZy50b0xvY2Fs
KCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkg
fHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDg2
OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1YTFiZDJjMTYz
ZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVT
dHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNsb25l
ZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnBy
ZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmVwbGFj
ZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1l
bnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUp
OworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVn
aXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAgICBib29sIHNo
b3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRDb2RlLT53YXND
b21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENvZGUtPndhc0Nv
bXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEsNyArNjQyLDcg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRv
IGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fdmFyICE9
IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRD
b25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwpAQCAtNzA5
LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVM
b2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9
IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29u
c3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7
CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIg
cGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0
IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0xMDg2LDYgKzEw
ODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVj
b2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXguY2hlY2twb2lu
dCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24ubmV4dCgpLmlu
ZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4MTEsMTAgKzE4
MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5p
cXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkpOwor
ICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocHJv
ZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9maWxlcy0+bV9i
dWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOworICAg
ICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRz
W2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0yNzEzLDcgKzI3
MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8qIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQg
OiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9maWxlQnVja2V0
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDA5MmM3YWFjODQyNmMx
ZTRjOWQ1OWY1NGY5MWU1NTYzNmMzNzRhMWYuLjc5NjM0MzVlYWIzNzQ0ZTk2Y2RlYTU0ZTY4ZDQ4
YmYxMjNlMDAwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKQEAgLTE1OCw2ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxlZUxvY2Fscygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQgbnVtVmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50
VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1f
bnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJz
KTsgfQpAQCAtMjI2LDIwICsyMjcsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVk
Vk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3Bv
aW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgp
CisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYm
ICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0ZXIoKSAmJiAh
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAo
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9y
YXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVybiBp
bmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gbV9udW1W
YXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRs
ZXIpOwpAQCAtNTc4LDEwICs1NzksOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXgg
Pj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25bcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9
CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KQEAgLTc3MSw2ICs3NzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJl
c3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9yRXhpdChCeXRl
Y29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JFeGl0KCkgeyBt
X29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3MSw3ICs4NzIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCi0gICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+IG1f
Y2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAKICAgICAgICAg
RGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAgfTsKQEAgLTkz
OCwxMCArOTM5LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJz
KGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKLSAgICB2
b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBy
ZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3Zt
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1MWM3MzE4ZWJj
MDQzMS4uMThhZjI0MjJiMTAwMWYyNWY5MDk2ODJlNGQ5ZWIwMWE1OWI2NTQ5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAsNyArMTYwLDkg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJhbWUq
IHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOworICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsKKworICAgIGJv
b2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAg
ICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQg
Zm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygp
IGNvbnN0OwpAQCAtMjc4LDYgKzI4MCwxNiBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVy
YXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdAogICAgICAgICAmJiBpbmxpbmVD
YWxsRnJhbWUoKSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWUoKTsKIH0KIAoraW5saW5lIGJvb2wg
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAor
eworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChD
b2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9y
aWdpbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFi
NTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLmFiYTlmMmQzZGYwZWJjN2RmYzUwZDc4MWY2MzEz
YWI5ZDA3MGQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwog
CisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVzbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1w
IGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4K
IGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2
ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlz
TGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lz
dGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBw
b2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZl
Y3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1F
OiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8
UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0
Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uMzkwNDk0Zjk0NTRhNzAyMmU0NWM4OTdjYmEwOTU5ZGQx
YmY5NzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVP
cmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisg
ICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7
CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBp
c0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Nj
b3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJs
ZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsx
OTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUn
cyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNp
b24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElu
bGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAg
ICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xv
c3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihz
dGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9m
ZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1
cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0OSw3ICsyNTgsNyBAQCBpbmxpbmUgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVP
cmlnaQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLWlubGluZSB2
b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhp
czsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMTggQEAgaW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQog
ICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorQUxX
QVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJh
bmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6IG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIHJldHVybiBv
cGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihyZWcub2Zmc2V0
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnOworICAg
ICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmlu
ZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5
NTU1MmViZjM4ZjdiNGFiMmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2
ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIK
KyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAt
NjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJh
bmQudmFsdWUoKSArIG1fb3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCgpIGNvbnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkw
LDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3Bl
cmFuZCBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlI
YXNoIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1
NTc4OWRmZmRlNjdmMzk2Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4
YmMwNjcwNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsK
ICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwot
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgp
OworICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFs
dWVSZWcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7Cisg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEs
NyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFs
dWUgdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNv
ZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgK
aW5kZXggNWQ4MWM0YzkwMGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBj
MDBmYmQ0NGM4NTVhMzg5ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldDsKLSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kOwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWVi
MzczNDU5NDQ2ZGM3NGNkMTIwMjc1NjI1NzYuLjVkYWQzYTlkZDFkMzAzMTllMzE2YWJhNDFhNzIw
ZTZhNGE2NTEwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CkBAIC0zNSwxMTEgKzM1LDIyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFy
Z3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVt
Q2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25lIHRoYXQgZXhpc3Rz
IGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBi
eXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJh
bmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFu
ZCgpID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1l
bnRPcGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsg
fQorCisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAg
ICAgICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS5pc0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3Bl
cmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVy
YW5kKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0K
KyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWlu
dDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgp
OyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVy
YW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3Vt
ZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5s
aW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQ7CisgICAgaW50IG1fb3BlcmFu
ZDsKK307CisKK0FMV0FZU19JTkxJTkUgYm9vbCBPcGVyYW5kOjpvcGVyYXRvcj09KGNvbnN0IE9w
ZXJhbmQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZSgpID09IG90aGVyLnZhbHVlKCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpID09
IG90aGVyLnZpcnR1YWxSZWdpc3RlcigpOworfQorCitpbmxpbmUgYm9vbCBPcGVyYW5kOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkg
Pj0gMDsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpOworfQorCitpbmxp
bmUgT3BlcmFuZCBPcGVyYW5kOjpmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBPcGVy
YW5kIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxPcGVyYW5kPih2YWx1ZSk7CisgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpY19hc3NlcnQo
c2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZih1aW50NjRfdCksICJPcGVyYW5kOjphc0JpdHMoKSBy
ZWxpZXMgb24gdGhpcy4iKTsKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2Ug
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKLSAg
ICBPcGVyYW5kcygpCi0gICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykK
KyAgICAvLyB1c2luZyBTdG9yYWdlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKKyAgICAvLyB1c2luZyBSZWZUeXBlID0gdHlwZW5hbWUgc3RkOjpjb25k
aXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yOjpCaXRSZWZl
cmVuY2UsIFQmPjsKKyAgICAvLyB1c2luZyBDb25zdFJlZlR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKKyAg
ICB1c2luZyBTdG9yYWdlID0gVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKKyAg
ICB1c2luZyBSZWZUeXBlID0gVCY7CisgICAgdXNpbmcgQ29uc3RSZWZUeXBlID0gY29uc3QgVCY7
CisKKyAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNp
emVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCiAgICAgewotICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5l
ZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1
bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAg
ICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkp
OwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFy
Z3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCiAgICAgewotICAgICAg
ICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsK
KyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
KTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlr
ZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKKyAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQog
ICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkgKyBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhl
ci5zaXplKCkpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQot
ICAgIAorCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Bcmd1bWVudHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQotICAgIAorICAgIHNpemVfdCBu
dW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9CisgICAgc2l6ZV90
IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9m
QXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisKKyAgICBzaXplX3QgdG1wSW5kZXgo
c2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRt
cHMoKSk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CisgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlk
eDsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX251bUFyZ3VtZW50cyArIGlkeDsKKyAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIGlkeDsKICAgICB9CisKKyAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6
ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAK
LSAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFs
dWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQotICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNp
emVfdCBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsKLSAgICB9CisgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGFy
Z3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgo
aWR4KV07IH0KICAgICAKLSAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1tsb2NhbEluZGV4KGlkeCldOyB9Ci0gICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIFJlZlR5cGUgbG9j
YWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAg
IENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2lu
ZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZUbXBzKCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fscygp
OworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkxvY2FscygpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgotICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCisgICAgUmVmVHlwZSBhdEZvcihz
aXplX3QgaWR4KQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3Bl
cmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9w
ZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1l
bnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJl
dHVybiBsb2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAg
IHJldHVybiBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJh
bmRLaW5kIG9wZXJhbmRLaW5kPgotICAgIGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0
CisgICAgQ29uc3RSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9w
ZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVy
biB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAg
IGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisK
KyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVl
ID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAg
ICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxv
Y2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBuZXdTaXplID0g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6
ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHNpemVfdCBvbGRO
dW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
Ci0gICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBUKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTnVtVG1wczsgKytpKQorICAgICAgICAgICAgbV92YWx1
ZXNbbmV3U2l6ZSAtIDEgLSBpXSA9IG1fdmFsdWVzW3RtcEluZGV4KG9sZE51bVRtcHMgLSAxIC0g
aSldOworCisgICAgICAgIG1fbnVtTG9jYWxzID0gc2l6ZTsKKyAgICAgICAgaWYgKGVuc3VyZWRW
YWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUgLSBvbGROdW1Mb2Nh
bHM7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2Fs
cyArIGkpXSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5z
dXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUpCisgICAgdm9pZCBl
bnN1cmVUbXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAg
ewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6
ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXpl
IDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mVG1wcygpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOworCisgICAgICAgIGlmIChlbnN1
cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXph
dGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXpl
OyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBU
JiB2YWx1ZSkKQEAgLTE2NCw4NCArMjc0LDc2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlk
eCA+PSBudW1iZXJPZkxvY2FscygpIHx8IGxvY2FsKGlkeCkgPT0gVCgpKTsKICAgICAgICAgc2V0
TG9jYWwoaWR4LCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgo
aW50IG9wZXJhbmQpIGNvbnN0CisKKyAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBn
ZXRGb3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PE9wZXJhbmRzKj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KKworICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1
cm4gYXJndW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9j
YWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJu
IGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKLSAgICBzaXplX3Qg
b3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CisgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChPcGVyYW5kIG9wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wZXJhbmRJbmRleCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAo
IW9wLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOwogICAgIH0K
ICAgICAKLSAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFJlZlR5cGUgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkp
OworICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIAotICAg
IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBSZWZUeXBl
IG9wZXJhbmQoT3BlcmFuZCBvcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kKHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJu
IHRtcChvcC52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVy
YW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJh
bmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBU
Jj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KKyAg
ICBDb25zdFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQogICAgIAotICAg
IGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxz
KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgp
KSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQotICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKG9wLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcC52YWx1ZSgpID49IDAp
OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3AudmFsdWUoKSkgPCBu
dW1iZXJPZlRtcHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChvcC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQg
b3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3Bl
cmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5vcGVyYW5kKG9wZXJh
bmQpID0gdmFsdWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNl
dE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgfQogCiAgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25z
dCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQot
ICAgIFQmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAg
Y29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7
IH0KLQotICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4IDwgbV9udW1Bcmd1bWVudHM7IH0KLSAgICBib29sIGlzTG9jYWwoc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgb3BlcmFuZEZvcklu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBSZWZUeXBlIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBS
ZWZUeXBlIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKwor
ICAgIE9wZXJhbmQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpLm9mZnNldCgpOwotICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZv
ckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICBlbHNlIGlmIChpbmRleCA8
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7
CisgICAgICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0
T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHNldEFy
Z3VtZW50Rmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCksIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c2V0TG9jYWxGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFs
dWUpOwotICAgIH0KLSAgICAKKwogICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKQEAgLTI1Nyw2
ICszNTksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHMoKSA9PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mTG9jYWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChu
dW1iZXJPZlRtcHMoKSA9PSBvdGhlci5udW1iZXJPZlRtcHMoKSk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gbV92YWx1ZXMgPT0gb3RoZXIubV92YWx1ZXM7CiAgICAgfQpAQCAtMjY1LDkgKzM2
OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4KLSAgICBWZWN0b3I8VCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFsdWVzOwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1l
bnRzOworICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJn
dW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJl
IHRtcHMuCisgICAgU3RvcmFnZSBtX3ZhbHVlczsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
cyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
ZXJhbmRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCmluZGV4IDY1ZmVkZGEwNzMwYTgzOTFmODMxNTYzZGJkZWI4MTZhZjkyNTY2ZmQu
LjBiMWNjMWYyZDE5N2FkMDgzNjVhOGY3ODU2MWZkZjY3YTdkOWVkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKQEAgLTMwLDYgKzMw
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIG91dC5w
cmludCgidG1wIiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKIHsKQEAgLTQ0LDYgKzUyLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRl
eCwgIjoiLCBpbkNvbnRleHQobG9jYWwobG9jYWxJbmRleCksIGNvbnRleHQpKTsKICAgICB9Cisg
ICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9mVG1wcygpOyAr
K3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBp
bkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOworICAgIH0KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KQEAgLTYwLDYgKzczLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGxvY2FsKGxvY2FsSW5kZXgpKTsK
ICAgICB9CisgICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9m
VG1wcygpOyArK3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRl
eCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKaW5kZXggZDVkZGVlOGQ1NjA3NzAzMjNiMWZkNWYxYWNjY2NjMDUwMmMxMjY1NC4uN2U5
MzI2MmRmYjA5NTlkZWMyYTkyNDFmZjhjNjExZjMzYjkyYjQ0NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC03Miw2
ICs3Miw3IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlCiAgICAgLCBtX2NvZGVUeXBlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkpCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hh
c0NoZWNrcG9pbnRzKGZhbHNlKQogICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkK
ICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1f
bWV0YWRhdGEoVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpjcmVhdGUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggYTRmYTdl
MDU1YjhlOTJiNmFhYWFhNThjMWE5ZDllY2JhYmY0OThmMy4uYjk1MTY1Y2VmMGI4NjZiNDBlNjMx
MzQyNzFlODE5MzQyYTkwYmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTE0Miw2ICsxNDIsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOyB9CiAgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9u
SW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAorICAgIGJvb2wgaGFzQ2hlY2tw
b2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CisgICAgdm9pZCBzZXRI
YXNDaGVja3BvaW50cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KKwogICAgIC8vIFNw
ZWNpYWwgcmVnaXN0ZXJzCiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQogICAgIHZv
aWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Nj
b3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9CkBAIC0xOTksOSArMjAyLDggQEAgcHVibGlj
OgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KICAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlm
aWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsgfQpAQCAtNDIwLDYgKzQyMiw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9kaWRPcHRpbWl6ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9hZ2Ug
OiAzOwogICAgIHN0YXRpY19hc3NlcnQoKCgxVSA8PCAzKSAtIDEpID49IG1heEFnZSk7CisgICAg
Ym9vbCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKaW5kZXggYmJiOGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFlMTE4MzNlZmI5MDM2
Ny4uZWI5MTc5NDUzMGRmMWEzMjkyZGNkYmVkMzE2NGU5Yzc5MDlhNjlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApAQCAtMTc2LDI4ICsxNzYs
MjggQEAgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRl
eChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHIKICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
LT5tX2J5dGVjb2RlSW5kZXg7CiB9CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDog
cHVibGljIFZhbHVlUHJvZmlsZSB7Ci0gICAgaW50IG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogfTsKIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIgeworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQorICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgICAgICA6IG1fc2l6ZShzaXplKQog
ICAgIHsKICAgICAgICAgLy8gRklYTUU6IFZhbHVlUHJvZmlsZSBoYXMgbW9yZSBzdHVmZiB0aGFu
IHdlIG5lZWQuIFdlIGNvdWxkIG9wdGltaXplIHRoZXNlIHZhbHVlIHByb2ZpbGVzCiAgICAgICAg
IC8vIHRvIGJlIG1vcmUgc3BhY2UgZWZmaWNpZW50LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDEzCi0gICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0p
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKLSAgICB+
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcigpCisgICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlciB7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0
cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPiBtX2J1ZmZlcjsKKyAgICBNYWxsb2NQdHI8VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
Y3BwCmluZGV4IGM1Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0
N2YwZTE4ZGYwNjNhODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBA
QCBKU1ZhbHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0CiB7CiAgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS51bmJveGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUy
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1
MigpKTsKICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5h
TihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUo
KSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpKS51bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVy
biBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkQm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAg
Y2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5
NGYzMmEyOTNhZmQ4OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMw
OTRlNThkYTNiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAy
MWY1YWQwNDguLmViMGNjYzM4ZWRiYTRlODgzYmFhMTQ0MThiMDYxNmVlYWYzYTMyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAg
LTMxLDEyICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFu
ZElzTG9jYWwoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2Fs
KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVn
aXN0ZXJJc0FyZ3VtZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7
CiB9CkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElz
TG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNI
ZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVh
bFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAppbmRleCBmODBhN2M0ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2Uz
Li40ODFiNWYyYjE5ZDU5NWYxMjAzYjc3ZDc3OWYyMzRmMDIxMzg4Y2MyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcApAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAg
ICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRv
IG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3Jj
MS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVh
bFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5
KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNy
YzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzIt
PnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkp
LT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7
CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5l
ZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIyOSw2ICszMjI5LDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAh
PSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMs
IHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDAp
LCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1ZmZlZjBlZjI2Y2I1MWU2ZjkuLjQyZGI5
N2Q2NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTEw
MDcsNiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRD
b250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVHZW5lcmF0aW9u
TW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNvbnRyb2xGbG93UHJvZmlsZXIpOyB9
CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAgICB2b2lkIHNldFVzZXNDaGVja3Bv
aW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KIAogICAgICAgICBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnBh
cnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYy
MjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQw
LDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhl
YXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAg
ICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJz
dHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBS
YW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgi
KCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQu
cHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIs
IHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2
OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNs
dWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAt
MTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXls
b2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAg
ICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVl
KG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFu
ZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7
CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQg
IT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAm
JiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5
bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXls
b2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0
SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5k
IG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAm
JiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMo
cGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0
eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRhY2I1NDBkNDBhZTE3
OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uM2NjZTJkZjcyN2I2OTE4MWY0YjZiNTVkMTU4NzVi
YTZlNmQ3NTQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRl
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFs
cmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1
ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkp
KSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJh
bmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJl
IGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBl
KHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUo
KSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRl
Lm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVu
dHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBt
ZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0
LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAg
ICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1OCw2ICs0NTgsMTIg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAg
ICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50
IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDc2LDcg
KzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJh
bmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAg
ICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZz
ZXQoKSArIGkpKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKaW5kZXggZDcz
MjQ3YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4uODljMDhmYTA4MGNlYTMyZmQ5
YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3Zhcmlh
Ymxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2
YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxl
LT5vcGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgIG91dC5w
cmludCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYyZWRhNGFkODhlOWI5N2FhZDVm
NGY5MzkyMzc2MjE5NTJhZWY4NC4uZmEyNGM2OWQwZmVjYjdiYWZjNzA1ZDg1YzNjNWFkMGM2NTM5
MWU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSArMzU4LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAg
ICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlX
aXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5jaGls
ZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBl
c2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3Ao
KSA9PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheUJ1
ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+YXJndW1lbnRzQ2hp
bGQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtNDkzLDEwICs0OTYs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhl
YXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0byBhbiBhcmd1bWVudCBvciBs
b2NhbCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQgU2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJh
bmQocmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhbmQuaXNI
ZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC01NjAs
MTIgKzU2MywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
Q2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJl
ZEJ5QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRo
aXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNDbG9iYmVyZWRCeUJsb2NrKSB7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVh
cCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgp
ID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5s
aW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04NDUsOSArODQ4LDIzIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5h
dGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwgc28gaXQg
YmV0dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKKworCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG9yaWdp
biwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTg2MiwxMCArODc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50
YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzTm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdz
RGF0YS0+Y291bnQpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9y
aWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZs
dXNoZWRJbnQzMikpLApAQCAtODc0LDE0ICs4OTEsMTUgQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgICAgICAgICBhdXRvIHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBz
dG9yZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtp
bGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcu
b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcElu
Zm8ocmVnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZI
aW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2lu
LndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpLCBFZGdlKHZhbHVlKSk7CkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+
b2Zmc2V0OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAx
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJn
c0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJn
c0RhdGEtPmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXgg
NjI2MTEyM2NiZmVjM2ViYTE5NWQwOWI5MzEwMjZmMjZjNzI1ODQ3Ni4uMjA2ZDZmYmRjNTRhMzZj
Yjg0MThhOGIzODU0NmQ4NzU3Nzk5MDFiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCBy
ZWcuaXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC01MiwxMyArNTYsMTMgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICByZXR1
cm4gcmVnID49IGFyZ3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51bUFyZ3Vt
ZW50czsKIH0KIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0
ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChO
b2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKSwgcmVnKTsKKyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9CiAKIE5v
ZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQm
IGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVP
cmlnaW4gb3JpZ2luKQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1
bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgYWRkVGhp
cykKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApAQCAtNjks
MTEgKzczLDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAg
ICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAgIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
QnVmZmVyCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkLAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAgICAgYXJn
dW1lbnRzLT5vcCgpKTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkKKyAgICAgICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNl
cnRpb25TZXQsIGFyZ3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9yaWdpbiwg
YWRkVGhpcyk7CisKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMg
PSAwOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IGFkZFRo
aXM7CiAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRWZWN0b3Io
KTsKICAgICAgICAgTm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpAQCAtMTAz
LDcgKzExMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKIAog
ICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5v
cCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVt
YmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5n
dGgoKSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50
cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRo
aXMpKTsKICAgICB9CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAgLTExMyw3
ICsxMjAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAg
ICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+PSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0IEBAIE5v
ZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9kZUluZGV4
LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tl
ZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9y
aWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsK
KyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCArICFhZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCkgewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1
Y2UgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJl
Y3QgdGhhdCBoZXJlLgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwg
CiAgICAgICAgICAgICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIo
MCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRG
b3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVzZSkpOwog
ICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5k
ZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5ZTgxNjIy
ZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wgYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rlcik7Citi
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCk7
Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5k
KTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2Vy
dGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2lu
KTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRl
eCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2My
OGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAg
LTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1
bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZh
bHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIHsg
cmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJz
dHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNB
dFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJhNS4uYzJi
NTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEw
IEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0
eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsK
LSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVtYmVyT2ZB
cmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFu
ZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFw
aC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAg
ICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAg
ICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1NTI1NjAy
M2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0
ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAg
ewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFt
ZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkK
KyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3QgSGFzRnVu
Y3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFi
aWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICBBdmFp
bGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAgICAgIGlm
ICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCAwNTg0
NDk2M2U2MTBlZDI5M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYxNTYxOGI4
MDY0YTNhN2IyZDc4NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0
IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5
dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1
bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVn
aW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgs
MTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2Vu
ZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMs
IG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
LSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAg
ICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYgKzcwLDE1
IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykK
ICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxv
Y2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjpl
bnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVu
c3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAg
dmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0aW9uT2ZQ
YXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVs
bFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWlu
YWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggYjVh
ZGYwOTEyZDA5NDJiZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRjNmY0ZDFi
MDg1YmM4ZTA2MjU0ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKQEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4g
QmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxv
Y2s+IHsKICAgICBCYXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25D
b3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1
bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdO
dW1UbXBzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMu
c2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cAppbmRleCA3NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4wMDhjZjUy
MjY5NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBA
QCB2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNC
bG9jaz4mJiBibG9jaykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChz
aXplX3QgaW5kZXgsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291
bnQpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxv
Y2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRt
cHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwog
ICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92
ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAppbmRleCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQwOGI3Li4x
ZTg2MWRjMWE3NGQ5NzU4MzU4MDhmZTg4ZTg2NzkzNDBhODNhZmE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYgKzExMSw3
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJl
cigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkpCisgICAgICAgICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAg
ICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQog
ICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOwogICAgIH0KIAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQor
ICAgIHsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRvIHJh
aXNlIG1fbnVtVG1wcyBmcm9tICIsIG1fbnVtVG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4i
KTsKKyAgICAgICAgaWYgKG5ld051bVRtcHMgPD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX251bVRtcHMgPSBuZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3Jh
cGguYmxvY2soaSktPmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBI
ZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0
b3I+CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5
cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwpAQCAtMjcwLDI1ICsyODIsMzMg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJh
c2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxl
VGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwcm9ncmVzc0NoZWNrcG9p
bnQoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKKyAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KKyAgICAg
ICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAg
ICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKKyAgICB9CisKKyAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQu
aXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAg
ICAgICAKICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFu
ZCk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7
CiAgICAgfQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5
dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsK
IAotICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAKLSAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgotICAgICAgICByZXR1cm4gZ2V0TG9jYWwo
b3BlcmFuZCk7CisgICAgICAgIHJldHVybiBnZXRMb2NhbE9yVG1wKG9wZXJhbmQpOwogICAgIH0K
IAogICAgIE5vZGUqIGdldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKQEAgLTI5OCw4ICszMTgs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRz
LnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1f
Y29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ29kZUJs
b2NrJiBjb2RlQmxvY2sgPSAqbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kLm9m
ZnNldCgpKTsKLSAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
Y29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCkBA
IC0zNTgsOSArMzc4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGluaXRpYWxpemluZyBsb2Nh
bHMgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgogICAgICAgICBJbW1lZGlhdGVOYWtlZFNldAog
ICAgIH07Ci0gICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2Rl
KiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorCisgICAgTm9kZSogc2V0RGly
ZWN0KE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKICAgICB7Ci0gICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQu
b2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9w
ZXJhbmQpLCB2YWx1ZSk7CiAKICAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnltb3JlIGJlY2F1
c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICAgICBtX2V4aXRPSyA9IGZh
bHNlOwpAQCAtMzc0LDcgKzM5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gZGVsYXllZC5leGVjdXRlKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgcHJvY2Vz
c1NldExvY2FsUXVldWUoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKQEAgLTM5MiwxOCArNDEzLDE3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNT
RVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkgPT0gbV9jdXJyZW50SW5k
ZXgpOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5vcGVyYW5kKCkp
OwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAgICAgICAgIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92
ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRM
b2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbE9yVG1wKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50
b0xvY2FsKCk7Ci0KLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
IG9wZXJhbmQuaXNMb2NhbCgpKTsKKyAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICAv
LyBUaGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRh
dGFzLCBhbmQgMikKICAgICAgICAgLy8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBH
ZXRMb2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IKQEAgLTQyOCwyMCArNDQ4LDI1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOwogICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYg
c2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldExvY2FsT3JUbXAoY29uc3Qg
Q29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUs
IFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICBTZXRGb3JTY29wZTxD
b2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGlj
T3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKLSAg
ICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1l
bnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgp
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpID49IG1fbnVtVG1wcykg
eworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigqaW5saW5lQ2FsbEZyYW1lKCkpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQg
b3BlcmFuZDogIiwgb3BlcmFuZCwgIiBidXQgY3VycmVudCBudW1iZXIgb2YgdG1wcyBpczogIiwg
bV9udW1UbXBzLCAiIGNvZGUgYmxvY2sgaGFzOiAiLCBtX3Byb2ZpbGVkQmxvY2stPm51bVRtcHMo
KSwgIiB0bXBzLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRp
YXRlTmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAg
ICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9j
b2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgu
bmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVy
KCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUx
LDcgKzQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VD
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwg
QmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDgsMjEgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0
QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAg
IE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVy
YW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAg
ICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJy
ZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBh
cmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFy
Z3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEocmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9y
ICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFr
ZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwg
bV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9
IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQp
OworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OCwxNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0
KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAg
ICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRp
b24oT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVu
dChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRp
b25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NzUsNiArNjAzLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5k
bGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQg
dG8gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRl
Y29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFw
cHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4p
KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVu
ZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBAIC01ODQsMjcgKzYxMywyNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZs
dXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVz
aERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAg
ICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRp
b24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQg
YWRkRmx1c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9j
YWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFT
U0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25z
dGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02
MTQsMjYgKzY0MywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9H
cmFwaChub2RlVHlwZSwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChh
cmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFi
bGUodmFyaWFibGUpOwogICAgIH0KIAotICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxv
Y2FsPihvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBmbHVzaChJbmxpbmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsK
LSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmly
dHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFk
ZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsg
Zmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0Vu
dHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZv
aWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGly
ZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJ
bmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVj
dChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxs
RnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAg
ICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBP
cGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAg
ICBmbHVzaEZvclRlcm1pbmFsSW1wbChjdXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVj
dCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3ODksMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNo
aWxkMykpOwogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBO
b2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxk
MSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJu
IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhvcGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZh
bHVlKCkpLCBjaGlsZDEpOworICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9w
LCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0g
RWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwOTEsOCArMTEyNCwxMCBAQCBwcml2YXRlOgogCiAg
ICAgLy8gVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAg
ICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAo
dmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVt
YmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBm
b3IgdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBt
YXggbnVtYmVyIG9mIHRlbXBzIHVzZWQgZm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhp
dCB0byBjaGVja3BvaW50LgorICAgIHVuc2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVt
YmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQg
dG8KICAgICAvLyBwcmVhbGxvY2F0ZSBmb3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZy
b20gdGhpcyBmcmFtZS4gVGhpcwogICAgIC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1l
IHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5
NCwxNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsK
ICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIGNvbnN0CisgICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJh
bmQgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBP
cGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFu
dCgpKTsKIAotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNl
dCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0OwogICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNzUsMTMgKzEyMTMsOCBAQCBwcml2
YXRlOgogICAgIElDU3RhdHVzQ29udGV4dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAg
ICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFs
dWU7Ci0gICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXll
ZFNldExvY2FsKCkgeyB9Ci0gICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2lu
JiBvcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlKQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2lu
LCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAg
ICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
CiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCkBAIC0xMTk0LDggKzEyMjcsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1f
b3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXIt
PnNldExvY2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAg
ICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQs
IG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAgICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1f
b3JpZ2luOworICAgICAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1
ZSB7IG51bGxwdHIgfTsKKyAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAK
ICAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4
LDcgKzEyNDYsNyBAQCBwcml2YXRlOgogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9j
YXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBB
U1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxv
Y2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFz
aWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVt
VG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAg
Ly8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFz
aW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9i
bG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKQEAgLTEyMjAsNyArMTI1OCw3IEBAIEJhc2ljQmxv
Y2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVu
dGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJl
ZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1M
b2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1f
bnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAg
ICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2Nr
UHRyOwpAQCAtMTQyMyw3ICsxNDYxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVj
dXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUg
aXMgVmFyYXJncywgd2UgZG8gbm90IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxs
eSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAg
ICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9m
IHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51
ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmls
bGVkIGFyZ3VtZW50cyBieSB4a0xvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBl
ciBmcmFtZSB3aGljaCBtYXkgYmUKICAgICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVt
cCBpbnRvLgogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xNjE0LDE2ICsxNjUyLDE4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIENhCiAgICAgQVNTRVJUKCEobnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90cyAlIHN0YWNr
QWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVw
ID0gcmVnaXN0ZXJPZmZzZXQgLSBudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzOwogICAgIAotICAg
IGludCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkub2Zmc2V0KCkgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKyAgICBPcGVyYW5kIGlubGluZUNhbGxG
cmFtZVN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAKICAgICBlbnN1cmVMb2NhbHMo
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgp
ICsgMSArCisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnRvTG9jYWwoKSArIDEgKwogICAg
ICAgICBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIGNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpOwogICAgIAorICAgIGVuc3VyZVRtcHMobV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKE9wZXJhbmQoVG1wT3BlcmFuZCwgY29kZUJsb2NrLT5udW1UbXBzKCkpKS52YWx1
ZSgpICsgbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKKwogICAgIHNpemVfdCBhcmd1
bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwog
CiAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOworICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAogICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxscHRyOwogICAgIGlmIChjYWxs
ZWUuaXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xNjM2LDcgKzE2NzYsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBDYQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSogY2FsbGVyU3RhY2tUb3AgPSBtX2lu
bGluZVN0YWNrVG9wOwogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlz
LCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgY2FsbGVlLmZ1bmN0aW9uKCksIHJlc3VsdCwKLSAgICAg
ICAgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKKyAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQudmlydHVhbFJlZ2lzdGVyKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBh
Y3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgQnl0ZWNvZGVJbmRleCBvbGRJbmRl
eCA9IG1fY3VycmVudEluZGV4OwpAQCAtMTY3MSw5ICsxNzExLDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQ2EKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3ZSBiZWdpbiBleGVjdXRpbmcgdGhl
IGNhbGxlZSwgd2UgbmVlZCBPU1IgZXhpdCB0byBiZSBhd2FyZSBvZiB3aGVyZSBpdCBjYW4gcmVj
b3ZlciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZXR0ZXIsIGxvYzkgYW5kIGxvYzEwLiBUaGUgTW92
SGludHMgaW4gdGhlIGlubGluZWQKICAgICAgICAgLy8gY2FsbGVlIG1ha2UgaXQgc28gdGhhdCBp
ZiB3ZSBleGl0IGF0IDxIRVJFPiwgd2UgY2FuIHJlY292ZXIgbG9jOSBhbmQgbG9jMTAuCiAgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQg
PSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRv
R2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2Rl
T3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTcsMTYgKzE3NTcsMTYgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcywgd2UgZG8gbm90IG5lZWQg
dG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgIT0g
cmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9m
ZnNldCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50
VG9HZXQpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvU2V0ID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJn
dW1lbnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFy
Z3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwg
YXJndW1lbnRUb1NldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcml0eUZp
eHVwQ291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB1
bmRlZmluZWQpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92
SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgbV9z
ZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigp
LCBhcmd1bWVudFRvU2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAg
ICB9CiAKQEAgLTE4OTMsMTIgKzE5MzMsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBjYWxsVGFyZ2V0Tm9kZSwgdGhp
c0FyZ3VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGludCByZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
ID0KLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudmlydHVhbFJlZ2lz
dGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMb2NhbHMoVmlydHVhbFJl
Z2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAgICAgIAogICAg
ICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3Rh
cnQpKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkp
LnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKICAgICAgICAg
ZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgMSk7
CkBAIC0xOTA2LDExICsxOTQ2LDI0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFy
Z3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAg
IGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAgICAgZGF0YS0+bGltaXQgPSBt
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWlu
aW11bSA9IG1hbmRhdG9yeU1pbmltdW07Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbE9wID09
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRW
YXJhcmdzLCBPcEluZm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRUb0dy
YXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOwor
CisgICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKKyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoR2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lQ2Fs
bEZyYW1lKCktPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBn
ZXREaXJlY3QocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdz
LCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAg
ICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3Bl
cmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICAgICAg
c2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhk
YXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQoKTsKKwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXRMb2Nh
bE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVw
IGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3Vt
ZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQg
YSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdp
c3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVh
c29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNT
QS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNv
dW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2Ug
dGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAg
Ly8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5p
dGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3Rs
eSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5i
b3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxv
Y2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVu
dENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVu
c2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDYsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRh
dG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBP
cEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRz
OwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNiw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygK
ICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0
ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZF
UkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAg
ICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZs
dXNoKTsKIApAQCAtNTEwMiw3ICs1MTU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29k
ZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJl
Z0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpz
Q29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdf
cmVnZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMxLDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAm
JiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5v
cCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1
ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAg
ICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gp
OyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBi
ZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ4LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIyMywxNCAr
NjI3NiwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkp
OwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hM
b2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVt
YmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCks
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVy
YW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZh
bHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFw
aC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAg
ICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4MjYsOCAr
Njg3OSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNh
bEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7
Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRp
YWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmco
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dy
YXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0g
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25t
ZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBP
cEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1f
ZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNzI3NSw4ICs3MzI4LDEwIEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAvLyBU
aGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBh
IGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgogICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRl
QmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9j
YWxsZXItPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2Nv
ZGVCbG9jay0+bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNr
T2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID09IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewog
ICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNv
dmVyeTo6Y29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsID0gZmFsc2U7CkBAIC03NjM4LDcgKzc2OTMsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNzY1OCwyNCArNzcxMywyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzc29yLT5wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZp
bmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9w
LCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgT3Bl
cmFuZCBhcmd1bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50LmlzQXJndW1lbnQoKSAmJiAhYXJn
dW1lbnQuaXNIZWFkZXIoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxBcmd1bWVudFBvc2l0aW9uKj4mIGFyZ3VtZW50cyA9IG1faW5saW5lQ2FsbEZyYW1lVG9B
cmd1bWVudFBvc2l0aW9ucy5nZXQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHNbYXJndW1lbnQudG9Bcmd1bWVudCgpXS0+YWRkVmFyaWFibGUo
dmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgb3AsIG9y
aWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIEZsdXNoLCBvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQ
aGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2
ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBQaGFudG9tTG9jYWwsIG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBmbHVzaEZvclRl
cm1pbmFsSW1wbChvcmlnaW4uc2VtYW50aWMsIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9j
YWxEaXJlY3QpOwpAQCAtNzc0MCw2ICs3Nzk1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpKTsKICAgICB9CiAKKyAgICBtX2dyYXBoLm1fdG1wcyA9IG1fbnVtVG1wczsKICAgICBt
X2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRl
clNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKaW5kZXggOGU5YmI0YWNiZTU1MDJkZGE3YjM3NDc4NGI1YTg1ZmZkZTcw
M2JmZC4uM2RjNzU2OGYxZWUyYzY5NzcyMjY4Y2M5NmRlYTRhMDVjNjIzNjI1MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE3MCwyMiArMTcwLDIyIEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBjb25zdCBP
cGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
T3B0aW9uYWw8SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFu
b2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBvcGVyYW5k
LCAiXG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICBXaWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIgd2l0aCAiLCB2
YWx1ZS52YWx1ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBXaWRlbmlu
ZyAiLCBvcGVyYW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHRhcmdldCA9IGJsb2NrLT52YWx1ZXNBdEhl
YWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdGFyZ2V0Lm1lcmdl
T1NSRW50cnlWYWx1ZShtX2dyYXBoLCB2YWx1ZS52YWx1ZSgpLCBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSwgbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAppbmRleCBkOThmZDRhZjQ0MGYwN2NiYzE2YjY3ZDYwMmJh
NjQyNmFmMGYyMzgyLi41NzcwZjA5ODk0MmM4OTZiN2FjZjgyM2ZjYWI5NDQ0YTIyNGNjZWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBzcGVjaWFsQ2FzZUFy
Z3VtZW50cygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKICAgICAg
ICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXM8VG1wT3BlcmFuZD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hlZCgpOwogICAgICAgICAK
ICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAgLTIxMSwxMCArMjEyLDIw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQog
ICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
c3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1l
bnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9w
ZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFu
ZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogeworICAg
ICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8VG1wT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5v
ZGVUeXBlLCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBBU1NFUlQo
b3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9
IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1
bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRv
bUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJs
ZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5k
KCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsT3BlcmFu
ZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2Rl
VHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50
b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
bXBPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2Fs
Rm9yPG5vZGVUeXBlLCBUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJh
bmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXQoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2Fs
KCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChu
b2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6
ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg5LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBjbGVhclZhcmlhYmxlczxBcmd1bWVudE9wZXJhbmQ+KCk7CiAgICAgICAgIGNsZWFy
VmFyaWFibGVzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8VG1wT3Bl
cmFuZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVy
ZW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAogICAgICAg
ICAvLyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24n
dCBhc3N1bWUgdGhhdCB0aGUgcmVmCkBAIC0zODgsNyArNDExLDcgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICB2b2lkIHByb3BhZ2F0ZVBoaXMo
KQogICAgIHsKLSAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0g
b3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9s
b2NhbFBoaVN0YWNrOworICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3Rh
Y2sgPSBwaGlTdGFja0ZvcjxvcGVyYW5kS2luZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVu
c3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5LgogICAgICAgICBt
X2Jsb2NrID0gMDsKQEAgLTQ2Niw5ICs0ODksMTIgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxP
cGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYg
cGhpU3RhY2tGb3IoKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50
T3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Ci0gICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsK
KyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7
CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAg
ICAgICBjYXNlIFRtcE9wZXJhbmQ6IHJldHVybiBtX3RtcFBoaVN0YWNrOworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcHV0ZUlzRmx1c2hlZCgpCkBAIC01MjEsNiArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fYXJn
dW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2xvY2FsUGhp
U3RhY2s7CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV90bXBQaGlTdGFjazsKICAg
ICBWZWN0b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAppbmRleCAyMzgxYzZiOGY4ZjRi
YTc2MzRiYjY2YjEyMzk0NzFiNWE2MTY2N2NlLi40Y2NlMTc0ODgzZTIwNDEwZDYyMjNhNmY0MTcy
ZWRkZTY5OGFhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cApAQCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFN0YWNrOiB7CiAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9w
KCkpOwotICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
cmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAg
IGlmIChjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgbV9mYWxsYmFja1N0
YWNrTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNzIsNyArMTcxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGlmICghY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAocGFpci5rZXkuaGVhcCgp
LmtpbmQoKSA9PSBTdGFjaykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFs
dWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5l
bmQoKSAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBwYWlyLmtleSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yMjYsOCArMjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBh
YnN0cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CiAgICAgICAgICAgICBpZiAoYWJzdHJhY3RI
ZWFwLnBheWxvYWQoKS5pc1RvcCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBhZGQobV9mYWxs
YmFja1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWJzdHJh
Y3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUz
MigpKTsKLSAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01h
cC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCksIG51bGxwdHIpOworICAgICAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFj
dEhlYXAucGF5bG9hZCgpLnZhbHVlKCksIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9uLCBub2RlLCAwfSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksOCArMjQ3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBTaWRlU3RhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBjYXNlIFN0YWNrOiB7Ci0gICAgICAgICAgICBBU1NFUlQobG9j
YXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpID09IGxvY2F0aW9uLmhlYXAoKS5wYXlsb2Fk
KCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2Nh
dGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKICAgICAgICAgICAgICAgICAmJiBpdGVy
YXRvci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlLT52YWx1ZTsKQEAgLTI5OCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgIC8v
IGEgZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1fZmFsbGJhY2tT
dGFja01hcC4KICAgICAvLwogICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBnb2VzIGludG8g
bV9mYWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlxdWUgdmFsdWUu
Ci0gICAgSGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBE
ZWZhdWx0SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8aW50MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgSGFzaE1hcDxpbnQ2NF90
LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQ2NF90Pjo6
SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50NjRfdD4+IG1fYWJzdHJh
Y3RIZWFwU3RhY2tNYXA7CiAgICAgTWFwIG1fZmFsbGJhY2tTdGFja01hcDsKIAogICAgIE1hcCBt
X2hlYXBNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4
IDg5YmM2NDFmNTI2YmI1M2ZmMDM3ZjczY2Y5NTBiYWM2NDZkNDk5NTQuLmUwYTA3YzdjZTZlNGQ1
MjRkOTY1NDRjNWQwMDgzMmMyYzM5NWI5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCkBAIC0xMTEsOSArMTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRl
RnUKICAgICAvLyBzY2FuIHdvdWxkIHJlYWQuIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBm
b3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9
IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ss
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9
CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNwZWNpZmljYWxseSBhY2NvdW50IHdoaWNoIG5v
ZGVzIGNhbiByZWFkIGZyb20gdGhlIHNjb3BlCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBLaWxsU3RhY2s6Ci0g
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7
CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAt
NDk3LDcgKzQ5Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5sb2NhbCgpKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVy
YW5kKCkpKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBA
IC03ODgsMzYgKzc4OCw0MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3Rh
Y2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2Rl
KSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3Bl
cmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJh
Y3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAg
ICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3Bl
cmFuZCk7CiAgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0
YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CisgICAgICAgIHJldHVybjsgIAorICAg
IH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAg
ICAgIHdyaXRlKEhlYXApOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRh
LT5jb3VudC5vZmZzZXQoKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1p
dDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3Rh
cnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyNiw5ICs4MzMsOSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7Cisg
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50
PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFy
dCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2
ZW5lc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcAppbmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0
NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcg
QEAgc3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJp
bGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVj
b2RlKAogICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAg
IHJlZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUw
OWY5MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2FkYi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEz
MzJmZDUyNDk2NTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29k
ZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVu
ZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAt
IDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICBy
ZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERp
c3Bvc2FibGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0
LDEzICs2NCwxMyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRl
SW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2Rl
T3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAg
ICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjps
YXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNp
emUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lu
cy5zaXplKCkgLSAxKSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVP
cmlnaW5zLnNpemUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggODU0MTIzMTQ3NDFlNmYx
MTI2MWYyZTk3YzQ5ZmU2NDRkYWU3YmFmNy4uZjM4YzgzZmRkMzBjMmY1M2IzZDUwOTNmNDBiMmM3
MGU5NTMxMDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
Mjk0LDYgKzI5NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VP
ZkN1c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJp
bmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1
ZmJjNDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0
aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwog
ICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxp
emF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBH
ZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAg
ICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZt
LmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAg
ICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWVlMWYwMDczYjBmNGJiY2M0NzM0
ZWI2NDFlNDY0OGMzMDU1YTI0NC4uY2EzM2RiMjI3ZDRiOTI3NzNmYTg2ZDcyZWUzZDRkMWI4NWJm
OTgzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBA
IC0yNDMyLDYgKzI0MzIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKwogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0
aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ2NCw4ICsyNDcyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAg
IGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAg
ICAgY2FzZSBOZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGb3JBbGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxL
aWxscy5oCmluZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLjkz
M2EyYmRlMjJlMTY2YzJhZWI2ZDRhYzFiYmU5Y2UxZTVjZWQ1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJu
YWwgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMg
Zm9yIGZpbmRpbmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBT
U0EuIFRoaXMgYWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMg
aXMgdXN1YWxseSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBw
b2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3
aGVyZSB0aGUgbm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9n
cmFtIHBvaW50cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVy
LCBjb25zdAogICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5m
b3JFeGl0OwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3Bl
cmFuZCBhbHJlYWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBp
cyBsaXZlIGF0IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAo
bm9kZUFmdGVyLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gbm9kZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xp
dmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0g
ICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG5vZGVBZnRlci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5k
KTsKKyAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC03MCw4ICs3NCwyNCBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgIC8v
IG90aGVyIGxvb3AsIGJlbG93LgogICAgIGF1dG8qIGJlZm9yZUlubGluZUNhbGxGcmFtZSA9IGJl
Zm9yZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1lID09
IGFmdGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGludCBzdGFja09mZnNldCA9IGJl
Zm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGJlZm9yZUlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhZnRlci5ieXRlY29k
ZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9p
bnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAg
IGF1dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFm
dGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBpbnQgdG1wT2Zmc2V0ID0gYmVmb3Jl
SW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOwor
ICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5m
aWx0ZXIobGl2ZUFmdGVyKTsKKworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0
KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoT3BlcmFuZChUbXBP
cGVyYW5kLCB0bXAgKyB0bXBPZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Ly8gTm8gbG9jYWxzIGNhbiBkaWUgYXQgYSBjaGVja3BvaW50LgorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2Fs
bEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAgICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihj
b2RlQmxvY2spOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVs
bExpdmVuZXNzLmdldExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYg
bGl2ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgo
KSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwpAQCAtODIsMTcgKzEwMiwy
MSBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJl
Zm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgICAgICAgICAgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhZnRlci5ieXRl
Y29kZUluZGV4KCkuY2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmluZyBhY3Jvc3MgYSBjaGVja3Bv
aW50IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFuIGlubGluZUNhbGxGcmFtZS4i
KTsKKwogICAgIC8vIERldGVjdCBraWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQg
aXMga2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBCaXRW
ZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwotICAg
IGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZlQWZ0
ZXIgPSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOworICAgIHVuc2ln
bmVkIG51bUxvY2FscyA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAg
ICAgICAgIGJlZm9yZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAg
ICAgICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3RlZCkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9M
b2NhbCgpKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/
IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAg
ICAgICAgaWYgKGxpdmVBZnRlci5nZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQp
OwogICAgICAgICB9KTsKIH0KICAgICAKQEAgLTEwNSw3ICsxMjksOCBAQCB2b2lkIGZvckFsbEtp
bGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWVu
SW5DbG9zdXJlRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxsZWRG
dW5jdG9yRmxhZyA9IDI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IGZsYWdzOwotICAg
IAorCisgICAgQVNTRVJUKG5vZGVJbmRleCk7CiAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwogICAgIAogICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKQEAgLTEyMCwxNSArMTQ1
LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSk7CiAKLSAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOwotICAgIGlmIChub2Rl
SW5kZXgpCi0gICAgICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKKyAgICBO
b2RlKiBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CiAKICAgICBmb3JBbGxLaWxs
ZWRPcGVyYW5kcygKICAgICAgICAgZ3JhcGgsIGJlZm9yZSwgbm9kZSwKLSAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAgICAg
ICAgICAgICAgICByZWcsCisgICAgICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAgICAgICAg
ICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmxhZ3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xvc3VyZUZsYWc7CiAgICAgICAgICAgICAgICAgfSwK
QEAgLTE1OSw2ICsxODIsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAgICAvLyBTdGFy
dCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8g
b25seSBpbnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVw
IHRvIG5vZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0
aGUgZnVuY3RvciBoYXMgbm90aGluZyB0byBkby4KICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
IGRhdGFMb2dMbklmKEZvckFsbEtpbGxzSW50ZXJuYWw6OnZlcmJvc2UsICJsb2NhbCBhdmFpbGFi
aWxpdHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRleCwgIiAiLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2
YWlsYWJpbGl0eSk7CiAgICAgICAgIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAg
ICAgICAgICBncmFwaCwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHksIGJsb2NrLCBu
b2RlSW5kZXgsCiAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggNzk2NDk4NTMzMTYwM2MzOGJiYWVjZTQzYjQ3YThi
YTA4NzliZDg3MC4uZjM1ZDY1YzJhOGRmMThmZmE3ZWVlZjU0NjFjYTMyYTNjNGIyYWMyMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTMwOCw4ICszMDgsOCBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwg
Tm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigiLCBWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgICAg
ICAgICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CiAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKQEAgLTMxNywxMyArMzE3LDEzIEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2Rl
KiBub2RlLCBEdW1wQ29udGV4CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNTdGFja0FjY2Vzc0Rh
dGEoKSkgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7CisgICAgICAg
IG91dC5wcmludChjb21tYSwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIGlmIChkYXRhLT5tYWNo
aW5lTG9jYWwuaXNWYWxpZCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGlu
ZToiLCBkYXRhLT5tYWNoaW5lTG9jYWwpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEt
PmZvcm1hdCk7CiAgICAgfQotICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZExvY2FsKCkpIAotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgaWYgKG5v
ZGUtPmhhc1VubGlua2VkT3BlcmFuZCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKTsKICAgICBpZiAobm9kZS0+aGFzVmVjdG9yTGVuZ3RoSGludCgp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ2ZWN0b3JMZW5ndGhIaW50ID0gIiwgbm9kZS0+
dmVjdG9yTGVuZ3RoSGludCgpKTsKICAgICBpZiAobm9kZS0+aGFzTGF6eUpTVmFsdWUoKSkKQEAg
LTUxNSw5ICs1MTUsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgQmFzaWNCbG9jayoKICAgICAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+b3AoKSA9PSBQ
aGkpOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5v
ZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhp
Tm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAg
ICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+b3Bl
cmFuZCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CiAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBw
aGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PmNoaWxkMigpKSB7CkBAIC04ODQsNyArODg1LDcgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdl
dExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEK
ICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICBp
ZiAobm9kZS0+b3BlcmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKQogICAg
ICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtODkzLDkgKzg5NCw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRM
b2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAg
ICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nl
c3NEYXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3Vic3RpdHV0
ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICBO
b2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJs
b2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgp
KTsKICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAg
IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KSkgPSBuZXdHZXRMb2NhbDsKKyAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkgPSBuZXdHZXRMb2NhbDsKICAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMTEzMywyMyArMTEzNCw0MyBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6a2ls
bHNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgcmV0dXJuIGtpbGxz
Rm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOwogfQogCi1ib29sIEdy
YXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFu
ZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2co
IkNoZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgYm9v
bCBpc0NhbGxlck9yaWdpbiA9IGZhbHNlOworCiAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0
ciA9ICZjb2RlT3JpZ2luOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBj
b2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpKTsKKyAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAvLyBXZSBuZWVkIHRvIGhh
bmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCisg
ICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KKyAgICBm
b3IgKDsgY29kZU9yaWdpblB0cjsgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZSA/ICZp
bmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlciA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcE9mZnNldCA9IGlu
bGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5k
LnZhbHVlKCkpOworCisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC52YWx1ZSgpID49IDApOwor
ICAgICAgICAgICAgLy8gVGhpcyB0bXAgc2hvdWxkIGhhdmUgYmVsb25nZWQgdG8gc29tZW9uZSB3
ZSBpbmxpbmVkLgorICAgICAgICAgICAgaWYgKG9wZXJhbmRJbmRleCA+IHRtcE9mZnNldCArIG1h
eE51bUNoZWNrcG9pbnRUbXBzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBv
cGVyYW5kSW5kZXggPCB0bXBPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGF1dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxv
Y2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4g
Yml0TWFwLmdldChvcGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOworICAgICAgICB9CisKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBjb2Rl
T3JpZ2luUHRyLT5zdGFja09mZnNldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nKCJyZWcgPSAiLCByZWcsICJcbiIpOwogCi0gICAgICAgIGF1
dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwot
ICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0
KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgeworICAgICAgICBpZiAob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zm
c2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgewogICAgICAgICAgICAg
aWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZWcub2Zmc2V0KCkgPCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAKQEAgLTEx
NzYsNDIgKzExOTcsNDEgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNz
Rm9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZnVs
bExpdmVuZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHBy
b3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJP
cmlnaW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0
IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShy
ZWcsIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpj
b2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
QXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQg
d2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5nLgotICAg
ICAgICBpZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYm
IHJlZy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVn
LnRvQXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXpl
KCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IkFyZ3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ug
d2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVj
b2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRyID0gJmlu
bGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdpbiA9IHRy
dWU7CiAgICAgfQorCisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3Rh
Y2ssIHJldHVybmluZyB0cnVlLlxuIik7CisgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9j
YWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9yIEdyYXBo
Ojpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewog
ICAgIEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNMaXZlSW5C
eXRlY29kZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9jYWxzICsg
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9yQWxsTG9j
YWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2Nh
bCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAg
ICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQu
dG9Mb2NhbCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM0LDggKzE2NTQsOCBAQCBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5vZGU7IG5v
ZGU7KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAg
ICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQoKS5pc0Fy
Z3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5vcGVyYW5k
KCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1f
cm9vdFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkg
bm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0xNjU1LDcg
KzE2NzUsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAg
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBmYWI5Y2Yw
MmEyNTk3NmVmNDdkMTc5MDViYWQ5Y2UwM2UzODJiY2U1Li5mN2ExZDgyMTRjMzAyZDdkOTZhYzJh
NzdhMDE4NjZhOWQxMTlmNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBA
IC04NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBpZiBhIHNp
bmdsZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhh
biBjYWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5
IHF1ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0aGUKICAg
ICAvLyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVj
aCBzbG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5IGdldCBh
bGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRo
aXMgZG9lc24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFy
Z3VtZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vz
bid0IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwg
cHJlc3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgdG8KICAg
ICAvLyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gY2Fs
bGluZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lkIGZvckFs
bExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBub3QgcmVk
dW5kYW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBv
ZiBhIHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dzIHRoYXQg
YXJndW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAg
LTg4MSw2ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0
Qnl0ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVn
KTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJs
b2NrLT5udW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZl
bmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90
IHRtcCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUsIE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wKSkpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwNCw5ICs5MTIsOSBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFs
bCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0
bHkgdXNlZnVsIGlmCisgICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbG9jYWxz
IGFuZCB0bXBzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKICAgICAv
LyB5b3Ugd2FudCB0byBjb21wYXJlIHR3byBzZXRzIG9mIGxpdmUgbG9jYWxzIGZyb20gdHdvIGRp
ZmZlcmVudCBDb2RlT3JpZ2lucy4KLSAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUo
Q29kZU9yaWdpbik7CisgICAgQml0VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luKTsKIAogICAgIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBhcHByb3ByaWF0ZUxp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludChDb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0NhbGxlck9y
aWdpbikKICAgICB7CkBAIC05MzgsMTIgKzk0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZTsKICAgICB9CiAgICAgCi0gICAg
Ly8gVGVsbHMgeW91IGFsbCBvZiB0aGUgYXJndW1lbnRzIGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUg
Z2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCi0gICAgLy8gZXh0ZW5zaW9uIHRvIGZv
ckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5
cyBwcmVzdW1lZCBsaXZlLgorICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxp
dmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAorICAgIC8vIGV4dGVu
c2lvbiB0byBmb3JBbGxMb2NhbHNPclRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJn
dW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgogICAgIHZvaWQgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yQWxsTG9jYWxz
TGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CisgICAgICAgIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFzIGJlaW5nIGxpdmUuCiAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KQpAQCAtMTExNCw2ICsxMTIyLDcgQEAgcHVibGljOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzOworICAgIHVuc2lnbmVkIG1fdG1wczsKICAgICB1bnNpZ25l
ZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5z
aWduZWQgbV9wYXJhbWV0ZXJTbG90czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggOTlhZWZmY2RjMDVhMTFjNDVi
MDU3NDEyNTBmNGQyYWViNGUyMjhjZC4uMjAyZDIyNTA1M2ZhOWRmYmU1YzIzYzY0YmNmOGJlMzg0
ZTNlNzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTQ1LDggKzQ1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9hYnN0
cmFjdFZhbHVlcygqZ3JhcGgubV9hYnN0cmFjdFZhbHVlc0NhY2hlKQotICAgICwgbV92YXJpYWJs
ZXMobV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5tX2xvY2FsVmFy
cykKLSAgICAsIG1fYmxvY2soMCkKKyAgICAsIG1fdmFyaWFibGVzKE9wZXJhbmRzTGlrZSwgZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIG1fYmxvY2sobnVsbHB0cikKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5oCmluZGV4IGJmNWVhZDE4ZWMxNjQ3ZWUxNjc2Njg4MzU3NDAxZmE3ZmVjNzEyOTku
LjE4NjVlNmExZWZmYzNkYWFlZmU1ODRjYTg2MmM0OWJjMzY4NTg1MDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKQEAgLTE2
NywxMyArMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFy
aWFibGVzW2luZGV4XSk7CiAgICAgfQogCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQg
b3BlcmFuZCkKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLm9wZXJhbmRJbmRleChv
cGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIHRoaXMtPm9wZXJhbmQob3BlcmFuZC5vZmZzZXQo
KSk7IH0KLSAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5sb2NhbEluZGV4KGluZGV4
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4
IDNkODQzY2U1OGYyMGI0MTE2MzM5ZmNkYTk1ODhhZWJhNmI3YThjMmUuLjZmNTExOTk4NDNkN2Vm
NTdiMzA1NTY5ZGYzODMwNjY2YzdmNmMxODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC04NSw4ICs4NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIo
b3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRvIG9zckV4aXRUaHVua0xhYmVsID0gQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWls
dXJlSnVtcHM7CkBAIC05NywxMyArOTUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhp
dHMoKQogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS5vc3JFeGl0SW5kZXgpOwotICAgICAgICBpZiAo
T3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAgICAgICAgICAgIEp1bXAgdGFyZ2V0ID0g
anVtcCgpOwotICAgICAgICAgICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRodW5rTGFi
ZWxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKHRhcmdldCwgb3NyRXhpdFRodW5rTGFiZWwpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVK
dW1wKCk7CisgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOwog
ICAgIH0KIH0KIApAQCAtMjg4LDExICsyODAsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgYXV0byB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBP
U1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwot
ICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoaW5mby5tX3BhdGNoYWJsZUp1bXAubV9qdW1wLCB0YXJnZXQpOwotICAg
ICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAgICAg
ICAgIGV4aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwotICAgICAgICB9CisgICAg
ICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRhcmdldCk7
CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07CisgICAgICAg
IGV4aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwogICAgICAgICBpZiAoaW5mby5t
X3JlcGxhY2VtZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29t
bW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3JlcGxh
Y2VtZW50U291cmNlKSwKQEAgLTU5NSwxMSArNTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5v
dGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkg
IT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFy
aWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2Vy
dmF0aW9uUGhhc2UuY3BwCmluZGV4IDQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkzZTA4YWMyNWNh
NjMxMzQuLjQ1ZWNiNDZhYTI0NDNiYTFiOTU1NzE2YmMxZjQyYTcwOGExYTA0ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9j
YXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9j
ayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7
CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4gV2UganVzdCB1
c2UgaXQgZm9yIGFzc2VydGlvbnMuIElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywKICAgICAgICAg
Ly8gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2ggdGhhdCB3ZSBp
bnNlcnQuCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBmbHVzaElzRGVm
aW5pdGVseUludmFsaWQgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkg
ewogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpbmRleDsgaS0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0
KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+bG9jYWwoKSA9PSBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFj
ayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGFsbEdvb2QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgaGFuZGxlQmxvY2tGb3JUcnlDYXRjaChCYXNpY0Jsb2NrKiBibG9jaywgSW5zZXJ0aW9uU2V0
JiBpbnNlcnRpb25TZXQpCiAgICAgewogICAgICAgICBIYW5kbGVySW5mbyogY3VycmVudEV4Y2Vw
dGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdENhdGNo
SGVhZDsKLSAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIE9wZXJhbmRzPGJvb2w+
IGxpdmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
VG1wcygpKTsKIAogICAgICAgICBIYW5kbGVySW5mbyogY2FjaGVkSGFuZGxlclJlc3VsdDsKICAg
ICAgICAgQ29kZU9yaWdpbiBjYWNoZWRDb2RlT3JpZ2luOwpAQCAtMTMzLDExICsxMzIsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gb3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICAgICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+
aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOworICAgICAgICAgICAgICAg
ICAgICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CiAKICAgICAgICAgICAgICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGhhbmRsZXIt
PnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUlu
Qnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSks
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3Jp
Z2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5vcGVyYW5k
KG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7CkBAIC0xNTYsMTIgKzE1NSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3VsdDsKICAg
ICAgICAgfTsKIAotICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50
QmxvY2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMo
KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsKKyAg
ICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0
YShPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG51bGxwdHIpOwogCiAgICAg
ICAgIGF1dG8gZmx1c2hFdmVyeXRoaW5nID0gWyZdIChOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWdu
ZWQgaW5kZXgpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRFeGNlcHRpb25I
YW5kbGVyKTsKLSAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZl
QXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkg
eworICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5v
cGVyYW5kKG9wZXJhbmQpKSB7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRG
bHVzaExvY2F0aW9uKGJsb2NrLCBpbmRleCwgb3BlcmFuZCkpOwogCkBAIC0xNzgsNiArMTc3LDgg
QEAgcHVibGljOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gMDsgbG9jYWwg
PCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsKyspCiAgICAg
ICAgICAgICAgICAgZmx1c2godmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgdG1wID0gMDsgdG1wIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZlRtcHMoKTsgKyt0bXApCisgICAgICAgICAgICAgICAgZmx1c2goT3BlcmFuZChU
bXBPcGVyYW5kLCB0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5Miw5ICsx
OTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50TWF5
YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5s
b2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2ZUF0
Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsK
LQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFk
Lm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRG
bHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1cnJlbnRC
bG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNr
KG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3Vy
cmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw5ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NF
UlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAo
KSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAK
ICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFuZCk7CiAg
ICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNw
cAppbmRleCA3M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5mZmY5NmJm
Y2Y2MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBt
X2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFs
KCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7CisgICAgICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0g
bV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
RXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6
IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3Vy
cmVudEVwb2NoKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFw
aCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUlu
ZGV4IC0gMSksIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBp
dCBtaWdodCBjbGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5z
dCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJl
ZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQob3BlcmFu
ZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5k
IGF0ICIsIG5vZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJlNjU1ZjUyNTFmOTZmNDA0ZTMzYjQ2
Li5iODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0IFN0YWNrQWNj
ZXNzRGF0YSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9jYWwobG9j
YWwpCisgICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9y
bWF0KQorICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0
KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIE9w
ZXJhbmQgb3BlcmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZs
dXNoRm9ybWF0IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5MDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTIzLDkgKzkyNCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxk
MSgpOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIGNo
aWxkMigpOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTczLDkgKzk3
Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNz
RGF0YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
KCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPm9wZXJhbmQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVM
b2NhbCgpCkBAIC05ODMsNyArOTg2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFi
bGVBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhh
c1VubGlua2VkTG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgpAQCAtOTk2LDEwICs5OTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5kIHVubGlua2Vk
T3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKLSAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90PigpKTsKKyAg
ICAgICAgQVNTRVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJh
bmQ6OmZyb21CaXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3ICsxMzUzLDcgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7CisgICAgICAg
IHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwg
b3AoKSA9PSBWYXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEq
IGxvYWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggMjRjNzMzZDM4NzAyNzlmNGE1NmI0ZTY4OGJmMGJmMDZhYzI0YzFkNC4uZTNlOWMzMmY4
ZDA4MTNhNmFkYTIyYWFjY2QzNzQ0MmQ0ZWJkOWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAvKiBUaGVzZSBh
cmUgdXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8o
UHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0y
MDIsNiArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEdldEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggMzI4MGY4N2E2
MjY3ZGYwMzRjODRlMzMxODUzMGM3NDE5ZTU1ZTk3ZS4uZDEwYTIwNzA0YjAxOWQ3ZTg3N2FjYjI5
NjMyNmJhODk3MDBjMTNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSwxMSAr
MzUsOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRl
cm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFz
cyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JB
bGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5m
b3JFeGl0LAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQs
ICIgIik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwog
ICAgICAgICB9OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+
aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTIwLDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxp
dmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgw
KS0+b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFm
dGVyIHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwOCwyOCAr
MjA2LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9k
ZShOb2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9j
YWwpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6
IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
LnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZs
dXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5vcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewot
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBAIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJn
czoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFpbGFiaWxpdHko
Rmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZhaWxhYmlsaXR5
KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBpKSkgPQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkg
KyBpKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5zdGFydCArIGkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93
IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRp
b24oQXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewog
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsK
ICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRp
b24oQXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkg
ewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRQTG9jLCBub2RlLCBp
KSwgYXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTViMGM3Yzk0Yjg0M2U4OTBkYzcu
LjBkODI5MzUwZDRjNmUwYTEyMDg2ODM2YzBiMGIxNzgwZjJiYmUyZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0zODIsMTAgKzM4MiwxMCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NS
RW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAg
ICAgQVNTRVJUKGluc3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRh
ZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5t
ZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0YUJ1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRy
eUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCku
aXNMb2NhbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkYXRhQnVmZmVyW2luZGV4
XSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCBkYzc2YmNiYWVkNDFlZWUwNjNkZmRiZWE4NDUwNjY1
NTNkMGNiNGQ2Li42MDk2ODY2M2I2NGMyYjY4NTRlNDYxNjFmOTQ5OTQ2NTdlMWFlZmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBsb2NhbHNbbG9jYWxdID0gbmV3Um9vdC0+YXBw
ZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigp
LCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3Bl
Y05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBP
cEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSksCiAgICAgICAgICAg
ICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggMThjNjQxNDc5MzQyNDY5YjQxY2E4Zjk4ZjMw
OGIzYTRjOTMzYmE5OC4uMDVkZTk1OGNhZWVmMWI4ZjA5ZTMyZDA5N2E4ZmUzMmQ2Nzc0MjAxYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVz
ZURlZi5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVk
ZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJE
RkdNYXlFeGl0LmgiCkBAIC00Nyw4OTUgKzQ4LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBQcm9iZSBiYXNlZCBPU1IgRXhpdC4KLQotdXNpbmcgQ1BVU3RhdGUg
PSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2lu
ZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0
IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6
OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ss
IE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiwgdWludDMyX3Qg
b3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVG
b3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJj
ZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgc3RkOjpt
ZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4oc291cmNlLmJhc2UoKSkgKyBzb3VyY2Uu
b2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShjcHUuZ3By
PEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsKLSNlbHNlCi0gICAgaWYgKHNvdXJjZS5o
YXNLbm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShzb3VyY2UudGFnKCksIGNwdS5n
cHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlKGNw
dS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2Uu
cGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJs
b2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0
b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCks
IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBj
YWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVUNQVVJlZ2lzdGVyKiBwaHlzaWNhbFN0YWNrRnJh
bWUgPSBjb250ZXh0LmZwPFVDUFVSZWdpc3Rlcio+KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3Rl
cnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBU
aGUgY2FsbGVlIHNhdmVkIHZhbHVlcyBjb21lIGZyb20gdGhlIG9yaWdpbmFsIHN0YWNrLCBub3Qg
dGhlIHJlY292ZXJlZCBzdGFjay4KLSAgICAgICAgLy8gSGVuY2UsIHdlIHJlYWQgdGhlIHZhbHVl
cyBkaXJlY3RseSBmcm9tIHRoZSBwaHlzaWNhbCBzdGFjayBtZW1vcnkgaW5zdGVhZCBvZgotICAg
ICAgICAvLyBnb2luZyB0aHJvdWdoIGNvbnRleHQuc3RhY2soKS4KLSAgICAgICAgQVNTRVJUKCEo
ZW50cnkub2Zmc2V0KCkgJSBzaXplb2YoVUNQVVJlZ2lzdGVyKSkpOwotICAgICAgICBjb250ZXh0
LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBwaHlzaWNhbFN0YWNrRnJhbWVbZW50cnkub2Zmc2V0
KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKV07Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsK
LSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lz
dGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVT
YXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291
bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMt
PmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFjay5zZXQoY29udGV4dC5mcCgpLCBl
bnRyeS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIo
KSkpOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lk
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250
ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1D
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCBy
ZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFZNRW50cnlSZWNv
cmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICBV
Q1BVUmVnaXN0ZXIqIGNhbGxlZVNhdmVCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFVDUFVSZWdp
c3Rlcio+KGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyKTsKLQotICAgIC8v
IFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBh
bGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHNpemVfdCB1
aW50cHRyT2Zmc2V0ID0gZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKTsKLSAg
ICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBjb250ZXh0Lmdwcihl
bnRyeS5yZWcoKS5ncHIoKSkgPSBjYWxsZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdOwotICAg
ICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgY29udGV4dC5mcHIo
ZW50cnkucmVnKCkuZnByKCkpID0gYml0d2lzZV9jYXN0PGRvdWJsZT4oY2FsbGVlU2F2ZUJ1ZmZl
clt1aW50cHRyT2Zmc2V0XSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50
IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBC
YXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAq
Y29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwot
Ci0gICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVu
dHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVCdWZmZXIgPSBlbnRyeVJlY29yZC0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxD
YWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
LSAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+
c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkr
KykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0
KGkpOwotICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAg
ICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29u
dGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkpOwotICAgICAgICBlbHNl
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVC
dWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJl
ZygpLmZwcigpKSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtp
dC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJlZ2lz
dGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNlZCBv
biBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRp
YyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyIG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9v
bCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygp
KTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdl
dChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB1aW50cHRy
X3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlmICh3YXNDYWxsZWRWaWFUYWlsQ2Fs
bCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBz
YXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0cl90PihlbnRyeS5vZmZzZXQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGNvbnRleHQu
Z3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBmcmFtZS5zZXQob2Zmc2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9mZnNldCgpLCBzYXZlZFJlZ2lzdGVy
VmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQm
LCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9
Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9j
ayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlRGlyZWN0QXJn
dW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50
MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7
Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3Vt
ZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc3RkOjptYXgobGVuZ3RoLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgLSAxKSk7Ci0g
ICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKLSAg
ICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVj
dHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBj
YWxsZWUpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkg
KyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwot
ICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+c2V0SW5kZXhRdWlja2x5
KHZtLCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1z
dGF0aWMgSlNDZWxsKiBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAg
Vk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVm
ZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwot
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgQ2xv
bmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAotICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVl
LCBsZW5ndGgpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+
KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDAp
OwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERGRzo6SklUQ29kZSogZGZnSklUQ29kZSwgY29uc3Qg
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQotewotICAgIEZyYW1lIGZyYW1lKGNv
bnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwg
aW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRz
IG5vZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAotICAgICAgICAgICAg
JiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJl
Y292ZXJ5Lm5vZGVJRCgpOwotICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmZpbmQoaWQpOwotICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZy
YW1lLm9wZXJhbmQoaXRlci0+dmFsdWUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPQotICAgICAg
ICAgICAgZGZnSklUQ29kZS0+bWluaWZpZWRERkcuYXQoaWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LQotICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgICAgICBzdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gMDsKLQotICAgICAgICBK
U0Z1bmN0aW9uKiBjYWxsZWU7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZnJhbWUub3BlcmFuZChzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQo
KS5hc0NlbGwoKSk7Ci0KLSAgICAgICAgaW50MzJfdCBhcmd1bWVudENvdW50OwotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAg
ICAgICAgICAgYXJndW1lbnRDb3VudCA9IGZyYW1lLm9wZXJhbmQ8aW50MzJfdD4oc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0KLSAgICAgICAgSlNDZWxsKiBhcmd1bWVudHNPYmpl
Y3Q7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
OgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVy
aW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1
bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShhcmd1
bWVudHNPYmplY3QpKTsKLQotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChp
ZCwgb3BlcmFuZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBl
eHRyYSBpbml0aWFsaXphdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUgaW4gb3JkZXIKLS8vIG9m
IG1vc3QgbGlrZWx5IG5lZWRlZCAobG93ZXIgZW51bSB2YWx1ZSkgdG8gbGVhc3QgbGlrZWx5IG5l
ZWRlZCAoaGlnaGVyIGVudW0gdmFsdWUpLgotLy8gRWFjaCBsZXZlbCBpbml0aWFsaXphdGlvbiBp
bmNsdWRlcyB0aGUgcHJldmlvdXMgbG93ZXIgZW51bSB2YWx1ZSAoc2VlIHVzZSBvZiB0aGUKLS8v
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2YWx1ZSBiZWxvdykuCi1lbnVtIGNsYXNzIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCB7Ci0gICAgTm9uZSwKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5
LAotICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwKLSAgICBBcnJheVByb2ZpbGVVcGRhdGUsCi0gICAg
T3RoZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIEFTU0VSVCgmY2FsbEZyYW1lLT5kZXByZWNh
dGVkVk0oKSA9PSAmdm0pOwotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotCi0gICAgaWYg
KHZhbGlkYXRlREZHRG9lc0dDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0
aW1pemVkIGNvZGUuIFNvLCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0aW1pemVkCi0gICAgICAg
IC8vIGNvZGUgcnVubmluZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAgICAgIHZtLmhlYXAuc2V0
RXhwZWN0RG9lc0dDKHRydWUpOwotICAgIH0KLQotICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRj
aCkgewotICAgICAgICBjYWxsRnJhbWUgPSB2bS5jYWxsRnJhbWVGb3JDYXRjaDsKLSAgICAgICAg
Y29udGV4dC5mcCgpID0gY2FsbEZyYW1lOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLQotICAg
IC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVy
ZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJs
ZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Ci0KLSAgICB1aW50MzJf
dCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7Ci0gICAgREZHOjpKSVRDb2RlKiBkZmdKSVRD
b2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIE9TUkV4aXQmIGV4aXQgPSBk
ZmdKSVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0KLSAgICBBU1NFUlQoIXZtLmNhbGxGcmFt
ZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpOwotICAgIEVYQ0VQVElP
Tl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKTsKLQotICAgIGlmIChVTkxJS0VMWSghZXhpdC5leGl0U3RhdGUpKSB7
Ci0gICAgICAgIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmU7Ci0KLSAgICAgICAgLy8gV2Ugb25s
eSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9jayBvbmNlIGZvciBlYWNoIE9TUkV4aXQgcmVjb3Jk
LiBUaGUgY29tcHV0ZWQKLSAgICAgICAgLy8gcmVzdWx0cyB3aWxsIGJlIGNhY2hlZCBpbiB0aGUg
T1NSRXhpdFN0YXRlIHJlY29yZCBmb3IgdXNlIG9mIHRoZSByZXN0IG9mIHRoZQotICAgICAgICAv
LyBleGl0IHJhbXAgY29kZS4KLQotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBudWxscHRyOwotICAgICAgICBp
ZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIHJlY292
ZXJ5ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5k
ZXhdOwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0
aW9uUmVjb3ZlcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9r
aW5kID09IEdlbmVyaWNVbndpbmQpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAg
ICAgICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIGlm
IChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5
cGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQotICAg
ICAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9m
aWxlVXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludDMyX3Qg
YWN0aXZlVGhyZXNob2xkID0gYmFzZWxpbmVDb2RlQmxvY2stPmFkanVzdGVkQ291bnRlclZhbHVl
KE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpOwotICAgICAg
ICBkb3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0Fu
ZENvbnZlcnRUb0ludChhY3RpdmVUaHJlc2hvbGQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGFkanVzdGVkVGhyZXNob2xkID4gMCk7Ci0gICAgICAgIGFkanVzdGVkVGhyZXNo
b2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKLQotICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAg
ICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwg
Y29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7
Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgICAgIGlmIChleGl0VG9MTEludCkgewot
ICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2Rl
TWFwKCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2Rl
TG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwotICAgICAgICAgICAganVtcFRh
cmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICAgICAgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5k
U3Bhbj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICBkZmdKSVRDb2RlLT52YXJpYWJs
ZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGRm
Z0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzLCAmdW5k
ZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90IHN0YWNrUG9pbnRlck9mZnNl
dCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21t
b24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpOwot
Ci0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0
LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywgV1RGTW92ZSh1bmRlZmlu
ZWRPcGVyYW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJl
c2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJheVByb2ZpbGUsIGV4aXRU
b0xMSW50KSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewot
ICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS5tX3BlckJ5dGVj
b2RlUHJvZmlsZXI7Ci0gICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0
aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQo
KTsKLQotICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBp
bGF0aW9uLT5hZGRPU1JFeGl0KAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgUHJvZmlsZXI6
Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luKSwKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZh
bGlkYXRpb24pOwotICAgICAgICAgICAgZXhpdC5leGl0U3RhdGUtPnByb2ZpbGVyRXhpdCA9IHBy
b2ZpbGVyRXhpdDsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpP
dGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0
ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVs
OjpPdGhlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUtPmV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDsKLQotICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCkpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nRigiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NT
dHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBleGl0S2lu
ZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVy
YW5kcykpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPU1JFeGl0U3RhdGUmIGV4
aXRTdGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gZXhpdFN0YXRlLmJhc2VsaW5lQ29kZUJsb2NrOwotICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0U3RhdGUub3BlcmFuZHM7
Ci0gICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZpbmVkT3BlcmFuZFNwYW5z
ID0gZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLQotICAgIGNvbnRleHQuc3AoKSA9
IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zmc2V0Owot
Ci0gICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRvIHdoaWxlIGxvb3AgaXMg
c28gd2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0ZS4KLSAgICBkbyB7Ci0g
ICAgICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RhdGljX2Nhc3Q8RXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsPihleGl0U3RhdGUuZXh0cmFJbml0aWFsaXphdGlvbkxldmVsKTsK
LQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09IEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6Tm9uZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2lu
IGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFNwZWN1bGF0aW9uUmVjb3ZlcnkKLQotICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0aW9uIHJlY292ZXJ5IGZpcnN0IGJlY2F1c2UgYXJy
YXkgcHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9maWxpbmcKLSAgICAgICAgLy8gbWF5IHJlbHkgb24g
YSB2YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBIb3dldmVyLCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGF0
IGl0IGlzIGxpa2VseQotICAgICAgICAvLyB0byBoYXZlIGEgcmVjb3ZlcnkgdmFsdWUuIFNvLCB3
ZSdsbCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VMWS4KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVy
eSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVjb3Zlcnk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShy
ZWNvdmVyeSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAg
ICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJl
Y292ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSBj
cHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+c3JjKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zl
cnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAgICAgICAgY3B1Lmdwcihy
ZWNvdmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAt
IHJlY292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAg
ICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBCb29s
ZWFuU3BlY3VsYXRpb25DaGVjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIF4g
SlNWYWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5KQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogVmFs
dWVQcm9maWxlVXBkYXRlCi0gICAgICAgIEpTVmFsdWUgcHJvZmlsZWRWYWx1ZTsKLSAgICAgICAg
aWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIHByb2ZpbGVkVmFsdWUg
PSBqc1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgaWYg
KE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2Zp
bGUpCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5yZXBvcnRWYWx1ZShwcm9maWxlZFZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogQXJyYXlQ
cm9maWxlVXBkYXRlCi0gICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGV4
aXRTdGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghIWV4aXQubV9qc1Zh
bHVlU291cmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8
fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJv
ZmlsZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgICAgIGJvb2wgZG9Qcm9m
aWxlID0gIWluc3RydWN0aW9uLT5pczxPcEdldEJ5SWQ+KCkgfHwgaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKS5tZXRhZGF0YShwcm9maWxlZENvZGVCbG9jaykubV9tb2RlTWV0YWRhdGEubW9k
ZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBpZiAoZG9Qcm9maWxl
KSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm9maWxlZFZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
b2JzZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmls
ZS0+b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gRXh0cmEgaW5pdGlsaXphdGlv
biBsZXZlbDogT3RoZXIKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9raW5kID09IEdlbmVy
aWNVbndpbmQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBv
cF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAg
ICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sg
cG9pbnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZw
KCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4
aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgICAgICBleGl0U3RhdGUucHJvZmlsZXJFeGl0
LT5pbmNDb3VudCgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpKQotICAgICAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRleHQsIHZtLm9zckV4aXRJ
bmRleCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxlIChmYWxzZSk7IC8vIEVuZCBleHRyYSBpbml0aWFs
aXphdGlvbi4KLQotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwot
ICAgIEFTU0VSVCghKGNvbnRleHQuZnA8dWludHB0cl90PigpICYgMHg3KSk7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIEFTU0VSVChjcHUuZ3ByPGlu
dDY0X3Q+KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok5vdENlbGxN
YXNrKTsKLSNlbmRpZgotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFu
ZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAvLyBOb3RlOiB3ZSBuZWVk
IHRvIHJlY292ZXIgdmFsdWVzIGJlZm9yZSByZXN0b3JpbmcgY2FsbGVlIHNhdmUgcmVnaXN0ZXJz
IGJlbG93Ci0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3ZlcnkgbWF5IHJlbHkgb24gdmFsdWVzIGlu
IHNvbWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotCi0gICAgaW50IGNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2st
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVy
T2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUoKTsKLSAgICBzaXplX3QgbnVtVW5kZWZpbmVkT3Bl
cmFuZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zLnNpemUoKTsKLQotICAgIHNpemVfdCBu
ZXh0VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsKLSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZE9wZXJh
bmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgaWYgKG51bVVuZGVmaW5lZE9wZXJhbmRT
cGFucykKLSAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJh
bmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotCi0gICAgSlNWYWx1
ZSB1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwotICAgIGZvciAoc2l6ZV90IHNwYW5JbmRleCA9
IDA7IHNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFuczsgKytzcGFuSW5kZXgpIHsK
LSAgICAgICAgYXV0byYgc3BhbiA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tzcGFuSW5kZXhdOwot
ICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSBzcGFuLm1pbk9mZnNldDsKLSAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSBmaXJzdE9mZnNldCArIHNwYW4ubnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLSAgICAg
ICAgZm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RPZmZzZXQ7IG9mZnNldCA8IGxhc3RPZmZzZXQ7ICsr
b2Zmc2V0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvZmZzZXQsIHVuZGVmaW5lZCk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mT3Bl
cmFuZHM7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5k
cy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KGluZGV4ID09IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRl
eCArPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleCsrXS5udW1i
ZXJPZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFVuZGVmaW5lZFNwYW5JbmRl
eCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZp
bmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFu
SW5kZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV4
dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50
b0xvY2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKLQotICAg
ICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmZwcjxKU1ZhbHVlPihyZWNvdmVyeS5mcHIo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBj
YXNlIEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZ3By
PEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0g
ICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkudGFnR1BSKCkpLCBjcHUuZ3ByPGlu
dDMyX3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8SlNDZWxsKj4ocmVjb3ZlcnkuZ3By
KCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hl
ZENlbGwoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjcHUuZ3ByPGJvb2w+KHJlY292ZXJ5LmdwcigpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIEJvb2xlYW5EaXNw
bGFjZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNlbHNlCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkucGF5bG9hZCgpKSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlVW5ib3hlZEludDMyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5Lmdw
cigpKSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQ1MigpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1MkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVj
b3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0cmlj
dEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBw
dXJpZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5mcHIoKSkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cHVyaWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVu
c2FmZVVuYm94ZWREb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIHJlY292
ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXJl
Y3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1l
bnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgeWV0
LgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5kIHRoZW4g
c2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAgcmVzdG9yZUNhbGxlZVNh
dmVzRm9yKGNvbnRleHQsIGNvZGVCbG9jayk7Ci0gICAgc2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnRl
eHQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY3B1Lmdw
cihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdp
c3Rlcj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBjcHUuZ3ByKEdQUkluZm86Om5vdENlbGxN
YXNrUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok5v
dENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Y29udGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNv
dmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50
cwotICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhl
ci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVm
ZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0
aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3
ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBt
YXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29w
ZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLQotICAgIERGRzo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoY29udGV4dCwgY29kZUJsb2NrLCBkZmdKSVRDb2RlLCBvcGVyYW5k
cyk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNl
IHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBp
bnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAg
IC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBl
eGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhl
IG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1Ig
ZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAg
Ly8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5j
ZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNl
IG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQg
dG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAg
ICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQg
aXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBu
ZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBl
cmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAg
Ly8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBp
bW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMg
b2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFy
bHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywg
ZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVu
bmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdn
ZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhl
IGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFu
ZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVu
aXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVz
c2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhl
IGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAg
IC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdn
ZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBo
b3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBv
ZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQp
LAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUg
ZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBv
ZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRo
YW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFu
ZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFp
bHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ug
d2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpLgotCi0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+dXBkYXRlT1NSRXhpdENv
dW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShleGl0U3RhdGUpID09IENvZGVCbG9jazo6
T3B0aW1pemVBY3Rpb246OlJlb3B0aW1pemVOb3cpKQotICAgICAgICB0cmlnZ2VyUmVvcHRpbWl6
YXRpb25Ob3coYmFzZWxpbmVDb2RlQmxvY2ssIGNvZGVCbG9jaywgJmV4aXQpOwotCi0gICAgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci0g
ICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNvbnRleHQsIHZtLCBjb2RlQmxvY2ssIGJhc2VsaW5l
Q29kZUJsb2NrLCBleGl0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2Nr
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKLXsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNw
dTsKLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0YWNrIHdoZW4gcGVyZm9y
bWluZyBhbiBPU1IgZXhpdAotICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxs
cy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTEx
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICBmcmFtZS5zZXRPcGVyYW5kPENvZGVCbG9jayo+KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotCi0g
ICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKLSAgICBmb3IgKGNvZGVPcmlnaW4gPSAm
ZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2Fs
bGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jaygqY29kZU9yaWdpbiwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kOwotICAg
ICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJT
a2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKLSAgICAgICAgdm9pZCogY2Fs
bGVyRnJhbWUgPSBjcHUuZnAoKTsKLQotICAgICAgICBib29sIGNhbGxlcklzTExJbnQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAgICAgICAgICAgIHZvaWQqIHJldHVyblBDID0gZnJh
bWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpOwotI2lmIENQVShBUk02
NEUpCi0gICAgICAgICAgICB2b2lkKiBvbGRFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9
IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAr
IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICByZXR1cm5QQyA9IHJldGFnQ29kZVB0cihyZXR1
cm5QQywgYml0d2lzZV9jYXN0PFB0clRhZz4ob2xkRW50cnlTUCksIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIHJldHVyblBDKTsKLSAgICAgICAgICAg
IGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5i
eXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0
dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVl
Q2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNh
bGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tP
ZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAg
ICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxs
RnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVt
cFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3
RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAg
ICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3Rl
cnMuCi0gICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0
IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJl
YWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2
ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQot
ICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsK
LSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5l
Q2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFU
YWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJs
ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZv
aWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBM
TEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUp
OwotICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVP
ZmZzZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdP
ZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1ZhbHVlKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28g
dGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQs
IFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50
MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwot
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25z
dGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBh
cnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8v
IERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRp
ZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0
d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCi17
Ci0gICAgT1NSRXhpdFN0YXRlKiBleGl0U3RhdGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLQot
ICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsgLy8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhw
ZWN0cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNoYW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2Uu
Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgLy8g
V2UgYmFycmllciBhbGwgaW5saW5lZCBmcmFtZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50
IGlubGluZSBzdGFjayAtLQotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxp
bmVkIGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVlIHByb2ZpbGUgdGhhdAotICAgIC8vIHdlJ2xsIHVw
ZGF0ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBjYXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlm
IGJvdGgKLSAgICAvLyBhIGFuZCBiIGFyZSBpbmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBi
IGR1ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQKLSAgICAvLyBmcm9tIGEuCi0gICAgLy8gRklYTUU6
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVC
bG9jayBvd25zCi0gICAgLy8gdGhlIHZhbHVlIHByb2ZpbGUuCi0gICAgSW5saW5lQ2FsbEZyYW1l
U2V0KiBpbmxpbmVDYWxsRnJhbWVzID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0g
ICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2Fs
bEZyYW1lcykKLSAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgIH0KLQotICAgIGF1dG8qIGV4aXRJbmxp
bmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBp
ZiAoZXhpdElubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5m
cDx1aW50OF90Kj4oKSArIGV4aXRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLQotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1
bXBUYXJnZXQ7Ci0gICAgQVNTRVJUKGp1bXBUYXJnZXQpOwotCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9j
YXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0gICAgICAgIHZtLmNhbGxG
cmFtZUZvckNhdGNoID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIH0KLQotICAgIHZt
LnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLQotICAgIGlmIChleGl0
U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JF
eGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0
Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9y
RXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0KLSAgICAgICAg
Y29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpLm9mZnNldCgpKTsKLSNlbHNlCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgICAgICB2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudElu
c3RydWN0aW9uOwotICAgIH0KLQotICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENv
bnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhp
dCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4o
KTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAg
ICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLQotICAgIGRhdGFM
b2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygi
IEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhp
dEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKLSAgICBpZiAoYWx0ZXJuYXRpdmUpIHsK
LSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLAotICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKSwKLSAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGRhdGFMb2coIm5vIGFsdGVybmF0aXZlIGNvZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0
aXNvbmVkKSIpOwotICAgIGRhdGFMb2coIiwgb3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2st
Pm9zckV4aXRDb3VudGVyKCksICJcbiIpOwotICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUg
b2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdp
c3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIs
IFJhd1BvaW50ZXIoY29udGV4dC5ncHI8dm9pZCo+KGdwcikpKTsKLSAgICB9Ci0gICAgZGF0YUxv
ZygiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
IHsKLSAgICAgICAgRlBSUmVnIGZwciA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAg
IGRhdGFMb2coIiAiLCBjb250ZXh0LmZwck5hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0
X3QgYml0cyA9IGNvbnRleHQuZnByPHVpbnQ2NF90PihmcHIpOwotICAgICAgICBkb3VibGUgdmFs
dWUgPSBjb250ZXh0LmZwcihmcHIpOwotICAgICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxu
Iik7Ci19Ci0KLS8vIEpJVCBiYXNlZCBPU1IgRXhpdC4KLQogT1NSRXhpdDo6T1NSRXhpdChFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBz
dHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtp
bmQsIGppdC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5t
X29yaWdpbi53YXNIb2lzdGVkKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2Up
CkBAIC05NTgsMTUgKzcwLDE4IEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4g
T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6
ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJ
RCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1l
bnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxS
ZWdpc3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAg
ICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5k
LmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBNaW5pZmllZElEIGlk
ID0gcmVjb3Zlcnkubm9kZUlEKCk7CiAgICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZW5kKCkpIHsKQEAgLTk4Nyw3ICsxMDIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJh
bmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSks
CiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaml0Lm1vdmUoCkBAIC05OTcsNyArMTEyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0
UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5k
czxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEzOCw3IEBAIHZvaWQgT1NS
RXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29u
c3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAg
YWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOworICAgICAgICBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsODQgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxl
RXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25z
dAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7
CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNo
ZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBh
IHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBv
dGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5k
cy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRz
LnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGF1dG8qIHRtcFNj
cmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CisgICAgICAgIGppdC5wcm9i
ZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1l
LCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUg
PSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNl
dF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUg
RlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRj
aCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5j
b25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRtcFNjcmF0
Y2hbaSArIHRtcE9mZnNldF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRt
cE9mZnNldF0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBz
W2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhp
dC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2Fs
bEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lk
ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVv
ZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBi
eXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRh
dGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFj
ay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0
dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkg
JiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBv
cGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYg
b3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45
ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEyMzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUwLDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0
IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAgIGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZyYW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBl
eGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjky
YTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYg
KzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
R2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5n
VG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAppbmRleCAyZmYzZWE4YjVmYmI2ZjNmMjcyMWQ1MDI0NDU2Mjk4YjA4NGQ1MTE1Li4wZmI0ODIw
M2JmZGI1ZDU0Yzk2M2QyNGY5ZGJmNzY5ZGU1YTI1ZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwx
MiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1
ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTE0Myw2ICsxNDYsOSBAQCB2b2lkKiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRl
Y29kZUluZGV4IGNhbGxCeQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9T
UkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oJmNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCk7CisKICAgICB2b2lk
KiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTM4MiwxMSArMzg4
LDEyIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKIAogICAgIHZvaWQqIGp1bXBU
YXJnZXQ7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY2hlY2twb2ludFJl
dHVyblRhcmdldDsKICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0
VG9MTEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rOwogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVj
b2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNv
bnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IGJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpID8gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9j
YXN0PHZvaWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSkgOiBMTEludDo6Z2V0
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJl
Z1QyKTsKQEAgLTQwMiw3ICs0MDksMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0m
IHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYK
ICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5q
aXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAg
ICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4g
PSBjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4p
OworICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgY2hl
Y2twb2ludFJldHVyblRhcmdldCA9IGNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2Nh
dGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lk
Kj4oJmNoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCkpOworICAgICAgICB9CisKICAgICAg
ICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNi
NGIwM2RjMTk5Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9k
ZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43
N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAg
ICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVl
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBs
aWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBi
OTQ4OGExMDMyODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3
NzY5MmRiMTA3Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKQEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoK
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IG1hbmRhdG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dCB7IGZpcnN0RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1l
bnRzKTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
JmNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAt
IDEpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1h
bmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCAr
IGkpID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Rk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhi
ZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi5iYjQyMDYxZDUxNjZmZTIxMGQ5Y2Vk
YzZjN2VjNzE4ZjQ0YmJiYjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC0xMDgsMTcgKzEwOCwxNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG51bGxw
dHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnRNYXliZToKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzOSwyMSArMTM5LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJl
bnRFcG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOwor
ICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHBy
b2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAg
ICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
ICAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZDog
IiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBv
cGVyYW5kOiAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkg
aGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFk
eUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBh
IFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAogICAg
ICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4K
QEAgLTE3OSwxNCArMTc5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5
RXhpdCkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0
LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAv
LyB0byBiZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFs
cmVhZHlLaWxsZWQgPSBsb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVy
YW5kOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KGxvY2FsKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVy
YW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYz
ZDE0Mjk4ODZlMDc4ZjBhZmNjLi5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVh
MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VM
b2NhbENsb2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxs
SWZBcHByb3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVy
YW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8g
YWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4K
ICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHBy
b3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRp
dGlvbmFsV3JpdGUsIGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAg
ICAgICAgCi0gICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5
bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCku
b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJv
cHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3Bl
cmFuZC50b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4
IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5
YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11
c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZj
YmZlY2M4NGZlMTk1ODQyOGEwY2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUx
ZDE5YmU2ZDMxOTdjMTNmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEz
NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZl
Y2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBl
N2VkZjYzZjA3Zjc4ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoK
ICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0
YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGlj
OgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5m
aWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9v
bD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAg
ICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBib29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlz
IGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5h
cHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgp
ID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5v
ZGUtPm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQ
dXRTdGFjayB8fCBvcCA9PSBWYXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9w
ID09IEZvcndhcmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9Owog
CiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUp
IHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7
IH0pOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
OiB3cml0ZXMpCisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3Jp
dGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiBy
ZWFkcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBk
ZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVk
IGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2
MSw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENv
bmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVz
aDsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9k
ZS0+b3AoKSA9PSBQdXRTdGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJTZXR0aW5nIGZsdXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJh
bmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09
IEtpbGxTdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBzaW5rIGEgUHV0U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5n
Rmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0g
RGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAg
IGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5k
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3
YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBu
b2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQg
b3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVy
aXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxl
ciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVy
YW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkK
QEAgLTMxMywxMyArMzEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsg
aS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQ29uc2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRl
eChpKSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNj
ZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAi
LCBkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQg
IiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0s
IGRlZmVycmVkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxS
ZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRv
T3BlcmFuZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgo
aSkpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5l
d1ZhcmlhYmxlKCk7CiAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJh
bmQpID0gdmFyaWFibGU7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgp
ID09IHZhcmlhYmxlLT5pbmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFj
a3NUb1NpbmsuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5l
d0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQo
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJh
bmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0
U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAg
IFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9j
aykgLT4gTm9kZSogewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
aW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQo
b3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcg
KzM5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5n
IFBoaSBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBo
LmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFs
aWRFeGl0KCkpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBp
bmcuZmlsbChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxl
ID0gb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQo
YmxvY2ssIHZhcmlhYmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiOiAiLCBtYXBwaW5nLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJs
b2NrKSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4
KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFw
cGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAg
ICAgICAgICAgfQpAQCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVm
ZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCAiIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQob3BlcmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRh
dGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVm
ZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c0NvbmNyZXRlKGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGlj
dGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGlj
dGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVy
ZSBpcyBubyBkZWZlcnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBz
bG90IGlzIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBrZWVwIHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1h
cHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtNDcyLDIwICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBoYXZlIHN0b3JlZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwg
Zm9ybWF0LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRh
LT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWlu
Zy0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRl
bnRpdHkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVz
aDsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcg
KzQ5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRT
dGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3Rh
Y2sgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAt
NTEzLDcgKzUxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFy
ZSB1bmNvbmRpdGlvbmFsIHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRl
IHRvLiBUaGlzIG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3Mu
IFRoaXMgbWVhbnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFB1dFN0YWNrcyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXpl
KAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwg
d3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5k
LCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfSB9CiAgICAgICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxh
dG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5k
W3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDcmVhdGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29y
QmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcg
KzU4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1
dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAKaW5kZXggNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4u
MDRmMmMwY2QzOTk4YjE4MWI5ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4
LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2Fs
KCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCks
IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJz
LmFkZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5h
ZGQobm9kZSwgY2hpbGROb2RlKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJ
bmRleFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgLy8gUHJ1bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhl
ciB0aGFuIGNvbXBpbGUgdGltZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAg
ICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVu
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBu
b2RlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIs
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxl
Rm9yU1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9p
bnQsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAg
ICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVm
LT52YWx1ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBT
cGVjTm9uZSwgTW92SGludCwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCks
Ci0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSks
IHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgp
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2lu
LmV4aXRPSykKQEAgLTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBNb3ZIaW50OiB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51
bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uZXhpdE9LID0gZmFsc2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwx
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1B1dFN0YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1h
cHBpbmc6ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2
YXJpYWJsZS0+b3BlcmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGls
ZDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJSZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5v
ZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAg
LTM4NSw3ICszODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVs
dEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQy
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAg
ICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3Io
Zm9ybWF0KTsKIAotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5z
ZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIs
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlO
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGlu
ZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4
Y2EzMTY5MTkuLjlhMzJkNjdhNTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiAr
MzIyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENh
bGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNDhjMjhjMWI3NGE2Yjg1OGY3Mzg1
NDMyYzRhZDc2M2Y4ZDE2MzgzYS4uNjU5MjY3YTkzM2ZkOGExMmEyMWQwMzQ3NTA4ZDEyMzcyMGE2
MzgwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0Q2Fs
bGVlKENvZGVPcmlnaW4gb3JpZ2luLCBHUFJSZWcgY2FsbGVlR1BSKQogICAgICAgICAgICAgICAg
IGNhbGxlZUdQUik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBjYWxsZWVH
UFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgY2FsbGVlR1BSKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcnQoQ29kZU9yaWdpbiBvcmlnaW4s
IEdQUlJlZyBzdGFydEdQUikKQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1f
c3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNo
aWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExv
ZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29u
IHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDdXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwog
ICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9
IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAg
ICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAg
LTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJs
b2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0
ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3Ry
ZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAg
ICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOwor
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1l
bnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAg
ICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVy
YW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1f
b3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkxOSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVz
aGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1
ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQo
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2Rl
KiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSog
bm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBh
cmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
IEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsK
KyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9m
ZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRz
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50
cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBH
UFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAg
dW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBp
cyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5
IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBW
TSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFu
Y2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hl
cmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBw
YXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNj
cmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGlu
dDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZh
cmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1
bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQg
YXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1
ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCks
IEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFs
dWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpT
VmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwK
KyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1
c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudElu
Y2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3Vu
dCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5l
Q291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3Vt
ZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1h
bmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCks
IGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
ICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgsMTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOworICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0
ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BS
UmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAg
ICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVn
cyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlu
bGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAg
IAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7
CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtNzY1NCw3ICs3NjU1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2Rl
KiBub2RlKQogICAgICAgICAgICAgICAgIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZQotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSksIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSksIHNjcmF0Y2gxR1BSKTsKIAogICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmll
cnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQogICAg
IC8vIGFjdGl2YXRpb24gbXVzdCBiZSB5b3VuZy4KQEAgLTEyNDMwLDE0ICsxMjQzMSwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2V0dGVyKE5vZGUqIG5vZGUpCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2FsbGVlKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2FsbGVlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICBtX2ppdC5zdG9yZUNlbGwoY2FsbGVlLmdwcigpLCBKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICBtX2ppdC5zdG9yZUNl
bGwoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkBAIC0x
MjQ1NSw3ICsxMjQ1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKIHsKLSAgICBt
X2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5vZGUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4
IGM2NGY5NzhhZGY4NWZiZjI3N2JiYTc5MjE2MDY0ZjQyODFiOGQ1YTkuLjAzZDQ4MzViZjRiN2E4
ZGUwOTM5ZWZjZmEzNzAyMmI0NjI2OTA5NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEzOTMsNiArMTM5Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5l
d1JlZ2V4cChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxv
YWRWYXJhcmdzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSopOwpAQCAtMTY2
OSwxNSArMTY3MCwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2Uo
R1BSUmVnLCBHUFJSZWcpOwogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcs
IERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlUmVnLCBWaXJ0dWFs
UmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgeworICAgICAgICBB
U1NFUlQoIWJ5dGVjb2RlUmVnLmlzQXJndW1lbnQoKSB8fCBieXRlY29kZVJlZy52aXJ0dWFsUmVn
aXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRM
b2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYnl0ZWNvZGVSZWcsIG1hY2hpbmVSZWcsIGZvcm1h
dCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXQgZm9y
bWF0KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fY3Vy
cmVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICByZWNvcmRTZXRMb2NhbCh2
YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOworICAg
ICAgICByZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCksIGZvcm1hdCk7CiAgICAgfQogCiAgICAgR2VuZXJhdGlvbkluZm8mIGdlbmVyYXRp
b25JbmZvRnJvbVZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKaW5kZXggNjdiMGUwYjM3MDRjYTU5YTg5MGFjNTljODZkYmQwZDJhMDU2ZGI4MS4u
MGFmM2YxNzE4MTU0MTBkOWJlZjY0YTIwZmQwOTA1ZGRjMDNlNjdmNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0x
ODI4LDcgKzE4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsK
IAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0
IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNz
aWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMTkxMiw3ICsxOTEyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3Vy
cmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRE
ZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVy
YW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODI0LDYgKzM4MjQsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2Fs
bChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAg
ICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5v
ZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDNlNjM4YzliOTQ5ZWI1ZWEyNmEzMTA1ZGRiOGFm
ZTc2NjIxNjMzNDQuLjdiMWUyNTdkNjBkNDY4NDVmMWE5NDBmZjZkZmRjOTNhYzg2YzdjNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cApAQCAtMTkzNiw3ICsxOTM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxl
IGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBi
ZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTIwMDcsNyAr
MjAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2Nh
bChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRh
Rm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDQ2NCw2ICs0NDY0
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFy
YXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAppbmRleCBiZWVjODZhYzdhN2QzMzNlMzk2Nzll
MjY3NTU5MDc0ZTQ2NGM5YjgyLi5kNzYyOGU1YTExN2NlMzNkZTFkMTYxNWY2MDQyNzUyMjA0Nzdh
MjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0cmVhdCBhIHZh
cmlhYmxlIGFzIGJlaW5nICJ1c2VkIiBpZiB0aGVyZSBleGlzdHMgYW4gYWNjZXNzIHRvIGl0IChT
ZXRMb2NhbCwgR2V0TG9jYWwsCiAgICAgICAgIC8vIEZsdXNoLCBQaGFudG9tTG9jYWwpLgogICAg
ICAgICAKLSAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CisgICAgICAgIE9wZXJhbmRzPGJv
b2w+IHVzZWRPcGVyYW5kcygwLCBncmFwaCgpLm1fbG9jYWxWYXJzLCBncmFwaCgpLm1fdG1wcywg
ZmFsc2UpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhh
dCBhcmUgdXNlZCBmcm9tIElSLgogICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9
IGZhbHNlOwpAQCAtNjcsMjMgKzY3LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCku
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVy
YW5kKCksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAg
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKGRhdGEtPmNvdW50LCB0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24gdGhl
IGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
c3NpZ25tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0
ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0g
Ly8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgogICAgICAgICAgICAgICAgICAgICBo
YXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTkyLDkgKzkxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBT
dGFja0FjY2Vzc0RhdGEqIHN0YWNrID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay0+bG9jYWwuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2stPm9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHN0YWNr
LT5sb2NhbC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0
T3BlcmFuZChzdGFjay0+b3BlcmFuZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDgsMjEgKzEw
NywyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9ICppdGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1
YWxSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewotICAgICAgICAgICAgICAgIHVz
ZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFu
ZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCi0gICAgICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBh
bGxvY2F0aW9uKHVzZWRMb2NhbHMuc2l6ZSgpKTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBh
bGxvY2F0aW9uKHVzZWRPcGVyYW5kcy5zaXplKCkpOwogICAgICAgICBtX2dyYXBoLm1fbmV4dE1h
Y2hpbmVMb2NhbCA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMb2NhbHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghdXNlZExvY2Fscy5nZXQoaSkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRPcGVyYW5kcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCF1c2VkT3BlcmFuZHMuZ2V0Rm9yT3BlcmFuZEluZGV4KGkpKSB7CiAgICAg
ICAgICAgICAgICAgYWxsb2NhdGlvbltpXSA9IFVJTlRfTUFYOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTM1LDQ5ICsxMzQsNTAgQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0Fy
Z3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2
YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9
IHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVf
dCBsb2NhbCA9IHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIGlmIChs
b2NhbCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IHZhcmlhYmxlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSB1c2VkT3Bl
cmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICAgICAgaWYgKGluZGV4ID49IGFs
bG9jYXRpb24uc2l6ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCisgICAgICAg
ICAgICBpZiAoYWxsb2NhdGlvbltpbmRleF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0
aW9uLCB2YXJpYWJsZS0+b3BlcmFuZCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Zm9yIChTdGFja0FjY2Vzc0RhdGEqIGRhdGEgOiBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhKSB7
Ci0gICAgICAgICAgICBpZiAoIWRhdGEtPmxvY2FsLmlzTG9jYWwoKSkgewotICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgaWYgKGRh
dGEtPm9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGlu
ZUxvY2FsID0gZGF0YS0+b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bG9jYWwudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9u
LnNpemUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChhbGxv
Y2F0aW9uW2RhdGEtPmxvY2FsLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0xvY2FsKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5vcGVyYW5kLnRv
TG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPm9wZXJhbmQudG9Mb2Nh
bCgpXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFz
c2lnbihhbGxvY2F0aW9uLCBkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
TG9jYWwgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5vcGVyYW5kKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFtX2dyYXBoLm5lZWRzU2NvcGVSZWdp
c3RlcigpKQogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0
U2NvcGVSZWdpc3Rlcihhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0
ZXIoKSkpOworICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWdu
KHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkp
OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURh
dGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9
IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNz
aWduKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQt
LTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3Jh
cGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVu
dFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5j
b3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3Np
Z24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+
Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNz
aWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMjMxLDE3ICsyMzEsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFs
bG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2ln
bihjb25zdCBPcGVyYW5kczxib29sPiYgdXNlZE9wZXJhbmRzLCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiBhbGxvY2F0aW9uLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gc3JjOwotICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewot
ICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9M
b2NhbCgpXTsKLSAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxv
Y2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKTsKKworICAgICAgICBzaXplX3Qgb3BlcmFuZEluZGV4ID0gdXNlZE9wZXJhbmRz
Lm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0g
YWxsb2NhdGlvbltvcGVyYW5kSW5kZXhdOworICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKICAgICB9CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcAppbmRleCBlYjNkZGJkNzE4NDNkNDlmNjViMzJjZTk2MWZmOWEwNzEyYTFh
MDUxLi5iNDhjNmY3ZjE5MDk3NzVkNzI3OTc5OTFmM2ZiOTgzZGU2MzhhNzI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHAKQEAgLTI4NSwxNyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG1fbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG1fbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5vcGVyYW5k
KCkgPT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbCA9IG5vZGU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0
YWNrLCBsb2NhbCkpKQorICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFw
aCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAKaW5kZXggNmFjYWZiZjNiZjUzNWM5Njk2YmU2NDhhMjA3MGI2ZWU2ZjRmOGJmOS4u
ZjFiMWZmNjRkZGE1M2NmNDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJz
IGppdChudWxscHRyKTsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2
bSk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZH
IE9TUiBleGl0IHRodW5rIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0Nh
bGxIZWxwZXJzIGppdChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5o
CmluZGV4IDA1YTUwYTU0YjI1ZDUxZGJjYjE4NThmZTdhYWRjYTQ4NjgyMDVkOWUuLjhiNWMzZjAx
YTQ4NTIwYjdhYWFhYWViYWZmOTNjM2IyNmNjZDk4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERG
RyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5r
R2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAppbmRleCA2MGZiZjg5OTVmZGFkNzgyNTZhMDY3Yjg5YzRlYzVmNTcxM2YxZDdlLi43OTY2
NWY4YWI4NWZjMTExNmQ2MzlmYjNkOGI1NWY2ZWQ5MDI2OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAg
LTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjaGVja09w
ID0gQ2hlY2tTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3BlY0NlbGxD
aGVjayAmIFNwZWNFbXB0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgobG9jYWwgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCA6IDApKSA9PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBURFogdmFsdWUuIFRo
ZSBjYWxsIGVudHJ5cG9pbnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERaLApAQCAtMTY4LDggKzE2
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJh
bmQoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExvY2FsOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9j
YWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4m
IG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggOWVlNWUwMDc0MDlkZjUy
OTRiZmNmNTFiNzc2ZWI4Y2ZjZjQ3YzUwZS4uYTJkNmNmYzI0OTM0ZTNkYzNjNDZjMGUyNGQ0ZGEx
Y2UxYjBjZjViNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
QEAgLTQ4Myw3ICs0ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+cGhpc1tpXTsKICAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2Nr
LmNvbnRhaW5zKG5vZGUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUt
Pm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBu
b2RlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9w
ZXJhbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFw
aC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBj
aGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChp
KSkKQEAgLTUxOSwxMCArNTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+
cHJlZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2Fs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9j
ayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3Qg
aGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2ssIGJsb2NrLT5w
cmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTUzMywxMSArNTMz
LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50RGVmaW5pdGVseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50TWF5YmUKQEAgLTU0NywxOSArNTQ3LDE1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5v
dCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+
aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2Nr
LT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2Up
LCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAotICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwot
ICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4g
c2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2OCwyNCArNjY0LDI0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQo
bm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBibG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnRE
ZWZpbml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIC8v
IE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNl
dExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZl
IGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBmb3IgdGhh
dCBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAg
ICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0Owor
ICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC05NjgsMjYgKzk2NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4g
IiwgZWRnZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogYmxvY2spCiAg
ICAgewogICAgICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKGxvY2FsLCAi
IGluIG51bGwgQmxvY2sgIik7CisgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gbnVs
bCBCbG9jayAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRh
dGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVy
YW5kLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNC
bG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCisgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRl
c3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2Nr
ICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CisgICAgICAgIGRh
dGFMb2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3Rp
bmF0aW9uQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJs
b2NrLCBOb2RlKiBwcmV2Tm9kZSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2Nr
KiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nKHBy
ZXZOb2RlLCAiIGZvciAiLCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOworICAg
ICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBvcGVyYW5kLCAiIGluIEJsb2NrICIsICpz
b3VyY2VCbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoTm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCAyNmYw
MzI5ZDU0MzA0MTU3MjA1ZTc4MTQ5OGM2NGUwYmU5OTMyMTEwLi45NWNkYzkyZTJjMjQxMGEzNWMw
MTMxMzFmZGMzYjdjY2MyODI5ZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTQxLDExICs0MSw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNw
YWNlIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogcHVibGljOgogICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQog
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5nIikKQEAgLTU2LDcgKzU0
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCBtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZhcmFyZ3MgZm9yd2FyZGlu
ZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDcg
Kzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNhbGxzIGludG8gdGhpcyBm
dW5jdGlvbiB0byBiZSByYXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGluIGEgc2ltcGxlIE8obikg
bWFubmVyLgogICAgICAgICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gYmxvY2stPmF0KGNh
bmRpZGF0ZU5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZygiSGFuZGxpbmcgY2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSBlbGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzIGlmIHRoZSBidXR0ZXJmbHkgaXMgb25seQpAQCAtMTA1LDcgKzEwMyw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE3LDkgKzExNSwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpLmlzVG1wKCksICJXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhIHRtcCByZWZlcnJpbmcg
dG8gYW4gYXJndW1lbnRzIG9iamVjdC4iKTsKICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4
ID0gbm9kZUluZGV4OwotICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFp
bnMobm9kZS0+dW5saW5rZWRMb2NhbCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRM
b2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFs
UmVnaXN0ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrVmFyYXJn
czoKQEAgLTE0MCwxMyArMTM5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzYXdFc2NhcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICBpZiAoc2F3RXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgICAgIGNh
c2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBj
YW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4
OwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxs
VmFyYXJnczoKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoK
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUt
PmNoaWxkMigpID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2Nh
cGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpID09IGNhbmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNM
b2FkZWRGcm9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5v
ZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjI2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXZhbGlkR2V0
QnlPZmZzZXQpIHsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1dHRlcmZseSA6IGNhbmRp
ZGF0ZUJ1dHRlcmZsaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMo
bm9kZSwgYnV0dGVyZmx5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBCdXR0ZXJmbHkgZXNjYXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLAotICAg
ICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgcmVnLCAiIHdoaWxl
IHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
S2lsbGluZyAiLCBvcGVyYW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3RE
dW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWxldmFudExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJlZykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNbaV0pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fsc1tpLS1dID0gcmVsZXZhbnRMb2Nh
bHMubGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0g
bm9kZUluZGV4OwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgIGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2VySW5kZXggPSAiLCBsYXN0
VXNlckluZGV4LCAiLCAiLCBibG9jay0+YXQobGFzdFVzZXJJbmRleCksICJcbiIpOwogICAgICAg
ICAKICAgICAgICAgLy8gV2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERldGVybWluZSBpZiBiZXR3
ZWVuIHRoZSBjYW5kaWRhdGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMgYW55CkBAIC0yNjMs
MTYgKzI2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2Rl
LT51bmxpbmtlZExvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoK
LSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUs
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2Ug
YXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CkBAIC0yODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+bG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPm9wZXJhbmQoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjk3LDEzICsyOTcsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgp
LmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyho
ZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCByZWcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBoZWFwLm9w
ZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc0ludGVyZmVyZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9i
YmVyaXplKCkpOwogICAgICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJmZXJlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTMxMSw3ICszMTAs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gbWFr
ZSB0aGlzIHdvcmsuCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFdpbGwgZG8gZm9yd2FyZGluZyFcbiIpOwogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAKQEAgLTM0MSw4ICszNDAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRoZXNlLgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdz
TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0g
Y2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVu
Z3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgLyog
YWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5h
cmd1bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFy
Z3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDhlYmZmYjQzNWVkNGRiZjYw
MmJkNjJhZWQ0YzM0MzJlYTVhODI5MDIuLjJhYzJlZTM5YjRjY2FkMzA4MTI1YjRlNmVjYzg4YTg3
YzdkMTc5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQot
ICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWluKCkpKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgIDog
bV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxz
ZSkKQEAgLTQ1LDEwICs0NCwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNz
RGF0YSgpCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlh
YmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgOiBtX2xvY2FsKGxvY2Fs
KQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJp
YWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNO
b25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVu
Ym94KGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQpA
QCAtODcsNyArODYsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0QWNjb3JkaW5nVG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMg
ZmFjaWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29y
ayBmb3IgYXJndW1lbnRzLgotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICBpZiAo
b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4g
dGhpcyBkb2Vzbid0CkBAIC0xMjEsNyArMTIwLDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6
OnRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKQogewogICAgIEFTU0VSVChpc1Jv
b3QoKSk7CiAgICAgICAgIAotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGRO
ZXZlclVuYm94KCkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZl
clVuYm94KCkKICAgICAgICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUlu
ZGV4KSkKICAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJs
ZUZvcm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgCkBAIC0xNzYsNyArMTc1
LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1bnQgZm9yIG1hY2hpbmUg
YXJndW1lbnRzLgotICAgIGlmIChtX2xvY2FsLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFu
ZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRo
ZSBhcmd1bWVudC1hd2FyZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBhbGwgb2YgYW4gKGlu
bGluZWQgb3IgbWFjaGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCmluZGV4IDFkMzg5MmY5ZWMwOWNiYTIwNDNmYTI1NGU2MDk0MjMy
MDE0YTI4NGUuLmJlMmZiNTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNmY2VmZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaApA
QCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlv
bkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFy
aWFibGVBY2Nlc3NEYXRhKTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsKKyAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEoT3BlcmFuZCk7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkK
KyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0g
ZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgICAgIEFTU0VS
VChtX29wZXJhbmQgPT0gZmluZCgpLT5tX29wZXJhbmQpOworICAgICAgICByZXR1cm4gbV9vcGVy
YW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hpbmVMb2NhbCgpCkBA
IC0yMDgsMTAgKzIwOCwxMCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNp
bXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCiAgICAgLy8g
dXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KIAotICAg
IFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVM
b2NhbDsKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAgICAgU3BlY3VsYXRlZFR5
cGUgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbjsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7
CiAKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCmluZGV4IDI4ZTQzN2ZkNTFmZWE0OTY5ZWI0OGVj
ZjBjMDUwOGYwYTM3ZGY4MzUuLjViMmMxZWU5MDliNTQ4ZjM5ODI3MGM0M2JkMzZlZDcyZTNmOWNm
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNw
cApAQCAtNTksMTEgKzU5LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIsIGlkKCksICIpIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICBvdXQucHJpbnQo
Ik1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAiKSIpOworICAgICAg
ICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgb3BlcmFuZCgpLCAiKSIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAgICAgIG91dC5wcmludCgK
LSAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+
IGJ5dGVjb2RlOiIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICJTZXRMb2NhbCht
YWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIG9wZXJhbmQoKSwK
ICAgICAgICAgICAgICIsICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpLCAiKSIp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAppbmRleCAyMDYwZDRhMmZkMjcyMjNkZDZmNjk5YzZkYmFk
NmQyMjQ2N2M5ODM0Li5jOGI4NGE3YzIxNjZlNzE1ZTUzMWNmNzVkMzg0OTc0ZjVjMzYwMjJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaApAQCAtNzYs
NyArNzYsNyBAQCB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7CiAjZW5kaWYKLSAg
ICBpbnQzMl90IHZpcnR1YWxSZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogfTsKIAogY2xhc3Mg
VmFyaWFibGVFdmVudCB7CkBAIC0xNjIsNyArMTYyLDcgQEAgcHVibGljOgogICAgICAgICBXaGlj
aFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJp
YWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlv
bi52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICByZXByZXNl
bnRhdGlvbi5vcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBldmVudC5tX2tpbmQg
PSBraW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2
ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE4MSwxMyArMTgxLDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwoCi0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVS
ZWcsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAg
ICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAg
ICAgICB3aGljaC52aXJ0dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsKICAgICAgICAgVmFy
aWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRp
b24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRh
dGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVudC5tX2tpbmQgPSBT
ZXRMb2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAg
ICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5NSwxMyArMTk1LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
VmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3RlciBieXRl
Y29kZVJlZykKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQs
IE9wZXJhbmQgYnl0ZWNvZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50
OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygp
OwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAg
ICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAg
ICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAgICAgICAgZXZlbnQu
bV9raW5kID0gTW92SGludEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3
aGljaCk7CiAgICAgICAgIGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKHJlcHJlc2Vu
dGF0aW9uKTsKQEAgLTI2NSwxMyArMjY1LDEzIEBAIHB1YmxpYzoKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09
IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJl
dHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkgY29uc3QK
KworICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9r
aW5kID09IFNldExvY2FsRXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVudCk7Ci0gICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVn
KTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZDsKICAgICB9
CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3RlcigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAppbmRleCA0NTI2ZDM5YmIwOTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2Li43ZWQ0ZDkw
M2MxNTk1NDZmZDQzNGM2OTU3MDlhNDg1NzQ3Y2QxYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTEyMyw2ICsx
MjMsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24o
KTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0g
aW52YWxpZEluZGV4OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7
CkBAIC0xMzAsMzcgKzEzMSw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNv
bnN0cnVjdCgKICAgICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2ln
bmVkIGkpIHsKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVy
aWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAg
ICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9y
SW5kZXgoaSAtIDEpLm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJl
Y292ZXJpZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKTsKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3Bl
cmFuZEZvckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAg
aW50IG1pbk9mZnNldCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAg
ICAgdW5kZWZpbmVkT3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zm
c2V0LCBpIC0gZmlyc3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52
YWxpZEluZGV4OwogICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZd
ICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4g
b2YgYXJndW1lbnRzIGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFk
amFjZW50IG9wZXJhbmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBp
bnZhbGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmll
cy5pc0FyZ3VtZW50KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZElu
ZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3Bl
cmFuZFNwYW4oaSk7CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRl
eCkgewogICAgICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RV
bmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAg
ICAgICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRv
KiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLnRvTG9jYWwoKSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMo
KSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51
bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAg
ICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAog
ICAgIC8vIENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRo
aXMgbXVzdCBiZSBhbiBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNh
c2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3Vs
ZAogICAgIC8vIHJlZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVl
UmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBudW1WYXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMg
aGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3Zl
cmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBudW1WYXJpYWJsZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVl
UmVjb3Zlcmllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ld
ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudW1WYXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDcgKzE3Nyw3IEBAIHVuc2lnbmVk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07
CiAgICAgCiAgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0
ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVy
YW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAg
ICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
b3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5p
ZmllZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7CkBAIC0xOTgsMTIgKzIwNCwxMiBA
QCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICAg
ICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3Rlcigp
KSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVj
b2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOworICAgICAgICAgICAgaWYg
KG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAg
ICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3Vy
Y2UoZXZlbnQuaWQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0TG9j
YWxFdmVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50
LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0
T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9y
bWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisg
ICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCks
IFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVu
dC5kYXRhRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIxMiw3ICsyMTgs
NyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICB9CiAg
ICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVS
ZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZh
bHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJj
ZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTI2Niw3ICsyNzIsNyBAQCB1bnNpZ25l
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52
aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZv
cm1hdCk7CiAgICAgfQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBh
cmF0ZWQpCiAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMu
c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAppbmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEw
NzZkZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoK
ICAgICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1
NGYwOGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29k
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0
ZWNvZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6
IG1fZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGMyZGRhZGE1YzQzM2RmOTE5YTE0NzMxYmZm
NDEyMWE0ZTE5YjcwODIuLjM2Nzk0Y2QyOGZjNjU4OTAxNDM1NmJlOWNmZGNhODA5MDQ0MTYxMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAg
LTI3NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVz
ZQogICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVk
LgotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93
IENoZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1
NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
ID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAw
LCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBA
IC0xMjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAg
ICAgICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAg
ICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyAr
MTk1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsK
LSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsg
bV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lk
IGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAg
ICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRh
LT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MTksMTMgKzc5MjIsMTMg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2
b2lkIGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRy
KGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCkBAIC03OTQwLDcgKzc5NDMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21w
aWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQu
c3RvcmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUo
KQpAQCAtOTUzNSw1MSArOTUzOCw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBh
dGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisg
ICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRz
ID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1
ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFy
YXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBz
dGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZy
b20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwog
ICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1f
b3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdz
T3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxl
bmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNs
dWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAg
eworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNB
cmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZs
b3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aElu
Y2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAor
ICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhp
cyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxh
b2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdz
IGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdp
c3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNo
aW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3Io
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAg
ICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCks
IG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAg
ICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJh
cmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRv
SW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5k
YXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5j
b25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hp
bGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAg
ICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwog
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9y
d2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU4
OCw1MCArOTU5MSwyNiBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkK
KyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExW
YWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVu
Z3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUp
OwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAg
aWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxl
bmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0
LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJh
dGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgot
ICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0g
YXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zm
c2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5n
dGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQz
MigxKSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGlu
Z1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0
aEluY2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisg
ICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQubWF4U2lnbmVkKG1fb3V0LnN1
YihjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzOworCisg
ICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9v
dXQuaW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0
aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3Io
ZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0
YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+
bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05NjkwLDY1ICs5NjY5LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlv
biBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAg
ICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50c0xlbmd0aC52YWx1ZTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1f
b3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5n
dGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1
ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNM
YXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIo
YXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBt
X291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhS
ZXN1bHQpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CisgICAgICAgIHJl
dHVybiBtX291dC5tYXhTaWduZWQobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCBtX291dC5pbnQzMlplcm8p
OwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCiAg
ICAgewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZh
dWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8
SW5saW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgTm9kZSog
YXJndW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGFyZ3Vt
ZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJn
dW1lbnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKLQot
ICAgICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVjdXJzYWJsZUxhbWJkYShbJl0o
YXV0byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAgICAgICAgICAgaWYgKHRhcmdl
dC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VsZih0YXJnZXQt
PmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IHRhcmdldC0+
Yml0VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRh
cmdldC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRW
ZWN0b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYobV9ncmFwaC52YXJB
cmdDaGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyArPSB0YXJnZXQtPmNhc3RPcGVy
YW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0LT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBw
ZW5kKGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNh
bGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKLSAgICAg
ICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbGxl
Y3RBcmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRp
bmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOwot
ICAgICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQotICAgICAgICAgICAg
bGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5n
dGgpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTk3NTksNyArOTY5MCw3
IEBAIHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0Zvcihk
YXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFk
ID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMsICZ0YXJnZXRT
dGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFs
dWUgeworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlz
LCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRl
eCkgLT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNw
cmVhZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUo
KSwgc3RvcmVJbmRleCk7CiAKQEAgLTk3OTEsOCArOTcyMiw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwog
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgTFZhbHVlIHNv
dXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJn
ZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAgICAgICAgTFZhbHVlIHNwcmVh
ZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5l
Q2FsbEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
dGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgTFZhbHVlIHNv
dXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0g
bV9vdXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTIyNDcsOCArMTIxNzksOCBA
QCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBwYWNrZXQsIG1faGVh
cHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0ciht
X291dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tl
bl9QYWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2Fk
UHRyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDApKSksIHBhY2tldCwgbV9oZWFw
cy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVl
KTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dD
aGlja2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAtMTIzMzksNyArMTIyNzEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NG
b3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXND
ZWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRy
KGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAg
ICB9CiAgICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MDQsNyArMTc1MzYs
NyBAQCBwcml2YXRlOgogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0
bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAg
ICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUlu
ZGV4LmJpdHMoKSksCi0gICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpOworICAgICAgICAgICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291
dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTIsNyArMTc2
NDQsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3Ny
RXhpdERlc2NyaXB0b3JzLmFsbG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHBy
b2ZpbGUsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFy
Z3VtZW50cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZUbXBzKCkpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODE3
LDE1ICsxNzc1MCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5t
X3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5
TWFwLm1fbG9jYWxzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgu
bV9wbGFuLm1vZGUoKSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAg
IGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2Nh
bCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAi
LCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmln
aW4pLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAm
JiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBi
eXRlY29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZh
aWxhYmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5k
YXRhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9
IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsK
ICAgICAgICAgICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkp
CkBAIC0xODEyNSwzOSArMTgwNTgsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0
LmFscmVhZHlSZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsK
ICAgICB9CiAgICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGlu
dCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFi
bGVzW29wZXJhbmRdLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNl
LCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwg
b2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBP
cGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBv
cGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihM
VmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUg
YmFzZSwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
YmFzZSwgb3BlcmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJl
c3NGb3IoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRl
ciBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCksIG9mZnNldCk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlm
IChvcGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fw
dHVyZWQsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQot
ICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRl
ciBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXls
b2FkRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIg
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRyZXNzRm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFu
ZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5k
ZXggOTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5
ODM0MDc2YThkNmY5MTc0MmNjYjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KAogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIp
OwogICAgIAogICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRz
KCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNh
blVuc2FmZUpTVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNW
YWx1ZSgpOwogICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2
YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1
ZSAmJiB2YWx1ZU9uU3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1
bWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5jcHAKaW5kZXggMDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThl
My4uMDRjODU3OTllNGQ0NjkyM2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcg
bmFtZXNwYWNlIERGRzsKIAogT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAog
ICAgIERhdGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgdmFsdWVQcm9maWxlLAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1iZXJPZkxvY2FscykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5z
aWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJv
ZmlsZURhdGFGb3JtYXQocHJvZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2
YWx1ZVByb2ZpbGUpCi0gICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZM
b2NhbHMpCisgICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMs
IG51bWJlck9mVG1wcykKIHsKIH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1
bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2Rl
QmxvY2sqIGZ0CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRh
ODdjY2YzMjczZmU0YmUzNjA2ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2
YWVjZTA5N2FkOGE0ZDFlMjdiODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCkBAIC02OSw3ICs2OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9T
UkV4aXREZXNjcmlwdG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZv
cm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxz
KTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9m
TG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgog
ICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlk
IGFuZCB3ZSdsbCBoYXZlIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgx
NzZlZTcyLi5hMzc4NDEwZGE5YjgwMTU3MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEg
QEAKICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNp
bmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIApAQCAtNDc0LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQK
IAogICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2tw
b2ludCgpKSB7CisgICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rl
c2NyaXB0b3ItPm1fdmFsdWVzLnRtcEluZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07
CisgICAgICAgIGppdC5wcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAg
ICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNv
ZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjpt
YWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAg
ICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRd
OworCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJh
bWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBj
b25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNv
ZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMo
KSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5s
aW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlu
bGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBj
YWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAg
ICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsK
KyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNj
cmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVz
IGFyZQogICAgIC8vIGFscmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsg
aW5kZXgtLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlw
dG9yLT5tX3ZhbHVlcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpOworCisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwg
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykp
CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0
YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5k
ZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpKSk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGpp
dCwgZXhpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApp
bmRleCA3ZjdjZDM4MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFi
ZDllYjNiNDcxMzM3NDRmODQzZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xv
YmFsT2JqZWN0KgogICAgICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcg
YnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8g
YWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQu
CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5
Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0
YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAg
ICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4
ZmM3ZDVkYjNhZDljZTVlOWNmLi4yYzMwNDhmYmJlMzUxODg3M2YzYWZiYjY1YjIzMzhmYTBhZDc0
NTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xNzYsNiAr
MTc2LDM4IEBAIExWYWx1ZSBPdXRwdXQ6Om5lZyhMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6TmVnLCBvcmlnaW4oKSwgdmFsdWUp
OwogfQogCitMVmFsdWUgT3V0cHV0OjptYXhVbnNpZ25lZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KQoreworICAgIGF1dG8gaXNMZWZ0R3JlYXRlciA9IGFib3ZlT3JFcXVhbChsZWZ0LCByaWdo
dCk7CisgICAgaWYgKGlzTGVmdEdyZWF0ZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBp
c0xlZnRHcmVhdGVyLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgaXNMZWZ0
R3JlYXRlciwgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptaW5VbnNpZ25lZChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQoreworICAgIGF1dG8gaXNMZWZ0TGVzcyA9IGJlbG93
T3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgaWYgKGlzTGVmdExlc3MtPmhhc0ludDMyKCkpCisg
ICAgICAgIHJldHVybiBpc0xlZnRMZXNzLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmln
aW4oKSwgaXNMZWZ0TGVzcywgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptYXhT
aWduZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKK3sKKyAgICBhdXRvIGlzTGVmdEdyZWF0
ZXIgPSBncmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOworICAgIGlmIChpc0xlZnRHcmVh
dGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gaXNMZWZ0R3JlYXRlci0+YXNJbnQzMigp
ID8gbGVmdCA6IHJpZ2h0OworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGlzTGVmdEdyZWF0ZXIsIGxlZnQsIHJpZ2h0KTsK
K30KKworTFZhbHVlIE91dHB1dDo6bWluU2lnbmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
Cit7CisgICAgYXV0byBpc0xlZnRMZXNzID0gbGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsK
KyAgICBpZiAoaXNMZWZ0TGVzcy0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdExl
c3MtPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBpc0xlZnRMZXNzLCBsZWZ0
LCByaWdodCk7Cit9CisKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUFkZChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KQogewogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAppbmRleCBjNTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1
NzBjYTJlLi45NmQzZDEzM2U4NTgxNTBmNDA2ZWQxNDIzZmFjNGRmNTVjMGE5ZDhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTE1Niw2ICsxNTYsMTEgQEAgcHVibGlj
OgogICAgIExWYWx1ZSBjaGlsbE1vZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIG5lZyhM
VmFsdWUpOwogCisgICAgTFZhbHVlIG1heFVuc2lnbmVkKExWYWx1ZSwgTFZhbHVlKTsKKyAgICBM
VmFsdWUgbWluVW5zaWduZWQoTFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtYXhTaWduZWQo
TFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtaW5TaWduZWQoTFZhbHVlLCBMVmFsdWUpOwor
CiAgICAgTFZhbHVlIGRvdWJsZUFkZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJs
ZVN1YihMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJsZU11bChMVmFsdWUsIExWYWx1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2
OTM0YzNmMGQzNzkxZjY0YmE0Mjk2M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3
YTY3MGQyNTgwNGFhOGNhZTIyYjNhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9w
ZXJhdGlvbigKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0
cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1
cm4gY2FsbE9wZXJhdGlvbih2bSwgdXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQs
IGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdk
ZDYzMWFjZDRjY2JlY2QxNGIyNGNjNWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBA
CisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50
CisgICAgYXR0cl9yZWFkZXIgOnVzZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJf
cmVhZGVyIDpuYW1lCisgICAgYXR0cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6
ZShuYW1lLCBpbmRleCwgdG1wcykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRl
eCA9IGluZGV4CisgICAgICAgIEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwg
dXNlRGVmID09IDp1c2UgfQorICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVz
ZURlZil8IHVzZURlZiA9PSA6ZGVmaW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhu
YW1lc3BhY2UpCisgICAgICAgIEVPRjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9
OgorRU9GCisgICAgZW5kCitlbmQKKworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlh
bGl6ZShvcGNvZGUsIHRtcHMsIGNoZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2Rl
CisgICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50
cy5tYXBfd2l0aF9pbmRleCB7IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhu
YW1lLCBpbmRleCwgdG1wcykgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAg
IEBjaGVja3BvaW50cy5lYWNoIGRvIHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAg
ICBFT0Y8LS0KK0JpdE1hcDxtYXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBp
dGFsaXplZF9uYW1lfSh1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3Bv
aW50KSB7CisKKyAgICB9Cit9CitFT0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL09wY29kZS5yYgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNl
YmI0ZjBhYjI0NDg1Li41MjJmNWMxNDRlZGFmYzM0MGFlYWJkMzhiODkwNTZjMjVjMmY3OTU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAs
NyBAQCBjbGFzcyBPcGNvZGUKICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVy
IDptZXRhZGF0YQogICAgIGF0dHJfcmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hl
Y2twb2ludHMKIAogICAgIG1vZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXpl
OjpOYXJyb3ciCkBAIC00NSwxMiArNDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAog
ICAgIGVuZAogCi0gICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdz
LCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNl
Y3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVy
cywgdG1wcywgY2hlY2twb2ludHMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAg
ICBAbmFtZSA9IG5hbWUKICAgICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBA
bWV0YWRhdGEgPSBNZXRhZGF0YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwog
ICAgICAgICBAYXJncyA9IGFyZ3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwg
aW5kZXh8IEFyZ3VtZW50Lm5ldyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFy
Z3MubmlsPworICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hl
Y2twb2ludHMubWFwIHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVj
a3BvaW50cy5uaWw/CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEy
MSw4IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVk
X25hbWV9IDogcHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVt
cHN9CisgICAgI3tjaGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAg
LTEzMiw2ICsxMzcsMTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2Rl
SURUeXBlfSBvcGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9p
bnRWYWx1ZXMKKyAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAg
WyJlbnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsg
fGNoZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9LCBbIiAgICAgICAgbnVtYmVy
T2ZDaGVja3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4oIlxuIikKKyAgICBlbmQKKworICAgIGRl
ZiB0ZW1wcworICAgICAgICByZXR1cm4gaWYgQHRtcHMubmlsPworCisgICAgICAgIFsiZW51bSBU
bXBzIDogdWludDhfdCB7Il0uY29uY2F0KEB0bXBzLm1hcCB7fCh0bXAsIHR5cGUpfCAiICAgICAg
ICAje3RtcH0sIn0pLnB1c2goIiAgICB9OyIpLmpvaW4oIlxuIikKKyAgICBlbmQKKwogICAgIGRl
ZiBlbWl0dGVyCiAgICAgICAgIG9wX3dpZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYsIG9wY29k
ZUlEVHlwZSwgMCkKICAgICAgICAgb3Bfd2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUzMiwgb3Bj
b2RlSURUeXBlLCAwKQpAQCAtMjAwLDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
T3Bjb2RlU2l6ZSBfX3NpemUsIGJvb2wgcmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRlY29kZUdl
bmVyYXRvcj4KICAgICBzdGF0aWMgYm9vbCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRvciogZ2Vu
I3t0eXBlZF9hcmdzfSN7bWV0YWRhdGFfcGFyYW19KQogICAgIHsKKyAgICAgICAgI3shQGNoZWNr
cG9pbnRzLm5pbD8gPyAiZ2VuLT5zZXRVc2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAgICAgICAg
IGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2VuLT5hbGln
bldpZGVPcGNvZGUxNigpOwogICAgICAgICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6
V2lkZTMyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0
aW9uLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4
IDIwNGFjNzU5ZTEzZWZmMTUxZjhjZDE3N2YzYmYxYjcwZTA3NzljYWEuLjY2ODU1YmE2NTAwODBl
NGMyM2NjMGViZWMxMGU3OTQ5Y2RlNzY4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL1NlY3Rpb24ucmIKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgogICBlbmQK
IAogICBkZWYgY3JlYXRlX29wY29kZShuYW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUubmV3KHNl
bGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0
YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSkKKyAgICAgIE9wY29kZS5uZXcoc2Vs
ZiwgbmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRh
XSwgY29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdLCBjb25maWdbOnRtcHNdLCBjb25maWdb
OmNoZWNrcG9pbnRzXSkKICAgZW5kCiAKICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFtZSwgb3Bj
b2RlcywgY29uZmlnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcAppbmRleCBmNjM5NGFjNzEwNzEyNWI3Y2FiMjFhZDJiOTExM2MwNzk1MzZhNjAw
Li4wZmQ1NjJiYjFhOTJiMDM0YzVkYzgwNjM2MDkwNWI0NjRlYjUzZWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtNTAsNyArNTAs
NyBAQCB2b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihD
YWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbAogICAgIEFTU0VSVChnbG9iYWxFeGVjLT5pc0Rl
cHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpKTsKIH0KIAotYm9vbCBDYWxsRnJhbWU6OmNh
bGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKK2Jvb2wgQ2FsbEZyYW1lOjpjYWxs
U2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2Nr
KCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewpAQCAtMTAwLDEyICsx
MDAsMTIgQEAgU1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRl
QXNSYXdCaXRzKCkgY29uc3QKIAogQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5k
ZXgoKSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY2Fs
bFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXg6OmZyb21CaXRzKGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogU1VQUFJFU1NfQVNBTiBD
YWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3
Qml0cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJp
dHModW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKQEAgLTEyMywyOCArMTIzLDI5IEBAIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNv
bnN0IEluc3RydWN0aW9uKiB2cGMpCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0Fz
Qnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAg
QVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxs
U2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxvY2soKS0+Ynl0
ZWNvZGVPZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQogCiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTMyXzY0KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFT
U0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxv
Y2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKS5w
dHIoKTsKIH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rp
b24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRl
Y29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0u
dGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOworICAgIHRoaXNb
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7Cisg
ICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6
OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2Rl
QmxvY2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwot
ICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgIEFTU0VSVChjYWxsU2l0ZUJp
dHNBcmVCeXRlY29kZUluZGV4KCkpOworICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNv
ZGVJbmRleCgpLm9mZnNldCgpOwogfQogCiAjZW5kaWYKQEAgLTE2NSw4ICsxNjYsOCBAQCBCeXRl
Y29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAgICAgICAgIHJldHVybiBjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICB9CiAjZW5kaWYKLSAgICBBU1NFUlQoY2FsbFNp
dGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoY2Fs
bFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJl
Qnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5k
ZXgoKTsKIH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTgwLDcg
KzE4MSw3IEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKICAgICAgICAgcmV0
dXJuIGNvZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICBy
ZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZz
ZXQoKSkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUlu
ZGV4KCkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IGNm
Yjc3MTg1NjAzOTkzMzkxMDA0ZmMxMzIxMTgzODQyM2M1ZGM2YTkuLjA1ZjY5MTc3NDg5NTMzMWQ5
MjMxMDAxYTE1YTJjMDVhYmU4YTg5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTQ2LDE4ICs0NiwxOCBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAogICAgICAgICBl
eHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IG1f
Yml0cyhieXRlY29kZUluZGV4LmFzQml0cygpKQogICAgICAgICB7IH0KIAotICAgICAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0K
LSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4OyB9Cisg
ICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsg
fQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1aW50MzJf
dCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CisgICAg
ICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5k
ZXg7IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1
cm4gQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IG1f
Yml0cyB7IEJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKSB9OwogICAgIH07CiAKICAgICBjbGFzcyBE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAgLTc4LDcg
Kzc4LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIGFybTY0XzMyIGV4cGVjdHMgY2FsbGVy
IGZyYW1lIGFuZCByZXR1cm4gcGMgdG8gdXNlIDggYnl0ZXMgCiAgICAgc3RydWN0IENhbGxlckZy
YW1lQW5kUEMgewogICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lOwotICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBjb25zdCBJbnN0cnVjdGlvbiog
cmV0dXJuUEM7CisgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIHZvaWQqIHJldHVyblBDOwog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBzaXplSW5SZWdpc3RlcnMgPSAyICogc2l6ZW9m
KENQVVJlZ2lzdGVyKSAvIHNpemVvZihSZWdpc3Rlcik7CiAgICAgfTsKICAgICBzdGF0aWNfYXNz
ZXJ0KENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyA9PSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpLCAiQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVn
aXN0ZXJzIGlzIGluY29ycmVjdC4iKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlND
ICB7CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0dXJuUEMpOyB9CiAgICAgICAgIEFi
c3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0dXJuIEFic3RyYWN0UEModm0s
IHRoaXMpOyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgp
IGNvbnN0OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25z
dDsKICAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdDsK
IAogICAgICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0OwpAQCAtMTgyLDEw
ICsxODIsOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXBy
ZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxl
ZSogZ2xvYmFsQ2FsbGVlKTsKIAogICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUg
Y29kZWZyYW1lIChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdp
c3RlciYgcihpbnQpOwogICAgICAgICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAg
ICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lz
dGVyJiB1bmNoZWNrZWRSKGludCk7CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBr
bm93biBub24tY29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJl
Z2lzdGVyKTsKIAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFm
dGVyIGNhcHR1cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4p
CkBAIC0yNTQsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICB2b2lkIHNldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rl
cio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnBheWxvYWQoKSA9IGNvdW50
OyB9CiAgICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwogICAgICAgICBp
bmxpbmUgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZvaWQgc2V0UmV0
dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAgICB2b2lkIHNl
dFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZh
bHVlOyB9CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5o
CmluZGV4IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEuLmFlMzU4OThm
YjVjOWY0NmQ1YjBjYWYzYzY1ZjQ3N2QzNDgxM2I5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAtMzIsMjggKzMy
LDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6
cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxv
Y2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0K
IGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0g
ICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJh
bWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKKyAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZ2lzdGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOwor
ICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdpc3RlciYgQ2Fs
bEZyYW1lOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHVu
Y2hlY2tlZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOwor
ICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1ZhbHVlIENhbGxG
cmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MjA5YzNhMWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZm
NDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBv
ZmZzZXQpIAorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9m
KHVpbnQ2NF90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZz
ZXRdKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWlu
dDMyX3QpKQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1
aW50MzJfdD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXpl
b2YoVCkgPT0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90
KSk7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIHZvaWQqIG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7Cisg
ICAgdWludDY0X3QgdG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBl
N2EzZDIyYmU4Y2NjYjMxMmZkMTE1Yjc0OGEwMmVkZDY4ZmYzNTA1Li5jMTAxMzFlNzMzZGY5OGNi
NmMwM2ZjMmM3ODI4MGM2YzMxMDQyOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJCeXRlY29kZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAi
Q2F0Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCkBAIC0xMjMsNyArMTI0LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxG
cmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgo
KTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxv
Y2soKTsKLSAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hl
Y2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVy
OjpzY29wZSgpOworICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+
dW5jaGVja2VkUihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0g
Y2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93
RnVuY3Rpb25Db250ZXh0ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlv
bigpIHx8IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7
CkBAIC0yMTMsNiArMjE0LDkgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+PSBt
YXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAg
ICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UKQEAgLTI0OSw3ICsyNTMs
NyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZv
aWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3Vt
ZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsK
ICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUsMzEgQEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2kK
ICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlw
ZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1l
bnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmly
c3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJn
dW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVk
QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8
U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nh
c3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1
bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChh
cmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAg
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9i
amVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihv
YmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
dW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNh
bkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBv
ZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IG9iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBp
ICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFs
dWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFsdWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk3LDggKzMwMSw3IEBAIHZvaWQgc2V0dXBW
YXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVj
dCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
JmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAg
bmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsK
QEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0
b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAg
IGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsK
KyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9pbnRzLgorI2lmIEVOQUJM
RShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMgPT0gJmNoZWNrcG9pbnRfb3Ny
X2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCkKKyAgICAgICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ss
IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1faGFu
ZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAg
LTU2MSw2ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5n
KQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAorICAgICAgICBtX3Jl
dHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC01OTcsNiArNjA2LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVC
bG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZv
aWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY2LDcgKzg3Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09i
amVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAg
aWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgKyAx
IC8qIHRoaXMgKi8gPj0gbWF4QXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1
cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAK
ICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkzNSw3ICs5NDUsNyBAQCBKU09iamVjdCogSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTTwogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewor
ICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6ZSgp
ICsgMSAvKiB0aGlzICovID49IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2Ew
Li5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1
bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2Fk
VmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNl
dCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1l
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1
ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIw
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxp
bmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAg
ICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5t
X2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1f
ZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7
CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxs
RnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJ
bnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRv
cjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1
bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAgICAgICAg
ICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBjOGRmMjAw
Yjk4MWZmODI2YTUyZWYwNjcwZWM3ZGVlZGNiZmY2OTZlLi5jM2U4ZDBjM2RhMTEzZDk5YWMwYzhk
ZjQwMTU5ODliMjkwZDY5MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmppdEFzc2VydElzTnVsbChHUFJSZWcgZ3ByKQogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0
QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKQogewotICAgIEp1bXAgb2sgPSBicmFuY2gzMihCZWxv
dywgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgVHJ1c3RlZEltbTMy
KDEwMDAwMDAwKSk7CisgICAgSnVtcCBvayA9IGJyYW5jaDMyKEJlbG93LCBwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIFRydXN0ZWRJbW0z
MigxMDAwMDAwMCkpOwogICAgIGFib3J0V2l0aFJlYXNvbihBSEluc2FuZUFyZ3VtZW50Q291bnQp
OwogICAgIG9rLmxpbmsodGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAppbmRleCAyMjAwOWM1ZmQyYmEyMjdkNDdjZmU4NTQ5MzlmNTJkZWYyZDcx
YmMyLi41ODcwN2ZhODQzY2RkZTg3MjVjYTcyOGI4OGMxMTNmOGE5MWYyMjFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTExNDgsOSArMTE0OCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsK
ICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KLSAgICBzdGF0
aWMgQWRkcmVzcyBhZGRyZXNzRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIGFk
ZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VS
VCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE2Myw5
ICsxMTY0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1Zh
bGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNl
dCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICBz
dGF0aWMgQWRkcmVzcyB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAg
ICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBA
IC0xMTc4LDkgKzExODAsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lz
dGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsg
UGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50
IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAg
ICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKaW5kZXggODQ4NWE5ZmJkNjgzZGJl
ZjY1OGY2NzA4ODEzZjc1OGQ1ZGRiOThkMS4uYjNmMGUxNjkyYzBkYWJhNzk5NTZlMWU1MTE5OThi
OWYyOWQyZDcyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cApAQCAtMzcsNyArMzcsNyBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblBy
b2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzYwogICAgIHN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVy
RnJhbWVBbmRQQywgY2FsbGVyRnJhbWUpKSwgc2NyYXRjaDEpOwogICAgIHN0b3JlUHRyKHNjcmF0
Y2gxLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbGVyRnJhbWUpKSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIHNjcmF0Y2gxKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBzY3JhdGNoMSk7CiAgICAgc3RvcmVQ
dHIoc2NyYXRjaDEsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29w
ZSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCAxN2MwZWRhYTgyYjlmOTRm
NTc0MTMxMTA2MWE2NTEyOTRhNTE2Zjg1Li5iNjYxMjdhNGZiMWVjYmM2ZjE0OTIxN2JjMDAzZTEw
MmUxN2FlNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC03NTUsNyArNzU1LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
IAotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSwgcmVnVDEpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdUMSk7CiAgICAgICAgIGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAyODAzMmEy
MWFhY2I5YTJkOTMyMjg1ZmUxZjk2NWFkZTNlMjdhODBhLi44NzMxNWVmODQ3N2FjMTJhNzNjNTcw
YWVmOTEyNTBjNTY5YTRmMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTMzMSwxNiAr
MzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAg
IGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwogICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50RG91YmxlKGludCBzcmMpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICB2b2lkIGVtaXRMb2FkRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZElu
dDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lk
IGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAg
ICAgICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lz
dGVySUQgdmFsdWUpOwogCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKICAgICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4g
d3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCByZWdpc3RlcnMKICAgICAg
ICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2gg
cmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIs
IHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKLSAgICAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
KTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmls
ZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCkBAIC00MDQsMzIg
KzQwNCwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9k
ZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIAotICAgICAgICB2b2lkIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKLSAgICAgICAgdm9pZCBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CisgICAgICAg
IHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVl
UmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKIAotICAgICAgICBpbnQzMl90IGdldE9wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFu
dERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYyk7CisgICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCk7CisgICAgICAgIGJvb2wgZ2V0T3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3AsIGludDMy
X3QmIGNvbnN0YW50KTsKIAotICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVn
aXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdExvYWRQYXlsb2FkKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAogICAgICAgICB2b2lkIGVtaXRMb2Fk
KGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpOwot
ICAgICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAg
ICB2b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQg
cGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2Fk
Mik7CisgICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRh
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0
YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFn
MiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKLSAgICAgICAgdm9pZCBlbWl0U3RvcmUoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2Ug
PSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwg
Y29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0
ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQz
MiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVt
aXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jv
b2wgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBS
ZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rl
ciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBi
b29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFs
c2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1p
dFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAotICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVy
SW5kZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmly
dHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7
CiAKICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRlbnRpZmllciop
OwogCkBAIC00MzgsMTcgKzQzOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1w
TGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVn
aXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1ZSk7CiAKICNlbHNlIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNy
YzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVy
IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20g
PSByZWdUMCk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgZHN0LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9h
ZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQg
aW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKICAgICAgICAgfQpAQCAtNDU2LDI5ICs0
NDksMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZkJvdGhKU0Nl
bGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVnKTsKKyAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJl
Z2lzdGVySUQgc2NyYXRjaCk7CiAgICAgICAgIFBhdGNoYWJsZUp1bXAgZW1pdFBhdGNoYWJsZUp1
bXBJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVt
YmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChS
ZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCi0gICAgICAgIHZv
aWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlVlJlZywgY29uc3QgSWRlbnRpZmllciop
OworICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVJlZywgY29uc3QgSWRlbnRpZmllciopOwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91Ymxl
Q29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBp
bnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBAIC02ODUsOCArNjc4LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
LSAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1Zh
bHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNjk0LDIwICs2ODcsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICAg
ICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVn
IHRhZywgR1BSUmVnIHBheWxvYWQpOwogI2VuZGlmCi0gICAgICAgIHZvaWQgZW1pdEdldENsb3N1
cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CisgICAgICAgIHZvaWQgZW1pdEdl
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAg
ICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7Ci0gICAgICAgIHZvaWQgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpOworICAgICAg
ICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7
CisgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJv
bSwgVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFu
ZChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsK
LSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYyk7CisgICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9m
aWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKQEAgLTczNCw3ICs3MjcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsK
ICAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQgdmlydHVh
bFJlZ2lzdGVySW5kZXgpOworICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiYgc2xvd0Nhc2VzLAogICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCkBAIC03NTQsMTMgKzc0Nywx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3Vt
ZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CkBAIC04MDQsNyArNzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTg2NCw3ICs4NTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAgICAgICB2b2lkIHByaW50Qnl0
ZWNvZGVPcGVyYW5kVHlwZXMoaW50IHNyYzEsIGludCBzcmMyKTsKKyAgICAgICAgdm9pZCBwcmlu
dEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4IDM0NTg3NDRmYmNkZDUz
YWNmOWE0MzMyOGJjNDk0YjBmZWRjYjg5M2YuLjNhMzJjMzI2MTg5ZmFiMTk3ZDdjZjlmOTFkNWY2
YjRiMzEwMjAyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNp
Z25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMTcyLDEzICsxNzIsMTMgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2Fz
ZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQg
aW50IGltbWVkaWF0ZQpAQCAtMjMwLDEzICsyMzAsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBp
bnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkg
ewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwpAQCAtMjU2LDEz
ICsyNTYsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChk
c3QsIG9wMSwgb3AyLCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwpA
QCAtMjg0LDEzICsyODQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUo
KSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2Rl
IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CkBAIC0zODcsNyArMzg3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVj
b2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRl
Y29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTM5OSw3ICszOTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVjPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC00MTUsOSArNDE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNv
cnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2
UmVnaXN0ZXJzOjplYXgpOwpAQCAtNDkxLDkgKzQ5MSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGluZ1Bv
bGljeSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwpAQCAtNTM4LDggKzUzOCw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpCiB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsK
LSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01OTksOSArNTk5LDkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlmdFR5cGUg
c25pcHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBA
IC02NzQsOCArNjc0LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5j
dGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1
bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3BlcmFuZCA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZy
b20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCkBAIC03MjQsOSArNzI0
LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblBy
b2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CkBAIC03OTksNyArNzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGMKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtODQ1LDkgKzg0NSw5IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBA
IC05MDYsOSArOTA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRf
b3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKaW5kZXggYmYyMzA2YmNlNGQ1NmYxMDlhMDM2MThiMzQwNzJmYzU3YzBlNWFjMy4uYWY5
ZWViNjI3OWNjZTRkMTFiOTM0YWUxZjFiNWM2ZTRkNjcyMmY3NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtNjYsNyArNjYsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwogCiAgICAgaWYgKE9wOjpvcGNv
ZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAgICAgc3RvcmUzMihyZWdUMCwg
bWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKQEAgLTg1LDkgKzg1LDkgQEAgc3RkOjplbmFibGVfaWZfdDwKICwgdm9p
ZD4KIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0lu
Zm8qIGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9m
ZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQo
KTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNl
dCgpOyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHdlIG5ldmVy
IHVzZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5t
X2ZpcnN0VmFyQXJnOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJl
Z1QxKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogewogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxl
ZTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVS
ZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKaW5kZXggYjdkMGNhMjM1OGJlNTI1MDE4YTNmNGU5NjE2ZDljYjg0
OGZmZjUyMS4uZTA3YTgzM2Q0Yzg1M2I5YzdhMDJkZThiNzQ2MDFkZjMwNjZiYWUyZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC01MCw3ICs1MCw3
IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
IGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgZGF0YUxvZygiSW4g
Y2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZyYW1lKSwgIiBmb3IgY29kZSBibG9j
ayAiLCBjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBDUkFTSCgpOworICAgICAgICBXVEZCcmVh
a3BvaW50VHJhcCgpOwogICAgIH0KICAgICAKICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9
IHZtLnNoYWRvd0NoaWNrZW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
aW5kZXggMjIxNDljOWJkMWI4ZWMxMTgxMmNiZTBiODU0MWJlZTkzYjEwYWIzNC4uN2JjMTRlODM1
YWQxYWQxZGQ2NzNmY2E1MDY5NjgwZTI1NWZiYzliOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgKQEAgLTQ4LDE5ICs0OCwyMCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9yQXJyYXlNb2RlKGNvbnN0IEluc3RydWN0
aQogICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKIH0KIAotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgcmV0dXJuIHNy
Yy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKIH0K
IAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMp
CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYykpOworICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRy
eSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKIHsKKyAgICBBU1NFUlQoZW50
cnkuaXNIZWFkZXIoKSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkpOwogICAgIHN0b3JlMzIo
ZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTA5LDcgKzExMCw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAjZWxzZQogICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAjZW5k
aWYKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0
aW9uQml0cyksIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKICAgICAKICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzIGlz
IG5lZWRlZC4gSklUT3BlcmF0aW9ucyB0ZW5kIHRvIHVwZGF0ZSB0aGUgdG9wIGNhbGwgZnJhbWUg
b24KICAgICAvLyB0aGUgQysrIHNpZGUuCkBAIC0xNDMsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGkKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBk
c3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE1NSw3ICsxNTYsNyBAQCBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7
CkBAIC0xNjcsOSArMTY4LDkgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKICAgICByZXR1cm4g
Y2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CiB9CiAKQEAgLTI4NCw5ICsyODUsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpz
YW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAjZW5kaWYKICNlbmRpZgogCi1B
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYykKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICBy
ZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmlu
ZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3Ro
KCkgPT0gMTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQpAQCAtMzYzLDI2ICszNjQsMjYgQEAgaW5saW5lIEpJ
VEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiAg
ICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6
OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBpbnQzMl90IEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19J
TkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KGRzdCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKGluZGV4KS50YWcoKSksIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTAs
OSArMzkxLDkgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgdGFnKQogICAgIGxvYWQzMih0YWdGb3IoaW5kZXgpLCB0YWcpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJl
Z2lzdGVySUQgcGF5bG9hZCkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAg
IG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2Fk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwNiwxMzYgKzQwNywxMzMgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkKQogICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNW
YWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldChWaXJ0dWFsUmVn
aXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1pdExvYWQoc3JjLCBkc3QudGFn
R1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIo
KSwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwogCiAgICAgaWYgKGJhc2UgPT0gY2FsbEZy
YW1lUmVnaXN0ZXIpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsK
LSAgICAgICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExv
YWRUYWcoaW5kZXgsIHRhZyk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChyZWcsIHBheWxvYWQp
OworICAgICAgICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKICAgICBpZiAocGF5bG9h
ZCA9PSBiYXNlKSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0Zv
cih0YXJnZXQsIGJhc2UpLCB0YWcpOwotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQs
IGJhc2UpLCBwYXlsb2FkKTsKKyAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcp
OworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSks
IHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKKyAgICBs
b2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBsb2FkMzIodGFnRm9y
KHJlZywgYmFzZSksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKGludCBp
bmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4Miwg
UmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQoraW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJ
RCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0
ZXJJRCBwYXlsb2FkMikKIHsKLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsK
LSAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKKyAgICBlbWl0TG9hZChyZWcy
LCB0YWcyLCBwYXlsb2FkMik7CisgICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3Rl
cklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4
KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVn
KTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZh
bHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwg
dmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZp
cnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihyZWcpOwogICAgICAgICBjaGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZpbkNvbnN0YW50UG9vbCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KEFic29sdXRlQWRkcmVzcyhieXRlUG9pbnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocGF5bG9hZEZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocGF5bG9hZEZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0
b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRh
ZywgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50
MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJ
bnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIp
Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGlu
dCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1t
MzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykp
OwogICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNDZWxsKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKLSAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKHJlZykpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJv
b2woVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNC
b29sKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0
b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNCb29sKQot
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5U
YWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAg
IHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7CisgICAgc3RvcmVEb3VibGUo
dmFsdWUsIGFkZHJlc3NGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
KGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1
ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJn
ZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5
bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygp
KSwgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5
bG9hZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0
YW50LnRhZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVh
bFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lz
dGVySW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwo
cmVnKSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdElt
bWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAg
IGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRh
ZykpOwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50
MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
K0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFu
dCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBjb25z
dGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTsKQEAgLTU1NSwxMSArNTUz
LDExIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQg
b3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0
KQogCiAvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGlu
dG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKQEAgLTU3MSw0NyArNTY5LDMyIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVn
aXN0ZXJJRCBkc3QpCiAgICAgbG9hZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1Zh
bHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0
KCksIGRzdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRz
dDIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwg
UmVnaXN0ZXJJRCBkc3QyKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVy
IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQg
ZHN0MikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLm9mZnNldCgpLCBkc3Qx
LCBzcmMyLm9mZnNldCgpLCBkc3QyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRz
dCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20p
CiB7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3Qub2Zmc2V0KCksIGZyb20pOwotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVt
cCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQg
cmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBA
IC02MjksMjggKzYxMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZykpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0
dWFsUmVnaXN0ZXIgdlJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1t
ZWRpYXRlKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsK
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRl
eCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJl
Zyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2
YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCks
IHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJl
Z2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgQVNTRVJU
KGlzT3BlcmFuZENvbnN0YW50SW50KGluZGV4KSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOwor
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25z
dGFudEludChyZWcpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29u
c3RhbnRPcGVyYW5kKHJlZykuYXNJbnQzMigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAogQUxX
QVlTX0lOTElORSBKSVQ6OlBhdGNoYWJsZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90
SW50KFJlZ2lzdGVySUQgcmVnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKaW5kZXggN2NmYTA5NWYwMGQxN2UxNDExYmU5Y2ZiODBmODA4MDZmNzg4ZjZjMS4uNDYxN2Vl
Mjk0YjE0ZmVmMTI0ODg4NDQxZGZkOTQ1MTAzNjVhYTVkZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1v
dj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNy
YyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsK
KyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNF
X0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEyOSw5ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
Uwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2Rl
Lm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAo
YmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgog
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VP
ZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1w
dHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKQEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc1VuZGVmaW5lZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsK
QEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5l
ZE9yTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CiAKQEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CkBAIC0yNzQsOCArMjc0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAg
IHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4
Niw4ICsyODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0
IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BS
ZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKICAgICAKQEAgLTM2MCwxNSArMzYwLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9v
bGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUg
bG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJl
c3BlY3RpdmVseSkuCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMzkwLDE0ICszOTAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5v
ZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9j
b25kaXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7
Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcVB0cj4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBK
U1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3Bl
Y2lhbFBvaW50ZXIub2Zmc2V0KCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJh
bmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVy
LmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCkBAIC00ODUsMTggKzQ4NSwx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2Rl
Lm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwog
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBA
IC01MTAsMjYgKzUxMCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwog
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwog
ICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KQEAgLTU0OCw5ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0
ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwg
c3JjMiwgcmVnVDEpOwogICAgIApAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29t
cGlsZU9wCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwg
cmVnVDAsIHNyYzIsIHJlZ1QxKTsKIApAQCAtNjUwLDggKzY1MCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwpAQCAtNjY0LDggKzY2NCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9OdW1lcmljPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKQEAgLTY4NCwyMCArNjg0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJp
bmc+KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmlu
ZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7CkBAIC03MjgsMTAgKzcyOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9m
ZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9u
KTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZh
bHVlLm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhy
b3duVmFsdWUpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVy
IGlubGluZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5n
CkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
KiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZm
ZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwogICAgIGVsc2UKQEAgLTc0OSw3ICs3NDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5r
KHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUp
IHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsK
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJl
Z3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1
ZVByb2ZpbGUmPihwcm9maWxlKSk7CkBAIC03NjYsMTAgKzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1Qw
KTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxl
SW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZz
ZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFi
bGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3
ICs3OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVj
b2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5z
aWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN3aXRjaFN0cmluZz4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFi
bGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAt
ODY3LDggKzg2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7CiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAg
ICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7
CisgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwog
CiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1
Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9m
ZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ny
Y0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsK
IApAQCAtOTM3LDcgKzkzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBi
eXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRG
dW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxl
ZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2
NSwxMyArOTY1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVS
ZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIs
IHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAg
LTk4NSw3ICs5ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk5Niw3ICs5OTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFYKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hh
c0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rv
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFz
SW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0x
MTA0LDggKzExMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5t
X3JlZ2V4cDsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQpAQCAtMTExNSwxMiArMTExNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5l
d0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNjEsMTEgKzEx
NjEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHBy
Q29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKQEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlc0luZGV4ID0g
Ynl0ZWNvZGUubV9hcmd2Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5t
X2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjE5LDggKzEyMTksOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjM2LDkg
KzEyMzYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjgyLDkg
KzEyODIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKQEAgLTEzMzAsOSArMTMzMCw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJl
bCgpOwpAQCAtMTM0OSwxMCArMTM0OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAK
ICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMzkwLDkgKzEzOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFt
ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRp
b24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApA
QCAtMTUwOSw3ICsxNTA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcg
c2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQg
cmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3Jh
dGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTUyMyw4ICsxNTIzLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVn
VDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJl
Z1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qz
KTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCkpOwogfQogCkBAIC0xNTQ1LDggKzE1NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGxvYWQzMihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSksIHJlZ1QwKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJs
ZVJlZ3MocmVnVDAsIHJlZ1QxKTsKICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKQEAgLTE1
NTYsOSArMTU1Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVz
dF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAg
PSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QwKTsKKyAgICBsb2FkMzIocGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdU
MCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSnVtcCB6ZXJvTGVu
Z3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9T
a2lwKSk7CiAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwpAQCAtMTU4
Niw3ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwpA
QCAtMTU5NCw5ICsxNTk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDIpOworICAgIGxvYWQzMihwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIHJlZ1QyKTsK
ICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCksIHJlc3VsdFJlZ3MpOworICAgIGxv
YWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAK
ICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggYWU1YjZhZDU0Y2E4MTM2ZWNhYzFi
NjQxMWM5NTczNDMwZTVjMWY3YS4uYzQ2Mzc5YTlmOWVjY2FlNzQ0YThlN2FjODA4NTUxZmViZjJm
YTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZl
ciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVm
ZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygp
KTsKICAgICBlbHNlCkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBOb1B0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAg
aWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwog
ICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2Zp
bGUmPihwcm9maWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAppbmRleCAzYjQ4NTBmYWI4ZDZmYWU5MzBlOWU4NjkzYzQ0YmJmNGExZTQzOTNkLi44Y2I1
NWZiNWI3ZWY4NWYwYWMxMTlmMjJlZTJhZDE5MWFjMTkwNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE2NTQsMTggKzE2NTQsMTggQEAgU2xv
d1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9p
bnRlciwgdWludDMyX3QgYnl0ZWMKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1W
YXJzV2l0aFZhbHVlczsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwog
ICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVz
ID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwotICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1Zh
bHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFy
c1dpdGhWYWx1ZXMpOworCisgICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0
SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVl
cywgMCk7CiAgICAgICAgIGludCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMgPSBzdGF0aWNfY2Fz
dDxpbnQ+KENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVW
YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2Fs
KG9wZXJhbmQpICYmIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkgPCBsb2NhbHNV
c2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVz
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVl
c1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CkBAIC0xNzgzLDcgKzE3ODMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aQogICAgIGNvZGVC
bG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0
YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29k
ZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAg
ICAgfSk7CiAKQEAgLTE5MDcsOCArMTkwNyw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Qb3BTY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHNjb3BlCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
IAotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0g
c2NvcGUtPm5leHQoKTsKKyAgICBhdXRvJiBzY29wZVNsb3QgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoVmlydHVhbFJlZ2lzdGVyKHNjb3BlUmVnKSk7CisgICAgc2NvcGVTbG90ID0gc2NvcGVTbG90
LlJlZ2lzdGVyOjpzY29wZSgpLT5uZXh0KCk7CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkSGFzSW5zdGFuY2UpCkBAIC0yNDE2LDcgKzI0MTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpz
VmFsdWUoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CiAgICAgR2V0UHV0
SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9nZXRQdXRJ
bmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gQ2xvc3VyZVZh
ciBmb3IgZ2V0X2Zyb21fc2NvcGUuCkBAIC0yNDU5LDggKzI0NTksOCBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBJbnN0cgogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNW
YWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgp
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUpLmpz
VmFsdWUoKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJ
bmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGRvZXMgbm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVy
IHZhbHVlIGFsaXZlIGluIERGRy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYWI5OWZkOTg3YjA2MWYyZTc2YTE3YzI4YmU4YzRlNzI2
NWEyZDgxNS4uZTcyOWZjMDU4ZWM2OGVjMTFmMzJkNTcwNzg5Yjc3YTA5NzVkMjZmMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3
LDkgKzU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBA
IC05Myw3ICs5Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB7CiAgICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKIApAQCAtMTE3LDggKzExNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogCkBAIC0x
NzcsNyArMTc3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQogewogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjA4LDcgKzIw
OCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChP
cCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91
c1NoYXBlOgogICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBU
aW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTIzNSw3ICsyMzUsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBA
IC0yNDksNyArMjQ5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKICAgICBMYWJlbCBzdG9y
ZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7
CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBA
IC0yNzQsOCArMjc0LDggQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKICAgICAvLyBwcm9wZXJ0
eTogcmVnVDEKICAgICAvLyBzY3JhdGNoOiByZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVy
Q2hlY2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDEsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsK
QEAgLTMwNCwxNCArMzA0LDE0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGJvb2wg
aXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3Zh
bF9kaXJlY3Q7Ci0gICAgaW50IGJhc2U7Ci0gICAgaW50IHByb3BlcnR5OwotICAgIGludCB2YWx1
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1
dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwotICAgICAg
ICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgICAgIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAg
ICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJl
Y3QpCkBAIC0zMzcsMzYgKzMzNywzNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2dldHRlci5vZmZzZXQoKSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zZXR0ZXIub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
ckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKQEAgLTM3NSwxOCArMzc1LDE4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHBy
b3BlcnR5KS5pbXBsKCkpOwpAQCAtMzk1LDkgKzM5NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpA
QCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00NDUsOCArNDQ1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG8KIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwpAQCAtNDg1LDggKzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwpAQCAtNTEzLDkgKzUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OwotICAgIGludCB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01Mzks
NyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhU
aGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CkBAIC01NzEsOCArNTcxLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7
CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVy
ZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKQEAgLTYxNSw4
ICs2MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKQEAg
LTY1Nyw3ICs2NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0
Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3Bl
LCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKK3ZvaWQgSklU
OjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsK
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTY3MCw4ICs2NzAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9s
b2NhbFNjb3BlRGVwdGg7CiAKQEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
fQogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkK
IHsKICAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC03OTAsNyArNzkwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVn
KQogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKK3ZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogewogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7
CkBAIC05MTksMTcgKzkxOSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0Tm90aWZ5V3JpdGUo
c2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7CiB9Ci12b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKK3ZvaWQgSklUOjpl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50
U2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBs
b2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwpAQCAtOTM4LDcgKzkzOCw3IEBA
IHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVz
c09mT3BlcmFuZCwgaW50IHZhbHVlLCBXCiAgICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7CkBAIC05NTAsOCArOTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7
CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNs
b3QoKTsKQEAgLTEwODYsOCArMTA4Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIHJlZ1QwKTsKQEAgLTEwOTksOSArMTA5OSw5IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKQEAgLTExMTAsNyArMTExMCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVu
c2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1
bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKQEAgLTExNTAs
OCArMTE1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwpAQCAtMTE2NCw4ICsxMTY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEludGVybmFsRmllbGQ+KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwpAQCAtMTE3Niw3ICsxMTc2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNlbHNlIC8v
IFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93
bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSkgewpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewpAQCAtMTQy
NSw3ICsxNDI1LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUKICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzSW50KHR5
cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpAQCAtMTUwMSw3ICsxNTAx
LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHkKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwog
ICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggMmNmOTE5OGY0MGVkYWFmNTNhNjFkYmYzMzkwYTZj
N2RiMjg2YTVjMS4uNjk5ODc2OWM1OGIwMGMwYmFjYzVjOTJmMWQ0NzZhYTU3ZTM1MzMwOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtNDUsMTIgKzQ1
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBp
bmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICBp
bmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
RlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKKyAgICAgICAgaW5saW5lIEp1
bXAgZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOwor
ICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBkc3QpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1
bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogI2VuZGlmCiAKICAgICAgICAgdm9pZCBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJl
Z2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTY0LDM2ICs2NCwzNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpbmxp
bmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAg
ewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBwYXls
b2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVy
SW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgcGF5
bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rl
cik7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KQor
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJ
Zk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWws
IHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZp
cnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgfQog
ICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9h
ZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5k
ZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHBheWxv
YWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICByZXR1cm4gYnJhbmNo
MzIoTm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4
KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2Fk
UHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpK
dW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVh
bFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBs
b2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBB
U1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAg
ICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAg
SnVtcCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICBs
b2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQpAQCAtMTAxLDIzICsxMDEs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0g
ICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAg
ICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAg
cmV0dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVy
ZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIGxvYWQ2
NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZDY0
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgSnVtcCBub3RJbnQz
MiA9IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIoZHN0
LCBkc3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAgICAgfQogCi0gICAgaW5saW5lIEpT
SW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25l
ZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZDY0KGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90TnVtYmVy
ID0gYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJh
bmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2Ny
YXRjaCwgZHN0KTsKQEAgLTEzNywyNCArMTM3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CisgICAgICAgIHN0
b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGVudHJ5KSk7CiAjZWxzZQot
ICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAgICAgICAgc3RvcmU2
NChmcm9tLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNlbmRpZgogICAg
IH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCiAgICAgewotICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkpOworICAgICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
ZW50cnkpKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5
KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5KSk7Ci0gICAgICAgIHN0b3JlMzIo
ZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKKyAgICAg
ICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNl
bHNlCi0gICAgICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSkpOworICAgICAgICBz
dG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGVudHJ5KSkpOwogI2VuZGlm
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0YWIyNjcxNTVjMTNkZjM2YTcyNDliNmMzNDMuLjll
M2Q3NjMzZjllY2ExYTQyNmVhMTllNWQ4ZTkyOTg1MzI1ZDllOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC00Myw3ICs0Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAg
ICAgICAgICAgIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7CiAgICAgICAg
ICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBhcmd1bWVu
dHMKLSAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBUcnVzdGVkSW1tMzIoZXhwZWN0
ZWRBcmdDb3VudCArIDEpKSk7CisgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRBcmdDb3VudCArIDEpKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IFNwZWNpYWxpemVkVGh1bmtKSVQoVk0m
IHZtKQpAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAg
ICAgdm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNy
YyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsK
ICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBz
Y3JhdGNoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1
bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2Vs
bChzcmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50
IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewot
ICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1
bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2Fk
SW50MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRl
NmRiNDRiZGFmOWU4ZTgwZjIyYWEuLmFkYTQ1OTZiMWI0ODgzYjc0MDczNTU5YzQ2NTYwN2Q5NDE0
Yjc2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAKQEAgLTQwMSw3ICs0MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
OjpyZWdUMywgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwogI2VuZGlmCiAgICAgaml0Lm1vdmUo
SlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDMp
OwotICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOworICAgIGpp
dC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7
CiAgICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKIAog
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGV4dHJhIHNsb3RzIHdlIGNhbiB1c2UKQEAg
LTQ2Miw3ICs0NjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFy
aXR5Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5yZXQoKTsKICNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpIHNlY3Rpb24gYWJvdmUsIFVTRShKU1ZBTFVFMzJfNjQpIHNlY3Rpb24gYmVsb3cu
CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVu
dEdQUjIpOworICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgSlNJbnRlcmZhY2VKSVQ6
OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6YXJn
dW1lbnRHUFIyKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGV4dHJhIHNsb3Rz
IHdlIGNhbiB1c2UKQEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCk7Cisg
ICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJZk5v
dEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJbnQzMi4KQEAgLTExMzYsOCAr
MTEzNiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlz
Tm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7CiAgICAgCiAgICAgLy8gU2V0IHVwIG91ciBjYWxsIGZyYW1lLgotICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKLSAgICBqaXQuc3RvcmUz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOworICAgIGppdC5zdG9yZTMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKIAogICAgIHVuc2ln
bmVkIGV4dHJhU3RhY2tOZWVkZWQgPSAwOwogICAgIGlmICh1bnNpZ25lZCBzdGFja01pc2FsaWdu
bWVudCA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAlIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSkK
QEAgLTExNTgsNyArMTE1OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAgLy8KICAg
ICAvLyBUaGF0J3MgcmVhbGx5IGFsbCB0aGVyZSBpcyB0byB0aGlzLiBXZSBoYXZlIGFsbCB0aGUg
cmVnaXN0ZXJzIHdlIG5lZWQgdG8gZG8gaXQuCiAgICAgCi0gICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEdQUkluZm86
OnJlZ1QxKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBHUFJJbmZvOjpyZWdUMSk7
CiAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKSwg
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQubHNoaWZ0MzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuYWRkMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSksIEdQ
UkluZm86OnJlZ1QyKTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZN
JiB2CiAgICAgCiAgICAgaml0Lm5lZ1B0cihHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIEdQUklu
Zm86OnJlZ1QzKTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29s
dXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIp
OwogCiAgICAgLy8gVGhyb3cgU3RhY2sgT3ZlcmZsb3cgZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCmluZGV4IDk1MWQ3NjlkNjkyNDliZjNhYzk4ZjQ0
MDgzNDFmNjUxMDJhOTU1YzEuLmFmZWVjYmFjMDdiMWViMTcwZWQ2ZDQ0NjU1MDgyNTdkYTc2NTFi
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCkBAIC0yOSw3
ICsyOSw3IEBACiAvLyAtIFByaW50cyBldmVyeSBpbnN0cnVjdGlvbiBleGVjdXRlZCBpZiBPcHRp
b25zOjp0cmFjZUxMSW50RXhlY3V0aW9uKCkgaXMgZW5hYmxlZC4KIC8vIC0gUHJpbnRzIHNvbWUg
aW5mb3JtYXRpb24gZm9yIHNvbWUgb2YgdGhlIG1vcmUgc3VidGxlIHNsb3cgcGF0aHMgaWYKIC8v
ICAgT3B0aW9uczo6dHJhY2VMTEludFNsb3dQYXRoKCkgaXMgZW5hYmxlZC4KLSNkZWZpbmUgTExJ
TlRfVFJBQ0lORyAwCisjZGVmaW5lIExMSU5UX1RSQUNJTkcgMQogCiAvLyBEaXNhYmxlIGlubGlu
ZSBhbGxvY2F0aW9uIGluIHRoZSBpbnRlcnByZXRlci4gVGhpcyBpcyBncmVhdCBpZiB5b3UncmUg
Y2hhbmdpbmcKIC8vIGhvdyB0aGUgR0MgYWxsb2NhdGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3YTQ2ZThlNTc4OTdmMjc4NWNk
MzM5ZmNiZTJiYzBjOTBjZWRiMi4uOGZjYzVkYjhkODM4YjkyMjIxYjE3MmU4OWE3YzgzMmUwMmM2
ZjBjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5j
bHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb21tb25TbG93
UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29w
ZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsK
ICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBM
TElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRP
cGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJh
bmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKS5qc1Zh
bHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9w
ZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3Rh
bnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
eyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsgfQoraW5s
aW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0K
IAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAog
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAt
MTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAogICAgIGNh
bGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2Mp
OwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBj
YWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJh
bWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkwLDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZUFu
ZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVuZ3RoKTsKIAog
ICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZy
YW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOwor
ICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBD
KHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2Fs
bGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcyNiw3IEBAIGlu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNl
dENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVl
QXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsK
ICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkzMCw3ICsxOTMxLDcgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1f
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9m
aWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNh
bGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9
KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRsZVZhcmFyZ3NDaGVj
a3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gc2lkZVN0YXRl
LmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJbnQzMigpOworCisgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgeworICAgICAgICBsb2FkVmFyYXJn
cyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fYXJndW1lbnRz
KS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfSk7
CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBKU1Zh
bHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFy
YXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2Fs
bEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGNv
bnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Nh
bGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3Ms
ICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJlc3VsdDsKK30KKworaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sKKyAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgeworICAgICAgICBhdXRv
IG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0
KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRCeXRlY29kZS5leGVj
dXRhYmxlQWRkcmVzcygpLCAwKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQnl0
ZWNvZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRleCA9IHBjLm5leHQoKS5pbmRleCgpOworICAgIGF1
dG8gbmV4dEJ5dGVjb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNv
ZGVJbmRleCk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgMCk7CisjZW5kaWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCos
IEVuY29kZWRKU1ZhbHVlKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0
aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZy
YW1lLCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUgcmVzdWx0KQoreworICAgIC8vIFNpbmNlIGFsbCBv
dXIgY2FsbGluZyBjaGVja3BvaW50cyBkbyByaWdodCBub3cgaXMgbW92ZSByZXN1bHQgaW50byBv
dXIgZGVzdCB3ZSBjYW4ganVzdCBkbyB0aGF0IGhlcmUgYW5kIHJldHVybi4KKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29k
ZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBz
aWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsK
KyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIocGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2Rl
KHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDb25zdHJ1
Y3RWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgLy8gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mgc2hvdWxkIG5ldmVyIHJl
dHVybiBpZiB0aGUgdGhpbmcgaXQgd2FzIGNhbGxpbmcgd2FzIGlubGluZWQuCisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywg
cGMpOworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2tw
b2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CitleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShj
YWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+
Ynl0ZWNvZGVJbmRleDsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOwor
CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3ND
aGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFy
Z3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2Fs
bEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRl
U3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9
PSBvcF9yZXQsICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2Vk
IGJ5IGFuIG9wX3JldC4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNh
bGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRl
U3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KHJldHVyblRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0
cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5
cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFt
ZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxs
RnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJh
bWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCBm
Y2FmODBkYTFjYjVjNDZjNTBlZTdmN2Y1ODA1MzNmN2Y1M2NlMDQxLi5jZDQ1YWYxMGIzMTNhOTE2
YjBkM2VlYzBiZGJhMTZlY2Y4ZmQ4YWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuaApAQCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpT
VmFsdWU7CiBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9KYXZhU2Ny
aXB0KHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1F
bnRyeVRvTmF0aXZlKHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CisgICAgdm9pZCBjaGVj
a3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQoKTsKKyAgICB2b2lkIGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCgpOwogfQogCiBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBm
cmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0
Li4wYjllM2RmODYyNzU5ODI3YzQxNzIzMGVkMmRjZGRmMWU1YzkyYzAyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0x
MDkxLDcgKzEwOTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BO
YW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAK
ICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENv
dW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQ
QwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUs
IG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3Ao
Y29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0
dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVw
YXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElm
RXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMK
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0
aW9uW3QzXSwgLm5vRXhjZXB0aW9uCiAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246Cisubm9FeGNlcHRpb246ICAgIAorZW5kCisKK21h
Y3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRj
aCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgIGNhbGxTbG93UGF0
aChmcmFtZVNsb3dQYXRoKQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9t
X3Nsb3dfcGF0aF90cmFtcG9saW5lKQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKICAgICBpZiBK
U1ZBTFVFNjQKICAgICAgICAgbW92ZSByMSwgc3AKQEAgLTE5OTksNiArMjAwMywyMiBAQCBvcChs
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAg
ICBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5j
dGlvbkZvckNvbnN0cnVjdCkKIGVuZCkKIAoraWYgbm90IENfTE9PUCBhbmQgbm90IENfTE9PUF9X
SU4KKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50
cnlwb2ludAorICAgIF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5
cG9pbnQ6CisgICAgICAgIG1vdmUgcjAsIGEyCisgICAgICAgIGNhbGxTbG93UGF0aChfc2xvd19w
YXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpCisgICAgICAgIGJyYW5j
aElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAg
ICAgICBqbXAgcjAKKworICAgIGdsb2JhbCBfY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50
CisgICAgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludDoKKyAgICAgICAgIyBGSVhNRTog
V2UgY2FuIHByb2JhYmx5IGRpc3BhdGNoIHRvIHRoZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0
bHkgYnV0IHRoaXMgd2FzIGVhc2llciAKKyAgICAgICAgIyBhbmQgcHJvYmFibHkgZG9lc24ndCBt
YXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9j
aGVja3BvaW50X29zcl9leGl0KQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhy
b3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIwCitlbmQKIAogIyBM
YXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1
cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdo
ZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IDNk
ZDJlYjQ4Y2JiYTZlZjVjZDk4ODYzOWM3OTExZTIyYTcxMzMxNDguLmJkZTAyYzYzNGIwOTgyYWQ5
YTMyYzRlNDg0ZWYzY2FmNzMwN2I3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC00Miw2ICs0MiwxNyBAQCBt
YWNybyBuZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQogICAgIGptcCBbdDEsIHQwLCBQdHJTaXplXSwg
Qnl0ZWNvZGVQdHJUYWcKIGVuZAogCittYWNybyBzdG9yZVBDKCkKKyAgICBsc2hpZnRpIGNvbnN0
ZXhwciBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQsIFBDCisgICAgc3RvcmVpIFBDLCBM
TEludFJldHVyblBDW2Nmcl0KKyAgICByc2hpZnRpIGNvbnN0ZXhwciBCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50U2hpZnQsIFBDCitlbmQKKworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTElu
dFJldHVyblBDW2Nmcl0sIFBDCisgICAgcnNoaWZ0aSBjb25zdGV4cHIgQnl0ZWNvZGVJbmRleDo6
Y2hlY2twb2ludFNoaWZ0LCBQQworZW5kCisKIG1hY3JvIGdldHVPcGVyYW5kTmFycm93KG9wY29k
ZVN0cnVjdCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIgY29uc3RleHByICVvcGNvZGVTdHJ1
Y3QlXyVmaWVsZE5hbWUlX2luZGV4W1BCLCBQQywgMV0sIGRzdAogZW5kCkBAIC05Miw3ICsxMDMs
NyBAQCBlbmQKIAogIyBBZnRlciBjYWxsaW5nLCBjYWxsaW5nIGJ5dGVjb2RlIGlzIGNsYWltaW5n
IGlucHV0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQuCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChz
aXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBU
YWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkUEMoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwg
UEIKICAgICBnZXQoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2RzdCwgdDEpCkBAIC0zOTAsNyArNDAx
LDcgQEAgZW5kCiAKICMgQ2FsbCBhIHNsb3cgcGF0aCBmb3IgY2FsbCBvcGNvZGVzLgogbWFjcm8g
Y2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQotICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRl
Rm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0zOTksMjAg
KzQxMCwyMCBAQCBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQK
IAogbWFjcm8gY2FsbFRyYXBIYW5kbGVyKHRocm93SGFuZGxlcikKLSAgICBzdG9yZWkgUEMsIEFy
Z3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVT
dGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQogICAgIGND
YWxsMihfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAgICBidHBueiByMCwgdGhyb3dI
YW5kbGVyCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAg
IGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRv
SklURm9yTG9vcCgpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVCgKICAgICAgICAgMSwKICAgICAgICAg
bWFjcm8oKQotICAgICAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0
W2Nmcl0KKyAgICAgICAgICAgIHN0b3JlUEMoKQogICAgICAgICAgICAgcHJlcGFyZVN0YXRlRm9y
Q0NhbGwoKQogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBh
MQpAQCAtNDIxLDcgKzQzMiw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAg
ICAgICAgICAgIG1vdmUgcjEsIHNwCiAgICAgICAgICAgICBqbXAgcjAsIEpTRW50cnlQdHJUYWcK
ICAgICAgICAgLnJlY292ZXI6Ci0gICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFn
T2Zmc2V0W2Nmcl0sIFBDCisgICAgICAgICAgICBsb2FkUEMoKQogICAgICAgICBlbmQpCiBlbmQK
IApAQCAtMjA1Nyw3ICsyMDY4LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNs
b3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRk
cCBjZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNp
emUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCB0MikKLSAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVu
dENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICAgICAgc3RvcmVQQygpCiAgICAgICAgIHN0b3Jl
aSB0MiwgQXJndW1lbnRDb3VudCArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMs
IHNwCiAgICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxs
TGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJU
YWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKaW5kZXggODQwZjg5Yjg4
ZDQyMGNjM2I3NWM4M2Q2YzU3ODI0MTU0MDJmMzM2Ni4uOGY1MDVjYzY5OWNkNGFlMzdlZjM0NTAw
ZmRmYmU2OTk5ODA3Y2RhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJnTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aApAQCAtMTMzLDYgKzEzMywxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tO
b3ROZWVkZWQoKSB7IGNsZWFyTmVlZHNPdmVyZmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVu
Y3RvciYgZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5z
dXJlQ2FwYWNpdHkoY291bnQpOworICAgICAgICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVu
YyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0
eShpbnQgbmV3Q2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCmluZGV4IGY4ZDk3OTk1ODc0NTIyNmE0N2U2ZjhiNmM1NTg2MGMxOGZjZTg3
YTEuLmZmYjc0NTlhNmFkY2NiYWIxNmRhOGE0ZWY4YjE3MTFkODcyYTFhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTE3ODgsNiArMTc4
OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQg
aGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNp
Z25lZCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0K
ICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQog
ICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAK
QEAgLTE4MjAsNiArMTgyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4
dFR5cGUgOiAyOwogICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDogMTsKICAgICB1bnNpZ25l
ZCBtX2NvZGVUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIAog
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNl
TW9kZTsKQEAgLTIwMTgsNiArMjAyMCw3IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxv
Y2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSoKIAogICAg
ICwgbV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAg
ICAgLCBtX2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhjYWNoZWRDb2RlQmxvY2suaGFz
Q2hlY2twb2ludHMoKSkKIAogICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVy
ZXMoKSkKICAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKQEAg
LTIyMDYsNiArMjIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29k
ZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zCiAgICAgbV9wYXJzZU1v
ZGUgPSBjb2RlQmxvY2subV9wYXJzZU1vZGU7CiAgICAgbV9jb2RlR2VuZXJhdGlvbk1vZGUgPSBj
b2RlQmxvY2subV9jb2RlR2VuZXJhdGlvbk1vZGU7CiAgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9j
ay5tX2NvZGVUeXBlOworICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVj
a3BvaW50czsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21l
dGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9yYXJlRGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBmMzU4ZDQ4YTUwZGU3M2VhYjM4NTY5OWIzYTZmNTEx
M2JiYmU5YmJhLi5lMjdmZTNjYTk3OGIzOTQ0ODI2MTY3ZDRhMDYxYTJlYWQ0ZjkyNjE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
QEAgLTk4LDggKzk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUg
R0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCi0j
ZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCisj
ZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpKQorI2Rl
ZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQpKQogCiAjZGVmaW5lIFJF
VFVSTl9UV08oZmlyc3QsIHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAgICAgICBcCkBAIC0xMTM5LDggKzExMzksNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVu
dmlyb25tZW50PigpOwotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNj
b3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7
CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VU
X0MoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRp
YWxWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAg
QVNTRVJUKGluaXRpYWxWYWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBq
c1REWlZhbHVlKCkpOwpAQCAtMTE1NSw4ICsxMTU0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1c2hfd2l0aF9zY29wZSkKICAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRl
Y29kZS5tX25ld1Njb3BlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBD
SEVDS19FWENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVu
dFNjb3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3Vy
cmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3Bl
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIG5ld1Njb3BlKSk7CiB9CiAKQEAgLTExNjUsNyAr
MTE2Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lz
dGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwogICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2Nv
cGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lz
dGVyOjpzY29wZSgpOwogICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRl
bnQpOwogCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTc5LDcgKzExNzcsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6
OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0
ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVk
U2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKICAg
ICAvLyBQcm94eSBjYW4gdGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQcm94eSBpbiB3aXRoIHN0
YXRlbWVudCdzIEB1bnNjb3BhYmxlcy4KICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTE0MjQs
NyArMTQyMiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQog
ewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVm
ZmVyPigpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGJ5
dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgQVNTRVJUKGJ5dGVj
b2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5LmlzQ29uc3RhbnQoKSk7CiAgICAgSlNJbW11dGFibGVC
dXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1
dHRlcmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5qc1ZhbHVlKCku
YXNDZWxsKCkpOwogICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIApAQCAtMTQ0Myw3ICsxNDQxLDcgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIC8vIFdlIGFs
c28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVh
ZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgLy8g
YSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0g
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1
dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7
CisgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJs
ZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogCkBAIC0xNDg4LDQgKzE0ODYsMTYg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NwcmVhZCkKICAgICBSRVRVUk4oSlNJbW11dGFi
bGVCdXR0ZXJmbHk6OmNyZWF0ZUZyb21BcnJheShnbG9iYWxPYmplY3QsIHZtLCBhcnJheSkpOwog
fQogCitleHRlcm4gIkMiIHZvaWQgZHVtcFJlZ2lzdGVyKFVDUFVSZWdpc3RlciB2YWx1ZSk7Citl
eHRlcm4gIkMiIHZvaWQgZHVtcFJlZ2lzdGVyKFVDUFVSZWdpc3RlciB2YWx1ZSkKK3sKKyAgICBk
YXRhTG9nTG4oUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlKSkpOworfQorCisv
LyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKTsKKy8vIGV4dGVybiAiQyIgU2xv
d1BhdGhSZXR1cm5UeXBlIFNMT1dfUEFUSCBjaGVja1BDKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBJbnN0cnVjdGlvbiogcGMsICkKKy8vIHsKKworLy8gfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERh
dGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAK
aW5kZXggNGJkMTkyYTZjNzdlZmMwMjZlN2E5NWE1YjdiZWM3MTI0MzY3N2U3OC4uNDdiMjQ3NDE4
Y2E4OGVmZDFiNzhlNjMxMWI2NzVkMWVmYTVhNWZmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKQEAgLTM1LDYgKzM1LDExIEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBj
b25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNvbnN0cnVjdChnbG9iYWxP
YmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgYXJncywgZXJyb3JN
ZXNzYWdlKTsKK30KKworSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29u
c3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC00NiwxMCArNTEsOSBAQCBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIGNvbgogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RU
eXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBjb25zdHJ1Y3Rvck9iamVjdCkpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JP
YmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIG5ld1RhcmdldCkpOyAg
CiB9CiAKLQogSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUs
IGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAppbmRleCBk
MGFlMDBiYTExZDdjZWUyNGRmZmFlOTE5MTE5NjdlMDJhYTZlZGUzLi5mYjYxOTc0YTdkYjM5YzQ5
MWY5ZjkzYmFlYjZjYWMxMjYyMWYzYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc3RydWN0RGF0YS5oCkBAIC02MCw2ICs2MCw4IEBAIHN0cnVjdCBDb25zdHJ1Y3RE
YXRhIHsKIAogLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFs
IHdpdGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0
aGVtLgogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBj
b25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BS
SVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgY29uc3Ry
dWN0b3IsIENvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0
JiwgSlNWYWx1ZSBuZXdUYXJnZXQpOwogCiBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVj
dCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25z
dHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKaW5kZXggYTY3OTVkYTFlZGNjZjMxMDIy
YWMyZGQ5YWVmYWZkNDNhMDFhNWM4NS4uNGIzNDYxZGUyMmU3NmY3ZGJlMzE4Mzk0MjQ1YTkzYzU3
NTA5ZjM4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuY3BwCkBAIC0xMzcsMjAgKzEzNywxOSBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6
dW5tYXBBcmd1bWVudChWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQogICAgIG1fbWFwcGVkQXJndW1l
bnRzLmF0KGluZGV4LCBpbnRlcm5hbExlbmd0aCgpKSA9IHRydWU7CiB9CiAKLXZvaWQgRGlyZWN0
QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
aWYgKCFtX21hcHBlZEFyZ3VtZW50cykgewogICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6
bWluKGxlbmd0aCArIG9mZnNldCwgbV9sZW5ndGgpOwogICAgICAgICB1bnNpZ25lZCBpOwotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQgPSBmaXJzdEVsZW1lbnREZXN0IC0gb2Zmc2V0Owog
ICAgICAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICAgICAgY2Fs
bEZyYW1lLT5yKHN0YXJ0ICsgaSkgPSBzdG9yYWdlKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gc3RvcmFnZSgpW2ldLmdldCgpOwogICAgICAg
ICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0
ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERl
c3RbaSAtIG9mZnNldF0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdl
bmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogdW5zaWduZWQgRGlyZWN0QXJndW1lbnRzOjpt
YXBwZWRBcmd1bWVudHNTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmgKaW5kZXggMGE2YjFhMDY2MDkwZTJjYTVmNTZmNTBhOWM1M2EyY2Zj
ZTc3MmUwYS4uOGQ5NjQyYTJjOTQwNDA4MGI5MTNhYzI3MGNkMDEzYzM5ZWNkYTgxNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKQEAgLTE0
NCw3ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERp
cmVjdEFyZ3VtZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fbGVu
Z3RoKTsKICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKaW5kZXggYjMxYjcwYWJk
MDBjZWVhZjVlYmI3ZWUxZDQ2N2RhNDg4NzBkNTFjMS4uMDc0YzIxNjJkOGRhMTY0NzA2ZjQwMDRi
ZGFiM2RhZWViMjcyY2JiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaApAQCAtNTksNyArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihWTSYsIHVuc2lnbmVkIGluZGV4LCB1bnNp
Z25lZCBsZW5ndGgpOwogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNp
Z25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHVzaW5nIE1vZGlmaWVkQXJn
dW1lbnRzUHRyID0gQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+Owog
ICAgIE1vZGlmaWVkQXJndW1lbnRzUHRyIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgKaW5kZXggMjE4MmE2MmIxMzAzNDNhZjU2NzIxNzM2M2EzZjVjMWI4ODYxODFm
Zi4uZTBhYWJmNWYyZWUxODViN2QxMzMxNjAzN2Q4YzFkODg4NDI0Njg1MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCkBAIC0yOTcsNyArMjk3LDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01v
ZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ24KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMzA1LDkgKzMwNSw5IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGCiAgICAgVHlw
ZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmlz
TWFwcGVkQXJndW1lbnQoaSArIG9mZnNldCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmly
c3RFbGVtZW50RGVzdCArIGkpID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZz
ZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHRoaXNPYmplY3QtPmdldElu
ZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9m
ZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGdsb2JhbE9iamVj
dCwgaSArIG9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAppbmRleCA0NGM3ZTUyMGYxYzBhMjQwYThiNjY2NWEyNzRhNTE0NDU5Mzg3NjYw
Li42ZDA3NTkxNzExZWVkYmMyOGUwZTRkYTc4NDk4MjJhYjhkNjZmNWQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9p
ZCBKU0FycmF5OjpmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciYgYXIKICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGdsb2JhbE9iamVj
dCwgaSkpOwogfQogCi12b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyNjksNyArMTI2OSw3IEBAIHZvaWQgSlNBcnJh
eTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lCiAgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpLmF0KHRoaXMsIGkpOwogICAgICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0
ICsgaSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKKyAg
ICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBKU1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xMjk0LDExICsxMjk0LDExIEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKICAgICAgICAgaWYgKCF2KQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsg
aSAtIG9mZnNldCkgPSB2LmdldCgpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZz
ZXRdID0gdi5nZXQoKTsKICAgICB9CiAgICAgCiAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0g
Z2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNl
dF0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKaW5kZXggMzE3OTQ5YzU3MmExMWI3NWFkYzE4M2FjOWU0MTQ0ZjY2Y2Y2YWI1MC4uMzEx
NjViNWZmNDkyNTRjYzFhNmM0NzkwMmI3OTEwYWM0YTdkOWJmZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0
KiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSXRlcmF0b3JQcm90b2NvbEZh
c3RBbmROb25PYnNlcnZhYmxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAppbmRleCBlMzJlOTQ5N2Q0NzgyOTUw
MzNkYWE5OWE1OTM2ZGVhMTlhMWM0OWMwLi5lNDkwOTc1NjE2ZGFkMzkxMTQyMzgyYzk5M2U3OGQx
MmMxOTExYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCkBAIC00NiwxMyArNDYsMTMgQEAgdm9pZCBKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGln
dW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKLXZvaWQgSlNJ
bW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IHB1
YmxpY0xlbmd0aCgpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IGdldChpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0g
PSBnZXQoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgZmly
c3RFbGVtZW50RGVzdFtpXSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAppbmRl
eCBhMTgyZGM2NjE4ZmFhYmJmY2IzY2U2M2UwN2MxNzE1ZGY4ZDFkNDliLi40ODJlMDI2YTIxZjU2
MmRiNWUzNzI2MzczMDc5YTVlYzU1NTQ5NzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKQEAgLTE0Nyw3ICsxNDcsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+CiAg
ICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IGE2ZWIwZWE1ZjZhYWRlYjM3ZDI3
Nzk0ZjdjOTEzZjY4MTY4MzQ5N2UuLjE2YWEzNjlmNDg1MDcwNjFjMDYzNjE1MThhZTE1ZDJiYzY4
ZmI2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjA0
LDYgKzIwNCw3IEBAIHZvaWQgSlNMb2NrOjp3aWxsUmVsZWFzZUxvY2soKQogeyAgIAogICAgIFJl
ZlB0cjxWTT4gdm0gPSBtX3ZtOwogICAgIGlmICh2bSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoIXZtLT5oYXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCksICJSZWxlYXNp
bmcgSlNMb2NrIGJ1dCBwZW5kaW5nIGNoZWNrcG9pbnQgc2lkZSBzdGF0ZSBzdGlsbCBhdmFpbGFi
bGUiKTsKICAgICAgICAgdm0tPmRyYWluTWljcm90YXNrcygpOwogCiAgICAgICAgIGlmICghdm0t
PnRvcENhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAppbmRleCBkYjA1MjU0ODgyNTMzOWE2YjEz
MmJhNGU0NDJiMjExZDZkZTM3YmEwLi41OTY4MDhjYWZjMGIwZjRjODQ3MGJkNzU5ZWQ5ZjQ5MTZj
NjY0NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPCiAKICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCB1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlKTsKIAotICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1i
b2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9s
VGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKHVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0KCkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52
bSgpKSk7CisgICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNl
dChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVD
b25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9i
amVjdC0+dm0oKSkpOwogCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDQxMzg3Yzg1MGE5OTVhZDU3NDIxMDUw
Y2RlODZjYjI1MjFlNTQxMTYuLjNkNzc1N2IyZTE3ZGRjMWMxOGNhZjExMzRjYTk5NDEyODhiNWQ0
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01MDks
MTIgKzUwOSw2IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAg
IGlmIChPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpIDwgT3B0aW9uczo6cmVzZXJ2ZWRa
b25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNpemUpCiAgICAgICAgIE9wdGlvbnM6OnNv
ZnRSZXNlcnZlZFpvbmVTaXplKCkgPSBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5p
bXVtUmVzZXJ2ZWRab25lU2l6ZTsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgLy8gRklY
TUU6IE1ha2UgcHJvYmUgT1NSIGV4aXQgd29yayBvbiAzMi1iaXQ6Ci0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzk1NgotICAgIE9wdGlvbnM6OnVzZVBy
b2JlT1NSRXhpdCgpID0gZmFsc2U7Ci0jZW5kaWYKLQogICAgIGlmICghT3B0aW9uczo6dXNlQ29k
ZUNhY2hlKCkpCiAgICAgICAgIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSA9IG51bGxwdHI7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDAzZjI4
NTI0NGRiOTkwMmVhYmE5NmQ2OTc3ZTNiN2QzOTE5N2RlNTIuLjRkMTU2Y2Y3M2RmY2Q1NGZmYTgz
ZGNkNzk4ZWQ3ZWFkNmM1YmFiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaApAQCAtMTQ5LDcgKzE0OSw2IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdl
YkFzc2VtYmx5U3RyZWFtaW5nQXBpID0gZmFsc2U7CiAgICAgdihCb29sLCB2ZXJib3NlQ29tcGls
YXRpb24sIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHZlcmJvc2VGVExD
b21waWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgbG9nQ29t
cGlsYXRpb25DaGFuZ2VzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihCb29sLCB1
c2VQcm9iZU9TUkV4aXQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHBy
aW50RWFjaE9TUkV4aXQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHZh
bGlkYXRlR3JhcGgsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHZhbGlk
YXRlR3JhcGhBdEVhY2hQaGFzZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKaW5kZXggMDgx
ZDk3OGE3YjJhNjI2NmFjNTUyYzM3OWQzODQ1MDA1ZGMxMWYxMC4uM2M3NDBkNDhmNjI0MWIwMjYw
NWZiZjUyNWJkZGYyMzE5MmQwOWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBTY29w
ZWRBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKQogICAgICAgICBz
dG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5jbGVhcigpOwogfQogCi12b2lkIFNjb3BlZEFyZ3Vt
ZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEdlbmVy
aWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmly
c3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCmluZGV4IGY4NWU0N2RmYmVlOGNhN2MzNzA0ZjI5
ZWQ0Y2IxYjRlOTcyMDQ0NTcuLmU1OGNiMjJlZmQ0OGM2NzRiZjViMWIxMTI4MGI1MWFiYzBkZTA4
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5oCkBAIC0xNDIsNyArMTQyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0Fy
Z3VtZW50czxTY29wZWRBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGlu
ZGV4LCBtX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDlkNTRmZGNkODQ3M2Q3
MjNmYmFlY2E1MTM0OTA2MWQ5NTIwMjRiOTEuLjcwNzgzMzRhNTUyYjVhMTZjOTY5ZDMxYWUxZDEw
ODlkOTk5MTM3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJCb29sZWFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiQnVpbHRpbkV4
ZWN1dGFibGVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgi
CkBAIC0xMDI5LDYgKzEwMzAsMjAgQEAgdm9pZCBWTTo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIH0KICNlbmRpZgogCit2b2lk
IFZNOjphZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9hZCkKK3sKKyAg
ICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RGTW92ZShwYXls
b2FkKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBWTTo6
ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gc2lkZVN0
YXRlID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLnRha2UoY2FsbEZyYW1lKTsKKyAgICByZXR1cm4g
c2lkZVN0YXRlOworfQorCiB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mIHZtKQogewogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggZTlhOTBmMDkwYWY1YWE4ZjhhM2IxNzNm
MjE0ZWJlYTIzNmEzOWQ0MC4uZDAxNTRiNWRjMGZmZmM3YTQyYmRhODVlNDRjMTJhMGQyOWY2Y2Ni
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDMsNiArMTAzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ2FsbEZyYW1lOworc3RydWN0IENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xhc3Mg
Q29tbW9uSWRlbnRpZmllcnM7CkBAIC05NDgsNiArOTQ5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAKKyAgICB2
b2lkIGFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRy
PENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IGZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxG
cmFtZSopOworICAgIGJvb2wgaGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hlY2twb2ludFNpZGVTdGF0ZS5zaXplKCk7IH0KKwogICAgIFZNRW50cnlTY29wZSog
ZW50cnlTY29wZTsKIAogICAgIEpTT2JqZWN0KiBzdHJpbmdSZWN1cnNpb25DaGVja0ZpcnN0T2Jq
ZWN0IHsgbnVsbHB0ciB9OwpAQCAtMTE5OCw2ICsxMjAzLDcgQEAgcHJpdmF0ZToKICAgICBMb2Nr
IG1fc2NyYXRjaEJ1ZmZlckxvY2s7CiAgICAgVmVjdG9yPFNjcmF0Y2hCdWZmZXIqPiBtX3NjcmF0
Y2hCdWZmZXJzOwogICAgIHNpemVfdCBtX3NpemVPZkxhc3RTY3JhdGNoQnVmZmVyIHsgMCB9Owor
ICAgIEhhc2hNYXA8Q2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlPj4gbV9jaGVja3BvaW50U2lkZVN0YXRlOwogICAgIElubGluZVdhdGNocG9pbnRT
ZXQgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQ7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlIG1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250
cm9sRmxvd1Byb2ZpbGVyPiBtX2NvbnRyb2xGbG93UHJvZmlsZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGY2ODhhN2M5
ZTk0MjZkOWUwYmVhM2FmMGNmZmFmMmMyN2RkNWE1NjcuLjJmNGIxYzdkZTZhODdjNzQxMWU4NmU4
N2U3ZjE5MjQ3MzUyYzBmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC03MiwxMSArNzIsMTEgQEAgcHVibGljOgogICAg
IGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzOyB9CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNv
bnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsgfQogCi0gICAgQUxXQVlTX0lOTElORSB1aW50
NjRfdCBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2lu
ZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBU
eXBlIGdldENvbnN0YW50VHlwZShpbnQgaW5kZXgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSB1
aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBU
eXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOwotICAg
ICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXhdOworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07CiAgICAgfQogCiAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRleCBhYjE3NDA2YWZiNzM0YTcwOGRmMTFkYmI2ODAx
NTE4Yjc2NjVmYjQyLi5lZTJiMzI3ZDJhZjU0NzE5Njg3OTY5YWMyNTJhODRjNzg4ZWY2ZTk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAKQEAgLTI0Miw2ICsyNDIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFBhcnNlcihGdW5j
dGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsg
fTsKIAorICAgIC8vIFdlIG5lZWQgdGhpcyBmb3IgYXV0b2dlbmVyYXRlZCB0ZW1wbGF0ZXMgdXNl
ZCBieSBKUyBieXRlY29kZXMuCisgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2ludHMoKSBjb25zdCB7
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9CisKICAgICB2b2lkIGR1bXAoY29uc3QgQ29u
dHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggNWE4ZWJiODFkMmRiZWUwM2Fj
NjkzMmFjZWY2ZmJiNDcyNzJlYzg0Yi4uYzI0MDY5MDkzOWQyY2UwMTRhMTczYjJlMzc5YzJkYjE5
OTJkM2Q0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQ
YXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5j
cHAKQEAgLTc1LDcgKzc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAK
ICNkZWZpbmUgUkVBRCh2aXJ0dWFsUmVnaXN0ZXIpIFwKICAgICAodmlydHVhbFJlZ2lzdGVyLmlz
Q29uc3RhbnQoKSBcCi0gICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0
Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKSkgXAorICAgICAgICA/IEpTVmFsdWU6
OmRlY29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlcikpIFwKICAg
ICAgICAgOiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKSkKIAogaW5saW5lIGJvb2wgaml0
Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6
RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAppbmRleCBhNDk3M2ViYmEwNDY4YTY1ZGI5NWM4YmE4MzI2NGFkOGZhODZkZGQ5Li43
YTcyNWIwYmMxNWI2ZTliNjU2NjE1YWU2OTdlMGZjODdmODNkMWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAt
MjIwLDcgKzIyMCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAKICAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0
LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6YWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAg
ICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1Rv
U3BpbGwpIHsKICAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwpA
QCAtMjQzLDcgKzI0Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBoYW5kbGUgbWlzbWF0Y2hlZCBhcml0eQogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NjQKICAgICBzbG93UGF0aC5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3csCi0gICAgICAgIENDYWxsSGVscGVyczo6cGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDEpKSk7CisgICAgICAgIENDYWxs
SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMSkpKTsKIAogICAgIGlmICh1c2VUYWdSZWdpc3RlcnMoKSkKICAgICAgICAgaml0
LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CkBAIC0zNzcsNyArMzc3LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICAvLyAyLiBXZSBuZWVkIHRvIGtub3cgdG8gcmVz
dG9yZSB0aGUgcHJldmlvdXMgd2FzbSBjb250ZXh0LgogICAgIGlmICghbV9qc1RvV2FzbUlDQ2Fs
bGVlKQogICAgICAgICBtX2pzVG9XYXNtSUNDYWxsZWUuc2V0KHZtLCB0aGlzLCBKU1RvV2FzbUlD
Q2FsbGVlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCgpLCB0aGlzKSk7Ci0gICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pzVG9XYXNtSUNDYWxsZWUuZ2V0KCkp
LCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pzVG9XYXNtSUNDYWxs
ZWUuZ2V0KCkpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKIAogICAgIHsKICAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRs
eSB3ZSBqdXN0IGRvIGFuIGluZGlyZWN0IGp1bXAuIEJ1dCB3ZSBzaG91bGQgdGVhY2ggdGhlIE1v
ZHVsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0
Zi9CaXRtYXAuaAppbmRleCA0YzZmNWQ0NDI2MzJjM2VmYzAwMGJkMThlOWUzNjk0NTJmYWYxYzEw
Li5iNDZkYTllODVhYjliNjg2MjQzOGE2OTJlMzY2YTc1MDU0ZGNjNmMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAt
NTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVf
dCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhcihzaXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsK
KyAgICB2b2lkIGludmVydCgpOwogICAgIGludDY0X3QgZmluZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1
bkxlbmd0aCkgY29uc3Q7CiAgICAgc2l6ZV90IGNvdW50KHNpemVfdCBzdGFydCA9IDApIGNvbnN0
OwogICAgIHNpemVfdCBpc0VtcHR5KCkgY29uc3Q7CkBAIC0xMDIsNiArMTAzLDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogCisg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcj0oYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9iaXRtYXAtPnNldChtX2luZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEJpdG1hcCog
bV9iaXRtYXA7CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwpAQCAtMTExLDYgKzExOCw5IEBAIHB1
YmxpYzoKICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCBmaW5kQml0KDAsIHRydWUpKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKCp0aGlzLCBiaXRtYXBTaXplKTsgfQogICAgIAorICAgIGl0ZXJhdG9yIG9wZXJh
dG9yW10oc2l6ZV90KTsKKyAgICBjb25zdCBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCkgY29u
c3Q7CisKICAgICB2b2lkIG1lcmdlQW5kQ2xlYXIoQml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRD
bGVhcihCaXRtYXAmKTsKICAgICAKQEAgLTIyNCw2ICsyMzQsMTMgQEAgaW5saW5lIHZvaWQgQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y2xlYXJBbGwoKQogICAgIG1lbXNldChiaXRzLmRh
dGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUs
IHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRU
eXBlPjo6aW52ZXJ0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kp
CisgICAgICAgIGJpdHNbaV0gPSB+Yml0c1tpXTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1h
cFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+OjpuZXh0UG9zc2libHlVbnNldChzaXplX3Qgc3RhcnQpIGNvbnN0CiB7CkBA
IC00MDksNiArNDI2LDE5IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT46Om9wZXJhdG9yIT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSAtPiBpdGVyYXRvcgoreworICAgIEFTU0VSVChpbmRleCA8
IHNpemUoKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBpbmRleCk7Cit9CisKK3RlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCAtPiBjb25zdCBpdGVyYXRvcgoreworICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8Qml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPio+KHRoaXMpKVtpbmRleF07Cit9CisKIHRlbXBsYXRlPHNpemVf
dCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8
Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpoYXNoKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3Iu
aAppbmRleCA4ODViN2IxNzNiMTFhNjAxYmUyOWEzMzJhYjlkMmE0MTRkNTYyMTIyLi5hMzhjOTZj
MzQ5M2U5ZDEwZDU2YTgwYjViZDc1ZjFkNGE2Y2JmMzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9GYXN0Qml0VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5o
CkBAIC00NjQsNiArNDY0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQogCisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3J8PShib29sIHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA/ICp0aGlzID0gdmFsdWUgOiAqdGhpczsgfQorICAgIEZhc3RCaXRSZWZlcmVuY2Um
IG9wZXJhdG9yJj0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA6ICp0aGlzID0g
dmFsdWU7IH0KKwogcHJpdmF0ZToKICAgICB1aW50MzJfdCogbV93b3JkIHsgbnVsbHB0ciB9Owog
ICAgIHVpbnQzMl90IG1fbWFzayB7IDAgfTsKQEAgLTUwOSw3ICs1MTIsMTEgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KLSAgICAKKworICAgIC8v
IEZvciB0ZW1wbGF0aW5nIGFzIFZlY3Rvcjxib29sPgorICAgIHZvaWQgZmlsbChib29sIHZhbHVl
KSB7IHZhbHVlID8gc2V0QWxsKCkgOiBjbGVhckFsbCgpOyB9CisgICAgdm9pZCBncm93KHNpemVf
dCBuZXdTaXplKSB7IHJlc2l6ZShuZXdTaXplKTsgfQorCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg3YzcyMjU1
NDcyOGIwNDUyNGY2YjQyM2ZjMDFkMWE1YzA3MDNiZjUuLjU4MjhiYjBlZTBmZGRkY2E5ZmUzMTM0
OWFlZmRiNjI5YWM1ODQ0ZjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxl
IHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZW1vdmUgcHJv
YmUgT1NSIGV4aXQgb3B0aW9uIHNpbmNlIHdlIGFyZSBub3QgdXNpbmcgdGhhdCBhbnltb3JlLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0xMi0xMyAgV2Vuc29uIEhzaWVoICA8d2Vu
c29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggdGhlIG1hY0Nh
dGFseXN0IGJ1aWxkIGFmdGVyIHIyNTM0ODYKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmlu
ZGV4IDUxNDIzYTc1OGFmODIwNDJlOTU4YTE4OGU2MmQ3M2ZjNzA4MzU1YjcuLjY1NTc3NDBmN2Rh
MTdlMDFlNWJkMTIyNDkzY2IwMzdiN2Y0ZWNiN2UgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwpAQCAtNDk4LDcgKzQ5OCw2IEBAIE5PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJy
ZW50SklUPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAwCiBCM08xX09Q
VElPTlMgPSBbIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MSJdCiBCM08wX09QVElPTlMgPSBbIi0tbWF4
REZHTm9kZXNJbkJhc2ljQmxvY2tGb3JQcmVjaXNlQW5hbHlzaXM9MTAwIiwgIi0tZGVmYXVsdEIz
T3B0TGV2ZWw9MCJdCiBGVExfT1BUSU9OUyA9IFsiLS11c2VGVExKSVQ9dHJ1ZSJdCi1QUk9CRV9P
U1JfRVhJVF9PUFRJT04gPSBbIi0tdXNlUHJvYmVPU1JFeGl0PXRydWUiXQogRk9SQ0VfTExJTlRf
RVhJVF9PUFRJT05TID0gWyItLWZvcmNlT1NSRXhpdFRvTExJbnQ9dHJ1ZSJdCiAKIHJlcXVpcmVf
cmVsYXRpdmUgIndlYmtpdHJ1YnkvanNjLXN0cmVzcy10ZXN0LXdyaXRlci0jeyR0ZXN0V3JpdGVy
fSIKQEAgLTcxMyw3ICs3MTIsNyBAQCBkZWYgcnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2Ft
cGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1By
b2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9O
UyArIE5PX0NKSVRfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09QVElPTiArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGlu
Zy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmls
ZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsg
Tk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBk
ZWYgcnVuRlRMTm9DSklUTm9QdXRTdGFja1ZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpCkBAIC03MjksNyArNzI4LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24o
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuREZHRWFnZXIoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJf
T1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9P
UFRJT04gKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQorICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9D
T05USU5VT1VTTFlfT1BUSU9OUyArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRh
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hh
bmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2M1YWY0NGJiM2M0ZmNjMzc5OGZhZDQz
NmNjYjFkODgzYjUxOWZhMS4uN2QyOTE5OTliZTlmNjAwNTc0M2U2ZGZhYjUyMmNmMjk2ZWIyOTFi
ZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMyBAQAorMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8g
dGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwt
YW5kLWV4aXQtc3RyaWN0LmpzOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisKKzIwMTktMTItMTMg
IEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZU
TCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvbG9h
ZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAg
KGNoZWNrRXF1YWwpOgorCiAyMDE5LTEyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIEpTRml4ZWRBcnJheSwgYW5kIHVzZSBKU0lt
bXV0YWJsZUJ1dHRlcmZseSBpbnN0ZWFkCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2Fk
LXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9z
dHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwpp
bmRleCAzNjE4ZjhjYmIzZDMyMTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBj
ZjQ5ZDg4ZTNmZmU5MTJiMWUxNmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVz
cy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1z
dHJpY3QuanMKQEAgLTE4LDggKzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAi
ICsgYi5hOwogICAgIGlmIChhLmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0
aCAhPSBiLmMubGVuZ3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBs
ZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMu
bGVuZ3RoICE9PSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5s
ZW5ndGg7CiAgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYg
KGEuY1tpXSAhPSBiLmNbaV0pCiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIu
YzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385677</attachid>
            <date>2019-12-13 21:06:06 -0800</date>
            <delta_ts>2019-12-13 21:36:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191213210554.patch</filename>
            <type>text/plain</type>
            <size>615382</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDViYzhiNjRiY2JjNzEyYmQ2NDFmNjg1MTBkNmFmMjU2NzhmODA5Li5iZmRkM2Y1ZDM1ZWI5MGJm
NjRkYWFlYmM5Mzg5Y2Y1ZGJhNjJkNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NjggQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGUgdGhlIHByb2JlLWJhc2VkIE9TUiBleGl0
IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uIHRodXMgdGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQgY29kZSBzaW5jZSBpdAorICAgICAgICB3b3VsZCBiZSBhIG5vbi10cml2aWFs
IGFtb3VudCBvZiB3b3JrIHRvIGdldCBjaGVja3BvaW50cyB3b3JraW5nCisgICAgICAgIHdpdGgg
cHJvYmUgT1NSLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAg
ICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUluZGV4OjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6YXNCaXRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjplbnVt
VmFsdWVzRXF1YWxBc0ludGVncmFsKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZSk6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNBbHdheXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNMaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZUlu
ZGV4Rm9yRXhpdCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1UbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6
OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29k
ZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6dW5tYXBPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAg
ICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJh
bmQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6Ok9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpr
aW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kOjp2aXJ0dWFsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1RtcCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNI
ZWFkZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0FyZ3VtZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJpdHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZM
b2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZUbXBzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXApOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omxv
Y2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRG
b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldEZvck9wZXJh
bmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvckluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdl
dENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6On5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcjo6flZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCk6CisgICAg
ICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpk
dW1wKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBh
cnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpm
bHVzaERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNo
T3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFu
dG9tTG9jYWxEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0
T1NSKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RG
R0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5k
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5C
eXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRs
ZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9j
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdU
b0NoZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5m
by5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
YWxsZWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xh
eW91dFBoYXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5k
bGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVu
a3MuaDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JF
bnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
OjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBm
dGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjptYXhVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjptaW5VbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptYXhTaWduZWQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bWluU2lnbmVkKToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50
cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBn
ZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmN1cnJlbnRWUEMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKEpTQzo6Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU6OmdldFRtcCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6c2l6ZU9m
VmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklU
OjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9y
ZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudElu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFs
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlND
OjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRo
dW5rSklUKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRjaE5leHRJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVy
Zmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OmR1bXBSZWdpc3Rlcik6CisgICAg
ICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToK
KyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6
CisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJy
YXksIGFuZCB1c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0YmE4ZTBhN2Ix
NzQ2MDEwNzdlNjUzYmZlZmZkYTFlZTQzOGI0Y2FkLi4zNGMyMmM2ZDhkODBhNjdiMWNlM2JlNTZm
ZDVhMzY0MTUzMTE5OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTEyLTEzICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxk
IGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAg
ICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6
b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0
KToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0
UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6
b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAg
ICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEZhc3RCaXRWZWN0b3IgKG1vcmUp
IHRlbXBsYXRlIGNvbXBhdGFibGUgd2l0aCBWZWN0b3I8Ym9vbD4gc28gb3RoZXIgY29udGFpbmVy
cworICAgICAgICB1c2luZyBhIFZlY3RvcjxUPiBtZW1iZXIgY2FuIHVzZSBGYXN0Qml0VmVjdG9y
IGluc3RlYWQgaWYgdGhlIFQgaXMgYm9vbC4KKworICAgICAgICBBbHNvLCBhZGQgc29tZSBoYW5k
eSBtZXRob2RzIHRvIEJpdG1hcC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJh
dG9yKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6Cisg
ICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVy
ZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJh
dG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpmaWxsKToKKyAgICAgICAgKFdU
Rjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisKIDIwMTktMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgSGVhcDo6ZmluYWxpemUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQ5OTZjMWU0YmQ2MTY1NWMyYzkxNTkyMjJlMGI0ZWJlZTRlMTcwN2YuLjNlZjFmOTA5OTIx
NDcwMTc0ZGI1MzkxZmJjOWM3M2Q4YzNkNWQwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzIsNiArOTMyLDcgQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcyMURBQzM0M0Mw
MEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1
MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9t
aXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzYwMCw2ICszNjAxLDcgQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIz
RXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2Ny
aXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0
aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAw
RTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBw
YXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzYxNCw2ICszNjE2LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8q
IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0Qx
QkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1
NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVy
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVs
cGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAw
NTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2
NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU5NTAsNiArNTk1NSw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBD
YWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENh
bGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BT
dGFja0lubGluZXMuaCAqLywKQEAgLTg1ODEsNyArODU4Nyw5IEBACiAJCQkJQTUyNzA0ODUxRDAy
N0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJ
CQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAq
LywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMg
Ki8sCkBAIC04NTkyLDYgKzg2MDAsNyBAQAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAv
KiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBS
ZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4
NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEw
MDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIx
MDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MDkzLDYgKzkx
MDIsNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQy
NjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFB
OTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMu
LjY4ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aApAQCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0g
ICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggMzVkMDE3
NTZkNTMyYTcxZWMwN2ZlNDAzZWY3YTUyNTBiNWZjNmY2MS4uNDFiYzk2MWExNTMwODVmYmE4NTUw
NjVjMzliNmM2ZGE2ZmIyYTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMjYz
LDIwICsyNjMsMjAgQEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29t
cGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KLXN0cnVjdCBPcGVyYW5kIHsKK3N0cnVjdCBCM09wZXJhbmQgewogICAgIGNv
bnN0IGNoYXIqIG5hbWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgT3BlcmFuZDxp
bnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVy
YW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5cGVkZWYgT3Bl
cmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50NjRfdD4gSW50
NjRPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlw
ZWRlZiBCM09wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8
aW50OF90PiBJbnQ4T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIE9wZXJh
bmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQorI2RlZmluZSBNQUtFX09QRVJB
TkQodmFsdWUpIEIzT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3Rp
bmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQordm9pZCBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+JiBv
cGVyYW5kcykKIHsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDAuKSB9KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigtMC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVXaXRo
SW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci1WZWN0b3I8T3BlcmFuZDxGbG9hdFR5
cGU+PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQorVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+
PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQogewotICAgIFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlw
ZT4+IG9wZXJhbmRzOworICAgIFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7
CiAgICAgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMob3BlcmFuZHMpOwogICAgIHJldHVy
biBvcGVyYW5kczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcAppbmRleCA2MDU4ZmIwNjIwMzk0NmM0Y2Q1NmVmNmE5ODM4NzlkMmQ2
YzgxZmI2Li44MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNhZTVjMGVlM2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAg
LTYzLDcgKzYzLDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLAogCiB2b2lkIEJ5dGVjb2RlRHVt
cGVyQmFzZTo6ZHVtcFZhbHVlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgbV9vdXQucHJp
bnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcub2Zmc2V0KCkpLmRhdGEoKSk7CisgICAgbV9vdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcpLmRhdGEoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFRyYWl0cz4KQEAgLTgzLDEyICs4MywxMiBAQCB0ZW1wbGF0ZSB2b2lkIEJ5dGVjb2Rl
RHVtcGVyQmFzZTo6ZHVtcFZhbHVlKEdlbmVyaWNCb3VuZExhYmVsPFdhc206OkdlbmVyYXRvclRy
YQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKGludCByKSBjb25z
dAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVn
aXN0ZXIgcikgY29uc3QKIHsKLSAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgocikpCisg
ICAgaWYgKHIuaXNDb25zdGFudCgpKQogICAgICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIpOwog
Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0ZXIocikpOworICAgIHJldHVybiB0
b0NTdHJpbmcocik7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCbG9jaz4KQEAgLTk4LDEwICs5OCwx
MCBAQCBpbnQgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4K
LUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAogewotICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25z
dGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgpLCAiKSIpOworICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25zdGFu
dChyZWcpOworICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgcmVnLCAiKSIpOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEJ5dGVjb2Rl
RHVtcGVyOjpkdW1wQ29uc3RhbnRzKCkKICAgICB9CiB9CiAKLUNTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI6OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVy
Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25zdAogewogICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAgYXV0byB2YWx1ZSA9IGZv
cm1hdENvbnN0YW50KGJsb2NrLT5nZXRDb25zdGFudFR5cGUoaW5kZXgpLCBibG9jay0+Z2V0Q29u
c3RhbnQoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmgKaW5kZXggMGQ3MTY3NTAzOTRiMTVkNGViNWU4N2M1YTg4MjUxMDc1ZWZlMDNl
ZS4uZWRiMTEyOTIxYWY3NTNlNjNkODYxMzcyZmJkZTBlZWY4OWZjYTE1OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcFZhbHVlKFQgdikgeyBtX291dC5wcmludCh2KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rl
cikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldCkgY29uc3QgPSAwOwogCiAgICAgQnl0ZWNvZGVEdW1wZXJCYXNl
KFByaW50U3RyZWFtJiBvdXQpCkBAIC05MSwxMSArOTEsMTEgQEAgcHJvdGVjdGVkOgogCiAgICAg
dm9pZCBkdW1wQnl0ZWNvZGUoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0
IElDU3RhdHVzTWFwJik7CiAKLSAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25z
dCBvdmVycmlkZTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgQ1N0
cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKIAogICAgIEJsb2NrKiBt
X2Jsb2NrOwogfTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIEpTQzo6
Qnl0ZWNvZGVEdW1wZXI8RnVuY3Rpb25Db2RlQmxvY2s+OjpCeXRlY29kZUR1bXBlcjsKIAogICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRl
eCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lz
dGVyIGluZGV4KSBjb25zdCBvdmVycmlkZTsKICAgICBDU3RyaW5nIGZvcm1hdENvbnN0YW50KFR5
cGUsIHVpbnQ2NF90KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJhOTA0MDFhNzExN2RjMGY5ZjI2
ZTE5MTM3ZWIyYzMxNTliLi5iODEyZmI0MWJmOWFiZTY2NGY0NDc1OTEzZTljZTM0MjlkYjQxMmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
Y3BwCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMiw2ICszNCw4IEBAIG5hbWVz
cGFjZSBKU0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1wKFdURjo6UHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9mZnNldCgpKTsKKyAgICBpZiAoY2hl
Y2twb2ludCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIsIGNoZWNrcG9pbnQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMxZjcyYWMyMDczMWMxZDNiY2U5MzUx
NThkZi4uNjA4NzAwYzU3YWQ3MDE3MmMyY2IwMGYxMDlhNWM0MTMxNzQyZDViMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0
cmVhbTsKQEAgLTMzLDI4ICszNCwzOSBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKKwogY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJs
aWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUluZGV4KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChkZWxldGVk
VmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZhbHVlKCku
YXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQot
ICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3Qg
Y2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZz
ZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0Owor
ICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAibnVt
YmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMgLSAx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpn
ZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9
CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXgg
ZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09
IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1
aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlk
T2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQogICAg
IGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRvciAhPShj
b25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KIApAQCAtNjksMTMgKzgxLDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0
IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWlu
dDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRP
ZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQz
Ml90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NFUlQoY2hl
Y2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNvZGVJbmRl
eCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29kZUluZGV4
KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBjaGVja3Bv
aW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1
aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJlc3VsdC5t
X29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIKaW5kZXggNzFiZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3ODdhZmZh
NC4uZGYwYmRlYjFjYjBmMDU0MDgwN2U5YWZhN2UyOTMxNGExNzBjMjdkZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3ICs1OSw3
IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2ZpbGUsCi0g
ICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkJpbmFy
eUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwxMyBAQCBv
cCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAg
ICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgwNSw2ICs4
MTIsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAg
IH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmls
LAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cywKQEAgLTg0NSw2ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAog
ICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAg
IGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAg
ZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0K
IAogb3AgOnJldCwKQEAgLTk5Miw3ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJv
d25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6
dGhyb3csCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBiNmNmZjEwMTE0
M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2ZDNjOTE2Y2U1
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBAIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5
cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEg
djEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6
dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50VHlwZTIgPSB0
eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOworICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2
Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9
PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVtQ2hlY2twb2lu
dFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxtYXhOdW1DaGVj
a3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2Fs
bFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wVGFpbENhbGxW
YXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVh
bEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6
bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJn
Q291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgaWYgKGNoZWNr
cG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisgICAgICAgICAgICByZXN1bHQuc2V0
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
CmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzkuLjNlNWVkYzBh
NjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIKICNpbmNsdWRl
ICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFw
aDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxpbmUgYm9vbCBv
cGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRUaGF0
SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJh
bmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmluZGV4IDNkMTJl
MTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEwOWI3ODk2N2Yx
MDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaApA
QCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuICFWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlzTG9jYWwoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJlZy50b0xvY2Fs
KCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkg
fHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDg2
OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1YTFiZDJjMTYz
ZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVT
dHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNsb25l
ZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnBy
ZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmVwbGFj
ZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1l
bnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUp
OworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVn
aXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAgICBib29sIHNo
b3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRDb2RlLT53YXND
b21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENvZGUtPndhc0Nv
bXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEsNyArNjQyLDcg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRv
IGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fdmFyICE9
IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRD
b25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwpAQCAtNzA5
LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVM
b2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9
IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29u
c3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7
CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIg
cGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0
IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0xMDg2LDYgKzEw
ODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVj
b2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXguY2hlY2twb2lu
dCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24ubmV4dCgpLmlu
ZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4MTEsMTAgKzE4
MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5p
cXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkpOwor
ICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocHJv
ZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9maWxlcy0+bV9i
dWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOworICAg
ICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRz
W2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0yNzEzLDcgKzI3
MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8qIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQg
OiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9maWxlQnVja2V0
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDA5MmM3YWFjODQyNmMx
ZTRjOWQ1OWY1NGY5MWU1NTYzNmMzNzRhMWYuLjc5NjM0MzVlYWIzNzQ0ZTk2Y2RlYTU0ZTY4ZDQ4
YmYxMjNlMDAwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKQEAgLTE1OCw2ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxlZUxvY2Fscygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQgbnVtVmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50
VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1f
bnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJz
KTsgfQpAQCAtMjI2LDIwICsyMjcsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVk
Vk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3Bv
aW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgp
CisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYm
ICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0ZXIoKSAmJiAh
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAo
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9y
YXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVybiBp
bmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gbV9udW1W
YXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRs
ZXIpOwpAQCAtNTc4LDEwICs1NzksOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXgg
Pj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25bcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9
CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KQEAgLTc3MSw2ICs3NzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJl
c3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9yRXhpdChCeXRl
Y29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JFeGl0KCkgeyBt
X29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3MSw3ICs4NzIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCi0gICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+IG1f
Y2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAKICAgICAgICAg
RGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAgfTsKQEAgLTkz
OCwxMCArOTM5LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJz
KGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKLSAgICB2
b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBy
ZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3Zt
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1MWM3MzE4ZWJj
MDQzMS4uMThhZjI0MjJiMTAwMWYyNWY5MDk2ODJlNGQ5ZWIwMWE1OWI2NTQ5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAsNyArMTYwLDkg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJhbWUq
IHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOworICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsKKworICAgIGJv
b2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAg
ICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQg
Zm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygp
IGNvbnN0OwpAQCAtMjc4LDYgKzI4MCwxNiBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVy
YXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdAogICAgICAgICAmJiBpbmxpbmVD
YWxsRnJhbWUoKSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWUoKTsKIH0KIAoraW5saW5lIGJvb2wg
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAor
eworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChD
b2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9y
aWdpbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFi
NTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLmFiYTlmMmQzZGYwZWJjN2RmYzUwZDc4MWY2MzEz
YWI5ZDA3MGQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwog
CisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVzbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1w
IGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4K
IGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2
ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlz
TGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lz
dGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBw
b2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZl
Y3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1F
OiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8
UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0
Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uMzkwNDk0Zjk0NTRhNzAyMmU0NWM4OTdjYmEwOTU5ZGQx
YmY5NzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVP
cmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisg
ICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7
CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBp
c0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Nj
b3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJs
ZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsx
OTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUn
cyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNp
b24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElu
bGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAg
ICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xv
c3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihz
dGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9m
ZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1
cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0OSw3ICsyNTgsNyBAQCBpbmxpbmUgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVP
cmlnaQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLWlubGluZSB2
b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhp
czsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMTggQEAgaW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQog
ICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorQUxX
QVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJh
bmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6IG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIHJldHVybiBv
cGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihyZWcub2Zmc2V0
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnOworICAg
ICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmlu
ZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5
NTU1MmViZjM4ZjdiNGFiMmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2
ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIK
KyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAt
NjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJh
bmQudmFsdWUoKSArIG1fb3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCgpIGNvbnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkw
LDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3Bl
cmFuZCBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlI
YXNoIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1
NTc4OWRmZmRlNjdmMzk2Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4
YmMwNjcwNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsK
ICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwot
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgp
OworICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFs
dWVSZWcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7Cisg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEs
NyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFs
dWUgdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNv
ZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgK
aW5kZXggNWQ4MWM0YzkwMGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBj
MDBmYmQ0NGM4NTVhMzg5ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldDsKLSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kOwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWVi
MzczNDU5NDQ2ZGM3NGNkMTIwMjc1NjI1NzYuLjVkYWQzYTlkZDFkMzAzMTllMzE2YWJhNDFhNzIw
ZTZhNGE2NTEwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CkBAIC0zNSwxMTEgKzM1LDIyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFy
Z3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVt
Q2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25lIHRoYXQgZXhpc3Rz
IGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBi
eXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJh
bmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFu
ZCgpID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1l
bnRPcGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsg
fQorCisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAg
ICAgICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS5pc0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3Bl
cmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVy
YW5kKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0K
KyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWlu
dDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgp
OyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVy
YW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3Vt
ZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5s
aW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQ7CisgICAgaW50IG1fb3BlcmFu
ZDsKK307CisKK0FMV0FZU19JTkxJTkUgYm9vbCBPcGVyYW5kOjpvcGVyYXRvcj09KGNvbnN0IE9w
ZXJhbmQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZSgpID09IG90aGVyLnZhbHVlKCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpID09
IG90aGVyLnZpcnR1YWxSZWdpc3RlcigpOworfQorCitpbmxpbmUgYm9vbCBPcGVyYW5kOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkg
Pj0gMDsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpOworfQorCitpbmxp
bmUgT3BlcmFuZCBPcGVyYW5kOjpmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBPcGVy
YW5kIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxPcGVyYW5kPih2YWx1ZSk7CisgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpY19hc3NlcnQo
c2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZih1aW50NjRfdCksICJPcGVyYW5kOjphc0JpdHMoKSBy
ZWxpZXMgb24gdGhpcy4iKTsKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2Ug
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKLSAg
ICBPcGVyYW5kcygpCi0gICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykK
KyAgICAvLyB1c2luZyBTdG9yYWdlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKKyAgICAvLyB1c2luZyBSZWZUeXBlID0gdHlwZW5hbWUgc3RkOjpjb25k
aXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yOjpCaXRSZWZl
cmVuY2UsIFQmPjsKKyAgICAvLyB1c2luZyBDb25zdFJlZlR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKKyAg
ICB1c2luZyBTdG9yYWdlID0gVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKKyAg
ICB1c2luZyBSZWZUeXBlID0gVCY7CisgICAgdXNpbmcgQ29uc3RSZWZUeXBlID0gY29uc3QgVCY7
CisKKyAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNp
emVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCiAgICAgewotICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5l
ZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1
bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAg
ICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkp
OwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFy
Z3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCiAgICAgewotICAgICAg
ICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsK
KyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
KTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlr
ZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKKyAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQog
ICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkgKyBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhl
ci5zaXplKCkpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQot
ICAgIAorCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Bcmd1bWVudHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQotICAgIAorICAgIHNpemVfdCBu
dW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9CisgICAgc2l6ZV90
IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9m
QXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisKKyAgICBzaXplX3QgdG1wSW5kZXgo
c2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRt
cHMoKSk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CisgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlk
eDsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX251bUFyZ3VtZW50cyArIGlkeDsKKyAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIGlkeDsKICAgICB9CisKKyAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6
ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAK
LSAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFs
dWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQotICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNp
emVfdCBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsKLSAgICB9CisgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGFy
Z3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgo
aWR4KV07IH0KICAgICAKLSAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1tsb2NhbEluZGV4KGlkeCldOyB9Ci0gICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIFJlZlR5cGUgbG9j
YWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAg
IENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2lu
ZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZUbXBzKCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fscygp
OworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkxvY2FscygpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgotICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCisgICAgUmVmVHlwZSBhdEZvcihz
aXplX3QgaWR4KQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3Bl
cmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9w
ZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1l
bnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJl
dHVybiBsb2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAg
IHJldHVybiBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJh
bmRLaW5kIG9wZXJhbmRLaW5kPgotICAgIGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0
CisgICAgQ29uc3RSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9w
ZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVy
biB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAg
IGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisK
KyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVl
ID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAg
ICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxv
Y2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBuZXdTaXplID0g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6
ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHNpemVfdCBvbGRO
dW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
Ci0gICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBUKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTnVtVG1wczsgKytpKQorICAgICAgICAgICAgbV92YWx1
ZXNbbmV3U2l6ZSAtIDEgLSBpXSA9IG1fdmFsdWVzW3RtcEluZGV4KG9sZE51bVRtcHMgLSAxIC0g
aSldOworCisgICAgICAgIG1fbnVtTG9jYWxzID0gc2l6ZTsKKyAgICAgICAgaWYgKGVuc3VyZWRW
YWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUgLSBvbGROdW1Mb2Nh
bHM7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2Fs
cyArIGkpXSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5z
dXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUpCisgICAgdm9pZCBl
bnN1cmVUbXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAg
ewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6
ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXpl
IDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mVG1wcygpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOworCisgICAgICAgIGlmIChlbnN1
cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXph
dGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXpl
OyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBU
JiB2YWx1ZSkKQEAgLTE2NCw4NCArMjc0LDc2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlk
eCA+PSBudW1iZXJPZkxvY2FscygpIHx8IGxvY2FsKGlkeCkgPT0gVCgpKTsKICAgICAgICAgc2V0
TG9jYWwoaWR4LCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgo
aW50IG9wZXJhbmQpIGNvbnN0CisKKyAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBn
ZXRGb3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PE9wZXJhbmRzKj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KKworICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1
cm4gYXJndW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9j
YWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJu
IGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKLSAgICBzaXplX3Qg
b3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CisgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChPcGVyYW5kIG9wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wZXJhbmRJbmRleCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAo
IW9wLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOwogICAgIH0K
ICAgICAKLSAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFJlZlR5cGUgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkp
OworICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIAotICAg
IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBSZWZUeXBl
IG9wZXJhbmQoT3BlcmFuZCBvcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kKHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJu
IHRtcChvcC52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVy
YW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJh
bmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBU
Jj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KKyAg
ICBDb25zdFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQogICAgIAotICAg
IGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxz
KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgp
KSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQotICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKG9wLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcC52YWx1ZSgpID49IDAp
OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3AudmFsdWUoKSkgPCBu
dW1iZXJPZlRtcHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChvcC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQg
b3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3Bl
cmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5vcGVyYW5kKG9wZXJh
bmQpID0gdmFsdWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNl
dE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgfQogCiAgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25z
dCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQot
ICAgIFQmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAg
Y29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7
IH0KLQotICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4IDwgbV9udW1Bcmd1bWVudHM7IH0KLSAgICBib29sIGlzTG9jYWwoc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgb3BlcmFuZEZvcklu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBSZWZUeXBlIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBS
ZWZUeXBlIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKwor
ICAgIE9wZXJhbmQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpLm9mZnNldCgpOwotICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZv
ckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICBlbHNlIGlmIChpbmRleCA8
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7
CisgICAgICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0
T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHNldEFy
Z3VtZW50Rmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCksIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c2V0TG9jYWxGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFs
dWUpOwotICAgIH0KLSAgICAKKwogICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKQEAgLTI1Nyw2
ICszNTksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHMoKSA9PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mTG9jYWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChu
dW1iZXJPZlRtcHMoKSA9PSBvdGhlci5udW1iZXJPZlRtcHMoKSk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gbV92YWx1ZXMgPT0gb3RoZXIubV92YWx1ZXM7CiAgICAgfQpAQCAtMjY1LDkgKzM2
OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4KLSAgICBWZWN0b3I8VCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFsdWVzOwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1l
bnRzOworICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJn
dW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJl
IHRtcHMuCisgICAgU3RvcmFnZSBtX3ZhbHVlczsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
cyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
ZXJhbmRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCmluZGV4IDY1ZmVkZGEwNzMwYTgzOTFmODMxNTYzZGJkZWI4MTZhZjkyNTY2ZmQu
LjBiMWNjMWYyZDE5N2FkMDgzNjVhOGY3ODU2MWZkZjY3YTdkOWVkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKQEAgLTMwLDYgKzMw
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIG91dC5w
cmludCgidG1wIiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKIHsKQEAgLTQ0LDYgKzUyLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRl
eCwgIjoiLCBpbkNvbnRleHQobG9jYWwobG9jYWxJbmRleCksIGNvbnRleHQpKTsKICAgICB9Cisg
ICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9mVG1wcygpOyAr
K3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBp
bkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOworICAgIH0KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KQEAgLTYwLDYgKzczLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGxvY2FsKGxvY2FsSW5kZXgpKTsK
ICAgICB9CisgICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9m
VG1wcygpOyArK3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRl
eCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKaW5kZXggZDVkZGVlOGQ1NjA3NzAzMjNiMWZkNWYxYWNjY2NjMDUwMmMxMjY1NC4uN2U5
MzI2MmRmYjA5NTlkZWMyYTkyNDFmZjhjNjExZjMzYjkyYjQ0NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC03Miw2
ICs3Miw3IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlCiAgICAgLCBtX2NvZGVUeXBlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkpCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hh
c0NoZWNrcG9pbnRzKGZhbHNlKQogICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkK
ICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1f
bWV0YWRhdGEoVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpjcmVhdGUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggYTRmYTdl
MDU1YjhlOTJiNmFhYWFhNThjMWE5ZDllY2JhYmY0OThmMy4uYjk1MTY1Y2VmMGI4NjZiNDBlNjMx
MzQyNzFlODE5MzQyYTkwYmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTE0Miw2ICsxNDIsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOyB9CiAgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9u
SW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAorICAgIGJvb2wgaGFzQ2hlY2tw
b2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CisgICAgdm9pZCBzZXRI
YXNDaGVja3BvaW50cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KKwogICAgIC8vIFNw
ZWNpYWwgcmVnaXN0ZXJzCiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQogICAgIHZv
aWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Nj
b3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9CkBAIC0xOTksOSArMjAyLDggQEAgcHVibGlj
OgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KICAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlm
aWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsgfQpAQCAtNDIwLDYgKzQyMiw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9kaWRPcHRpbWl6ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9hZ2Ug
OiAzOwogICAgIHN0YXRpY19hc3NlcnQoKCgxVSA8PCAzKSAtIDEpID49IG1heEFnZSk7CisgICAg
Ym9vbCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKaW5kZXggYmJiOGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFlMTE4MzNlZmI5MDM2
Ny4uZWI5MTc5NDUzMGRmMWEzMjkyZGNkYmVkMzE2NGU5Yzc5MDlhNjlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApAQCAtMTc2LDI4ICsxNzYs
MjggQEAgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRl
eChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHIKICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
LT5tX2J5dGVjb2RlSW5kZXg7CiB9CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDog
cHVibGljIFZhbHVlUHJvZmlsZSB7Ci0gICAgaW50IG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogfTsKIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIgeworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQorICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgICAgICA6IG1fc2l6ZShzaXplKQog
ICAgIHsKICAgICAgICAgLy8gRklYTUU6IFZhbHVlUHJvZmlsZSBoYXMgbW9yZSBzdHVmZiB0aGFu
IHdlIG5lZWQuIFdlIGNvdWxkIG9wdGltaXplIHRoZXNlIHZhbHVlIHByb2ZpbGVzCiAgICAgICAg
IC8vIHRvIGJlIG1vcmUgc3BhY2UgZWZmaWNpZW50LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDEzCi0gICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0p
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKLSAgICB+
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcigpCisgICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlciB7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0
cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPiBtX2J1ZmZlcjsKKyAgICBNYWxsb2NQdHI8VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
Y3BwCmluZGV4IGM1Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0
N2YwZTE4ZGYwNjNhODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBA
QCBKU1ZhbHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0CiB7CiAgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS51bmJveGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUy
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1
MigpKTsKICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5h
TihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUo
KSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpKS51bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVy
biBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkQm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAg
Y2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5
NGYzMmEyOTNhZmQ4OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMw
OTRlNThkYTNiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAy
MWY1YWQwNDguLmViMGNjYzM4ZWRiYTRlODgzYmFhMTQ0MThiMDYxNmVlYWYzYTMyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAg
LTMxLDEyICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFu
ZElzTG9jYWwoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2Fs
KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVn
aXN0ZXJJc0FyZ3VtZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7
CiB9CkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElz
TG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNI
ZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVh
bFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAppbmRleCBmODBhN2M0ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2Uz
Li40ODFiNWYyYjE5ZDU5NWYxMjAzYjc3ZDc3OWYyMzRmMDIxMzg4Y2MyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcApAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAg
ICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRv
IG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3Jj
MS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVh
bFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5
KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNy
YzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzIt
PnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkp
LT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7
CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5l
ZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIyOSw2ICszMjI5LDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAh
PSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMs
IHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDAp
LCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1ZmZlZjBlZjI2Y2I1MWU2ZjkuLjQyZGI5
N2Q2NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTEw
MDcsNiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRD
b250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVHZW5lcmF0aW9u
TW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNvbnRyb2xGbG93UHJvZmlsZXIpOyB9
CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAgICB2b2lkIHNldFVzZXNDaGVja3Bv
aW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KIAogICAgICAgICBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnBh
cnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYy
MjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQw
LDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhl
YXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAg
ICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJz
dHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBS
YW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgi
KCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQu
cHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIs
IHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2
OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNs
dWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAt
MTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXls
b2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAg
ICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVl
KG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFu
ZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7
CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQg
IT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAm
JiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5
bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXls
b2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0
SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5k
IG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAm
JiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMo
cGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0
eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRhY2I1NDBkNDBhZTE3
OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uM2NjZTJkZjcyN2I2OTE4MWY0YjZiNTVkMTU4NzVi
YTZlNmQ3NTQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRl
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFs
cmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1
ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkp
KSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJh
bmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJl
IGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBl
KHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUo
KSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRl
Lm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVu
dHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBt
ZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0
LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAg
ICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1OCw2ICs0NTgsMTIg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAg
ICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50
IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDc2LDcg
KzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJh
bmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAg
ICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZz
ZXQoKSArIGkpKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKaW5kZXggZDcz
MjQ3YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4uODljMDhmYTA4MGNlYTMyZmQ5
YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3Zhcmlh
Ymxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2
YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxl
LT5vcGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgIG91dC5w
cmludCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYyZWRhNGFkODhlOWI5N2FhZDVm
NGY5MzkyMzc2MjE5NTJhZWY4NC4uZmEyNGM2OWQwZmVjYjdiYWZjNzA1ZDg1YzNjNWFkMGM2NTM5
MWU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSArMzU4LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAg
ICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlX
aXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5jaGls
ZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBl
c2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3Ao
KSA9PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheUJ1
ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+YXJndW1lbnRzQ2hp
bGQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtNDkzLDEwICs0OTYs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhl
YXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0byBhbiBhcmd1bWVudCBvciBs
b2NhbCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQgU2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJh
bmQocmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhbmQuaXNI
ZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC01NjAs
MTIgKzU2MywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
Q2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJl
ZEJ5QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRo
aXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNDbG9iYmVyZWRCeUJsb2NrKSB7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVh
cCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgp
ID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5s
aW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04NDUsOSArODQ4LDIzIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5h
dGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwgc28gaXQg
YmV0dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKKworCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG9yaWdp
biwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTg2MiwxMCArODc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50
YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzTm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdz
RGF0YS0+Y291bnQpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9y
aWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZs
dXNoZWRJbnQzMikpLApAQCAtODc0LDE0ICs4OTEsMTUgQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgICAgICAgICBhdXRvIHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBz
dG9yZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtp
bGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcu
b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcElu
Zm8ocmVnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZI
aW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2lu
LndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpLCBFZGdlKHZhbHVlKSk7CkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+
b2Zmc2V0OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAx
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJn
c0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJn
c0RhdGEtPmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXgg
NjI2MTEyM2NiZmVjM2ViYTE5NWQwOWI5MzEwMjZmMjZjNzI1ODQ3Ni4uMjA2ZDZmYmRjNTRhMzZj
Yjg0MThhOGIzODU0NmQ4NzU3Nzk5MDFiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCBy
ZWcuaXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC01MiwxMyArNTYsMTMgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICByZXR1
cm4gcmVnID49IGFyZ3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51bUFyZ3Vt
ZW50czsKIH0KIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0
ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChO
b2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKSwgcmVnKTsKKyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9CiAKIE5v
ZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQm
IGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVP
cmlnaW4gb3JpZ2luKQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1
bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgYWRkVGhp
cykKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApAQCAtNjks
MTEgKzczLDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAg
ICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAgIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
QnVmZmVyCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkLAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAgICAgYXJn
dW1lbnRzLT5vcCgpKTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkKKyAgICAgICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNl
cnRpb25TZXQsIGFyZ3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9yaWdpbiwg
YWRkVGhpcyk7CisKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMg
PSAwOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IGFkZFRo
aXM7CiAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRWZWN0b3Io
KTsKICAgICAgICAgTm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpAQCAtMTAz
LDcgKzExMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKIAog
ICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5v
cCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVt
YmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5n
dGgoKSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50
cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRo
aXMpKTsKICAgICB9CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAgLTExMyw3
ICsxMjAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAg
ICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+PSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0IEBAIE5v
ZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9kZUluZGV4
LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tl
ZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9y
aWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsK
KyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCArICFhZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCkgewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1
Y2UgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJl
Y3QgdGhhdCBoZXJlLgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwg
CiAgICAgICAgICAgICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIo
MCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRG
b3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVzZSkpOwog
ICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5k
ZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5ZTgxNjIy
ZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wgYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rlcik7Citi
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCk7
Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5k
KTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2Vy
dGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2lu
KTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRl
eCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2My
OGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAg
LTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1
bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZh
bHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIHsg
cmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJz
dHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNB
dFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJhNS4uYzJi
NTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEw
IEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0
eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsK
LSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVtYmVyT2ZB
cmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFu
ZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFw
aC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAg
ICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAg
ICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1NTI1NjAy
M2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0
ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAg
ewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFt
ZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkK
KyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3QgSGFzRnVu
Y3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFi
aWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICBBdmFp
bGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAgICAgIGlm
ICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCAwNTg0
NDk2M2U2MTBlZDI5M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYxNTYxOGI4
MDY0YTNhN2IyZDc4NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0
IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5
dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1
bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVn
aW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgs
MTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2Vu
ZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMs
IG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
LSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAg
ICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYgKzcwLDE1
IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykK
ICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxv
Y2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjpl
bnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVu
c3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAg
dmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0aW9uT2ZQ
YXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVs
bFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWlu
YWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggYjVh
ZGYwOTEyZDA5NDJiZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRjNmY0ZDFi
MDg1YmM4ZTA2MjU0ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKQEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4g
QmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxv
Y2s+IHsKICAgICBCYXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25D
b3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1
bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdO
dW1UbXBzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMu
c2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cAppbmRleCA3NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4wMDhjZjUy
MjY5NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBA
QCB2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNC
bG9jaz4mJiBibG9jaykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChz
aXplX3QgaW5kZXgsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291
bnQpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxv
Y2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRt
cHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwog
ICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92
ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAppbmRleCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQwOGI3Li4x
ZTg2MWRjMWE3NGQ5NzU4MzU4MDhmZTg4ZTg2NzkzNDBhODNhZmE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYgKzExMSw3
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJl
cigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkpCisgICAgICAgICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAg
ICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQog
ICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOwogICAgIH0KIAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQor
ICAgIHsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRvIHJh
aXNlIG1fbnVtVG1wcyBmcm9tICIsIG1fbnVtVG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4i
KTsKKyAgICAgICAgaWYgKG5ld051bVRtcHMgPD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX251bVRtcHMgPSBuZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3Jh
cGguYmxvY2soaSktPmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBI
ZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0
b3I+CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5
cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwpAQCAtMjcwLDI1ICsyODIsMzMg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJh
c2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxl
VGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwcm9ncmVzc0NoZWNrcG9p
bnQoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKKyAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KKyAgICAg
ICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAg
ICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKKyAgICB9CisKKyAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQu
aXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAg
ICAgICAKICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFu
ZCk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7
CiAgICAgfQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5
dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsK
IAotICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAKLSAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgotICAgICAgICByZXR1cm4gZ2V0TG9jYWwo
b3BlcmFuZCk7CisgICAgICAgIHJldHVybiBnZXRMb2NhbE9yVG1wKG9wZXJhbmQpOwogICAgIH0K
IAogICAgIE5vZGUqIGdldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKQEAgLTI5OCw4ICszMTgs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRz
LnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1f
Y29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ29kZUJs
b2NrJiBjb2RlQmxvY2sgPSAqbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kLm9m
ZnNldCgpKTsKLSAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
Y29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCkBA
IC0zNTgsOSArMzc4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGluaXRpYWxpemluZyBsb2Nh
bHMgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgogICAgICAgICBJbW1lZGlhdGVOYWtlZFNldAog
ICAgIH07Ci0gICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2Rl
KiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorCisgICAgTm9kZSogc2V0RGly
ZWN0KE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKICAgICB7Ci0gICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQu
b2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9w
ZXJhbmQpLCB2YWx1ZSk7CiAKICAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnltb3JlIGJlY2F1
c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICAgICBtX2V4aXRPSyA9IGZh
bHNlOwpAQCAtMzc0LDcgKzM5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gZGVsYXllZC5leGVjdXRlKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgcHJvY2Vz
c1NldExvY2FsUXVldWUoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKQEAgLTM5MiwxOCArNDEzLDE3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNT
RVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkgPT0gbV9jdXJyZW50SW5k
ZXgpOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5vcGVyYW5kKCkp
OwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAgICAgICAgIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92
ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRM
b2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbE9yVG1wKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50
b0xvY2FsKCk7Ci0KLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
IG9wZXJhbmQuaXNMb2NhbCgpKTsKKyAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICAv
LyBUaGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRh
dGFzLCBhbmQgMikKICAgICAgICAgLy8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBH
ZXRMb2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IKQEAgLTQyOCwyMCArNDQ4LDI1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOwogICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYg
c2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldExvY2FsT3JUbXAoY29uc3Qg
Q29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUs
IFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICBTZXRGb3JTY29wZTxD
b2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGlj
T3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKLSAg
ICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1l
bnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgp
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpID49IG1fbnVtVG1wcykg
eworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigqaW5saW5lQ2FsbEZyYW1lKCkpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQg
b3BlcmFuZDogIiwgb3BlcmFuZCwgIiBidXQgY3VycmVudCBudW1iZXIgb2YgdG1wcyBpczogIiwg
bV9udW1UbXBzLCAiIGNvZGUgYmxvY2sgaGFzOiAiLCBtX3Byb2ZpbGVkQmxvY2stPm51bVRtcHMo
KSwgIiB0bXBzLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRp
YXRlTmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAg
ICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9j
b2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgu
bmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVy
KCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUx
LDcgKzQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VD
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwg
QmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDgsMjEgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0
QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAg
IE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVy
YW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAg
ICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJy
ZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBh
cmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFy
Z3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEocmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9y
ICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFr
ZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwg
bV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9
IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQp
OworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OCwxNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0
KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAg
ICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRp
b24oT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVu
dChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRp
b25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NzUsNiArNjAzLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5k
bGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQg
dG8gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRl
Y29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFw
cHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4p
KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVu
ZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBAIC01ODQsMjcgKzYxMywyNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZs
dXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVz
aERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAg
ICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRp
b24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQg
YWRkRmx1c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9j
YWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFT
U0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25z
dGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02
MTQsMjYgKzY0MywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9H
cmFwaChub2RlVHlwZSwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChh
cmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFi
bGUodmFyaWFibGUpOwogICAgIH0KIAotICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxv
Y2FsPihvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBmbHVzaChJbmxpbmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsK
LSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmly
dHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFk
ZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsg
Zmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0Vu
dHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZv
aWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGly
ZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJ
bmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVj
dChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxs
RnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAg
ICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBP
cGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAg
ICBmbHVzaEZvclRlcm1pbmFsSW1wbChjdXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVj
dCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3ODksMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNo
aWxkMykpOwogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBO
b2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxk
MSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJu
IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhvcGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZh
bHVlKCkpLCBjaGlsZDEpOworICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9w
LCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0g
RWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwOTEsOCArMTEyNCwxMCBAQCBwcml2YXRlOgogCiAg
ICAgLy8gVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAg
ICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAo
dmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVt
YmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBm
b3IgdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBt
YXggbnVtYmVyIG9mIHRlbXBzIHVzZWQgZm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhp
dCB0byBjaGVja3BvaW50LgorICAgIHVuc2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVt
YmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQg
dG8KICAgICAvLyBwcmVhbGxvY2F0ZSBmb3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZy
b20gdGhpcyBmcmFtZS4gVGhpcwogICAgIC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1l
IHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5
NCwxNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsK
ICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIGNvbnN0CisgICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJh
bmQgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBP
cGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFu
dCgpKTsKIAotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNl
dCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0OwogICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNzUsMTMgKzEyMTMsOCBAQCBwcml2
YXRlOgogICAgIElDU3RhdHVzQ29udGV4dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAg
ICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFs
dWU7Ci0gICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXll
ZFNldExvY2FsKCkgeyB9Ci0gICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2lu
JiBvcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlKQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2lu
LCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAg
ICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
CiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCkBAIC0xMTk0LDggKzEyMjcsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1f
b3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXIt
PnNldExvY2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAg
ICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQs
IG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAgICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1f
b3JpZ2luOworICAgICAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1
ZSB7IG51bGxwdHIgfTsKKyAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAK
ICAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4
LDcgKzEyNDYsNyBAQCBwcml2YXRlOgogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9j
YXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBB
U1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxv
Y2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFz
aWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVt
VG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAg
Ly8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFz
aW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9i
bG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKQEAgLTEyMjAsNyArMTI1OCw3IEBAIEJhc2ljQmxv
Y2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVu
dGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJl
ZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1M
b2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1f
bnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAg
ICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2Nr
UHRyOwpAQCAtMTQyMyw3ICsxNDYxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVj
dXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUg
aXMgVmFyYXJncywgd2UgZG8gbm90IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxs
eSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAg
ICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9m
IHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51
ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmls
bGVkIGFyZ3VtZW50cyBieSB4a0xvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBl
ciBmcmFtZSB3aGljaCBtYXkgYmUKICAgICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVt
cCBpbnRvLgogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xNjE0LDE2ICsxNjUyLDE4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIENhCiAgICAgQVNTRVJUKCEobnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90cyAlIHN0YWNr
QWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVw
ID0gcmVnaXN0ZXJPZmZzZXQgLSBudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzOwogICAgIAotICAg
IGludCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkub2Zmc2V0KCkgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKyAgICBPcGVyYW5kIGlubGluZUNhbGxG
cmFtZVN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAKICAgICBlbnN1cmVMb2NhbHMo
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgp
ICsgMSArCisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnRvTG9jYWwoKSArIDEgKwogICAg
ICAgICBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIGNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpOwogICAgIAorICAgIGVuc3VyZVRtcHMobV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKE9wZXJhbmQoVG1wT3BlcmFuZCwgY29kZUJsb2NrLT5udW1UbXBzKCkpKS52YWx1
ZSgpICsgbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKKwogICAgIHNpemVfdCBhcmd1
bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwog
CiAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOworICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAogICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxscHRyOwogICAgIGlmIChjYWxs
ZWUuaXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xNjM2LDcgKzE2NzYsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBDYQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSogY2FsbGVyU3RhY2tUb3AgPSBtX2lu
bGluZVN0YWNrVG9wOwogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlz
LCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgY2FsbGVlLmZ1bmN0aW9uKCksIHJlc3VsdCwKLSAgICAg
ICAgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKKyAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQudmlydHVhbFJlZ2lzdGVyKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBh
Y3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgQnl0ZWNvZGVJbmRleCBvbGRJbmRl
eCA9IG1fY3VycmVudEluZGV4OwpAQCAtMTY3MSw5ICsxNzExLDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQ2EKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3ZSBiZWdpbiBleGVjdXRpbmcgdGhl
IGNhbGxlZSwgd2UgbmVlZCBPU1IgZXhpdCB0byBiZSBhd2FyZSBvZiB3aGVyZSBpdCBjYW4gcmVj
b3ZlciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZXR0ZXIsIGxvYzkgYW5kIGxvYzEwLiBUaGUgTW92
SGludHMgaW4gdGhlIGlubGluZWQKICAgICAgICAgLy8gY2FsbGVlIG1ha2UgaXQgc28gdGhhdCBp
ZiB3ZSBleGl0IGF0IDxIRVJFPiwgd2UgY2FuIHJlY292ZXIgbG9jOSBhbmQgbG9jMTAuCiAgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQg
PSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRv
R2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2Rl
T3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTcsMTYgKzE3NTcsMTYgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcywgd2UgZG8gbm90IG5lZWQg
dG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgIT0g
cmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9m
ZnNldCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50
VG9HZXQpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvU2V0ID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJn
dW1lbnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFy
Z3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwg
YXJndW1lbnRUb1NldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcml0eUZp
eHVwQ291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB1
bmRlZmluZWQpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92
SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgbV9z
ZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigp
LCBhcmd1bWVudFRvU2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAg
ICB9CiAKQEAgLTE4OTMsMTIgKzE5MzMsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBjYWxsVGFyZ2V0Tm9kZSwgdGhp
c0FyZ3VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGludCByZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
ID0KLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudmlydHVhbFJlZ2lz
dGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMb2NhbHMoVmlydHVhbFJl
Z2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAgICAgIAogICAg
ICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3Rh
cnQpKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkp
LnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKICAgICAgICAg
ZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgMSk7
CkBAIC0xOTA2LDExICsxOTQ2LDI0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFy
Z3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAg
IGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAgICAgZGF0YS0+bGltaXQgPSBt
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWlu
aW11bSA9IG1hbmRhdG9yeU1pbmltdW07Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbE9wID09
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRW
YXJhcmdzLCBPcEluZm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRUb0dy
YXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOwor
CisgICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKKyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoR2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lQ2Fs
bEZyYW1lKCktPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBn
ZXREaXJlY3QocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdz
LCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAg
ICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3Bl
cmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICAgICAg
c2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhk
YXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQoKTsKKwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXRMb2Nh
bE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVw
IGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3Vt
ZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQg
YSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdp
c3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVh
c29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNT
QS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNv
dW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2Ug
dGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAg
Ly8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5p
dGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3Rs
eSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5i
b3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxv
Y2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVu
dENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVu
c2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDYsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRh
dG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBP
cEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRz
OwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNiw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygK
ICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0
ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZF
UkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAg
ICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZs
dXNoKTsKIApAQCAtNTEwMiw3ICs1MTU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29k
ZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJl
Z0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpz
Q29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdf
cmVnZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMxLDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAm
JiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5v
cCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1
ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAg
ICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gp
OyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBi
ZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ4LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIyMywxNCAr
NjI3NiwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkp
OwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hM
b2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVt
YmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCks
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVy
YW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZh
bHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFw
aC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAg
ICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4MjYsOCAr
Njg3OSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNh
bEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7
Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRp
YWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmco
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dy
YXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0g
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25t
ZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBP
cEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1f
ZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNzI3NSw4ICs3MzI4LDEwIEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAvLyBU
aGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBh
IGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgogICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRl
QmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9j
YWxsZXItPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2Nv
ZGVCbG9jay0+bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNr
T2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID09IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewog
ICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNv
dmVyeTo6Y29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsID0gZmFsc2U7CkBAIC03NjM4LDcgKzc2OTMsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNzY1OCwyNCArNzcxMywyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzc29yLT5wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZp
bmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9w
LCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgT3Bl
cmFuZCBhcmd1bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50LmlzQXJndW1lbnQoKSAmJiAhYXJn
dW1lbnQuaXNIZWFkZXIoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxBcmd1bWVudFBvc2l0aW9uKj4mIGFyZ3VtZW50cyA9IG1faW5saW5lQ2FsbEZyYW1lVG9B
cmd1bWVudFBvc2l0aW9ucy5nZXQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHNbYXJndW1lbnQudG9Bcmd1bWVudCgpXS0+YWRkVmFyaWFibGUo
dmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgb3AsIG9y
aWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIEZsdXNoLCBvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQ
aGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2
ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBQaGFudG9tTG9jYWwsIG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBmbHVzaEZvclRl
cm1pbmFsSW1wbChvcmlnaW4uc2VtYW50aWMsIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9j
YWxEaXJlY3QpOwpAQCAtNzc0MCw2ICs3Nzk1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpKTsKICAgICB9CiAKKyAgICBtX2dyYXBoLm1fdG1wcyA9IG1fbnVtVG1wczsKICAgICBt
X2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRl
clNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKaW5kZXggOGU5YmI0YWNiZTU1MDJkZGE3YjM3NDc4NGI1YTg1ZmZkZTcw
M2JmZC4uM2RjNzU2OGYxZWUyYzY5NzcyMjY4Y2M5NmRlYTRhMDVjNjIzNjI1MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE3MCwyMiArMTcwLDIyIEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBjb25zdCBP
cGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
T3B0aW9uYWw8SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFu
b2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBvcGVyYW5k
LCAiXG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICBXaWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIgd2l0aCAiLCB2
YWx1ZS52YWx1ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBXaWRlbmlu
ZyAiLCBvcGVyYW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHRhcmdldCA9IGJsb2NrLT52YWx1ZXNBdEhl
YWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdGFyZ2V0Lm1lcmdl
T1NSRW50cnlWYWx1ZShtX2dyYXBoLCB2YWx1ZS52YWx1ZSgpLCBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSwgbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAppbmRleCBkOThmZDRhZjQ0MGYwN2NiYzE2YjY3ZDYwMmJh
NjQyNmFmMGYyMzgyLi41NzcwZjA5ODk0MmM4OTZiN2FjZjgyM2ZjYWI5NDQ0YTIyNGNjZWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBzcGVjaWFsQ2FzZUFy
Z3VtZW50cygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKICAgICAg
ICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXM8VG1wT3BlcmFuZD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hlZCgpOwogICAgICAgICAK
ICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAgLTIxMSwxMCArMjEyLDIw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQog
ICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
c3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1l
bnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9w
ZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFu
ZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogeworICAg
ICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8VG1wT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5v
ZGVUeXBlLCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBBU1NFUlQo
b3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9
IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1
bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRv
bUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJs
ZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5k
KCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsT3BlcmFu
ZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2Rl
VHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50
b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
bXBPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2Fs
Rm9yPG5vZGVUeXBlLCBUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJh
bmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXQoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2Fs
KCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChu
b2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6
ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg5LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBjbGVhclZhcmlhYmxlczxBcmd1bWVudE9wZXJhbmQ+KCk7CiAgICAgICAgIGNsZWFy
VmFyaWFibGVzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8VG1wT3Bl
cmFuZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVy
ZW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAogICAgICAg
ICAvLyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24n
dCBhc3N1bWUgdGhhdCB0aGUgcmVmCkBAIC0zODgsNyArNDExLDcgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICB2b2lkIHByb3BhZ2F0ZVBoaXMo
KQogICAgIHsKLSAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0g
b3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9s
b2NhbFBoaVN0YWNrOworICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3Rh
Y2sgPSBwaGlTdGFja0ZvcjxvcGVyYW5kS2luZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVu
c3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5LgogICAgICAgICBt
X2Jsb2NrID0gMDsKQEAgLTQ2Niw5ICs0ODksMTIgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxP
cGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYg
cGhpU3RhY2tGb3IoKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50
T3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Ci0gICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsK
KyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7
CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAg
ICAgICBjYXNlIFRtcE9wZXJhbmQ6IHJldHVybiBtX3RtcFBoaVN0YWNrOworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcHV0ZUlzRmx1c2hlZCgpCkBAIC01MjEsNiArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fYXJn
dW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2xvY2FsUGhp
U3RhY2s7CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV90bXBQaGlTdGFjazsKICAg
ICBWZWN0b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAppbmRleCAyMzgxYzZiOGY4ZjRi
YTc2MzRiYjY2YjEyMzk0NzFiNWE2MTY2N2NlLi40Y2NlMTc0ODgzZTIwNDEwZDYyMjNhNmY0MTcy
ZWRkZTY5OGFhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cApAQCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFN0YWNrOiB7CiAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9w
KCkpOwotICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
cmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAg
IGlmIChjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgbV9mYWxsYmFja1N0
YWNrTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNzIsNyArMTcxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGlmICghY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAocGFpci5rZXkuaGVhcCgp
LmtpbmQoKSA9PSBTdGFjaykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFs
dWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5l
bmQoKSAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBwYWlyLmtleSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yMjYsOCArMjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBh
YnN0cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CiAgICAgICAgICAgICBpZiAoYWJzdHJhY3RI
ZWFwLnBheWxvYWQoKS5pc1RvcCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBhZGQobV9mYWxs
YmFja1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWJzdHJh
Y3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUz
MigpKTsKLSAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01h
cC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCksIG51bGxwdHIpOworICAgICAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFj
dEhlYXAucGF5bG9hZCgpLnZhbHVlKCksIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9uLCBub2RlLCAwfSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksOCArMjQ3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBTaWRlU3RhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBjYXNlIFN0YWNrOiB7Ci0gICAgICAgICAgICBBU1NFUlQobG9j
YXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpID09IGxvY2F0aW9uLmhlYXAoKS5wYXlsb2Fk
KCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2Nh
dGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKICAgICAgICAgICAgICAgICAmJiBpdGVy
YXRvci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlLT52YWx1ZTsKQEAgLTI5OCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgIC8v
IGEgZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1fZmFsbGJhY2tT
dGFja01hcC4KICAgICAvLwogICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBnb2VzIGludG8g
bV9mYWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlxdWUgdmFsdWUu
Ci0gICAgSGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBE
ZWZhdWx0SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8aW50MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgSGFzaE1hcDxpbnQ2NF90
LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQ2NF90Pjo6
SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50NjRfdD4+IG1fYWJzdHJh
Y3RIZWFwU3RhY2tNYXA7CiAgICAgTWFwIG1fZmFsbGJhY2tTdGFja01hcDsKIAogICAgIE1hcCBt
X2hlYXBNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4
IDg5YmM2NDFmNTI2YmI1M2ZmMDM3ZjczY2Y5NTBiYWM2NDZkNDk5NTQuLmUwYTA3YzdjZTZlNGQ1
MjRkOTY1NDRjNWQwMDgzMmMyYzM5NWI5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCkBAIC0xMTEsOSArMTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRl
RnUKICAgICAvLyBzY2FuIHdvdWxkIHJlYWQuIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBm
b3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9
IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ss
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9
CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNwZWNpZmljYWxseSBhY2NvdW50IHdoaWNoIG5v
ZGVzIGNhbiByZWFkIGZyb20gdGhlIHNjb3BlCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBLaWxsU3RhY2s6Ci0g
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7
CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAt
NDk3LDcgKzQ5Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5sb2NhbCgpKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVy
YW5kKCkpKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBA
IC03ODgsMzYgKzc4OCw0MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3Rh
Y2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2Rl
KSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3Bl
cmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJh
Y3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAg
ICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3Bl
cmFuZCk7CiAgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0
YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CisgICAgICAgIHJldHVybjsgIAorICAg
IH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAg
ICAgIHdyaXRlKEhlYXApOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRh
LT5jb3VudC5vZmZzZXQoKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1p
dDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3Rh
cnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyNiw5ICs4MzMsOSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7Cisg
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50
PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFy
dCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2
ZW5lc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcAppbmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0
NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcg
QEAgc3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJp
bGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVj
b2RlKAogICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAg
IHJlZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUw
OWY5MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2FkYi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEz
MzJmZDUyNDk2NTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29k
ZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVu
ZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAt
IDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICBy
ZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERp
c3Bvc2FibGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0
LDEzICs2NCwxMyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRl
SW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2Rl
T3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAg
ICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjps
YXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNp
emUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lu
cy5zaXplKCkgLSAxKSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVP
cmlnaW5zLnNpemUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggODU0MTIzMTQ3NDFlNmYx
MTI2MWYyZTk3YzQ5ZmU2NDRkYWU3YmFmNy4uZjM4YzgzZmRkMzBjMmY1M2IzZDUwOTNmNDBiMmM3
MGU5NTMxMDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
Mjk0LDYgKzI5NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VP
ZkN1c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJp
bmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1
ZmJjNDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0
aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwog
ICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxp
emF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBH
ZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAg
ICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZt
LmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAg
ICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWVlMWYwMDczYjBmNGJiY2M0NzM0
ZWI2NDFlNDY0OGMzMDU1YTI0NC4uY2EzM2RiMjI3ZDRiOTI3NzNmYTg2ZDcyZWUzZDRkMWI4NWJm
OTgzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBA
IC0yNDMyLDYgKzI0MzIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKwogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0
aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ2NCw4ICsyNDcyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAg
IGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAg
ICAgY2FzZSBOZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGb3JBbGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxL
aWxscy5oCmluZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLjkz
M2EyYmRlMjJlMTY2YzJhZWI2ZDRhYzFiYmU5Y2UxZTVjZWQ1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJu
YWwgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMg
Zm9yIGZpbmRpbmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBT
U0EuIFRoaXMgYWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMg
aXMgdXN1YWxseSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBw
b2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3
aGVyZSB0aGUgbm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9n
cmFtIHBvaW50cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVy
LCBjb25zdAogICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5m
b3JFeGl0OwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3Bl
cmFuZCBhbHJlYWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBp
cyBsaXZlIGF0IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAo
bm9kZUFmdGVyLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gbm9kZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xp
dmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0g
ICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG5vZGVBZnRlci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5k
KTsKKyAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC03MCw4ICs3NCwyNCBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgIC8v
IG90aGVyIGxvb3AsIGJlbG93LgogICAgIGF1dG8qIGJlZm9yZUlubGluZUNhbGxGcmFtZSA9IGJl
Zm9yZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1lID09
IGFmdGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGludCBzdGFja09mZnNldCA9IGJl
Zm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGJlZm9yZUlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhZnRlci5ieXRlY29k
ZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9p
bnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAg
IGF1dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFm
dGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBpbnQgdG1wT2Zmc2V0ID0gYmVmb3Jl
SW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOwor
ICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5m
aWx0ZXIobGl2ZUFmdGVyKTsKKworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0
KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoT3BlcmFuZChUbXBP
cGVyYW5kLCB0bXAgKyB0bXBPZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Ly8gTm8gbG9jYWxzIGNhbiBkaWUgYXQgYSBjaGVja3BvaW50LgorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2Fs
bEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAgICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihj
b2RlQmxvY2spOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVs
bExpdmVuZXNzLmdldExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYg
bGl2ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgo
KSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwpAQCAtODIsMTcgKzEwMiwy
MSBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJl
Zm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgICAgICAgICAgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhZnRlci5ieXRl
Y29kZUluZGV4KCkuY2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmluZyBhY3Jvc3MgYSBjaGVja3Bv
aW50IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFuIGlubGluZUNhbGxGcmFtZS4i
KTsKKwogICAgIC8vIERldGVjdCBraWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQg
aXMga2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBCaXRW
ZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwotICAg
IGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZlQWZ0
ZXIgPSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOworICAgIHVuc2ln
bmVkIG51bUxvY2FscyA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAg
ICAgICAgIGJlZm9yZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAg
ICAgICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3RlZCkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9M
b2NhbCgpKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/
IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAg
ICAgICAgaWYgKGxpdmVBZnRlci5nZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQp
OwogICAgICAgICB9KTsKIH0KICAgICAKQEAgLTEwNSw3ICsxMjksOCBAQCB2b2lkIGZvckFsbEtp
bGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWVu
SW5DbG9zdXJlRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxsZWRG
dW5jdG9yRmxhZyA9IDI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IGZsYWdzOwotICAg
IAorCisgICAgQVNTRVJUKG5vZGVJbmRleCk7CiAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwogICAgIAogICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKQEAgLTEyMCwxNSArMTQ1
LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSk7CiAKLSAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOwotICAgIGlmIChub2Rl
SW5kZXgpCi0gICAgICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKKyAgICBO
b2RlKiBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CiAKICAgICBmb3JBbGxLaWxs
ZWRPcGVyYW5kcygKICAgICAgICAgZ3JhcGgsIGJlZm9yZSwgbm9kZSwKLSAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAgICAg
ICAgICAgICAgICByZWcsCisgICAgICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAgICAgICAg
ICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmxhZ3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xvc3VyZUZsYWc7CiAgICAgICAgICAgICAgICAgfSwK
QEAgLTE1OSw2ICsxODIsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAgICAvLyBTdGFy
dCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8g
b25seSBpbnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVw
IHRvIG5vZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0
aGUgZnVuY3RvciBoYXMgbm90aGluZyB0byBkby4KICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
IGRhdGFMb2dMbklmKEZvckFsbEtpbGxzSW50ZXJuYWw6OnZlcmJvc2UsICJsb2NhbCBhdmFpbGFi
aWxpdHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRleCwgIiAiLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2
YWlsYWJpbGl0eSk7CiAgICAgICAgIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAg
ICAgICAgICBncmFwaCwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHksIGJsb2NrLCBu
b2RlSW5kZXgsCiAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggNzk2NDk4NTMzMTYwM2MzOGJiYWVjZTQzYjQ3YThi
YTA4NzliZDg3MC4uZjM1ZDY1YzJhOGRmMThmZmE3ZWVlZjU0NjFjYTMyYTNjNGIyYWMyMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTMwOCw4ICszMDgsOCBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwg
Tm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigiLCBWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgICAg
ICAgICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CiAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKQEAgLTMxNywxMyArMzE3LDEzIEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2Rl
KiBub2RlLCBEdW1wQ29udGV4CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNTdGFja0FjY2Vzc0Rh
dGEoKSkgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7CisgICAgICAg
IG91dC5wcmludChjb21tYSwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIGlmIChkYXRhLT5tYWNo
aW5lTG9jYWwuaXNWYWxpZCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGlu
ZToiLCBkYXRhLT5tYWNoaW5lTG9jYWwpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEt
PmZvcm1hdCk7CiAgICAgfQotICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZExvY2FsKCkpIAotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgaWYgKG5v
ZGUtPmhhc1VubGlua2VkT3BlcmFuZCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKTsKICAgICBpZiAobm9kZS0+aGFzVmVjdG9yTGVuZ3RoSGludCgp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ2ZWN0b3JMZW5ndGhIaW50ID0gIiwgbm9kZS0+
dmVjdG9yTGVuZ3RoSGludCgpKTsKICAgICBpZiAobm9kZS0+aGFzTGF6eUpTVmFsdWUoKSkKQEAg
LTUxNSw5ICs1MTUsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgQmFzaWNCbG9jayoKICAgICAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+b3AoKSA9PSBQ
aGkpOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5v
ZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhp
Tm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAg
ICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+b3Bl
cmFuZCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CiAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBw
aGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PmNoaWxkMigpKSB7CkBAIC04ODQsNyArODg1LDcgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdl
dExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEK
ICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICBp
ZiAobm9kZS0+b3BlcmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKQogICAg
ICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtODkzLDkgKzg5NCw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRM
b2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAg
ICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nl
c3NEYXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3Vic3RpdHV0
ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICBO
b2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJs
b2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgp
KTsKICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAg
IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KSkgPSBuZXdHZXRMb2NhbDsKKyAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkgPSBuZXdHZXRMb2NhbDsKICAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMTEzMywyMyArMTEzNCw0MyBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6a2ls
bHNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgcmV0dXJuIGtpbGxz
Rm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOwogfQogCi1ib29sIEdy
YXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFu
ZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2co
IkNoZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgYm9v
bCBpc0NhbGxlck9yaWdpbiA9IGZhbHNlOworCiAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0
ciA9ICZjb2RlT3JpZ2luOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBj
b2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpKTsKKyAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAvLyBXZSBuZWVkIHRvIGhh
bmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCisg
ICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KKyAgICBm
b3IgKDsgY29kZU9yaWdpblB0cjsgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZSA/ICZp
bmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlciA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcE9mZnNldCA9IGlu
bGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5k
LnZhbHVlKCkpOworCisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC52YWx1ZSgpID49IDApOwor
ICAgICAgICAgICAgLy8gVGhpcyB0bXAgc2hvdWxkIGhhdmUgYmVsb25nZWQgdG8gc29tZW9uZSB3
ZSBpbmxpbmVkLgorICAgICAgICAgICAgaWYgKG9wZXJhbmRJbmRleCA+IHRtcE9mZnNldCArIG1h
eE51bUNoZWNrcG9pbnRUbXBzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBv
cGVyYW5kSW5kZXggPCB0bXBPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGF1dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxv
Y2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4g
Yml0TWFwLmdldChvcGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOworICAgICAgICB9CisKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBjb2Rl
T3JpZ2luUHRyLT5zdGFja09mZnNldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nKCJyZWcgPSAiLCByZWcsICJcbiIpOwogCi0gICAgICAgIGF1
dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwot
ICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0
KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgeworICAgICAgICBpZiAob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zm
c2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgewogICAgICAgICAgICAg
aWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZWcub2Zmc2V0KCkgPCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAKQEAgLTEx
NzYsNDIgKzExOTcsNDEgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNz
Rm9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZnVs
bExpdmVuZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHBy
b3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJP
cmlnaW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0
IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShy
ZWcsIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpj
b2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
QXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQg
d2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5nLgotICAg
ICAgICBpZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYm
IHJlZy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVn
LnRvQXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXpl
KCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IkFyZ3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ug
d2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVj
b2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRyID0gJmlu
bGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdpbiA9IHRy
dWU7CiAgICAgfQorCisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3Rh
Y2ssIHJldHVybmluZyB0cnVlLlxuIik7CisgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9j
YWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9yIEdyYXBo
Ojpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewog
ICAgIEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNMaXZlSW5C
eXRlY29kZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9jYWxzICsg
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9yQWxsTG9j
YWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2Nh
bCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAg
ICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQu
dG9Mb2NhbCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM0LDggKzE2NTQsOCBAQCBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5vZGU7IG5v
ZGU7KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAg
ICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQoKS5pc0Fy
Z3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5vcGVyYW5k
KCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1f
cm9vdFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkg
bm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0xNjU1LDcg
KzE2NzUsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAg
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBmYWI5Y2Yw
MmEyNTk3NmVmNDdkMTc5MDViYWQ5Y2UwM2UzODJiY2U1Li5mN2ExZDgyMTRjMzAyZDdkOTZhYzJh
NzdhMDE4NjZhOWQxMTlmNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBA
IC04NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBpZiBhIHNp
bmdsZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhh
biBjYWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5
IHF1ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0aGUKICAg
ICAvLyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVj
aCBzbG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5IGdldCBh
bGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRo
aXMgZG9lc24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFy
Z3VtZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vz
bid0IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwg
cHJlc3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgdG8KICAg
ICAvLyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gY2Fs
bGluZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lkIGZvckFs
bExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBub3QgcmVk
dW5kYW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBv
ZiBhIHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dzIHRoYXQg
YXJndW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAg
LTg4MSw2ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0
Qnl0ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVn
KTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJs
b2NrLT5udW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZl
bmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90
IHRtcCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUsIE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wKSkpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwNCw5ICs5MTIsOSBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFs
bCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0
bHkgdXNlZnVsIGlmCisgICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbG9jYWxz
IGFuZCB0bXBzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKICAgICAv
LyB5b3Ugd2FudCB0byBjb21wYXJlIHR3byBzZXRzIG9mIGxpdmUgbG9jYWxzIGZyb20gdHdvIGRp
ZmZlcmVudCBDb2RlT3JpZ2lucy4KLSAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUo
Q29kZU9yaWdpbik7CisgICAgQml0VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luKTsKIAogICAgIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBhcHByb3ByaWF0ZUxp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludChDb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0NhbGxlck9y
aWdpbikKICAgICB7CkBAIC05MzgsMTIgKzk0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZTsKICAgICB9CiAgICAgCi0gICAg
Ly8gVGVsbHMgeW91IGFsbCBvZiB0aGUgYXJndW1lbnRzIGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUg
Z2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCi0gICAgLy8gZXh0ZW5zaW9uIHRvIGZv
ckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5
cyBwcmVzdW1lZCBsaXZlLgorICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxp
dmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAorICAgIC8vIGV4dGVu
c2lvbiB0byBmb3JBbGxMb2NhbHNPclRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJn
dW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgogICAgIHZvaWQgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yQWxsTG9jYWxz
TGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CisgICAgICAgIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFzIGJlaW5nIGxpdmUuCiAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KQpAQCAtMTExNCw2ICsxMTIyLDcgQEAgcHVibGljOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzOworICAgIHVuc2lnbmVkIG1fdG1wczsKICAgICB1bnNpZ25l
ZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5z
aWduZWQgbV9wYXJhbWV0ZXJTbG90czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggOTlhZWZmY2RjMDVhMTFjNDVi
MDU3NDEyNTBmNGQyYWViNGUyMjhjZC4uMjAyZDIyNTA1M2ZhOWRmYmU1YzIzYzY0YmNmOGJlMzg0
ZTNlNzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTQ1LDggKzQ1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9hYnN0
cmFjdFZhbHVlcygqZ3JhcGgubV9hYnN0cmFjdFZhbHVlc0NhY2hlKQotICAgICwgbV92YXJpYWJs
ZXMobV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5tX2xvY2FsVmFy
cykKLSAgICAsIG1fYmxvY2soMCkKKyAgICAsIG1fdmFyaWFibGVzKE9wZXJhbmRzTGlrZSwgZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIG1fYmxvY2sobnVsbHB0cikKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5oCmluZGV4IGJmNWVhZDE4ZWMxNjQ3ZWUxNjc2Njg4MzU3NDAxZmE3ZmVjNzEyOTku
LjE4NjVlNmExZWZmYzNkYWFlZmU1ODRjYTg2MmM0OWJjMzY4NTg1MDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKQEAgLTE2
NywxMyArMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFy
aWFibGVzW2luZGV4XSk7CiAgICAgfQogCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQg
b3BlcmFuZCkKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLm9wZXJhbmRJbmRleChv
cGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIHRoaXMtPm9wZXJhbmQob3BlcmFuZC5vZmZzZXQo
KSk7IH0KLSAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5sb2NhbEluZGV4KGluZGV4
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4
IDNkODQzY2U1OGYyMGI0MTE2MzM5ZmNkYTk1ODhhZWJhNmI3YThjMmUuLjZmNTExOTk4NDNkN2Vm
NTdiMzA1NTY5ZGYzODMwNjY2YzdmNmMxODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC04NSw4ICs4NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIo
b3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRvIG9zckV4aXRUaHVua0xhYmVsID0gQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWls
dXJlSnVtcHM7CkBAIC05NywxMyArOTUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhp
dHMoKQogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS5vc3JFeGl0SW5kZXgpOwotICAgICAgICBpZiAo
T3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAgICAgICAgICAgIEp1bXAgdGFyZ2V0ID0g
anVtcCgpOwotICAgICAgICAgICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRodW5rTGFi
ZWxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKHRhcmdldCwgb3NyRXhpdFRodW5rTGFiZWwpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVK
dW1wKCk7CisgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOwog
ICAgIH0KIH0KIApAQCAtMjg4LDExICsyODAsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgYXV0byB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBP
U1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwot
ICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoaW5mby5tX3BhdGNoYWJsZUp1bXAubV9qdW1wLCB0YXJnZXQpOwotICAg
ICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAgICAg
ICAgIGV4aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwotICAgICAgICB9CisgICAg
ICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRhcmdldCk7
CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07CisgICAgICAg
IGV4aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwogICAgICAgICBpZiAoaW5mby5t
X3JlcGxhY2VtZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29t
bW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3JlcGxh
Y2VtZW50U291cmNlKSwKQEAgLTU5NSwxMSArNTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5v
dGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkg
IT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFy
aWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2Vy
dmF0aW9uUGhhc2UuY3BwCmluZGV4IDQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkzZTA4YWMyNWNh
NjMxMzQuLjQ1ZWNiNDZhYTI0NDNiYTFiOTU1NzE2YmMxZjQyYTcwOGExYTA0ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9j
YXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9j
ayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7
CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4gV2UganVzdCB1
c2UgaXQgZm9yIGFzc2VydGlvbnMuIElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywKICAgICAgICAg
Ly8gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2ggdGhhdCB3ZSBp
bnNlcnQuCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBmbHVzaElzRGVm
aW5pdGVseUludmFsaWQgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkg
ewogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpbmRleDsgaS0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0
KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+bG9jYWwoKSA9PSBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFj
ayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGFsbEdvb2QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgaGFuZGxlQmxvY2tGb3JUcnlDYXRjaChCYXNpY0Jsb2NrKiBibG9jaywgSW5zZXJ0aW9uU2V0
JiBpbnNlcnRpb25TZXQpCiAgICAgewogICAgICAgICBIYW5kbGVySW5mbyogY3VycmVudEV4Y2Vw
dGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdENhdGNo
SGVhZDsKLSAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIE9wZXJhbmRzPGJvb2w+
IGxpdmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
VG1wcygpKTsKIAogICAgICAgICBIYW5kbGVySW5mbyogY2FjaGVkSGFuZGxlclJlc3VsdDsKICAg
ICAgICAgQ29kZU9yaWdpbiBjYWNoZWRDb2RlT3JpZ2luOwpAQCAtMTMzLDExICsxMzIsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gb3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICAgICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+
aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOworICAgICAgICAgICAgICAg
ICAgICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CiAKICAgICAgICAgICAgICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGhhbmRsZXIt
PnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUlu
Qnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSks
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3Jp
Z2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5vcGVyYW5k
KG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7CkBAIC0xNTYsMTIgKzE1NSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3VsdDsKICAg
ICAgICAgfTsKIAotICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50
QmxvY2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMo
KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsKKyAg
ICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0
YShPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG51bGxwdHIpOwogCiAgICAg
ICAgIGF1dG8gZmx1c2hFdmVyeXRoaW5nID0gWyZdIChOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWdu
ZWQgaW5kZXgpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRFeGNlcHRpb25I
YW5kbGVyKTsKLSAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZl
QXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkg
eworICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5v
cGVyYW5kKG9wZXJhbmQpKSB7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRG
bHVzaExvY2F0aW9uKGJsb2NrLCBpbmRleCwgb3BlcmFuZCkpOwogCkBAIC0xNzgsNiArMTc3LDgg
QEAgcHVibGljOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gMDsgbG9jYWwg
PCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsKyspCiAgICAg
ICAgICAgICAgICAgZmx1c2godmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgdG1wID0gMDsgdG1wIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZlRtcHMoKTsgKyt0bXApCisgICAgICAgICAgICAgICAgZmx1c2goT3BlcmFuZChU
bXBPcGVyYW5kLCB0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5Miw5ICsx
OTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50TWF5
YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5s
b2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2ZUF0
Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsK
LQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFk
Lm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRG
bHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1cnJlbnRC
bG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNr
KG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3Vy
cmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw5ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NF
UlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAo
KSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAK
ICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFuZCk7CiAg
ICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNw
cAppbmRleCA3M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5mZmY5NmJm
Y2Y2MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBt
X2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFs
KCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7CisgICAgICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0g
bV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
RXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6
IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3Vy
cmVudEVwb2NoKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFw
aCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUlu
ZGV4IC0gMSksIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBp
dCBtaWdodCBjbGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5z
dCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJl
ZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQob3BlcmFu
ZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5k
IGF0ICIsIG5vZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJlNjU1ZjUyNTFmOTZmNDA0ZTMzYjQ2
Li5iODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0IFN0YWNrQWNj
ZXNzRGF0YSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9jYWwobG9j
YWwpCisgICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9y
bWF0KQorICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0
KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIE9w
ZXJhbmQgb3BlcmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZs
dXNoRm9ybWF0IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5MDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTIzLDkgKzkyNCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxk
MSgpOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIGNo
aWxkMigpOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTczLDkgKzk3
Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNz
RGF0YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
KCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPm9wZXJhbmQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVM
b2NhbCgpCkBAIC05ODMsNyArOTg2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFi
bGVBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhh
c1VubGlua2VkTG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgpAQCAtOTk2LDEwICs5OTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5kIHVubGlua2Vk
T3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKLSAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90PigpKTsKKyAg
ICAgICAgQVNTRVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJh
bmQ6OmZyb21CaXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3ICsxMzUzLDcgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7CisgICAgICAg
IHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwg
b3AoKSA9PSBWYXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEq
IGxvYWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggMjRjNzMzZDM4NzAyNzlmNGE1NmI0ZTY4OGJmMGJmMDZhYzI0YzFkNC4uZTNlOWMzMmY4
ZDA4MTNhNmFkYTIyYWFjY2QzNzQ0MmQ0ZWJkOWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAvKiBUaGVzZSBh
cmUgdXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8o
UHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0y
MDIsNiArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEdldEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggMzI4MGY4N2E2
MjY3ZGYwMzRjODRlMzMxODUzMGM3NDE5ZTU1ZTk3ZS4uZDEwYTIwNzA0YjAxOWQ3ZTg3N2FjYjI5
NjMyNmJhODk3MDBjMTNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSwxMSAr
MzUsOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRl
cm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFz
cyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JB
bGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5m
b3JFeGl0LAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQs
ICIgIik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwog
ICAgICAgICB9OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+
aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTIwLDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxp
dmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgw
KS0+b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFm
dGVyIHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwOCwyOCAr
MjA2LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9k
ZShOb2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9j
YWwpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6
IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
LnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZs
dXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5vcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewot
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBAIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJn
czoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFpbGFiaWxpdHko
Rmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZhaWxhYmlsaXR5
KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBpKSkgPQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkg
KyBpKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5zdGFydCArIGkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93
IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRp
b24oQXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewog
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsK
ICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRp
b24oQXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkg
ewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRQTG9jLCBub2RlLCBp
KSwgYXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTViMGM3Yzk0Yjg0M2U4OTBkYzcu
LjBkODI5MzUwZDRjNmUwYTEyMDg2ODM2YzBiMGIxNzgwZjJiYmUyZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0zODIsMTAgKzM4MiwxMCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NS
RW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAg
ICAgQVNTRVJUKGluc3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRh
ZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5t
ZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0YUJ1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRy
eUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCku
aXNMb2NhbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkYXRhQnVmZmVyW2luZGV4
XSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCBkYzc2YmNiYWVkNDFlZWUwNjNkZmRiZWE4NDUwNjY1
NTNkMGNiNGQ2Li42MDk2ODY2M2I2NGMyYjY4NTRlNDYxNjFmOTQ5OTQ2NTdlMWFlZmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBsb2NhbHNbbG9jYWxdID0gbmV3Um9vdC0+YXBw
ZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigp
LCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3Bl
Y05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBP
cEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSksCiAgICAgICAgICAg
ICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggMThjNjQxNDc5MzQyNDY5YjQxY2E4Zjk4ZjMw
OGIzYTRjOTMzYmE5OC4uMDVkZTk1OGNhZWVmMWI4ZjA5ZTMyZDA5N2E4ZmUzMmQ2Nzc0MjAxYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVz
ZURlZi5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVk
ZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJE
RkdNYXlFeGl0LmgiCkBAIC00Nyw4OTUgKzQ4LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBQcm9iZSBiYXNlZCBPU1IgRXhpdC4KLQotdXNpbmcgQ1BVU3RhdGUg
PSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2lu
ZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0
IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6
OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ss
IE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiwgdWludDMyX3Qg
b3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVG
b3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJj
ZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgc3RkOjpt
ZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4oc291cmNlLmJhc2UoKSkgKyBzb3VyY2Uu
b2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShjcHUuZ3By
PEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsKLSNlbHNlCi0gICAgaWYgKHNvdXJjZS5o
YXNLbm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShzb3VyY2UudGFnKCksIGNwdS5n
cHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlKGNw
dS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2Uu
cGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJs
b2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0
b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCks
IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBj
YWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVUNQVVJlZ2lzdGVyKiBwaHlzaWNhbFN0YWNrRnJh
bWUgPSBjb250ZXh0LmZwPFVDUFVSZWdpc3Rlcio+KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3Rl
cnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBU
aGUgY2FsbGVlIHNhdmVkIHZhbHVlcyBjb21lIGZyb20gdGhlIG9yaWdpbmFsIHN0YWNrLCBub3Qg
dGhlIHJlY292ZXJlZCBzdGFjay4KLSAgICAgICAgLy8gSGVuY2UsIHdlIHJlYWQgdGhlIHZhbHVl
cyBkaXJlY3RseSBmcm9tIHRoZSBwaHlzaWNhbCBzdGFjayBtZW1vcnkgaW5zdGVhZCBvZgotICAg
ICAgICAvLyBnb2luZyB0aHJvdWdoIGNvbnRleHQuc3RhY2soKS4KLSAgICAgICAgQVNTRVJUKCEo
ZW50cnkub2Zmc2V0KCkgJSBzaXplb2YoVUNQVVJlZ2lzdGVyKSkpOwotICAgICAgICBjb250ZXh0
LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBwaHlzaWNhbFN0YWNrRnJhbWVbZW50cnkub2Zmc2V0
KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKV07Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsK
LSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lz
dGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVT
YXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291
bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMt
PmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFjay5zZXQoY29udGV4dC5mcCgpLCBl
bnRyeS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIo
KSkpOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lk
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250
ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1D
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCBy
ZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFZNRW50cnlSZWNv
cmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICBV
Q1BVUmVnaXN0ZXIqIGNhbGxlZVNhdmVCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFVDUFVSZWdp
c3Rlcio+KGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyKTsKLQotICAgIC8v
IFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBh
bGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHNpemVfdCB1
aW50cHRyT2Zmc2V0ID0gZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKTsKLSAg
ICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBjb250ZXh0Lmdwcihl
bnRyeS5yZWcoKS5ncHIoKSkgPSBjYWxsZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdOwotICAg
ICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgY29udGV4dC5mcHIo
ZW50cnkucmVnKCkuZnByKCkpID0gYml0d2lzZV9jYXN0PGRvdWJsZT4oY2FsbGVlU2F2ZUJ1ZmZl
clt1aW50cHRyT2Zmc2V0XSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50
IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBC
YXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAq
Y29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwot
Ci0gICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVu
dHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVCdWZmZXIgPSBlbnRyeVJlY29yZC0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxD
YWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
LSAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+
c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkr
KykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0
KGkpOwotICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAg
ICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29u
dGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkpOwotICAgICAgICBlbHNl
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVC
dWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJl
ZygpLmZwcigpKSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtp
dC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJlZ2lz
dGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNlZCBv
biBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRp
YyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyIG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9v
bCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygp
KTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdl
dChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB1aW50cHRy
X3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlmICh3YXNDYWxsZWRWaWFUYWlsQ2Fs
bCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBz
YXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0cl90PihlbnRyeS5vZmZzZXQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGNvbnRleHQu
Z3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBmcmFtZS5zZXQob2Zmc2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9mZnNldCgpLCBzYXZlZFJlZ2lzdGVy
VmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQm
LCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9
Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9j
ayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlRGlyZWN0QXJn
dW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50
MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7
Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3Vt
ZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc3RkOjptYXgobGVuZ3RoLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgLSAxKSk7Ci0g
ICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKLSAg
ICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVj
dHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBj
YWxsZWUpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkg
KyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwot
ICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+c2V0SW5kZXhRdWlja2x5
KHZtLCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1z
dGF0aWMgSlNDZWxsKiBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAg
Vk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVm
ZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwot
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgQ2xv
bmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAotICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVl
LCBsZW5ndGgpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+
KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDAp
OwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERGRzo6SklUQ29kZSogZGZnSklUQ29kZSwgY29uc3Qg
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQotewotICAgIEZyYW1lIGZyYW1lKGNv
bnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwg
aW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRz
IG5vZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAotICAgICAgICAgICAg
JiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJl
Y292ZXJ5Lm5vZGVJRCgpOwotICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmZpbmQoaWQpOwotICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZy
YW1lLm9wZXJhbmQoaXRlci0+dmFsdWUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPQotICAgICAg
ICAgICAgZGZnSklUQ29kZS0+bWluaWZpZWRERkcuYXQoaWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LQotICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgICAgICBzdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gMDsKLQotICAgICAgICBK
U0Z1bmN0aW9uKiBjYWxsZWU7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZnJhbWUub3BlcmFuZChzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQo
KS5hc0NlbGwoKSk7Ci0KLSAgICAgICAgaW50MzJfdCBhcmd1bWVudENvdW50OwotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAg
ICAgICAgICAgYXJndW1lbnRDb3VudCA9IGZyYW1lLm9wZXJhbmQ8aW50MzJfdD4oc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0KLSAgICAgICAgSlNDZWxsKiBhcmd1bWVudHNPYmpl
Y3Q7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
OgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVy
aW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1
bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShhcmd1
bWVudHNPYmplY3QpKTsKLQotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChp
ZCwgb3BlcmFuZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBl
eHRyYSBpbml0aWFsaXphdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUgaW4gb3JkZXIKLS8vIG9m
IG1vc3QgbGlrZWx5IG5lZWRlZCAobG93ZXIgZW51bSB2YWx1ZSkgdG8gbGVhc3QgbGlrZWx5IG5l
ZWRlZCAoaGlnaGVyIGVudW0gdmFsdWUpLgotLy8gRWFjaCBsZXZlbCBpbml0aWFsaXphdGlvbiBp
bmNsdWRlcyB0aGUgcHJldmlvdXMgbG93ZXIgZW51bSB2YWx1ZSAoc2VlIHVzZSBvZiB0aGUKLS8v
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2YWx1ZSBiZWxvdykuCi1lbnVtIGNsYXNzIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCB7Ci0gICAgTm9uZSwKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5
LAotICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwKLSAgICBBcnJheVByb2ZpbGVVcGRhdGUsCi0gICAg
T3RoZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIEFTU0VSVCgmY2FsbEZyYW1lLT5kZXByZWNh
dGVkVk0oKSA9PSAmdm0pOwotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotCi0gICAgaWYg
KHZhbGlkYXRlREZHRG9lc0dDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0
aW1pemVkIGNvZGUuIFNvLCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0aW1pemVkCi0gICAgICAg
IC8vIGNvZGUgcnVubmluZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAgICAgIHZtLmhlYXAuc2V0
RXhwZWN0RG9lc0dDKHRydWUpOwotICAgIH0KLQotICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRj
aCkgewotICAgICAgICBjYWxsRnJhbWUgPSB2bS5jYWxsRnJhbWVGb3JDYXRjaDsKLSAgICAgICAg
Y29udGV4dC5mcCgpID0gY2FsbEZyYW1lOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLQotICAg
IC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVy
ZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJs
ZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Ci0KLSAgICB1aW50MzJf
dCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7Ci0gICAgREZHOjpKSVRDb2RlKiBkZmdKSVRD
b2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIE9TUkV4aXQmIGV4aXQgPSBk
ZmdKSVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0KLSAgICBBU1NFUlQoIXZtLmNhbGxGcmFt
ZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpOwotICAgIEVYQ0VQVElP
Tl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKTsKLQotICAgIGlmIChVTkxJS0VMWSghZXhpdC5leGl0U3RhdGUpKSB7
Ci0gICAgICAgIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmU7Ci0KLSAgICAgICAgLy8gV2Ugb25s
eSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9jayBvbmNlIGZvciBlYWNoIE9TUkV4aXQgcmVjb3Jk
LiBUaGUgY29tcHV0ZWQKLSAgICAgICAgLy8gcmVzdWx0cyB3aWxsIGJlIGNhY2hlZCBpbiB0aGUg
T1NSRXhpdFN0YXRlIHJlY29yZCBmb3IgdXNlIG9mIHRoZSByZXN0IG9mIHRoZQotICAgICAgICAv
LyBleGl0IHJhbXAgY29kZS4KLQotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBudWxscHRyOwotICAgICAgICBp
ZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIHJlY292
ZXJ5ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5k
ZXhdOwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0
aW9uUmVjb3ZlcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9r
aW5kID09IEdlbmVyaWNVbndpbmQpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAg
ICAgICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIGlm
IChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5
cGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQotICAg
ICAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9m
aWxlVXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludDMyX3Qg
YWN0aXZlVGhyZXNob2xkID0gYmFzZWxpbmVDb2RlQmxvY2stPmFkanVzdGVkQ291bnRlclZhbHVl
KE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpOwotICAgICAg
ICBkb3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0Fu
ZENvbnZlcnRUb0ludChhY3RpdmVUaHJlc2hvbGQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGFkanVzdGVkVGhyZXNob2xkID4gMCk7Ci0gICAgICAgIGFkanVzdGVkVGhyZXNo
b2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKLQotICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAg
ICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwg
Y29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7
Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgICAgIGlmIChleGl0VG9MTEludCkgewot
ICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2Rl
TWFwKCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2Rl
TG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwotICAgICAgICAgICAganVtcFRh
cmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICAgICAgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5k
U3Bhbj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICBkZmdKSVRDb2RlLT52YXJpYWJs
ZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGRm
Z0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzLCAmdW5k
ZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90IHN0YWNrUG9pbnRlck9mZnNl
dCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21t
b24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpOwot
Ci0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0
LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywgV1RGTW92ZSh1bmRlZmlu
ZWRPcGVyYW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJl
c2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJheVByb2ZpbGUsIGV4aXRU
b0xMSW50KSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewot
ICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS5tX3BlckJ5dGVj
b2RlUHJvZmlsZXI7Ci0gICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0
aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQo
KTsKLQotICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBp
bGF0aW9uLT5hZGRPU1JFeGl0KAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgUHJvZmlsZXI6
Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luKSwKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZh
bGlkYXRpb24pOwotICAgICAgICAgICAgZXhpdC5leGl0U3RhdGUtPnByb2ZpbGVyRXhpdCA9IHBy
b2ZpbGVyRXhpdDsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpP
dGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0
ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVs
OjpPdGhlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUtPmV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDsKLQotICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCkpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nRigiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NT
dHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBleGl0S2lu
ZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVy
YW5kcykpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPU1JFeGl0U3RhdGUmIGV4
aXRTdGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gZXhpdFN0YXRlLmJhc2VsaW5lQ29kZUJsb2NrOwotICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0U3RhdGUub3BlcmFuZHM7
Ci0gICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZpbmVkT3BlcmFuZFNwYW5z
ID0gZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLQotICAgIGNvbnRleHQuc3AoKSA9
IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zmc2V0Owot
Ci0gICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRvIHdoaWxlIGxvb3AgaXMg
c28gd2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0ZS4KLSAgICBkbyB7Ci0g
ICAgICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RhdGljX2Nhc3Q8RXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsPihleGl0U3RhdGUuZXh0cmFJbml0aWFsaXphdGlvbkxldmVsKTsK
LQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09IEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6Tm9uZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2lu
IGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFNwZWN1bGF0aW9uUmVjb3ZlcnkKLQotICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0aW9uIHJlY292ZXJ5IGZpcnN0IGJlY2F1c2UgYXJy
YXkgcHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9maWxpbmcKLSAgICAgICAgLy8gbWF5IHJlbHkgb24g
YSB2YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBIb3dldmVyLCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGF0
IGl0IGlzIGxpa2VseQotICAgICAgICAvLyB0byBoYXZlIGEgcmVjb3ZlcnkgdmFsdWUuIFNvLCB3
ZSdsbCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VMWS4KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVy
eSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVjb3Zlcnk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShy
ZWNvdmVyeSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAg
ICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJl
Y292ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSBj
cHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+c3JjKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zl
cnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAgICAgICAgY3B1Lmdwcihy
ZWNvdmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAt
IHJlY292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAg
ICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBCb29s
ZWFuU3BlY3VsYXRpb25DaGVjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIF4g
SlNWYWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5KQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogVmFs
dWVQcm9maWxlVXBkYXRlCi0gICAgICAgIEpTVmFsdWUgcHJvZmlsZWRWYWx1ZTsKLSAgICAgICAg
aWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIHByb2ZpbGVkVmFsdWUg
PSBqc1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgaWYg
KE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2Zp
bGUpCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5yZXBvcnRWYWx1ZShwcm9maWxlZFZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogQXJyYXlQ
cm9maWxlVXBkYXRlCi0gICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGV4
aXRTdGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghIWV4aXQubV9qc1Zh
bHVlU291cmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8
fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJv
ZmlsZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgICAgIGJvb2wgZG9Qcm9m
aWxlID0gIWluc3RydWN0aW9uLT5pczxPcEdldEJ5SWQ+KCkgfHwgaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKS5tZXRhZGF0YShwcm9maWxlZENvZGVCbG9jaykubV9tb2RlTWV0YWRhdGEubW9k
ZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBpZiAoZG9Qcm9maWxl
KSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm9maWxlZFZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
b2JzZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmls
ZS0+b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gRXh0cmEgaW5pdGlsaXphdGlv
biBsZXZlbDogT3RoZXIKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9raW5kID09IEdlbmVy
aWNVbndpbmQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBv
cF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAg
ICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sg
cG9pbnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZw
KCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4
aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgICAgICBleGl0U3RhdGUucHJvZmlsZXJFeGl0
LT5pbmNDb3VudCgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpKQotICAgICAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRleHQsIHZtLm9zckV4aXRJ
bmRleCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxlIChmYWxzZSk7IC8vIEVuZCBleHRyYSBpbml0aWFs
aXphdGlvbi4KLQotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwot
ICAgIEFTU0VSVCghKGNvbnRleHQuZnA8dWludHB0cl90PigpICYgMHg3KSk7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIEFTU0VSVChjcHUuZ3ByPGlu
dDY0X3Q+KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok5vdENlbGxN
YXNrKTsKLSNlbmRpZgotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFu
ZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAvLyBOb3RlOiB3ZSBuZWVk
IHRvIHJlY292ZXIgdmFsdWVzIGJlZm9yZSByZXN0b3JpbmcgY2FsbGVlIHNhdmUgcmVnaXN0ZXJz
IGJlbG93Ci0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3ZlcnkgbWF5IHJlbHkgb24gdmFsdWVzIGlu
IHNvbWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotCi0gICAgaW50IGNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2st
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVy
T2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUoKTsKLSAgICBzaXplX3QgbnVtVW5kZWZpbmVkT3Bl
cmFuZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zLnNpemUoKTsKLQotICAgIHNpemVfdCBu
ZXh0VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsKLSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZE9wZXJh
bmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgaWYgKG51bVVuZGVmaW5lZE9wZXJhbmRT
cGFucykKLSAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJh
bmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotCi0gICAgSlNWYWx1
ZSB1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwotICAgIGZvciAoc2l6ZV90IHNwYW5JbmRleCA9
IDA7IHNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFuczsgKytzcGFuSW5kZXgpIHsK
LSAgICAgICAgYXV0byYgc3BhbiA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tzcGFuSW5kZXhdOwot
ICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSBzcGFuLm1pbk9mZnNldDsKLSAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSBmaXJzdE9mZnNldCArIHNwYW4ubnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLSAgICAg
ICAgZm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RPZmZzZXQ7IG9mZnNldCA8IGxhc3RPZmZzZXQ7ICsr
b2Zmc2V0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvZmZzZXQsIHVuZGVmaW5lZCk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mT3Bl
cmFuZHM7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5k
cy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KGluZGV4ID09IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRl
eCArPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleCsrXS5udW1i
ZXJPZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFVuZGVmaW5lZFNwYW5JbmRl
eCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZp
bmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFu
SW5kZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV4
dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50
b0xvY2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKLQotICAg
ICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmZwcjxKU1ZhbHVlPihyZWNvdmVyeS5mcHIo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBj
YXNlIEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZ3By
PEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0g
ICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkudGFnR1BSKCkpLCBjcHUuZ3ByPGlu
dDMyX3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8SlNDZWxsKj4ocmVjb3ZlcnkuZ3By
KCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hl
ZENlbGwoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjcHUuZ3ByPGJvb2w+KHJlY292ZXJ5LmdwcigpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIEJvb2xlYW5EaXNw
bGFjZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNlbHNlCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkucGF5bG9hZCgpKSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlVW5ib3hlZEludDMyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5Lmdw
cigpKSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQ1MigpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1MkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVj
b3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0cmlj
dEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBw
dXJpZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5mcHIoKSkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cHVyaWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVu
c2FmZVVuYm94ZWREb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIHJlY292
ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXJl
Y3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1l
bnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgeWV0
LgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5kIHRoZW4g
c2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAgcmVzdG9yZUNhbGxlZVNh
dmVzRm9yKGNvbnRleHQsIGNvZGVCbG9jayk7Ci0gICAgc2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnRl
eHQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY3B1Lmdw
cihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdp
c3Rlcj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBjcHUuZ3ByKEdQUkluZm86Om5vdENlbGxN
YXNrUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok5v
dENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Y29udGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNv
dmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50
cwotICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhl
ci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVm
ZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0
aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3
ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBt
YXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29w
ZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLQotICAgIERGRzo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoY29udGV4dCwgY29kZUJsb2NrLCBkZmdKSVRDb2RlLCBvcGVyYW5k
cyk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNl
IHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBp
bnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAg
IC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBl
eGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhl
IG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1Ig
ZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAg
Ly8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5j
ZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNl
IG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQg
dG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAg
ICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQg
aXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBu
ZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBl
cmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAg
Ly8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBp
bW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMg
b2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFy
bHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywg
ZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVu
bmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdn
ZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhl
IGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFu
ZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVu
aXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVz
c2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhl
IGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAg
IC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdn
ZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBo
b3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBv
ZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQp
LAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUg
ZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBv
ZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRo
YW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFu
ZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFp
bHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ug
d2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpLgotCi0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+dXBkYXRlT1NSRXhpdENv
dW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShleGl0U3RhdGUpID09IENvZGVCbG9jazo6
T3B0aW1pemVBY3Rpb246OlJlb3B0aW1pemVOb3cpKQotICAgICAgICB0cmlnZ2VyUmVvcHRpbWl6
YXRpb25Ob3coYmFzZWxpbmVDb2RlQmxvY2ssIGNvZGVCbG9jaywgJmV4aXQpOwotCi0gICAgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci0g
ICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNvbnRleHQsIHZtLCBjb2RlQmxvY2ssIGJhc2VsaW5l
Q29kZUJsb2NrLCBleGl0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2Nr
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKLXsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNw
dTsKLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0YWNrIHdoZW4gcGVyZm9y
bWluZyBhbiBPU1IgZXhpdAotICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxs
cy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTEx
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICBmcmFtZS5zZXRPcGVyYW5kPENvZGVCbG9jayo+KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotCi0g
ICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKLSAgICBmb3IgKGNvZGVPcmlnaW4gPSAm
ZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2Fs
bGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jaygqY29kZU9yaWdpbiwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kOwotICAg
ICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJT
a2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKLSAgICAgICAgdm9pZCogY2Fs
bGVyRnJhbWUgPSBjcHUuZnAoKTsKLQotICAgICAgICBib29sIGNhbGxlcklzTExJbnQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAgICAgICAgICAgIHZvaWQqIHJldHVyblBDID0gZnJh
bWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpOwotI2lmIENQVShBUk02
NEUpCi0gICAgICAgICAgICB2b2lkKiBvbGRFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9
IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAr
IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICByZXR1cm5QQyA9IHJldGFnQ29kZVB0cihyZXR1
cm5QQywgYml0d2lzZV9jYXN0PFB0clRhZz4ob2xkRW50cnlTUCksIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIHJldHVyblBDKTsKLSAgICAgICAgICAg
IGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5i
eXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0
dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVl
Q2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNh
bGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tP
ZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAg
ICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxs
RnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVt
cFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3
RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAg
ICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3Rl
cnMuCi0gICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0
IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJl
YWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2
ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQot
ICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsK
LSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5l
Q2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFU
YWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJs
ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZv
aWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBM
TEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUp
OwotICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVP
ZmZzZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdP
ZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1ZhbHVlKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28g
dGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQs
IFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50
MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwot
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25z
dGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBh
cnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8v
IERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRp
ZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0
d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCi17
Ci0gICAgT1NSRXhpdFN0YXRlKiBleGl0U3RhdGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLQot
ICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsgLy8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhw
ZWN0cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNoYW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2Uu
Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgLy8g
V2UgYmFycmllciBhbGwgaW5saW5lZCBmcmFtZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50
IGlubGluZSBzdGFjayAtLQotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxp
bmVkIGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVlIHByb2ZpbGUgdGhhdAotICAgIC8vIHdlJ2xsIHVw
ZGF0ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBjYXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlm
IGJvdGgKLSAgICAvLyBhIGFuZCBiIGFyZSBpbmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBi
IGR1ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQKLSAgICAvLyBmcm9tIGEuCi0gICAgLy8gRklYTUU6
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVC
bG9jayBvd25zCi0gICAgLy8gdGhlIHZhbHVlIHByb2ZpbGUuCi0gICAgSW5saW5lQ2FsbEZyYW1l
U2V0KiBpbmxpbmVDYWxsRnJhbWVzID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0g
ICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2Fs
bEZyYW1lcykKLSAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgIH0KLQotICAgIGF1dG8qIGV4aXRJbmxp
bmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBp
ZiAoZXhpdElubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5m
cDx1aW50OF90Kj4oKSArIGV4aXRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLQotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1
bXBUYXJnZXQ7Ci0gICAgQVNTRVJUKGp1bXBUYXJnZXQpOwotCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9j
YXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0gICAgICAgIHZtLmNhbGxG
cmFtZUZvckNhdGNoID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIH0KLQotICAgIHZt
LnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLQotICAgIGlmIChleGl0
U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JF
eGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0
Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9y
RXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0KLSAgICAgICAg
Y29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpLm9mZnNldCgpKTsKLSNlbHNlCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgICAgICB2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudElu
c3RydWN0aW9uOwotICAgIH0KLQotICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENv
bnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhp
dCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4o
KTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAg
ICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLQotICAgIGRhdGFM
b2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygi
IEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhp
dEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKLSAgICBpZiAoYWx0ZXJuYXRpdmUpIHsK
LSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLAotICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKSwKLSAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGRhdGFMb2coIm5vIGFsdGVybmF0aXZlIGNvZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0
aXNvbmVkKSIpOwotICAgIGRhdGFMb2coIiwgb3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2st
Pm9zckV4aXRDb3VudGVyKCksICJcbiIpOwotICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUg
b2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdp
c3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIs
IFJhd1BvaW50ZXIoY29udGV4dC5ncHI8dm9pZCo+KGdwcikpKTsKLSAgICB9Ci0gICAgZGF0YUxv
ZygiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
IHsKLSAgICAgICAgRlBSUmVnIGZwciA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAg
IGRhdGFMb2coIiAiLCBjb250ZXh0LmZwck5hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0
X3QgYml0cyA9IGNvbnRleHQuZnByPHVpbnQ2NF90PihmcHIpOwotICAgICAgICBkb3VibGUgdmFs
dWUgPSBjb250ZXh0LmZwcihmcHIpOwotICAgICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxu
Iik7Ci19Ci0KLS8vIEpJVCBiYXNlZCBPU1IgRXhpdC4KLQogT1NSRXhpdDo6T1NSRXhpdChFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBz
dHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtp
bmQsIGppdC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5t
X29yaWdpbi53YXNIb2lzdGVkKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2Up
CkBAIC05NTgsMTUgKzcwLDE4IEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4g
T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6
ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJ
RCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1l
bnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxS
ZWdpc3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAg
ICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5k
LmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBNaW5pZmllZElEIGlk
ID0gcmVjb3Zlcnkubm9kZUlEKCk7CiAgICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZW5kKCkpIHsKQEAgLTk4Nyw3ICsxMDIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJh
bmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSks
CiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaml0Lm1vdmUoCkBAIC05OTcsNyArMTEyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0
UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5k
czxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEzOCw3IEBAIHZvaWQgT1NS
RXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29u
c3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAg
YWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOworICAgICAgICBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsODQgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxl
RXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25z
dAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7
CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNo
ZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBh
IHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBv
dGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5k
cy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRz
LnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGF1dG8qIHRtcFNj
cmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CisgICAgICAgIGppdC5wcm9i
ZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1l
LCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUg
PSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNl
dF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUg
RlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRj
aCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5j
b25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRtcFNjcmF0
Y2hbaSArIHRtcE9mZnNldF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRt
cE9mZnNldF0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBz
W2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhp
dC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2Fs
bEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lk
ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVv
ZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBi
eXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRh
dGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFj
ay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0
dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkg
JiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBv
cGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYg
b3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45
ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEyMzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUwLDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0
IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAgIGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZyYW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBl
eGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjky
YTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYg
KzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
R2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5n
VG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAppbmRleCAyZmYzZWE4YjVmYmI2ZjNmMjcyMWQ1MDI0NDU2Mjk4YjA4NGQ1MTE1Li4wZmI0ODIw
M2JmZGI1ZDU0Yzk2M2QyNGY5ZGJmNzY5ZGU1YTI1ZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwx
MiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1
ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTE0Myw2ICsxNDYsOSBAQCB2b2lkKiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRl
Y29kZUluZGV4IGNhbGxCeQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9T
UkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oJmNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCk7CisKICAgICB2b2lk
KiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTM4MiwxMSArMzg4
LDEyIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKIAogICAgIHZvaWQqIGp1bXBU
YXJnZXQ7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY2hlY2twb2ludFJl
dHVyblRhcmdldDsKICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0
VG9MTEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rOwogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVj
b2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNv
bnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IGJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpID8gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9j
YXN0PHZvaWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSkgOiBMTEludDo6Z2V0
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJl
Z1QyKTsKQEAgLTQwMiw3ICs0MDksMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0m
IHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYK
ICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5q
aXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAg
ICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4g
PSBjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4p
OworICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgY2hl
Y2twb2ludFJldHVyblRhcmdldCA9IGNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2Nh
dGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lk
Kj4oJmNoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCkpOworICAgICAgICB9CisKICAgICAg
ICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNi
NGIwM2RjMTk5Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9k
ZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43
N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAg
ICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVl
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBs
aWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBi
OTQ4OGExMDMyODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3
NzY5MmRiMTA3Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKQEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoK
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IG1hbmRhdG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dCB7IGZpcnN0RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1l
bnRzKTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
JmNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAt
IDEpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1h
bmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCAr
IGkpID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Rk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhi
ZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi5iYjQyMDYxZDUxNjZmZTIxMGQ5Y2Vk
YzZjN2VjNzE4ZjQ0YmJiYjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC0xMDgsMTcgKzEwOCwxNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG51bGxw
dHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnRNYXliZToKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzOSwyMSArMTM5LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJl
bnRFcG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOwor
ICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHBy
b2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAg
ICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
ICAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZDog
IiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBv
cGVyYW5kOiAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkg
aGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFk
eUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBh
IFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAogICAg
ICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4K
QEAgLTE3OSwxNCArMTc5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5
RXhpdCkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0
LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAv
LyB0byBiZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFs
cmVhZHlLaWxsZWQgPSBsb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVy
YW5kOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KGxvY2FsKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVy
YW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYz
ZDE0Mjk4ODZlMDc4ZjBhZmNjLi5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVh
MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VM
b2NhbENsb2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxs
SWZBcHByb3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVy
YW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8g
YWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4K
ICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHBy
b3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRp
dGlvbmFsV3JpdGUsIGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAg
ICAgICAgCi0gICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5
bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCku
b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJv
cHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3Bl
cmFuZC50b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4
IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5
YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11
c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZj
YmZlY2M4NGZlMTk1ODQyOGEwY2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUx
ZDE5YmU2ZDMxOTdjMTNmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEz
NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZl
Y2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBl
N2VkZjYzZjA3Zjc4ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoK
ICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0
YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGlj
OgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5m
aWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9v
bD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAg
ICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBib29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlz
IGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5h
cHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgp
ID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5v
ZGUtPm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQ
dXRTdGFjayB8fCBvcCA9PSBWYXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9w
ID09IEZvcndhcmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9Owog
CiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUp
IHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7
IH0pOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
OiB3cml0ZXMpCisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3Jp
dGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiBy
ZWFkcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBk
ZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVk
IGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2
MSw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENv
bmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVz
aDsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9k
ZS0+b3AoKSA9PSBQdXRTdGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJTZXR0aW5nIGZsdXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJh
bmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09
IEtpbGxTdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBzaW5rIGEgUHV0U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5n
Rmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0g
RGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAg
IGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5k
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3
YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBu
b2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQg
b3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVy
aXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxl
ciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVy
YW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkK
QEAgLTMxMywxMyArMzEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsg
aS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQ29uc2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRl
eChpKSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNj
ZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAi
LCBkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQg
IiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0s
IGRlZmVycmVkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxS
ZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRv
T3BlcmFuZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgo
aSkpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5l
d1ZhcmlhYmxlKCk7CiAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJh
bmQpID0gdmFyaWFibGU7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgp
ID09IHZhcmlhYmxlLT5pbmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFj
a3NUb1NpbmsuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5l
d0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQo
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJh
bmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0
U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAg
IFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9j
aykgLT4gTm9kZSogewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
aW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQo
b3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcg
KzM5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5n
IFBoaSBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBo
LmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFs
aWRFeGl0KCkpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBp
bmcuZmlsbChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxl
ID0gb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQo
YmxvY2ssIHZhcmlhYmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiOiAiLCBtYXBwaW5nLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJs
b2NrKSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4
KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFw
cGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAg
ICAgICAgICAgfQpAQCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVm
ZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCAiIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQob3BlcmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRh
dGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVm
ZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c0NvbmNyZXRlKGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGlj
dGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGlj
dGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVy
ZSBpcyBubyBkZWZlcnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBz
bG90IGlzIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBrZWVwIHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1h
cHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtNDcyLDIwICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBoYXZlIHN0b3JlZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwg
Zm9ybWF0LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRh
LT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWlu
Zy0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRl
bnRpdHkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVz
aDsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcg
KzQ5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRT
dGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3Rh
Y2sgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAt
NTEzLDcgKzUxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFy
ZSB1bmNvbmRpdGlvbmFsIHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRl
IHRvLiBUaGlzIG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3Mu
IFRoaXMgbWVhbnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFB1dFN0YWNrcyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXpl
KAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwg
d3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5k
LCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfSB9CiAgICAgICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxh
dG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5k
W3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDcmVhdGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29y
QmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcg
KzU4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1
dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAKaW5kZXggNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4u
MDRmMmMwY2QzOTk4YjE4MWI5ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4
LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2Fs
KCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCks
IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJz
LmFkZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5h
ZGQobm9kZSwgY2hpbGROb2RlKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJ
bmRleFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgLy8gUHJ1bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhl
ciB0aGFuIGNvbXBpbGUgdGltZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAg
ICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVu
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBu
b2RlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIs
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxl
Rm9yU1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9p
bnQsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAg
ICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVm
LT52YWx1ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBT
cGVjTm9uZSwgTW92SGludCwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCks
Ci0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSks
IHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgp
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2lu
LmV4aXRPSykKQEAgLTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBNb3ZIaW50OiB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51
bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uZXhpdE9LID0gZmFsc2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwx
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1B1dFN0YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1h
cHBpbmc6ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2
YXJpYWJsZS0+b3BlcmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGls
ZDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJSZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5v
ZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAg
LTM4NSw3ICszODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVs
dEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQy
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAg
ICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3Io
Zm9ybWF0KTsKIAotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5z
ZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIs
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlO
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGlu
ZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4
Y2EzMTY5MTkuLjlhMzJkNjdhNTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiAr
MzIyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENh
bGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNDhjMjhjMWI3NGE2Yjg1OGY3Mzg1
NDMyYzRhZDc2M2Y4ZDE2MzgzYS4uNjU5MjY3YTkzM2ZkOGExMmEyMWQwMzQ3NTA4ZDEyMzcyMGE2
MzgwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0Q2Fs
bGVlKENvZGVPcmlnaW4gb3JpZ2luLCBHUFJSZWcgY2FsbGVlR1BSKQogICAgICAgICAgICAgICAg
IGNhbGxlZUdQUik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBjYWxsZWVH
UFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgY2FsbGVlR1BSKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcnQoQ29kZU9yaWdpbiBvcmlnaW4s
IEdQUlJlZyBzdGFydEdQUikKQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1f
c3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNo
aWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExv
ZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29u
IHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDdXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwog
ICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9
IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAg
ICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAg
LTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJs
b2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0
ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3Ry
ZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAg
ICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOwor
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1l
bnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAg
ICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVy
YW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1f
b3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkxOSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVz
aGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1
ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQo
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2Rl
KiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSog
bm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBh
cmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
IEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsK
KyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9m
ZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRz
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50
cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBH
UFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAg
dW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBp
cyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5
IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBW
TSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFu
Y2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hl
cmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBw
YXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNj
cmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGlu
dDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZh
cmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1
bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQg
YXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1
ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCks
IEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFs
dWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpT
VmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwK
KyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1
c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudElu
Y2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3Vu
dCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5l
Q291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3Vt
ZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1h
bmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCks
IGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
ICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgsMTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOworICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0
ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BS
UmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAg
ICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVn
cyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlu
bGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAg
IAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7
CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtNzY1NCw3ICs3NjU1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2Rl
KiBub2RlKQogICAgICAgICAgICAgICAgIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZQotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSksIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSksIHNjcmF0Y2gxR1BSKTsKIAogICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmll
cnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQogICAg
IC8vIGFjdGl2YXRpb24gbXVzdCBiZSB5b3VuZy4KQEAgLTEyNDMwLDE0ICsxMjQzMSwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2V0dGVyKE5vZGUqIG5vZGUpCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2FsbGVlKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2FsbGVlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICBtX2ppdC5zdG9yZUNlbGwoY2FsbGVlLmdwcigpLCBKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICBtX2ppdC5zdG9yZUNl
bGwoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkBAIC0x
MjQ1NSw3ICsxMjQ1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKIHsKLSAgICBt
X2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5vZGUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4
IGM2NGY5NzhhZGY4NWZiZjI3N2JiYTc5MjE2MDY0ZjQyODFiOGQ1YTkuLjAzZDQ4MzViZjRiN2E4
ZGUwOTM5ZWZjZmEzNzAyMmI0NjI2OTA5NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEzOTMsNiArMTM5Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5l
d1JlZ2V4cChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxv
YWRWYXJhcmdzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSopOwpAQCAtMTY2
OSwxNSArMTY3MCwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2Uo
R1BSUmVnLCBHUFJSZWcpOwogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcs
IERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlUmVnLCBWaXJ0dWFs
UmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgeworICAgICAgICBB
U1NFUlQoIWJ5dGVjb2RlUmVnLmlzQXJndW1lbnQoKSB8fCBieXRlY29kZVJlZy52aXJ0dWFsUmVn
aXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRM
b2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYnl0ZWNvZGVSZWcsIG1hY2hpbmVSZWcsIGZvcm1h
dCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXQgZm9y
bWF0KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fY3Vy
cmVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICByZWNvcmRTZXRMb2NhbCh2
YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOworICAg
ICAgICByZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCksIGZvcm1hdCk7CiAgICAgfQogCiAgICAgR2VuZXJhdGlvbkluZm8mIGdlbmVyYXRp
b25JbmZvRnJvbVZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKaW5kZXggNjdiMGUwYjM3MDRjYTU5YTg5MGFjNTljODZkYmQwZDJhMDU2ZGI4MS4u
MGFmM2YxNzE4MTU0MTBkOWJlZjY0YTIwZmQwOTA1ZGRjMDNlNjdmNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0x
ODI4LDcgKzE4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsK
IAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0
IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNz
aWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMTkxMiw3ICsxOTEyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3Vy
cmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRE
ZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVy
YW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODI0LDYgKzM4MjQsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2Fs
bChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAg
ICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5v
ZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDNlNjM4YzliOTQ5ZWI1ZWEyNmEzMTA1ZGRiOGFm
ZTc2NjIxNjMzNDQuLjdiMWUyNTdkNjBkNDY4NDVmMWE5NDBmZjZkZmRjOTNhYzg2YzdjNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cApAQCAtMTkzNiw3ICsxOTM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxl
IGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBi
ZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTIwMDcsNyAr
MjAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2Nh
bChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRh
Rm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDQ2NCw2ICs0NDY0
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFy
YXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAppbmRleCBiZWVjODZhYzdhN2QzMzNlMzk2Nzll
MjY3NTU5MDc0ZTQ2NGM5YjgyLi5kNzYyOGU1YTExN2NlMzNkZTFkMTYxNWY2MDQyNzUyMjA0Nzdh
MjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0cmVhdCBhIHZh
cmlhYmxlIGFzIGJlaW5nICJ1c2VkIiBpZiB0aGVyZSBleGlzdHMgYW4gYWNjZXNzIHRvIGl0IChT
ZXRMb2NhbCwgR2V0TG9jYWwsCiAgICAgICAgIC8vIEZsdXNoLCBQaGFudG9tTG9jYWwpLgogICAg
ICAgICAKLSAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CisgICAgICAgIE9wZXJhbmRzPGJv
b2w+IHVzZWRPcGVyYW5kcygwLCBncmFwaCgpLm1fbG9jYWxWYXJzLCBncmFwaCgpLm1fdG1wcywg
ZmFsc2UpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhh
dCBhcmUgdXNlZCBmcm9tIElSLgogICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9
IGZhbHNlOwpAQCAtNjcsMjMgKzY3LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCku
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVy
YW5kKCksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAg
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKGRhdGEtPmNvdW50LCB0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24gdGhl
IGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
c3NpZ25tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0
ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0g
Ly8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgogICAgICAgICAgICAgICAgICAgICBo
YXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTkyLDkgKzkxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBT
dGFja0FjY2Vzc0RhdGEqIHN0YWNrID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay0+bG9jYWwuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2stPm9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHN0YWNr
LT5sb2NhbC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0
T3BlcmFuZChzdGFjay0+b3BlcmFuZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDgsMjEgKzEw
NywyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9ICppdGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1
YWxSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewotICAgICAgICAgICAgICAgIHVz
ZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFu
ZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCi0gICAgICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBh
bGxvY2F0aW9uKHVzZWRMb2NhbHMuc2l6ZSgpKTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBh
bGxvY2F0aW9uKHVzZWRPcGVyYW5kcy5zaXplKCkpOwogICAgICAgICBtX2dyYXBoLm1fbmV4dE1h
Y2hpbmVMb2NhbCA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMb2NhbHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghdXNlZExvY2Fscy5nZXQoaSkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRPcGVyYW5kcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCF1c2VkT3BlcmFuZHMuZ2V0Rm9yT3BlcmFuZEluZGV4KGkpKSB7CiAgICAg
ICAgICAgICAgICAgYWxsb2NhdGlvbltpXSA9IFVJTlRfTUFYOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTM1LDQ5ICsxMzQsNTAgQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0Fy
Z3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2
YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9
IHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVf
dCBsb2NhbCA9IHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIGlmIChs
b2NhbCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IHZhcmlhYmxlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSB1c2VkT3Bl
cmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICAgICAgaWYgKGluZGV4ID49IGFs
bG9jYXRpb24uc2l6ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCisgICAgICAg
ICAgICBpZiAoYWxsb2NhdGlvbltpbmRleF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0
aW9uLCB2YXJpYWJsZS0+b3BlcmFuZCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Zm9yIChTdGFja0FjY2Vzc0RhdGEqIGRhdGEgOiBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhKSB7
Ci0gICAgICAgICAgICBpZiAoIWRhdGEtPmxvY2FsLmlzTG9jYWwoKSkgewotICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgaWYgKGRh
dGEtPm9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGlu
ZUxvY2FsID0gZGF0YS0+b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bG9jYWwudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9u
LnNpemUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChhbGxv
Y2F0aW9uW2RhdGEtPmxvY2FsLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0xvY2FsKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5vcGVyYW5kLnRv
TG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPm9wZXJhbmQudG9Mb2Nh
bCgpXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFz
c2lnbihhbGxvY2F0aW9uLCBkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
TG9jYWwgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5vcGVyYW5kKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFtX2dyYXBoLm5lZWRzU2NvcGVSZWdp
c3RlcigpKQogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0
U2NvcGVSZWdpc3Rlcihhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0
ZXIoKSkpOworICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWdu
KHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkp
OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURh
dGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9
IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNz
aWduKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQt
LTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3Jh
cGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVu
dFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5j
b3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3Np
Z24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+
Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNz
aWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMjMxLDE3ICsyMzEsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFs
bG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2ln
bihjb25zdCBPcGVyYW5kczxib29sPiYgdXNlZE9wZXJhbmRzLCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiBhbGxvY2F0aW9uLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gc3JjOwotICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewot
ICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9M
b2NhbCgpXTsKLSAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxv
Y2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKTsKKworICAgICAgICBzaXplX3Qgb3BlcmFuZEluZGV4ID0gdXNlZE9wZXJhbmRz
Lm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0g
YWxsb2NhdGlvbltvcGVyYW5kSW5kZXhdOworICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKICAgICB9CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcAppbmRleCBlYjNkZGJkNzE4NDNkNDlmNjViMzJjZTk2MWZmOWEwNzEyYTFh
MDUxLi5iNDhjNmY3ZjE5MDk3NzVkNzI3OTc5OTFmM2ZiOTgzZGU2MzhhNzI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHAKQEAgLTI4NSwxNyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG1fbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG1fbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5vcGVyYW5k
KCkgPT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbCA9IG5vZGU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0
YWNrLCBsb2NhbCkpKQorICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFw
aCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAKaW5kZXggNmFjYWZiZjNiZjUzNWM5Njk2YmU2NDhhMjA3MGI2ZWU2ZjRmOGJmOS4u
ZjFiMWZmNjRkZGE1M2NmNDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJz
IGppdChudWxscHRyKTsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2
bSk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZH
IE9TUiBleGl0IHRodW5rIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0Nh
bGxIZWxwZXJzIGppdChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5o
CmluZGV4IDA1YTUwYTU0YjI1ZDUxZGJjYjE4NThmZTdhYWRjYTQ4NjgyMDVkOWUuLjhiNWMzZjAx
YTQ4NTIwYjdhYWFhYWViYWZmOTNjM2IyNmNjZDk4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERG
RyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5r
R2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAppbmRleCA2MGZiZjg5OTVmZGFkNzgyNTZhMDY3Yjg5YzRlYzVmNTcxM2YxZDdlLi43OTY2
NWY4YWI4NWZjMTExNmQ2MzlmYjNkOGI1NWY2ZWQ5MDI2OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAg
LTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjaGVja09w
ID0gQ2hlY2tTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3BlY0NlbGxD
aGVjayAmIFNwZWNFbXB0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgobG9jYWwgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCA6IDApKSA9PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBURFogdmFsdWUuIFRo
ZSBjYWxsIGVudHJ5cG9pbnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERaLApAQCAtMTY4LDggKzE2
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJh
bmQoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExvY2FsOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9j
YWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4m
IG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggOWVlNWUwMDc0MDlkZjUy
OTRiZmNmNTFiNzc2ZWI4Y2ZjZjQ3YzUwZS4uYTJkNmNmYzI0OTM0ZTNkYzNjNDZjMGUyNGQ0ZGEx
Y2UxYjBjZjViNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
QEAgLTQ4Myw3ICs0ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+cGhpc1tpXTsKICAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2Nr
LmNvbnRhaW5zKG5vZGUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUt
Pm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBu
b2RlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9w
ZXJhbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFw
aC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBj
aGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChp
KSkKQEAgLTUxOSwxMCArNTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+
cHJlZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2Fs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9j
ayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3Qg
aGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2ssIGJsb2NrLT5w
cmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTUzMywxMSArNTMz
LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50RGVmaW5pdGVseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50TWF5YmUKQEAgLTU0NywxOSArNTQ3LDE1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5v
dCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+
aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2Nr
LT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2Up
LCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAotICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwot
ICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4g
c2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2OCwyNCArNjY0LDI0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQo
bm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBibG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnRE
ZWZpbml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIC8v
IE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNl
dExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZl
IGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBmb3IgdGhh
dCBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAg
ICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0Owor
ICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC05NjgsMjYgKzk2NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4g
IiwgZWRnZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogYmxvY2spCiAg
ICAgewogICAgICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKGxvY2FsLCAi
IGluIG51bGwgQmxvY2sgIik7CisgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gbnVs
bCBCbG9jayAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRh
dGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVy
YW5kLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNC
bG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCisgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRl
c3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2Nr
ICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CisgICAgICAgIGRh
dGFMb2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3Rp
bmF0aW9uQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJs
b2NrLCBOb2RlKiBwcmV2Tm9kZSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2Nr
KiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nKHBy
ZXZOb2RlLCAiIGZvciAiLCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOworICAg
ICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBvcGVyYW5kLCAiIGluIEJsb2NrICIsICpz
b3VyY2VCbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoTm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCAyNmYw
MzI5ZDU0MzA0MTU3MjA1ZTc4MTQ5OGM2NGUwYmU5OTMyMTEwLi45NWNkYzkyZTJjMjQxMGEzNWMw
MTMxMzFmZGMzYjdjY2MyODI5ZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTQxLDExICs0MSw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNw
YWNlIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogcHVibGljOgogICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQog
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5nIikKQEAgLTU2LDcgKzU0
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCBtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZhcmFyZ3MgZm9yd2FyZGlu
ZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDcg
Kzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNhbGxzIGludG8gdGhpcyBm
dW5jdGlvbiB0byBiZSByYXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGluIGEgc2ltcGxlIE8obikg
bWFubmVyLgogICAgICAgICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gYmxvY2stPmF0KGNh
bmRpZGF0ZU5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZygiSGFuZGxpbmcgY2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSBlbGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzIGlmIHRoZSBidXR0ZXJmbHkgaXMgb25seQpAQCAtMTA1LDcgKzEwMyw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE3LDkgKzExNSwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpLmlzVG1wKCksICJXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhIHRtcCByZWZlcnJpbmcg
dG8gYW4gYXJndW1lbnRzIG9iamVjdC4iKTsKICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4
ID0gbm9kZUluZGV4OwotICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFp
bnMobm9kZS0+dW5saW5rZWRMb2NhbCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRM
b2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFs
UmVnaXN0ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrVmFyYXJn
czoKQEAgLTE0MCwxMyArMTM5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzYXdFc2NhcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICBpZiAoc2F3RXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgICAgIGNh
c2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBj
YW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4
OwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxs
VmFyYXJnczoKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoK
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUt
PmNoaWxkMigpID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2Nh
cGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpID09IGNhbmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNM
b2FkZWRGcm9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5v
ZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjI2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXZhbGlkR2V0
QnlPZmZzZXQpIHsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1dHRlcmZseSA6IGNhbmRp
ZGF0ZUJ1dHRlcmZsaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMo
bm9kZSwgYnV0dGVyZmx5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBCdXR0ZXJmbHkgZXNjYXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLAotICAg
ICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgcmVnLCAiIHdoaWxl
IHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
S2lsbGluZyAiLCBvcGVyYW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3RE
dW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWxldmFudExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJlZykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNbaV0pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fsc1tpLS1dID0gcmVsZXZhbnRMb2Nh
bHMubGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0g
bm9kZUluZGV4OwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgIGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2VySW5kZXggPSAiLCBsYXN0
VXNlckluZGV4LCAiLCAiLCBibG9jay0+YXQobGFzdFVzZXJJbmRleCksICJcbiIpOwogICAgICAg
ICAKICAgICAgICAgLy8gV2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERldGVybWluZSBpZiBiZXR3
ZWVuIHRoZSBjYW5kaWRhdGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMgYW55CkBAIC0yNjMs
MTYgKzI2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2Rl
LT51bmxpbmtlZExvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoK
LSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUs
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2Ug
YXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CkBAIC0yODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+bG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPm9wZXJhbmQoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjk3LDEzICsyOTcsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgp
LmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyho
ZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCByZWcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBoZWFwLm9w
ZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc0ludGVyZmVyZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9i
YmVyaXplKCkpOwogICAgICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJmZXJlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTMxMSw3ICszMTAs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gbWFr
ZSB0aGlzIHdvcmsuCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFdpbGwgZG8gZm9yd2FyZGluZyFcbiIpOwogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAKQEAgLTM0MSw4ICszNDAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRoZXNlLgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdz
TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0g
Y2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVu
Z3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgLyog
YWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5h
cmd1bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFy
Z3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDhlYmZmYjQzNWVkNGRiZjYw
MmJkNjJhZWQ0YzM0MzJlYTVhODI5MDIuLjJhYzJlZTM5YjRjY2FkMzA4MTI1YjRlNmVjYzg4YTg3
YzdkMTc5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQot
ICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWluKCkpKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgIDog
bV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxz
ZSkKQEAgLTQ1LDEwICs0NCwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNz
RGF0YSgpCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlh
YmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgOiBtX2xvY2FsKGxvY2Fs
KQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJp
YWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNO
b25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVu
Ym94KGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQpA
QCAtODcsNyArODYsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0QWNjb3JkaW5nVG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMg
ZmFjaWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29y
ayBmb3IgYXJndW1lbnRzLgotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICBpZiAo
b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4g
dGhpcyBkb2Vzbid0CkBAIC0xMjEsNyArMTIwLDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6
OnRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKQogewogICAgIEFTU0VSVChpc1Jv
b3QoKSk7CiAgICAgICAgIAotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGRO
ZXZlclVuYm94KCkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZl
clVuYm94KCkKICAgICAgICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUlu
ZGV4KSkKICAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJs
ZUZvcm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgCkBAIC0xNzYsNyArMTc1
LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1bnQgZm9yIG1hY2hpbmUg
YXJndW1lbnRzLgotICAgIGlmIChtX2xvY2FsLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFu
ZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRo
ZSBhcmd1bWVudC1hd2FyZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBhbGwgb2YgYW4gKGlu
bGluZWQgb3IgbWFjaGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCmluZGV4IDFkMzg5MmY5ZWMwOWNiYTIwNDNmYTI1NGU2MDk0MjMy
MDE0YTI4NGUuLmJlMmZiNTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNmY2VmZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaApA
QCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlv
bkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFy
aWFibGVBY2Nlc3NEYXRhKTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsKKyAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEoT3BlcmFuZCk7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkK
KyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0g
ZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgICAgIEFTU0VS
VChtX29wZXJhbmQgPT0gZmluZCgpLT5tX29wZXJhbmQpOworICAgICAgICByZXR1cm4gbV9vcGVy
YW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hpbmVMb2NhbCgpCkBA
IC0yMDgsMTAgKzIwOCwxMCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNp
bXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCiAgICAgLy8g
dXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KIAotICAg
IFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVM
b2NhbDsKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAgICAgU3BlY3VsYXRlZFR5
cGUgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbjsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7
CiAKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCmluZGV4IDI4ZTQzN2ZkNTFmZWE0OTY5ZWI0OGVj
ZjBjMDUwOGYwYTM3ZGY4MzUuLjViMmMxZWU5MDliNTQ4ZjM5ODI3MGM0M2JkMzZlZDcyZTNmOWNm
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNw
cApAQCAtNTksMTEgKzU5LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIsIGlkKCksICIpIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICBvdXQucHJpbnQo
Ik1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAiKSIpOworICAgICAg
ICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgb3BlcmFuZCgpLCAiKSIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAgICAgIG91dC5wcmludCgK
LSAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+
IGJ5dGVjb2RlOiIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICJTZXRMb2NhbCht
YWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIG9wZXJhbmQoKSwK
ICAgICAgICAgICAgICIsICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpLCAiKSIp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAppbmRleCAyMDYwZDRhMmZkMjcyMjNkZDZmNjk5YzZkYmFk
NmQyMjQ2N2M5ODM0Li5jOGI4NGE3YzIxNjZlNzE1ZTUzMWNmNzVkMzg0OTc0ZjVjMzYwMjJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaApAQCAtNzYs
NyArNzYsNyBAQCB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7CiAjZW5kaWYKLSAg
ICBpbnQzMl90IHZpcnR1YWxSZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogfTsKIAogY2xhc3Mg
VmFyaWFibGVFdmVudCB7CkBAIC0xNjIsNyArMTYyLDcgQEAgcHVibGljOgogICAgICAgICBXaGlj
aFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJp
YWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlv
bi52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICByZXByZXNl
bnRhdGlvbi5vcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBldmVudC5tX2tpbmQg
PSBraW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2
ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE4MSwxMyArMTgxLDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwoCi0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVS
ZWcsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAg
ICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAg
ICAgICB3aGljaC52aXJ0dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsKICAgICAgICAgVmFy
aWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRp
b24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRh
dGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVudC5tX2tpbmQgPSBT
ZXRMb2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAg
ICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5NSwxMyArMTk1LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
VmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3RlciBieXRl
Y29kZVJlZykKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQs
IE9wZXJhbmQgYnl0ZWNvZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50
OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygp
OwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAg
ICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAg
ICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAgICAgICAgZXZlbnQu
bV9raW5kID0gTW92SGludEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3
aGljaCk7CiAgICAgICAgIGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKHJlcHJlc2Vu
dGF0aW9uKTsKQEAgLTI2NSwxMyArMjY1LDEzIEBAIHB1YmxpYzoKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09
IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJl
dHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkgY29uc3QK
KworICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9r
aW5kID09IFNldExvY2FsRXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVudCk7Ci0gICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVn
KTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZDsKICAgICB9
CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3RlcigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAppbmRleCA0NTI2ZDM5YmIwOTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2Li43ZWQ0ZDkw
M2MxNTk1NDZmZDQzNGM2OTU3MDlhNDg1NzQ3Y2QxYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTEyMyw2ICsx
MjMsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24o
KTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0g
aW52YWxpZEluZGV4OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7
CkBAIC0xMzAsMzcgKzEzMSw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNv
bnN0cnVjdCgKICAgICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2ln
bmVkIGkpIHsKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVy
aWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAg
ICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9y
SW5kZXgoaSAtIDEpLm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJl
Y292ZXJpZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKTsKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3Bl
cmFuZEZvckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAg
aW50IG1pbk9mZnNldCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAg
ICAgdW5kZWZpbmVkT3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zm
c2V0LCBpIC0gZmlyc3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52
YWxpZEluZGV4OwogICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZd
ICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4g
b2YgYXJndW1lbnRzIGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFk
amFjZW50IG9wZXJhbmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBp
bnZhbGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmll
cy5pc0FyZ3VtZW50KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZElu
ZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3Bl
cmFuZFNwYW4oaSk7CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRl
eCkgewogICAgICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RV
bmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAg
ICAgICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRv
KiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLnRvTG9jYWwoKSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMo
KSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51
bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAg
ICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAog
ICAgIC8vIENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRo
aXMgbXVzdCBiZSBhbiBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNh
c2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3Vs
ZAogICAgIC8vIHJlZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVl
UmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBudW1WYXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMg
aGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3Zl
cmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBudW1WYXJpYWJsZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVl
UmVjb3Zlcmllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ld
ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudW1WYXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDcgKzE3Nyw3IEBAIHVuc2lnbmVk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07
CiAgICAgCiAgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0
ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVy
YW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAg
ICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
b3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5p
ZmllZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7CkBAIC0xOTgsMTIgKzIwNCwxMiBA
QCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICAg
ICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3Rlcigp
KSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVj
b2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOworICAgICAgICAgICAgaWYg
KG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAg
ICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3Vy
Y2UoZXZlbnQuaWQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0TG9j
YWxFdmVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50
LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0
T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9y
bWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisg
ICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCks
IFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVu
dC5kYXRhRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIxMiw3ICsyMTgs
NyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICB9CiAg
ICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVS
ZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZh
bHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJj
ZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTI2Niw3ICsyNzIsNyBAQCB1bnNpZ25l
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52
aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZv
cm1hdCk7CiAgICAgfQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBh
cmF0ZWQpCiAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMu
c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAppbmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEw
NzZkZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoK
ICAgICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1
NGYwOGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29k
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0
ZWNvZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6
IG1fZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGMyZGRhZGE1YzQzM2RmOTE5YTE0NzMxYmZm
NDEyMWE0ZTE5YjcwODIuLjM2Nzk0Y2QyOGZjNjU4OTAxNDM1NmJlOWNmZGNhODA5MDQ0MTYxMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAg
LTI3NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVz
ZQogICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVk
LgotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93
IENoZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1
NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
ID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAw
LCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBA
IC0xMjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAg
ICAgICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAg
ICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyAr
MTk1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsK
LSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsg
bV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lk
IGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAg
ICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRh
LT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MTksMTMgKzc5MjIsMTMg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2
b2lkIGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRy
KGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCkBAIC03OTQwLDcgKzc5NDMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21w
aWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQu
c3RvcmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUo
KQpAQCAtOTUzNSw1MSArOTUzOCw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBh
dGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisg
ICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRz
ID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1
ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFy
YXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBz
dGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZy
b20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwog
ICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1f
b3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdz
T3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxl
bmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNs
dWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAg
eworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNB
cmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZs
b3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aElu
Y2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAor
ICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhp
cyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxh
b2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdz
IGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdp
c3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNo
aW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3Io
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAg
ICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCks
IG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAg
ICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJh
cmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRv
SW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5k
YXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5j
b25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hp
bGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAg
ICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwog
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9y
d2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU4
OCw1MCArOTU5MSwyNiBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkK
KyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExW
YWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVu
Z3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUp
OwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAg
aWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxl
bmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0
LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJh
dGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgot
ICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0g
YXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zm
c2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5n
dGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQz
MigxKSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGlu
Z1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0
aEluY2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisg
ICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQubWF4U2lnbmVkKG1fb3V0LnN1
YihjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzOworCisg
ICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9v
dXQuaW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0
aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3Io
ZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0
YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+
bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05NjkwLDY1ICs5NjY5LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlv
biBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAg
ICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50c0xlbmd0aC52YWx1ZTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1f
b3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5n
dGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1
ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNM
YXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIo
YXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBt
X291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhS
ZXN1bHQpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CisgICAgICAgIHJl
dHVybiBtX291dC5tYXhTaWduZWQobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCBtX291dC5pbnQzMlplcm8p
OwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCiAg
ICAgewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZh
dWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8
SW5saW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgTm9kZSog
YXJndW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGFyZ3Vt
ZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJn
dW1lbnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKLQot
ICAgICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVjdXJzYWJsZUxhbWJkYShbJl0o
YXV0byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAgICAgICAgICAgaWYgKHRhcmdl
dC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VsZih0YXJnZXQt
PmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IHRhcmdldC0+
Yml0VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRh
cmdldC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRW
ZWN0b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYobV9ncmFwaC52YXJB
cmdDaGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyArPSB0YXJnZXQtPmNhc3RPcGVy
YW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0LT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBw
ZW5kKGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNh
bGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKLSAgICAg
ICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbGxl
Y3RBcmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRp
bmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOwot
ICAgICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQotICAgICAgICAgICAg
bGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5n
dGgpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTk3NTksNyArOTY5MCw3
IEBAIHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0Zvcihk
YXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFk
ID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMsICZ0YXJnZXRT
dGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFs
dWUgeworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlz
LCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRl
eCkgLT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNw
cmVhZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUo
KSwgc3RvcmVJbmRleCk7CiAKQEAgLTk3OTEsOCArOTcyMiw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwog
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgTFZhbHVlIHNv
dXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJn
ZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAgICAgICAgTFZhbHVlIHNwcmVh
ZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5l
Q2FsbEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
dGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgTFZhbHVlIHNv
dXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0g
bV9vdXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTIyNDcsOCArMTIxNzksOCBA
QCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBwYWNrZXQsIG1faGVh
cHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0ciht
X291dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tl
bl9QYWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2Fk
UHRyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDApKSksIHBhY2tldCwgbV9oZWFw
cy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVl
KTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dD
aGlja2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAtMTIzMzksNyArMTIyNzEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NG
b3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXND
ZWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRy
KGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAg
ICB9CiAgICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MDQsNyArMTc1MzYs
NyBAQCBwcml2YXRlOgogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0
bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAg
ICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUlu
ZGV4LmJpdHMoKSksCi0gICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpOworICAgICAgICAgICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291
dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTIsNyArMTc2
NDQsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3Ny
RXhpdERlc2NyaXB0b3JzLmFsbG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHBy
b2ZpbGUsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFy
Z3VtZW50cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZUbXBzKCkpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODE3
LDE1ICsxNzc1MCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5t
X3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5
TWFwLm1fbG9jYWxzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgu
bV9wbGFuLm1vZGUoKSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAg
IGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2Nh
bCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAi
LCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmln
aW4pLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAm
JiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBi
eXRlY29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZh
aWxhYmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5k
YXRhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9
IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsK
ICAgICAgICAgICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkp
CkBAIC0xODEyNSwzOSArMTgwNTgsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0
LmFscmVhZHlSZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsK
ICAgICB9CiAgICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGlu
dCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFi
bGVzW29wZXJhbmRdLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNl
LCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwg
b2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBP
cGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBv
cGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihM
VmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUg
YmFzZSwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
YmFzZSwgb3BlcmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJl
c3NGb3IoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRl
ciBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCksIG9mZnNldCk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlm
IChvcGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fw
dHVyZWQsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQot
ICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRl
ciBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXls
b2FkRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIg
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRyZXNzRm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFu
ZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5k
ZXggOTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5
ODM0MDc2YThkNmY5MTc0MmNjYjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KAogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIp
OwogICAgIAogICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRz
KCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNh
blVuc2FmZUpTVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNW
YWx1ZSgpOwogICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2
YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1
ZSAmJiB2YWx1ZU9uU3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1
bWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5jcHAKaW5kZXggMDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThl
My4uMDRjODU3OTllNGQ0NjkyM2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcg
bmFtZXNwYWNlIERGRzsKIAogT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAog
ICAgIERhdGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgdmFsdWVQcm9maWxlLAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1iZXJPZkxvY2FscykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5z
aWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJv
ZmlsZURhdGFGb3JtYXQocHJvZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2
YWx1ZVByb2ZpbGUpCi0gICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZM
b2NhbHMpCisgICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMs
IG51bWJlck9mVG1wcykKIHsKIH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1
bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2Rl
QmxvY2sqIGZ0CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRh
ODdjY2YzMjczZmU0YmUzNjA2ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2
YWVjZTA5N2FkOGE0ZDFlMjdiODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCkBAIC02OSw3ICs2OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9T
UkV4aXREZXNjcmlwdG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZv
cm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxz
KTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9m
TG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgog
ICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlk
IGFuZCB3ZSdsbCBoYXZlIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgx
NzZlZTcyLi5hMzc4NDEwZGE5YjgwMTU3MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEg
QEAKICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNp
bmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIApAQCAtNDc0LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQK
IAogICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2tw
b2ludCgpKSB7CisgICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rl
c2NyaXB0b3ItPm1fdmFsdWVzLnRtcEluZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07
CisgICAgICAgIGppdC5wcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAg
ICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNv
ZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjpt
YWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAg
ICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRd
OworCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJh
bWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBj
b25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNv
ZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMo
KSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5s
aW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlu
bGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBj
YWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAg
ICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsK
KyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNj
cmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVz
IGFyZQogICAgIC8vIGFscmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsg
aW5kZXgtLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlw
dG9yLT5tX3ZhbHVlcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpOworCisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwg
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykp
CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0
YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5k
ZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpKSk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGpp
dCwgZXhpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApp
bmRleCA3ZjdjZDM4MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFi
ZDllYjNiNDcxMzM3NDRmODQzZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xv
YmFsT2JqZWN0KgogICAgICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcg
YnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8g
YWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQu
CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5
Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0
YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAg
ICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4
ZmM3ZDVkYjNhZDljZTVlOWNmLi4yYzMwNDhmYmJlMzUxODg3M2YzYWZiYjY1YjIzMzhmYTBhZDc0
NTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xNzYsNiAr
MTc2LDM4IEBAIExWYWx1ZSBPdXRwdXQ6Om5lZyhMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6TmVnLCBvcmlnaW4oKSwgdmFsdWUp
OwogfQogCitMVmFsdWUgT3V0cHV0OjptYXhVbnNpZ25lZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KQoreworICAgIGF1dG8gaXNMZWZ0R3JlYXRlciA9IGFib3ZlT3JFcXVhbChsZWZ0LCByaWdo
dCk7CisgICAgaWYgKGlzTGVmdEdyZWF0ZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBp
c0xlZnRHcmVhdGVyLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgaXNMZWZ0
R3JlYXRlciwgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptaW5VbnNpZ25lZChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQoreworICAgIGF1dG8gaXNMZWZ0TGVzcyA9IGJlbG93
T3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgaWYgKGlzTGVmdExlc3MtPmhhc0ludDMyKCkpCisg
ICAgICAgIHJldHVybiBpc0xlZnRMZXNzLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmln
aW4oKSwgaXNMZWZ0TGVzcywgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptYXhT
aWduZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKK3sKKyAgICBhdXRvIGlzTGVmdEdyZWF0
ZXIgPSBncmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOworICAgIGlmIChpc0xlZnRHcmVh
dGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gaXNMZWZ0R3JlYXRlci0+YXNJbnQzMigp
ID8gbGVmdCA6IHJpZ2h0OworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGlzTGVmdEdyZWF0ZXIsIGxlZnQsIHJpZ2h0KTsK
K30KKworTFZhbHVlIE91dHB1dDo6bWluU2lnbmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
Cit7CisgICAgYXV0byBpc0xlZnRMZXNzID0gbGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsK
KyAgICBpZiAoaXNMZWZ0TGVzcy0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdExl
c3MtPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBpc0xlZnRMZXNzLCBsZWZ0
LCByaWdodCk7Cit9CisKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUFkZChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KQogewogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAppbmRleCBjNTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1
NzBjYTJlLi45NmQzZDEzM2U4NTgxNTBmNDA2ZWQxNDIzZmFjNGRmNTVjMGE5ZDhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTE1Niw2ICsxNTYsMTEgQEAgcHVibGlj
OgogICAgIExWYWx1ZSBjaGlsbE1vZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIG5lZyhM
VmFsdWUpOwogCisgICAgTFZhbHVlIG1heFVuc2lnbmVkKExWYWx1ZSwgTFZhbHVlKTsKKyAgICBM
VmFsdWUgbWluVW5zaWduZWQoTFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtYXhTaWduZWQo
TFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtaW5TaWduZWQoTFZhbHVlLCBMVmFsdWUpOwor
CiAgICAgTFZhbHVlIGRvdWJsZUFkZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJs
ZVN1YihMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJsZU11bChMVmFsdWUsIExWYWx1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2
OTM0YzNmMGQzNzkxZjY0YmE0Mjk2M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3
YTY3MGQyNTgwNGFhOGNhZTIyYjNhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9w
ZXJhdGlvbigKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0
cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1
cm4gY2FsbE9wZXJhdGlvbih2bSwgdXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQs
IGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdk
ZDYzMWFjZDRjY2JlY2QxNGIyNGNjNWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBA
CisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50
CisgICAgYXR0cl9yZWFkZXIgOnVzZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJf
cmVhZGVyIDpuYW1lCisgICAgYXR0cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6
ZShuYW1lLCBpbmRleCwgdG1wcykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRl
eCA9IGluZGV4CisgICAgICAgIEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwg
dXNlRGVmID09IDp1c2UgfQorICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVz
ZURlZil8IHVzZURlZiA9PSA6ZGVmaW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhu
YW1lc3BhY2UpCisgICAgICAgIEVPRjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9
OgorRU9GCisgICAgZW5kCitlbmQKKworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlh
bGl6ZShvcGNvZGUsIHRtcHMsIGNoZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2Rl
CisgICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50
cy5tYXBfd2l0aF9pbmRleCB7IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhu
YW1lLCBpbmRleCwgdG1wcykgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAg
IEBjaGVja3BvaW50cy5lYWNoIGRvIHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAg
ICBFT0Y8LS0KK0JpdE1hcDxtYXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBp
dGFsaXplZF9uYW1lfSh1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3Bv
aW50KSB7CisKKyAgICB9Cit9CitFT0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL09wY29kZS5yYgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNl
YmI0ZjBhYjI0NDg1Li5jZmQ5ZGYxNTExNDdhODZkYTRiYzc1YmU0NmE2NzgyNWUyNTM3NWYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAs
NyBAQCBjbGFzcyBPcGNvZGUKICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVy
IDptZXRhZGF0YQogICAgIGF0dHJfcmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hl
Y2twb2ludHMKIAogICAgIG1vZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXpl
OjpOYXJyb3ciCkBAIC00NSwxMiArNDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAog
ICAgIGVuZAogCi0gICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdz
LCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNl
Y3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVy
cywgdG1wcywgY2hlY2twb2ludHMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAg
ICBAbmFtZSA9IG5hbWUKICAgICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBA
bWV0YWRhdGEgPSBNZXRhZGF0YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwog
ICAgICAgICBAYXJncyA9IGFyZ3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwg
aW5kZXh8IEFyZ3VtZW50Lm5ldyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFy
Z3MubmlsPworICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hl
Y2twb2ludHMubWFwIHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVj
a3BvaW50cy5uaWw/CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEy
MSw4IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVk
X25hbWV9IDogcHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVt
cHN9CisgICAgI3tjaGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAg
LTEzMiw2ICsxMzcsMTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2Rl
SURUeXBlfSBvcGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9p
bnRWYWx1ZXMKKyAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAg
WyJlbnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsg
fGNoZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAg
IG51bWJlck9mQ2hlY2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisK
KyAgICBkZWYgdGVtcHMKKyAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBb
ImVudW0gVG1wcyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwg
IiAgICAgICAgI3t0bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisK
ICAgICBkZWYgZW1pdHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2
LCBvcGNvZGVJRFR5cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRl
MzIsIG9wY29kZUlEVHlwZSwgMCkKQEAgLTIwMCw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPE9wY29kZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0
ZWNvZGVHZW5lcmF0b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0
b3IqIGdlbiN7dHlwZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7
IUBjaGVja3BvaW50cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQog
ICAgICAgICBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdl
bi0+YWxpZ25XaWRlT3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29k
ZVNpemU6OldpZGUzMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvU2VjdGlvbi5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5y
YgppbmRleCAyMDRhYzc1OWUxM2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJh
NjUwMDgwZTRjMjNjYzBlYmVjMTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24K
ICAgZW5kCiAKICAgZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2Rl
Lm5ldyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6
bWV0YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUu
bmV3KHNlbGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzpt
ZXRhZGF0YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwg
Y29uZmlnWzpjaGVja3BvaW50c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5h
bWUsIG9wY29kZXMsIGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggZjYzOTRhYzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5
NTM2YTYwMC4uMGZkNTYyYmIxYTkyYjAzNGM1ZGM4MDYzNjA5MDViNDY0ZWI1M2VhNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTUw
LDcgKzUwLDcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVi
dWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGwKICAgICBBU1NFUlQoZ2xvYmFsRXhl
Yy0+aXNEZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSk7CiB9CiAKLWJvb2wgQ2FsbEZy
YW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0Citib29sIENhbGxGcmFt
ZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jaygpKTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKQEAgLTEw
MCwxMiArMTAwLDEyIEBAIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVD
YWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiAKIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxs
U2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4Ojpmcm9tQml0cyhjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9CiAKIFNVUFBSRVNT
X0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBjb25z
dAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2FsbFNp
dGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6
OmZyb21CaXRzKHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCkBAIC0xMjMsMjggKzEyMywyOSBAQCB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVu
dFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0
ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkp
OwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NF
UlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2Nr
KCktPmJ5dGVjb2RlT2Zmc2V0KGN1cnJlbnRWUEMoKSk7ICAgICAKIH0KIAogI2Vsc2UgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMo
KSBjb25zdAogewotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsK
KyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4g
Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZz
ZXQoKSkucHRyKCk7CiB9CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IElu
c3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShjb2RlQmxvY2so
KS0+Ynl0ZWNvZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRdLnRhZygpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0cygpKTsKKyAg
ICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gY2FsbFNpdGUuYml0
cygpOworICAgIEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWduZWQgQ2Fs
bEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NF
UlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNl
dCgpKTsKLSAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICBBU1NFUlQoY2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgp
LmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKIH0KIAogI2VuZGlmCkBAIC0xNjUsOCArMTY2LDgg
QEAgQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKQogICAgICAgICByZXR1
cm4gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgfQogI2VuZGlmCi0gICAgQVNTRVJU
KGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIHJldHVybiBCeXRlY29kZUlu
ZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRl
Qml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRl
Y29kZUluZGV4KCk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAg
LTE4MCw3ICsxODEsNyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAg
ICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlm
Ci0gICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVj
b2RlT2Zmc2V0KCkpKTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0
ZWNvZGVJbmRleCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVy
bmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApp
bmRleCBjZmI3NzE4NTYwMzk5MzM5MTAwNGZjMTMyMTE4Mzg0MjNjNWRjNmE5Li4wNWY2OTE3NzQ4
OTUzMzFkOTIzMTAwMWExNWEyYzA1YWJlOGE4OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC00NiwxOCArNDYsMTggQEAgbmFtZXNwYWNl
IEpTQyAgewogICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKICAg
ICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAg
ICAgOiBtX2JpdHMoYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkKICAgICAgICAgeyB9CiAKLSAgICAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUlu
ZGV4OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRl
eDsgfQorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X2JpdHM7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAgICAg
dWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsg
fQorICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJpdHMoKSk7IH0KIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50
MzJfdCBtX2JpdHMgeyBCeXRlY29kZUluZGV4KCkuYXNCaXRzKCkgfTsKICAgICB9OwogCiAgICAg
Y2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBA
IC03OCw3ICs3OCw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBleHBlY3Rz
IGNhbGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBD
YWxsZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1
Y3Rpb24qIHJldHVyblBDOworICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1
cm5QQzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAq
IHNpemVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAgICAgc3Rh
dGljX2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNw
YWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxlckZyYW1lQW5kUEMsIHJldHVyblBDKTsgfQogICAg
ICAgICBBYnN0cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFj
dFBDKHZtLCB0aGlzKTsgfQogCi0gICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVP
ZmZzZXQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4
KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkg
Y29uc3Q7CiAKICAgICAgICAgdW5zaWduZWQgY2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdDsKQEAg
LTE4MiwxMCArMTgyLDggQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgdm9pZCBp
bml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywg
SlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZy
b20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2NrKS4KLSAgICAg
ICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVy
KTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFudAotICAgICAg
ICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIg
Zm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZp
cnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNz
ZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9j
YXRpb24uKQpAQCAtMjU0LDcgKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgdm9p
ZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8
UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5wYXlsb2FkKCkg
PSBjb3VudDsgfQogICAgICAgICBpbmxpbmUgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqKTsKICAg
ICAgICAgaW5saW5lIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVCbG9jayopOwotICAgICAgICB2b2lk
IHNldFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPih2YWx1ZSk7IH0KKyAgICAgICAg
dm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJu
UEMgPSB2YWx1ZTsgfQogCiAgICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZSgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlu
bGluZXMuaAppbmRleCBhOTdkZWNhNTNiY2UxNzkyODliMGMzODBkMDRlOGYyYTg2MDQ3N2QxLi5h
ZTM1ODk4ZmI1YzlmNDZkNWIwY2FmM2M2NWY0NzdkMzQ4MTNiOTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMy
LDI4ICszMiwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFJlZ2lzdGVyJiBDYWxs
RnJhbWU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+
Y29kZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW5kZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhd
OwotfQotCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdpc3RlciYg
Q2FsbEZyYW1lOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChp
bmRleCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhpc1tpbmRl
eF07CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWdpc3Rlcio+KCZ0aGlzLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRSZWdpc3Rlcihy
ZWcpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgUmVnaXN0
ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJl
dHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CisgICAgQVNTRVJUKCFyZWcuaXNDb25zdGFu
dCgpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgSlNWYWx1
ZSBDYWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMzYTFiZTRmNThkYWVhODA3ZTNiYWZlZjBk
NGJhMDJmZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1
Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldFRtcChz
aXplX3Qgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09
IHNpemVvZih1aW50NjRfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHRt
cHNbb2Zmc2V0XSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6
ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhw
ciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih0bXBzW29mZnNldF0pKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBzaXplb2Yo
dWludDhfdCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2Fz
dDx1aW50OF90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICB2b2lkKiBuZXh0SW5zdHJ1Y3Rpb25KdW1wVGFy
Z2V0OworICAgIHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdOworfTsKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
aW5kZXggZTdhM2QyMmJlOGNjY2IzMTJmZDExNWI3NDhhMDJlZGQ2OGZmMzUwNS4uYzEwMTMxZTcz
M2RmOThjYjZjMDNmYzJjNzgyODBjNmMzMTA0Mjk2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2lu
Y2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2lu
Y2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpTVmFsdWUgZXZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAg
ICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAg
IENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1lLT5jYWxsU2l0
ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+
Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1l
LT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVy
RnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpLlJlZ2lz
dGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxpbmtlZENvZGVC
bG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIGJvb2wg
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93
RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90CiAgICAg
fQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAgIGlmIChsZW5n
dGggPj0gbWF4QXJndW1lbnRzKQorICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKKwogICAgIGlmIChsZW5ndGggPj0gZmlyc3RWYXJBcmdPZmZzZXQp
CiAgICAgICAgIGxlbmd0aCAtPSBmaXJzdFZhckFyZ09mZnNldDsKICAgICBlbHNlCkBAIC0yNDks
NyArMjUzLDcgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwKICAgICByZXR1cm4gbGVuZ3RoOwog
fQogCi12b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1
ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQordm9pZCBsb2Fk
VmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1l
bnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGgpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMuaXNDZWxsKCkpIHx8ICFsZW5ndGgp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2MSwzMSArMjY1LDMxIEBAIHZvaWQgbG9hZFZhcmFyZ3Mo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1
YWxSZWdpCiAgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKICAgICBjYXNlIERpcmVjdEFyZ3Vt
ZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PERpcmVj
dEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PERp
cmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IFNjb3BlZEFyZ3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
anNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAg
ICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFs
T2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlwZToKICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29w
eVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNl
bGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsgCiAgICAgZGVmYXVsdDogewogICAgICAgICBB
U1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSkg
ewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAganNDYXN0PEpTQXJy
YXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZp
cnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGpzQ2FzdDxKU0Fy
cmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGggJiYgb2Jq
ZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7ICsraSkKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBvYmplY3QtPmdldEluZGV4UXVpY2ts
eShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBvYmplY3Qt
PmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGdsb2JhbE9i
amVjdCwgaSArIG9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBp
KSA9IHZhbHVlOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHZhbHVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KQEAgLTI5Nyw4ICszMDEsNyBAQCB2b2lk
IHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDYWxsRgogICAgIAogICAgIGxvYWRWYXJhcmdzKAogICAgICAgICBnbG9i
YWxPYmplY3QsCi0gICAgICAgIGNhbGxGcmFtZSwKLSAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApLAorICAgICAgICBiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCZjYWxsRnJhbWUtPnIoY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0KDApKSksCiAgICAgICAgIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwogICAg
IAogICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobGVuZ3Ro
ICsgMSk7CkBAIC01MzgsOCArNTQxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxvY2sg
PSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAogICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwot
ICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgaWYgKG1fY29kZUJs
b2NrKSB7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBjaGVja3BvaW50cy4KKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgIGlmIChtX3JldHVyblBDID09ICZjaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQpCisgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPnZtKCkuZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUobV9jYWxsRnJh
bWUpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewogICAgICAg
ICAgICAgICAgIG1faGFuZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29k
ZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgICAgICAgICAgICAgIGlm
IChtX2hhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRv
bmU7CkBAIC01NjEsNiArNTY5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2hvdWxkU3RvcFVu
d2luZGluZykKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKKyAgICAg
ICAgbV9yZXR1cm5QQyA9IG1fY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCk7CiAgICAgICAg
IHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0KIApAQCAtNTk3LDYgKzYwNiw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYg
bV9jb2RlQmxvY2s7CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgbXV0YWJsZSBj
b25zdCB2b2lkKiBtX3JldHVyblBDIHsgbnVsbHB0ciB9OwogfTsKIAogTkVWRVJfSU5MSU5FIEhh
bmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZy
YW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKQEAgLTg2Niw3ICs4NzYsNyBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNPYmplY3QqCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGds
b2JhbE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkp
KQorICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6
ZSgpICsgMSAvKiB0aGlzICovID49IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSkpOwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3Qq
IEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQo
KSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdz
LnNpemUoKSArIDEgLyogdGhpcyAqLyA+PSBtYXhBcmd1bWVudHMpKSB7CiAgICAgICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKaW5kZXggODZjMzI0NjkyMDRlOWFlNTkxMWZlY2VhOTAyYWU5N2Nh
YjU1ZDNhMC4uZmYxYjRlODYxMDRjOTYyNTk3NzllMjUyNzkyMmFmMzM0N2NmMjk0NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE3
MSw3ICsxNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heEFyZ3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFy
YXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMs
IHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7
CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpOwotICAgIHZv
aWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0Nh
bGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50
MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJB
cmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVu
dHNGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1l
KiBleGVjQ2FsbGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBkNzFhNTk3MWRkYzhmMGY1
ZWE2NzhkNWZjZTQ4ZTM5NmUyMmE4NzU0Li44MThmNGRiMmI2N2RlMzkzYTE3OTg0ZGQ1MDY4YTg0
MmQyMWZiMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpy
ZWFkSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1f
ZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJ
bnQzMigpOworICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51
bmJveGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBTdGFj
a1Zpc2l0b3I6OkZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwg
V1RGOjpGdW5jdGlvbjwKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiAhaXNJbmxpbmVkKSB7CiAg
ICAgICAgICAgICBpbmRlbnQrKzsKIAotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNp
dGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+
Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKSB7CiAgICAgICAgICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CiAgICAg
ICAgICAgICAgICAgb3V0LnByaW50KGluZGVudCwgYnl0ZWNvZGVJbmRleCwgIiBvZiAiLCBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXgg
YzhkZjIwMGI5ODFmZjgyNmE1MmVmMDY3MGVjN2RlZWRjYmZmNjk2ZS4uYzNlOGQwYzNkYTExM2Q5
OWFjMGM4ZGY0MDE1OTg5YjI5MGQ2OTM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpqaXRBc3NlcnRJc051bGwoR1BSUmVnIGdwcikKIAogdm9pZCBBc3NlbWJseUhlbHBl
cnM6OmppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCkKIHsKLSAgICBKdW1wIG9rID0gYnJhbmNo
MzIoQmVsb3csIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIFRydXN0
ZWRJbW0zMigxMDAwMDAwMCkpOworICAgIEp1bXAgb2sgPSBicmFuY2gzMihCZWxvdywgcGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBUcnVz
dGVkSW1tMzIoMTAwMDAwMDApKTsKICAgICBhYm9ydFdpdGhSZWFzb24oQUhJbnNhbmVBcmd1bWVu
dENvdW50KTsKICAgICBvay5saW5rKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMjIwMDljNWZkMmJhMjI3ZDQ3Y2ZlODU0OTM5ZjUy
ZGVmMmQ3MWJjMi4uNTg3MDdmYTg0M2NkZGU4NzI1Y2E3MjhiODhjMTEzZjhhOTFmMjIxYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xMTQ4LDkg
KzExNDgsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFs
aWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0g
ICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRk
cmVzcyBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRh
Z0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAg
LTExNjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0
ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBU
YWdPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQp
CisgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7
CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0Zv
cihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVz
cyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNl
R1BSKQpAQCAtMTE3OCw5ICsxMTgwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1
YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSArIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2Fk
Rm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgp
KTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCmluZGV4IDg0ODVhOWZi
ZDY4M2RiZWY2NThmNjcwODgxM2Y3NThkNWRkYjk4ZDEuLmIzZjBlMTY5MmMwZGFiYTc5OTU2ZTFl
NTExOTk4YjlmMjlkMmQ3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2MKICAgICBz
dG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9G
KENhbGxlckZyYW1lQW5kUEMsIGNhbGxlckZyYW1lKSksIHNjcmF0Y2gxKTsKICAgICBzdG9yZVB0
cihzY3JhdGNoMSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNhbGxlckZyYW1lKSkpOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpLCBzY3JhdGNoMSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgc2NyYXRjaDEpOwogICAg
IHN0b3JlUHRyKHNjcmF0Y2gxLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwogICAgIHN0b3JlUHRyKHNjb3BlLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgc2NvcGUpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMTdjMGVkYWE4
MmI5Zjk0ZjU3NDEzMTEwNjFhNjUxMjk0YTUxNmY4NS4uYjY2MTI3YTRmYjFlY2JjNmYxNDkyMTdi
YzAwM2UxMDJlMTdhZTU3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNzU1LDcg
Kzc1NSw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayk7CiAKLSAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCksIHJlZ1QxKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgcmVnVDEpOwogICAgICAgICBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
MjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEy
YTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0z
MzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwog
ICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAg
dm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3Rlciwg
RlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJW
YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lz
dGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJz
CiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBz
Y3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVk
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRv
IHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAt
NDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9i
amVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOwor
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
SlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5k
Q29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwg
aW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9h
ZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBl
bWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdp
c3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
KGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQg
aW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAg
dm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGlu
ZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFs
UmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2Vs
bCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2
b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7
CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
aW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50
aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBl
cywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3Ax
SXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxS
ZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2
b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBm
YWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25s
eSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1
NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZC
b3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdp
c3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3Rl
cklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRj
aGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAg
ICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50
aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lz
dGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24p
OwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3
OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAg
ICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCAr
Njg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9h
ZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQs
IEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lk
IGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsK
KyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQg
ZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNT
ZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50
IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEz
ICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAg
ICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0
dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBw
cmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZv
aWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVh
bFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0
ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5
ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwot
ICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRp
b24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNv
bnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0
aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAg
LTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9u
LT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxp
bmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3
LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2lu
Yyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTks
NyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEg
PSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJz
IGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1Qw
ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0Qmlu
YXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9p
ZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRu
b3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hp
ZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5l
Zml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0
LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9u
LCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4
NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklU
OjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVh
YzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIo
cmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMu
b2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZy
ZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJl
ZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3
ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0
ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQK
IHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUu
bV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYx
NmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAs
NyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFM
b2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNv
ZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
V1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0No
aWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLjdi
YzE0ZTgzNWFkMWFkMWRkNjczZmNhNTA2OTY4MGUyNTVmYmM5YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJ
bnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChp
bnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNT
RVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTEwOSw3ICsxMTAsNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhbWUoKQogI2Vsc2UKICAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygp
OwogI2VuZGlmCi0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
Mihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHRoYXQg
dGhpcyBpcyBuZWVkZWQuIEpJVE9wZXJhdGlvbnMgdGVuZCB0byB1cGRhdGUgdGhlIHRvcCBjYWxs
IGZyYW1lIG9uCiAgICAgLy8gdGhlIEMrKyBzaWRlLgpAQCAtMTQzLDcgKzE0NCw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
LCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
ZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xNTUsNyArMTU2LDcgQEAgQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEpOwpAQCAtMTY3LDkgKzE2OCw5IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiAgICAg
cmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIGludCB2UmVn
KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQorICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUocmVnKSkKICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yODQsOSArMjg1LDkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6c2FtcGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQogI2VuZGlmCiAjZW5k
aWYKIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBz
cmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVh
bFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBh
c1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7
CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSkt
Pmxlbmd0aCgpID09IDE7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKQEAgLTM2MywyNiArMzY0LDI2IEBAIGlu
bGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9m
aWxlKQogICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCi1BTFdBWVNfSU5MSU5FIGludDMy
X3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgaW50
MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewog
ICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitB
TFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0Rv
dWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKGlu
dCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRk
cmVzc0Zvcihkc3QpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsK
KyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0
YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzkwLDkgKzM5MSw5IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoaW50IGluZGV4
LCBSZWdpc3RlcklEIHRhZykKICAgICBsb2FkMzIodGFnRm9yKGluZGV4KSwgdGFnKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBh
eWxvYWQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBSZWdpc3RlcklEIHBheWxvYWQpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewog
ICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkucGF5bG9hZCgpKSwg
cGF5bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MDYsMTM2ICs0MDcsMTMzIEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKICAgICBtb3ZlKEltbTMyKHYudGFnKCkpLCB0YWcpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBz
cmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXQoVmly
dHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRMb2FkKHNyYywg
ZHN0LnRhZ0dQUigpLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRTdG9yZShkc3QsIGZyb20u
dGFnR1BSKCksIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lz
dGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKIAogICAgIGlmIChiYXNlID09
IGNhbGxGcmFtZVJlZ2lzdGVyKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBheWxvYWQgIT0g
YmFzZSk7Ci0gICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9hZCk7Ci0gICAgICAg
IGVtaXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICBlbWl0TG9hZFBheWxvYWQocmVnLCBw
YXlsb2FkKTsKKyAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07CiAgICAgaWYg
KHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCi0gICAgICAgIGxvYWQz
Mih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
dGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7CisgICAgICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNl
KSwgdGFnKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQs
IGJhc2UpLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7
CisgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7CisgICAgbG9hZDMy
KHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
MihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBp
bmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklEIHRhZzEsIFJl
Z2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3RlcklEIHRhZzIs
IFJlZ2lzdGVySUQgcGF5bG9hZDIpCiB7Ci0gICAgZW1pdExvYWQoaW5kZXgyLCB0YWcyLCBwYXls
b2FkMik7Ci0gICAgZW1pdExvYWQoaW5kZXgxLCB0YWcxLCBwYXlsb2FkMSk7CisgICAgZW1pdExv
YWQocmVnMiwgdGFnMiwgcGF5bG9hZDIpOworICAgIGVtaXRMb2FkKHJlZzEsIHRhZzEsIHBheWxv
YWQxKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBv
b2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihp
bmRleCksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVl
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4
LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0Rv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgY2hhciogYnl0ZVBvaW50ZXIgPSByZWludGVy
cHJldF9jYXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOwogICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJl
Z2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsK
LSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3Rv
cmUzMih0YWcsIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMih0YWcsIHRhZ0ZvcihyZWcsIGJhc2Up
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRT
dG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBp
bmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7
CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJ
c0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJ
bnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgVHJ1
c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQ2VsbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCiB7
Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihw
YXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0NlbGwpCi0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoaW5kZXgpKTsK
KyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0Zvcihy
ZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQoraW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBp
bmRleElzQm9vbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsK
KyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElz
Qm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
b29sZWFuVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
IHsKLSAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihpbmRleCkpOworICAgIHN0b3Jl
RG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFz
ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0
IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGFyZ2V0IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnBheWxvYWQo
KSksIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFu
dC50YWcoKSksIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0
YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0z
Mihjb25zdGFudC50YWcoKSksIHRhZ0ZvcihyZWcsIGJhc2UpKTsKIH0KIAotaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4
KQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRl
KHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJl
Zy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1
YWxSZWdpc3RlckluZGV4KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90
SlNDZWxsKHJlZykpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZykK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQor
ICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbCh0YWcpKTsKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRP
cGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29u
c3RhbnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYg
Y29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAg
ICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CkBAIC01NTUs
MTEgKzU1MywxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdAogI2Vsc2UgLy8gVVNFKEpTVkFM
VUUzMl82NCkKIAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBh
cnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdp
c3RlcklEIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CkBAIC01NzEsNDcgKzU2OSwz
MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBz
cmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyksIGRzdCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNy
YywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
Lm9mZnNldCgpLCBkc3QpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0
ZXJJRCBkc3QyKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVy
IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIGRzdDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxS
ZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdp
c3RlcklEIGRzdDIpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMS5vZmZzZXQo
KSwgZHN0MSwgc3JjMi5vZmZzZXQoKSwgZHN0Mik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVy
biBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lzdGVySUQgZnJvbSkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVz
c0Zvcihkc3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVn
cyBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBmcm9tLnBheWxvYWRH
UFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQotewotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKLX0KLQogQUxXQVlTX0lOTElORSBK
SVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJRCByZWcxLCBSZWdp
c3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0
Y2gpOwpAQCAtNjI5LDI4ICs2MTIsMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWcpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJlZykKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJl
ZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bk5vdEltbWVkaWF0ZSh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBG
UFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQ
b29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3Io
aW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRl
eCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9E
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAg
IEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChpbmRleCkpOwotICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLmFzSW50MzIoKSksIHZh
bHVlKTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBBU1NFUlQoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocmVnKSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChyZWcpLmFzSW50MzIoKSksIHZhbHVlKTsKICAgICB9IGVsc2UK
LSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsK
KyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJsZUp1
bXBJZk5vdEludChSZWdpc3RlcklEIHJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IDdjZmEwOTVmMDBkMTdlMTQxMWJlOWNmYjgwZjgwODA2Zjc4OGY2YzEu
LjQ2MTdlZTI5NGIxNGZlZjEyNDg4ODQ0MWRmZDk0NTEwMzY1YWE1ZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNTYsMTAgKzU2LDEwIEBAIG5hbWVzcGFj
ZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BNb3Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fc3JjOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlz
TnVtYmVyKCkpCiAgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0
b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJ
bml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CiB9CiAKQEAgLTEyMCw3ICsx
MjAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBi
eXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVl
ID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0
b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0
YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKQEAgLTE1NSw5ICsxNTUs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdp
c3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCiAgICAgLy8gTG9hZCB0aGUgb3Bl
cmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lz
dGVycy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBk
b25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3Vs
dC4KQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2lu
c3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIApAQCAtMjA0LDggKzIwNCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikK
IHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc0VtcHR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CkBAIC0yNDYsOCArMjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogCkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
dW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzQm9vbGVhbj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOwpAQCAtMjc0LDggKzI3NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jv
b2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CkBAIC0yODYsOCArMjg2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxs
X3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBSZXR1cm4gdGhl
IHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNDMsOCAr
MzQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2MCwxNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKIAogICAgIC8v
IEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBh
cyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNsZWFyIG90aGVyIHRo
YW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlu
cHV0cyByZXNwZWN0aXZlbHkpLgpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTM5MCwxNCArMzkwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2pm
YWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFO
dWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBAIC00NDUsNyAr
NDQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ1Nyw3ICs0NTcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpudW5kZWZpbmVkT3JOdWxsPigpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NzAsOCArNDcw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFQdHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV92YWx1ZTsKKyAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3Rh
bnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VSVChzcGVjaWFs
UG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIApAQCAtNDg1LDE4
ICs0ODUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5v
ZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OwogfQpAQCAtNTEwLDI2ICs1MTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
eXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTM5LDcgKzUzOSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJv
dz4oKTsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CkBAIC01NDgsOSArNTQ4LDkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwg
cmVnVDAsIHNyYzIsIHJlZ1QxKTsKICAgICAKQEAgLTU5Miw4ICs1OTIsOCBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIENvbXBpbGVPcAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTY1MCw4ICs2NTAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAgICAgCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKQEAgLTY2NCw4ICs2NjQsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC02ODQsMjAgKzY4NCwyMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvU3RyaW5nPigpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOwpAQCAtNzI4LDEwICs3MjgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywg
Vk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlv
bk9mZnNldCgpKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2Vw
dGlvbi5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4
Y2VwdGlvbik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0aW9uOjp2YWx1ZU9m
ZnNldCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90
aHJvd25WYWx1ZS5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Rocm93blZhbHVlKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJWE1FOiBj
b25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGlu
Y2x1ZGluZwpAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFu
ZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBp
ZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFz
Qml0cygpKTsKICAgICBlbHNlCkBAIC03NDksNyArNzQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50
cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhy
ZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVy
YW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nh
c3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpAQCAtNzY2LDEwICs3NjYsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKikKIHZv
aWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIGludCBjdXJyZW50U2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBi
eXRlY29kZS5tX3Njb3BlOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3Bl
LCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
LCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwogICAgIHNpemVf
dCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1
bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZh
dWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9z
Y3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSog
anVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBA
IC03OTQsNyArNzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXgg
PSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwot
ICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAm
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgxMSw3ICs4MTEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29k
ZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2ln
bmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgzNCw4ICs4MzQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKQEAgLTg2Nyw4ICs4NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC05MDMsNyArOTAzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogICAgIC8vIG9iamVjdCBsaWZldGlt
ZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVC
bG9jay0+bnVtVmFycygpOwogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2op
Ci0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zm
c2V0KCkpOworICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGopKTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC05MTMsNyAr
OTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRTY29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdU
MCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAgLTkyNCw3ICs5MjQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1Ro
aXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2Fj
aGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ny
Y0RzdC5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSk7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgY2Fs
bGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiog
Y2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJ
RCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7
CkBAIC05NjUsMTMgKzk2NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4KEFkZHJlc3Moc3Ry
dWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVn
KTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVn
KTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
fQogCkBAIC05ODUsNyArOTg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC05OTYs
NyArOTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7
CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDI0LDEwICsxMDI0LDEwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5t
X2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29u
c3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEp
OwpAQCAtMTEwNCw4ICsxMTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGUKIHZvaWQgSklU
OjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Jl
Z2V4cD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0
ZWNvZGUubV9yZWdleHA7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTExMTUsMTIgKzExMTUsMTIgQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUu
b2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCkBAIC0xMTYx
LDExICsxMTYxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdG
dW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCk7CkBAIC0xMjA3LDEwICsxMjA3LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZXNJ
bmRleCA9IGJ5dGVjb2RlLm1fYXJndi5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0
ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOwogfQpAQCAtMTIxOSw4ICsx
MjE5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVu
Z3RoLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLApAQCAt
MTIzNiw5ICsxMjM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFz
U3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAt
MTI4Miw5ICsxMjgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAgICAgCkBAIC0xMzMwLDkgKzEz
MzAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0lu
ZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAogICAgIExhYmVsIHNsb3dQYXRo
ID0gbGFiZWwoKTsKQEAgLTEzNDksMTAgKzEzNDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24KIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOwotICAgIGludCBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM5MCw5ICsxMzkwLDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0MTQsOSArMTQxNCw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5l
cmljUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGlu
dCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDQw
LDcgKzE0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlw
ZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247Ci0gICAgaW50IHZhbHVlVG9Qcm9m
aWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXI7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdU
MCk7CiAKQEAgLTE1MDksNyArMTUwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0CiAgICAg
R1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFy
Z3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJl
Zywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTE1MjMsOCArMTUy
Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0g
bm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJl
Z1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVn
LCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpKTsKIH0KIApAQCAtMTU0NSw4ICsxNTQ1LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBsb2FkMzIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29B
dmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CiAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7
CkBAIC0xNTU2LDkgKzE1NTYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVu
Z3RoPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1z
VG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CisgICAgbG9hZDMy
KHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAg
emVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBh
cmFtc1RvU2tpcCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsK
QEAgLTE1ODYsNyArMTU4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJl
Z1QwKTsKQEAgLTE1OTQsOSArMTU5NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QyKTsKKyAgICBsb2FkMzIocGF5
bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBy
ZWdUMik7CiAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsK
KyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCiAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNhODEz
NmVjYWMxYjY0MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1
MWZlYmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAg
aWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5h
c0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMp
OwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAg
ICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
JiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7
CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCBy
ZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFs
dWVQcm9maWxlJj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0Mzkz
ZC4uOGNiNTVmYjViN2VmODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4
IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZN
KiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6
ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5zaWdu
ZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVz
ID0gMDsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBudW1WYXJzV2l0
aFZhbHVlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0aW9u
YWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG51bVZhcnNXaXRoVmFsdWVzKTsKKworICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVl
Pj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dp
dGhWYWx1ZXMsIDApOwogICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0gc3Rh
dGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhh
bmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5k
SXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwg
bG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxs
ZWVTYXZlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11c3RIYW5k
bGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwor
ICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihv
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNl
bWVudCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAg
ICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAg
bWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVl
OjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVl
KCkpOwogICAgIH0pOwogCkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBz
Y29wZQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
ICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29w
ZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3Bl
UmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9IHNj
b3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rvciwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2Fz
dDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpKS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+
KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwogICAg
IEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
Z2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENs
b3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSW5zdHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jayk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganND
YXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpz
VmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3Zh
bHVlKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1f
Z2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSBy
ZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2MyOGJl
OGM0ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogewogICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsK
IApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIw
OCw3ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNlIENv
bnRpZ3VvdXNTaGFwZToKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdy
aXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUsNyAr
MjM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQog
ewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFi
ZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRo
aXMpOwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0
QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgLy8g
cHJvcGVydHk6IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAotICAgIGludCBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRl
bnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dD
YXNlcyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1p
dFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAg
ICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1
dF9ieV92YWxfZGlyZWN0OwotICAgIGludCBiYXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAgICBp
bnQgdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9
IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsK
LSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAgaWYg
KGlzRGlyZWN0KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmlidXRl
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
Zmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwot
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0Pigp
OwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpA
QCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNE
aXJlY3QpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBT
dHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBA
IC02MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0g
ICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgr
K107CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVj
dGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGlu
dCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCit2
b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVw
dGgpCiB7CiAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAsOCAr
NjcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFk
YXRhLm1fbG9jYWxTY29wZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBz
Y29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQg
SklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BS
UmVnIHJlZykKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRD
bG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdl
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSAr
IG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBt
ZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCog
b3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29w
ZXJhbmQpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5k
LCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2b2lk
IEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0
Y2hwb2ludFNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5
MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdU
MSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0
UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0
ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZS5zbG90KCk7CkBAIC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVu
dHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAg
ICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIGludCBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93
bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBA
IC0xMTUwLDggKzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNp
Z25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENl
bGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVy
TW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsK
QEAgLTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJh
eVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChp
c0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1MDEs
NyArMTUwMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0KHR5
cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJm
MzM5MGE2YzdkYjI4NmE1YzEuLjY5OTg3NjljNThiMDBjMGJhY2M1YzkyZjFkNDc2YWE1N2UzNTMz
MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1
LDEyICs0NSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAg
ICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVy
SW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2Fk
SW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAg
ICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVy
SW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIGlu
bGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXls
b2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgZHN0KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmly
dHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpT
Q2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBKdW1w
IGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNlbmRpZgogCiAgICAgICAg
IHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklE
IHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC02NCwzNiArNjQs
MzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpT
Q2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQor
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRK
U0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2Fk
KQogICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4
KSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFs
UmVnaXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7
Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5v
dEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwog
ICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6
ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
IGRzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdp
c3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0
cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0
ZXJJbmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgQVNT
RVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAgIHJl
dHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFj
ZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVh
bFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAg
ICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAg
ICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAg
ICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KTsKKyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAg
ICAgICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAg
ICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7
CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsK
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAgLTEwMSwy
MyArMTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRK
U0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAg
ICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRz
dCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAg
ICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0gICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAg
ICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAg
IGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIEp1bXAg
bm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRv
UHRyKGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAotICAgIGlu
bGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUo
dW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVy
SUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVn
aXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChh
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWQ2
NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5v
dE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdElu
dCA9IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHNjcmF0Y2gsIGRzdCk7CkBAIC0xMzcsMjQgKzEzNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOworICAg
ICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpOwog
I2Vsc2UKLSAgICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5KSk7CisgICAgICAg
IHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7CiAjZW5k
aWYKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KQogICAgIHsKLSAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAg
ICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKGVudHJ5KSkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGlu
dCBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwotICAgICAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7
CisgICAgICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkp
KSk7CiAjZWxzZQotICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAg
ICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsK
ICNlbmRpZgogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
cGVjaWFsaXplZFRodW5rSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaAppbmRleCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEzZGYzNmE3MjQ5YjZj
MzQzLi45ZTNkNzYzM2Y5ZWNhMWE0MjZlYTE5ZTVkOGU5Mjk4NTMyNWQ5ZThiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNDMsNyAr
NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KCk7CiAgICAgICAgICAgICBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwog
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2Yg
YXJndW1lbnRzCi0gICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgVHJ1c3RlZEltbTMy
KGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOworICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkQXJnQ291bnQgKyAxKSkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBleHBsaWNpdCBTcGVjaWFsaXplZFRodW5r
SklUKFZNJiB2bSkKQEAgLTU1LDEzICs1NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgbG9hZERvdWJsZUFyZ3VtZW50KGludCBhcmd1bWVudCwgRlBSZWdpc3Rl
cklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1
bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZERvdWJsZShzcmMs
IGRzdCwgc2NyYXRjaCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRD
ZWxsQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCkKICAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExv
YWRKU0NlbGwoc3JjLCBkc3QpKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTczLDcgKzczLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRJbnQzMkFyZ3Vt
ZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZhaWxUYXJnZXQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIGZhaWxUYXJnZXQgPSBl
bWl0TG9hZEludDMyKHNyYywgZHN0KTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA1MjQxZTVmN2NjMzMy
YTY0ZTBkZTZkYjQ0YmRhZjllOGU4MGYyMmFhLi5hZGE0NTk2YjFiNDg4M2I3NDA3MzU1OWM0NjU2
MDdkOTQxNGI3NjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCkBAIC00MDEsNyArNDAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDMsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKICNlbmRpZgogICAgIGpp
dC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QzKTsKLSAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsK
KyAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVu
dEdQUjIpOwogICAgIGppdC5hZGQzMihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BS
Mik7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBleHRyYSBzbG90cyB3ZSBjYW4g
dXNlCkBAIC00NjIsNyArNDYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQucmV0KCk7CiAjZWxzZSAv
LyBVU0UoSlNWQUxVRTY0KSBzZWN0aW9uIGFib3ZlLCBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9u
IGJlbG93LgogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlciwg
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjph
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBKU0ludGVyZmFjZUpJVDo6
YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIEpTSW50ZXJm
YWNlSklUOjphcmd1bWVudEdQUjIpOwogICAgIGppdC5hZGQzMihKU0ludGVyZmFjZUpJVDo6VHJ1
c3RlZEltbTMyKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgSlNJbnRlcmZhY2VK
SVQ6OmFyZ3VtZW50R1BSMik7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBleHRy
YSBzbG90cyB3ZSBjYW4gdXNlCkBAIC0xMDMyLDggKzEwMzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFic1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKICAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICB1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCk7Ci0gICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDApOworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKICAgICBhdXRvIG5vdEludGVnZXIgPSBqaXQuYnJh
bmNoSWZOb3RJbnQzMihHUFJJbmZvOjpyZWdUMCk7CiAKICAgICAvLyBBYnMgSW50MzIuCkBAIC0x
MTM2LDggKzExMzYsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJv
dW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdgogICAgIGppdC5lbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOwogICAgIAogICAgIC8vIFNldCB1cCBvdXIgY2FsbCBmcmFtZS4KLSAg
ICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7Ci0gICAgaml0
LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsKKyAgICBqaXQu
c3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAKICAg
ICB1bnNpZ25lZCBleHRyYVN0YWNrTmVlZGVkID0gMDsKICAgICBpZiAodW5zaWduZWQgc3RhY2tN
aXNhbGlnbm1lbnQgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgJSBzdGFja0FsaWdubWVudEJ5
dGVzKCkpCkBAIC0xMTU4LDcgKzExNTgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdgogICAg
IC8vCiAgICAgLy8gVGhhdCdzIHJlYWxseSBhbGwgdGhlcmUgaXMgdG8gdGhpcy4gV2UgaGF2ZSBh
bGwgdGhlIHJlZ2lzdGVycyB3ZSBuZWVkIHRvIGRvIGl0LgogICAgIAotICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgR1BSSW5mbzo6
cmVnVDEpOwogICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycyksIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmxzaGlmdDMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0
LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAt
IDEpLCBHUFJJbmZvOjpyZWdUMik7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSYgdgogICAgIAogICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOwogICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVn
VDIpOwotICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhl
bHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVTdGFja1NwYWNl
ID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgQ0NhbGxIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86
OnJlZ1QyKTsKIAogICAgIC8vIFRocm93IFN0YWNrIE92ZXJmbG93IGV4Y2VwdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAppbmRleCA5NTFkNzY5ZDY5MjQ5YmYz
YWM5OGY0NDA4MzQxZjY1MTAyYTk1NWMxLi5hZmVlY2JhYzA3YjFlYjE3MGVkNmQ0NDY1NTA4MjU3
ZGE3NjUxYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRD
b21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaApA
QCAtMjksNyArMjksNyBAQAogLy8gLSBQcmludHMgZXZlcnkgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQg
aWYgT3B0aW9uczo6dHJhY2VMTEludEV4ZWN1dGlvbigpIGlzIGVuYWJsZWQuCiAvLyAtIFByaW50
cyBzb21lIGluZm9ybWF0aW9uIGZvciBzb21lIG9mIHRoZSBtb3JlIHN1YnRsZSBzbG93IHBhdGhz
IGlmCiAvLyAgIE9wdGlvbnM6OnRyYWNlTExJbnRTbG93UGF0aCgpIGlzIGVuYWJsZWQuCi0jZGVm
aW5lIExMSU5UX1RSQUNJTkcgMAorI2RlZmluZSBMTElOVF9UUkFDSU5HIDEKIAogLy8gRGlzYWJs
ZSBpbmxpbmUgYWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgaXMgZ3JlYXQgaWYg
eW91J3JlIGNoYW5naW5nCiAvLyBob3cgdGhlIEdDIGFsbG9jYXRlcy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDM1N2E0NmU4ZTU3ODk3
ZjI3ODVjZDMzOWZjYmUyYmMwYzkwY2VkYjIuLjhmY2M1ZGI4ZDgzOGI5MjIyMWIxNzJlODlhN2M4
MzJlMDJjNmYwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRs
aW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBM
TEludCB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBc
CiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5vbkNv
bnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVy
JiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQo
KSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+cihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5v
bkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7
IH0KK2lubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZCkuanNWYWx1
ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAg
ICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAg
IFwKQEAgLTE1NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJp
Y0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgQ2Fs
bEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5dGVjb2RlLm1fYXJndjsKICAgICAK
ICAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUu
bV9hcmdjKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNh
bGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwogICAgIAogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKQEAgLTE2ODksNyArMTY5MCw3
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRz
RnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0
T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgdm0udmFyYXJnc0xlbmd0
aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBj
YWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNW
YWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3Vy
cmVudFZQQyhwYyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBD
YWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7CkBAIC0xNzI1LDcgKzE3MjYs
NyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGNhbGxlZUZy
YW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNr
ZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZy
YW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9
IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldFJldHVyblBDKHJldHVyblBvaW50
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVs
bHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE5MzAsNyArMTkz
MSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRh
ZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVu
Y29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7
CiAgICAgfSk7CiAKQEAgLTE5NjEsMTEgKzE5NjIsMTIzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+CitzdGF0aWMgdm9pZCBoYW5kbGVWYXJh
cmdzQ2hlY2twb2ludChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNp
ZGVTdGF0ZS5nZXRUbXA8SlNWYWx1ZT4oT3Bjb2RlOjphcmdDb3VudCkuYXNVSW50MzIoKTsKKwor
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5maWxsKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBidWZmZXIpIHsKKyAgICAgICAgbG9h
ZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2Fy
Z3VtZW50cykuanNWYWx1ZSgpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwor
ICAgIH0pOworICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQoKSkgeworICAgICAgICB0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisg
ICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6b3Bjb2RlSUQgIT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVy
YW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwg
Ynl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXN1
bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNv
ZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUp
LCBhcmdzLCAiIik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7Cit9CisK
K2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCit7CisgICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAg
ICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPigq
cGMubmV4dCgpLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0Qnl0ZWNv
ZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgIEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsK
KyAgICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4
dEJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dEJ5dGVjb2RlLmV4
ZWN1dGFibGVBZGRyZXNzKCksIDApOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2No
ZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBz
bG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkKK3sKKyAgICAvLyBTaW5j
ZSBhbGwgb3VyIGNhbGxpbmcgY2hlY2twb2ludHMgZG8gcmlnaHQgbm93IGlzIG1vdmUgcmVzdWx0
IGludG8gb3VyIGRlc3Qgd2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJlIGFuZCByZXR1cm4uCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2
bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1l
KTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2Rl
SW5kZXg7CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENhbGxWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6
OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3RfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9w
Q29uc3RydWN0VmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIG9wX3RhaWxfY2FsbF92YXJhcmdzIHNob3VsZCBu
ZXZlciByZXR1cm4gaWYgdGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5nIHdhcyBpbmxpbmVkLgorICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2Rl
QmxvY2ssIHBjKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRo
X2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOworZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRl
U3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKTsKKworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVj
b2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0
Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBoYW5kbGVW
YXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENh
bGxWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQo
dm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigp
LCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczoKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYy5uZXh0KCktPm9wY29k
ZUlEKCkgPT0gb3BfcmV0LCAiV2Ugc3Ryb25nbHkgYXNzdW1lIGFsbCB0YWlsIGNhbGxzIGFyZSBm
b2xsb3dlZCBieSBhbiBvcF9yZXQuIik7CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50
KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigp
LCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hO
ZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKIGV4dGVybiAiQyIgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9D
YWxsRnJhbWUqIHByb3RvRnJhbWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+
dG9wQ2FsbEZyYW1lOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
Ci0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICBpZiAo
Y2FsbEZyYW1lKQogICAgICAgICBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKnZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgK
aW5kZXggZmNhZjgwZGExY2I1YzQ2YzUwZWU3ZjdmNTgwNTMzZjdmNTNjZTA0MS4uY2Q0NWFmMTBi
MzEzYTkxNmIwZDNlZWMwYmRiYTE2ZWNmOGZkOGFiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmgKQEAgLTM2LDYgKzM2LDggQEAgdHlwZWRlZiBpbnQ2NF90IEVu
Y29kZWRKU1ZhbHVlOwogZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRv
SmF2YVNjcmlwdCh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOwogICAgIEVuY29kZWRKU1Zh
bHVlIHZtRW50cnlUb05hdGl2ZSh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOworICAgIHZv
aWQgY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KCk7CisgICAgdm9pZCBjaGVja3BvaW50
X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQoKTsKIH0KIAogaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIHZtRW50cnlUb1dhc20odm9pZCogY29kZSwgVk0qIHZtLCBQcm90b0NhbGxG
cmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KaW5kZXggZTE3MzRkY2Y2MWI0Y2ZjNTUxMmZhMjg1NjAxYmNhYjMw
Yzg4ZjJlNC4uMGI5ZTNkZjg2Mjc1OTgyN2M0MTcyMzBlZDJkY2RkZjFlNWM5MmMwMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBv
aW50KG9wTmFtZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JFeGl0UmV0dXJuTGFiZWwob3BOYW1lLCBz
aXplKQogCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCi0gICAgbG9hZGkgQXJn
dW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRpIExMSW50UmV0dXJuUENb
Y2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVByb2ZpbGUob2Zmc2V0LCBjZWxsQW5kSW5kZXhp
bmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4MzksMTMgKzE4MzksMTcgQEAgZW5kKQog
Y2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFj
cm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCittYWNybyBi
cmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QzXSwgdDMKICAgICBidHB6IFZNOjpt
X2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0aW9uOgorLm5vRXhjZXB0aW9uOiAgICAKK2Vu
ZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwg
ZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAgICBjYWxs
U2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhy
b3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGluIHIxCiAg
ICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0xOTk5LDYgKzIwMDMsMjIg
QEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3Jv
ICgpCiAgICAgaW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKEludGVybmFsRnVuY3Rpb246
Om1fZnVuY3Rpb25Gb3JDb25zdHJ1Y3QpCiBlbmQpCiAKK2lmIG5vdCBDX0xPT1AgYW5kIG5vdCBD
X0xPT1BfV0lOCisgICAgZ2xvYmFsIF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9j
YWxsX2VudHJ5cG9pbnQKKyAgICBfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2Fs
bF9lbnRyeXBvaW50OgorICAgICAgICBtb3ZlIHIwLCBhMgorICAgICAgICBjYWxsU2xvd1BhdGgo
X3Nsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKQorICAgICAg
ICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGlu
ZSkKKyAgICAgICAgam1wIHIwCisKKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50
cnlwb2ludAorICAgIF9jaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQ6CisgICAgICAgICMg
RklYTUU6IFdlIGNhbiBwcm9iYWJseSBkaXNwYXRjaCB0byB0aGUgY2hlY2twb2ludCBoYW5kbGVy
IGRpcmVjdGx5IGJ1dCB0aGlzIHdhcyBlYXNpZXIgCisgICAgICAgICMgYW5kIHByb2JhYmx5IGRv
ZXNuJ3QgbWF0dGVyIGZvciBwZXJmb3JtYW5jZS4KKyAgICAgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xs
aW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMAorZW5k
CiAKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBk
b24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBh
cmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpp
bmRleCAzZGQyZWI0OGNiYmE2ZWY1Y2Q5ODg2MzljNzkxMWUyMmE3MTMzMTQ4Li5iZGUwMmM2MzRi
MDk4MmFkOWEzMmM0ZTQ4NGVmM2NhZjczMDdiN2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIs
MTcgQEAgbWFjcm8gbmV4dEluc3RydWN0aW9uV2lkZTMyKCkKICAgICBqbXAgW3QxLCB0MCwgUHRy
U2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAorbWFjcm8gc3RvcmVQQygpCisgICAgbHNoaWZ0
aSBjb25zdGV4cHIgQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0LCBQQworICAgIHN0b3Jl
aSBQQywgTExJbnRSZXR1cm5QQ1tjZnJdCisgICAgcnNoaWZ0aSBjb25zdGV4cHIgQnl0ZWNvZGVJ
bmRleDo6Y2hlY2twb2ludFNoaWZ0LCBQQworZW5kCisKK21hY3JvIGxvYWRQQygpCisgICAgbG9h
ZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQworICAgIHJzaGlmdGkgY29uc3RleHByIEJ5dGVjb2Rl
SW5kZXg6OmNoZWNrcG9pbnRTaGlmdCwgUEMKK2VuZAorCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJv
dyhvcGNvZGVTdHJ1Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bj
b2RlU3RydWN0JV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZApAQCAtOTIs
NyArMTAzLDcgQEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBj
bGFpbWluZyBpbnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRl
ckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENv
dW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZFBDKCkKICAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRl
cltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzkw
LDcgKzQwMSw3IEBAIGVuZAogCiAjIENhbGwgYSBzbG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4K
IG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKLSAgICBzdG9yZWkgUEMs
IEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBh
cmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpAQCAt
Mzk5LDIwICs0MTAsMjAgQEAgbWFjcm8gY2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9u
KQogZW5kCiAKIG1hY3JvIGNhbGxUcmFwSGFuZGxlcih0aHJvd0hhbmRsZXIpCi0gICAgc3RvcmVp
IFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBw
cmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEK
ICAgICBjQ2FsbDIoX2xsaW50X3Nsb3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAs
IHRocm93SGFuZGxlcgotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwg
UEMKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAgICAgICAgIDEsCiAg
ICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRh
Z09mZnNldFtjZnJdCisgICAgICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgICAgIHByZXBhcmVT
dGF0ZUZvckNDYWxsKCkKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92
ZSBQQywgYTEKQEAgLTQyMSw3ICs0MzIsNyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9v
cCgpCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAogICAgICAgICAgICAgam1wIHIwLCBKU0VudHJ5
UHRyVGFnCiAgICAgICAgIC5yZWNvdmVyOgotICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3Vu
dCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAgICAgbG9hZFBDKCkKICAgICAgICAgZW5k
KQogZW5kCiAKQEAgLTIwNTcsNyArMjA2OCw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVO
YW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAg
ICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICAgICAg
Z2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgdDIpCi0gICAgICAgIHN0b3JlaSBQQywg
QXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQogICAgICAg
ICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBt
b3ZlIHQzLCBzcAogICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBKU0Vu
dHJ5UHRyVGFnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
TGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4IDg0
MGY4OWI4OGQ0MjBjYzNiNzVjODNkNmM1NzgyNDE1NDAyZjMzNjYuLjhmNTA1Y2M2OTljZDRhZTM3
ZWYzNDUwMGZkZmJlNjk5OTgwN2NkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmdMaXN0LmgKQEAgLTEzMyw2ICsxMzMsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBvdmVyZmxv
d0NoZWNrTm90TmVlZGVkKCkgeyBjbGVhck5lZWRzT3ZlcmZsb3dDaGVjaygpOyB9CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZmlsbChzaXplX3QgY291bnQsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAg
ICAgIGVuc3VyZUNhcGFjaXR5KGNvdW50KTsKKyAgICAgICAgaWYgKEJhc2U6Omhhc092ZXJmbG93
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zaXplID0gY291bnQ7CisgICAg
ICAgIGZ1bmMocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJnNsb3RGb3IoMCkpKTsKKyAgICB9
CisKIHByaXZhdGU6CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eSgpOwogICAgIHZvaWQgZXhwYW5k
Q2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCBmOGQ5Nzk5NTg3NDUyMjZhNDdlNmY4YjZjNTU4NjBj
MThmY2U4N2ExLi5mZmI3NDU5YTZhZGNjYmFiMTZkYThhNGVmOGIxNzExZDg3MmExYWY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xNzg4
LDYgKzE3ODgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBldmFs
Q29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQogICAgIHVu
c2lnbmVkIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9Cisg
ICAgdW5zaWduZWQgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9p
bnRzOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291
bnQ7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVt
bjsgfQogCkBAIC0xODIwLDYgKzE4MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZXZh
bENvbnRleHRUeXBlIDogMjsKICAgICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAgICAg
dW5zaWduZWQgbV9jb2RlVHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVja3BvaW50cyA6
IDE7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQYXJzZU1vZGUg
bV9wYXJzZU1vZGU7CkBAIC0yMDE4LDYgKzIwMjAsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2Vk
Q29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUq
CiAKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3Rh
dGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2FjaGVkQ29kZUJs
b2NrLmhhc0NoZWNrcG9pbnRzKCkpCiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2Nr
LmZlYXR1cmVzKCkpCiAgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2Rl
KCkpCkBAIC0yMjA2LDYgKzIyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJs
b2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29ucwogICAgIG1f
cGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdlbmVyYXRpb25N
b2RlID0gY29kZUJsb2NrLm1fY29kZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29kZVR5cGUgPSBj
b2RlQmxvY2subV9jb2RlVHlwZTsKKyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1f
aGFzQ2hlY2twb2ludHM7CiAKICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxv
Y2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29k
ZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggZjM1OGQ0OGE1MGRlNzNlYWIzODU2OTli
M2E2ZjUxMTNiYmJlOWJiYS4uZTI3ZmUzY2E5NzhiMzk0NDgyNjE2N2Q0YTA2MWEyZWFkNGY5MjYx
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCkBAIC05OCw4ICs5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJFR0lOX05PX1NF
VF9QQygpOyAgICAgICAgICAgICAgICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RVQlMoKQogCi0j
ZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0
KCkpKQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0
KCkpKQorI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5k
KSkKKyNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKIAogI2Rl
ZmluZSBSRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTEzOSw4ICsxMTM5
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50
KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxl
eGljYWxFbnZpcm9ubWVudD4oKTsKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNj
b3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpz
Y29wZSgpOwogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAgICAgSlNWYWx1
ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgp
OwogICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFs
dWUgPT0ganNURFpWYWx1ZSgpKTsKQEAgLTExNTUsOCArMTE1NCw3IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Njb3BlID0gR0VU
X0MoYnl0ZWNvZGUubV9uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7
CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5t
X2N1cnJlbnRTY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2N1cnJl
bnRTY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQogCkBAIC0x
MTY1LDcgKzExNjMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZV9m
b3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4o
KTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAg
ICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3Bl
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3Bl
OjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTE3OSw3ICsxMTc3LDcg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNj
b3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJl
Z2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTT2JqZWN0KiBy
ZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVu
dCk7CiAgICAgLy8gUHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4g
d2l0aCBzdGF0ZW1lbnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBA
IC0xNDI0LDcgKzE0MjIsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1
ZmZlcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdB
cnJheUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOworICAgIEFTU0VS
VChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwogICAgIEpTSW1t
dXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11
dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNW
YWx1ZSgpLmFzQ2VsbCgpKTsKICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NDMsNyArMTQ0MSw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICAv
LyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlv
biB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAg
ICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwotICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11
dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0
ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9p
bW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkp
OwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApAQCAtMTQ4OCw0ICsx
NDg2LDE2IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zcHJlYWQpCiAgICAgUkVUVVJOKEpT
SW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGVGcm9tQXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwgYXJy
YXkpKTsKIH0KIAorZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFs
dWUpOworZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpCit7
CisgICAgZGF0YUxvZ0xuKFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkpKTsK
K30KKworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CisvLyBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCApCisvLyB7CisKKy8vIH0KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
dHJ1Y3REYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERh
dGEuY3BwCmluZGV4IDRiZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3
YjI0NzQxOGNhODhlZmQxYjc4ZTYzMTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYg
YXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1Y3Qo
Z2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3Ms
IGVycm9yTWVzc2FnZSk7Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJn
ZXQsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtNDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBj
b24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0
cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJn
ZXQpKTsgIAogfQogCi0KIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1
Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0
JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1
Y3REYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgK
aW5kZXggZDBhZTAwYmExMWQ3Y2VlMjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3
ZGIzOWM0OTFmOWY5M2JhZWI2Y2FjMTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29u
c3RydWN0RGF0YSB7CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQg
dG8gZGVhbCB3aXRoIENhbGxEYXRhIGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0
byB1c2UgdGhlbS4KIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3Qg
Y2hhciogZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1Rh
cmdldCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VY
UE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3Qg
QXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVjdCog
Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0
b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRj
Y2YzMTAyMmFjMmRkOWFlZmFmZDQzYTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0
NWE5M2M1NzUwOWYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcApAQCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1
bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBl
ZEFyZ3VtZW50cy5hdChpbmRleCwgaW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lk
IERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3Vt
ZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIGlmICghbV9tYXBwZWRBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGltaXQg
PSBzdGQ6Om1pbihsZW5ndGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQg
aTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9m
ZnNldDsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAgICAg
ICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsK
ICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihzdGFydCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJzdEVs
ZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3Vt
ZW50czo6bWFwcGVkQXJndW1lbnRzU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTlj
NTNhMmNmY2U3NzJlMGEuLjhkOTY0MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5o
CkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3Vt
ZW50czxEaXJlY3RBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4
LCBtX2xlbmd0aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIz
MWI3MGFiZDAwY2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcw
NmY0MDA0YmRhYjNkYWVlYjI3MmNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgc2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRl
eCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0
b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJz
dEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9p
ZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2Rp
ZmllZEFyZ3VtZW50c1B0ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBi
b29sPjsKICAgICBNb2RpZmllZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3Jp
cHRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFi
ODg2MTgxZmYuLmUwYWFiZjVmMmVlMTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaApAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTMwNSw5ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgog
ICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlzT2Jq
ZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShp
ICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0
LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3Qs
IGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9i
YWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1
OTM4NzY2MC4uNmQwNzU5MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3
IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9i
YWxPYmplY3QsIGkpKTsKIH0KIAotdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lk
IEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dik7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMTI5NCwxMSArMTI5NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICgh
dikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
IC0gb2Zmc2V0XSA9IHYuZ2V0KCk7CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zm
c2V0KSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kg
LSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCmluZGV4IDMxNzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFi
NTAuLjMxMTY1YjVmZjQ5MjU0Y2MxYTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2Jh
bE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFs
UmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJv
dG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0OTdk
NDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDljMC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5
OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQg
SlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCi12
b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1dHRl
cmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICgoaSArIG9mZnNl
dCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnRE
ZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
RnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmgKaW5kZXggYTE4MmRjNjYxOGZhYWJiZmNiM2NlNjNlMDdjMTcxNWRmOGQxZDQ5Yi4uNDgyZTAy
NmEyMWY1NjJkYjVlMzcyNjM3MzA3OWE1ZWM1NTU0OTc4YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCkBAIC0xNDcsNyAr
MTQ3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNj
ZXNzPgogICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBhNmViMGVhNWY2YWFk
ZWIzN2QyNzc5NGY3YzkxM2Y2ODE2ODM0OTdlLi4xNmFhMzY5ZjQ4NTA3MDYxYzA2MzYxNTE4YWUx
NWQyYmM2OGZiNmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAK
QEAgLTIwNCw2ICsyMDQsNyBAQCB2b2lkIEpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKCkKIHsgICAK
ICAgICBSZWZQdHI8Vk0+IHZtID0gbV92bTsKICAgICBpZiAodm0pIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKCF2bS0+aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpLCAi
UmVsZWFzaW5nIEpTTG9jayBidXQgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGUgc3RpbGwg
YXZhaWxhYmxlIik7CiAgICAgICAgIHZtLT5kcmFpbk1pY3JvdGFza3MoKTsKIAogICAgICAgICBp
ZiAoIXZtLT50b3BDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKaW5kZXggZGIwNTI1NDg4MjUz
MzlhNmIxMzJiYTRlNDQyYjIxMWQ2ZGUzN2JhMC4uNTk2ODA4Y2FmYzBiMGY0Yzg0NzBiZDc1OWVk
OWY0OTE2YzY2NDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwgdW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZSk7CiAKLSAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25t
ZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0
PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rl
cih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
Q29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9i
amVjdC0+dm0oKSkpOworICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xU
YWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJv
bFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChn
bG9iYWxPYmplY3QtPnZtKCkpKTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA0MTM4N2M4NTBhOTk1YWQ1
NzQyMTA1MGNkZTg2Y2IyNTIxZTU0MTE2Li4zZDc3NTdiMmUxN2RkYzFjMThjYWYxMTM0Y2E5OTQx
Mjg4YjVkNDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApA
QCAtNTA5LDEyICs1MDksNiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25z
KCkKICAgICBpZiAoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA8IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplKQogICAgICAgICBPcHRp
b25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgp
ICsgbWluaW11bVJlc2VydmVkWm9uZVNpemU7CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IC8vIEZJWE1FOiBNYWtlIHByb2JlIE9TUiBleGl0IHdvcmsgb24gMzItYml0OgotICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYKLSAgICBPcHRpb25z
Ojp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIU9wdGlvbnM6
OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBudWxs
cHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRl
eCAwM2YyODUyNDRkYjk5MDJlYWJhOTZkNjk3N2UzYjdkMzkxOTdkZTUyLi40ZDE1NmNmNzNkZmNk
NTRmZmE4M2RjZDc5OGVkN2VhZDZjNWJhYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTE0OSw3ICsxNDksNiBAQCBjb25zdGV4cHIgYm9vbCBl
bmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoQm9vbCwgdmVyYm9z
ZUNvbXBpbGF0aW9uLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2ZXJi
b3NlRlRMQ29tcGlsYXRpb24sIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2ws
IGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYo
Qm9vbCwgdXNlUHJvYmVPU1JFeGl0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCBwcmludEVhY2hPU1JFeGl0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCB2YWxpZGF0ZUdyYXBoLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29s
LCB2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmlu
ZGV4IDA4MWQ5NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYy
NDFiMDI2MDVmYmY1MjViZGRmMjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZv
aWQgU2NvcGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAg
ICAgICAgc3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29w
ZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAg
ICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1l
bnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdj
MzcwNGYyOWVkNGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFh
YmMwZGUwODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHMuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdl
bmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3Jp
cHRvcihpbmRleCwgbV90YWJsZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVf
SU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5ZDU0ZmRj
ZDg0NzNkNzIzZmJhZWNhNTEzNDkwNjFkOTUyMDI0YjkxLi43MDc4MzM0YTU1MmI1YTE2Yzk2OWQz
MWFlMWQxMDg5ZDk5OTEzNzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1
aWx0aW5FeGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNs
b25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVD
YWNoZS5oIgpAQCAtMTAyOSw2ICsxMDMwLDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZm
ZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYK
IAordm9pZCBWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxvYWQp
Cit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdURk1v
dmUocGF5bG9hZCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4gVk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQor
eworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRv
IHNpZGVTdGF0ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7CisgICAg
cmV0dXJuIHNpZGVTdGF0ZTsKK30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsK
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJh
bWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGU5YTkwZjA5MGFmNWFhOGY4
YTNiMTczZjIxNGViZWEyMzZhMzlkNDAuLmQwMTU0YjVkYzBmZmZjN2E0MmJkYTg1ZTQ0YzEyYTBk
MjlmNmNjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsK
IGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtOTQ4LDYgKzk0OSwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwog
CisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVudHJ5
U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tG
aXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTExOTgsNiArMTIwMyw3IEBAIHByaXZhdGU6CiAg
ICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4g
bV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7
IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRj
aHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBm
Njg4YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0
MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19J
TkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFMV0FZU19J
TkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19J
TkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2Rlcygp
KTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25z
dGFudEluZGV4KCldOwogICAgIH0KIAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5p
cXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggYWIxNzQwNmFmYjczNGE3MDhkZjEx
ZGJiNjgwMTUxOGI3NjY1ZmI0Mi4uZWUyYjMyN2QyYWY1NDcxOTY4Nzk2OWFjMjUyYTg0Yzc4OGVm
NmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuY3BwCkBAIC0yNDIsNiArMjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJz
ZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBw
YXJzZXI7IH07CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxh
dGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkg
Y29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBkdW1wKGNv
bnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDVhOGViYjgxZDJk
YmVlMDNhYzY5MzJhY2VmNmZiYjQ3MjcyZWM4NGIuLmMyNDA2OTA5MzlkMmNlMDE0YTE3M2IyZTM3
OWMyZGIxOTkyZDNkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93
UGF0aHMuY3BwCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJ
bnQgewogCiAjZGVmaW5lIFJFQUQodmlydHVhbFJlZ2lzdGVyKSBcCiAgICAgKHZpcnR1YWxSZWdp
c3Rlci5pc0NvbnN0YW50KCkgXAotICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NL
KCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkpIFwKKyAgICAgICAgPyBK
U1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIp
KSBcCiAgICAgICAgIDogY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcikpCiAKIGlubGluZSBi
b29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUs
IFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206Okluc3RhbmNlKiBpbnN0
YW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAKaW5kZXggYTQ5NzNlYmJhMDQ2OGE2NWRiOTVjOGJhODMyNjRhZDhmYTg2
ZGRkOS4uN2E3MjViMGJjMTViNmU5YjY1NjYxNWFlNjk3ZTBmYzg3ZjgzZDFmMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAKQEAgLTIyMCw3ICsyMjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogCiAgICAgaml0
LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgw
KSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwor
ICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykp
KTsKIAogICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdp
c3RlcnNUb1NwaWxsKSB7CiAgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5n
cHIoKTsKQEAgLTI0Myw3ICsyNDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIG1pc21hdGNoZWQgYXJpdHkKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTY0CiAgICAgc2xvd1BhdGguYXBw
ZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93LAotICAgICAgICBDQ2FsbEhlbHBl
cnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxKSkpOworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSArIDEpKSk7CiAKICAgICBpZiAodXNlVGFnUmVnaXN0ZXJzKCkpCiAgICAg
ICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwpAQCAtMzc3LDcgKzM3
Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1
bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgLy8gMi4gV2UgbmVlZCB0byBrbm93
IHRvIHJlc3RvcmUgdGhlIHByZXZpb3VzIHdhc20gY29udGV4dC4KICAgICBpZiAoIW1fanNUb1dh
c21JQ0NhbGxlZSkKICAgICAgICAgbV9qc1RvV2FzbUlDQ2FsbGVlLnNldCh2bSwgdGhpcywgSlNU
b1dhc21JQ0NhbGxlZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QoKSwgdGhpcykpOwotICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qc1RvV2FzbUlDQ2FsbGVl
LmdldCgpKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
OworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qc1RvV2Fz
bUlDQ2FsbGVlLmdldCgpKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBD
dXJyZW50bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNo
IHRoZSBNb2R1bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNl
L1dURi93dGYvQml0bWFwLmgKaW5kZXggNGM2ZjVkNDQyNjMyYzNlZmMwMDBiZDE4ZTllMzY5NDUy
ZmFmMWMxMC4uYjQ2ZGE5ZTg1YWI5YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvQml0bWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFw
LmgKQEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNl
dChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFy
QWxsKCk7CisgICAgdm9pZCBpbnZlcnQoKTsKICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNp
emVfdCBydW5MZW5ndGgpIGNvbnN0OwogICAgIHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAw
KSBjb25zdDsKICAgICBzaXplX3QgaXNFbXB0eSgpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMywxMiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAg
IH0KIAorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3I9KGJvb2wgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fYml0bWFwLT5zZXQobV9pbmRleCwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBC
aXRtYXAqIG1fYml0bWFwOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKQEAgLTExMSw2ICsxMTgs
OSBAQCBwdWJsaWM6CiAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgZmluZEJpdCgwLCB0cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcigqdGhpcywgYml0bWFwU2l6ZSk7IH0KICAgICAKKyAgICBpdGVyYXRv
ciBvcGVyYXRvcltdKHNpemVfdCk7CisgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXpl
X3QpIGNvbnN0OworCiAgICAgdm9pZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQg
c2V0QW5kQ2xlYXIoQml0bWFwJik7CiAgICAgCkBAIC0yMjQsNiArMjM0LDEzIEBAIGlubGluZSB2
b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQo
Yml0cy5kYXRhKCksIDAsIHNpemVvZihiaXRzKSk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OmludmVydCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3Jk
czsgKytpKQorICAgICAgICBiaXRzW2ldID0gfmJpdHNbaV07Cit9CisKIHRlbXBsYXRlPHNpemVf
dCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25z
dAogewpAQCAtNDA5LDYgKzQyNiwxOSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V29yZFR5cGU+OjpvcGVyYXRvciE9KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwg
dHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5
cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgLT4gaXRlcmF0b3IKK3sKKyAgICBBU1NFUlQo
aW5kZXggPCBzaXplKCkpOworICAgIHJldHVybiBpdGVyYXRvcigqdGhpcywgaW5kZXgpOworfQor
Cit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUg
YXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgLT4gY29uc3QgaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4qPih0aGlzKSlbaW5kZXhdOworfQorCiB0ZW1wbGF0
ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQg
Qml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0
VmVjdG9yLmgKaW5kZXggODg1YjdiMTczYjExYTYwMWJlMjlhMzMyYWI5ZDJhNDE0ZDU2MjEyMi4u
YTM4Yzk2YzM0OTNlOWQxMGQ1NmE4MGI1YmQ3NWYxZDRhNmNiZjMwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRW
ZWN0b3IuaApAQCAtNDY0LDYgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KIAorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9vbCB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPyAqdGhpcyA9IHZhbHVlIDogKnRoaXM7IH0KKyAgICBGYXN0Qml0UmVm
ZXJlbmNlJiBvcGVyYXRvciY9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgOiAq
dGhpcyA9IHZhbHVlOyB9CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29yZCB7IG51bGxw
dHIgfTsKICAgICB1aW50MzJfdCBtX21hc2sgeyAwIH07CkBAIC01MDksNyArNTEyLDExIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9Ci0gICAgCisK
KyAgICAvLyBGb3IgdGVtcGxhdGluZyBhcyBWZWN0b3I8Ym9vbD4KKyAgICB2b2lkIGZpbGwoYm9v
bCB2YWx1ZSkgeyB2YWx1ZSA/IHNldEFsbCgpIDogY2xlYXJBbGwoKTsgfQorICAgIHZvaWQgZ3Jv
dyhzaXplX3QgbmV3U2l6ZSkgeyByZXNpemUobmV3U2l6ZSk7IH0KKwogICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdl
ZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4
N2M3MjI1NTQ3MjhiMDQ1MjRmNmI0MjNmYzAxZDFhNWMwNzAzYmY1Li41ODI4YmIwZWUwZmRkZGNh
OWZlMzEzNDlhZWZkYjYyOWFjNTg0NGY5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1p
bGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQg
YmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmVt
b3ZlIHByb2JlIE9TUiBleGl0IG9wdGlvbiBzaW5jZSB3ZSBhcmUgbm90IHVzaW5nIHRoYXQgYW55
bW9yZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMTItMTMgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IHRo
ZSBtYWNDYXRhbHlzdCBidWlsZCBhZnRlciByMjUzNDg2CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwppbmRleCA1MTQyM2E3NThhZjgyMDQyZTk1OGExODhlNjJkNzNmYzcwODM1NWI3Li42NTU3
NzQwZjdkYTE3ZTAxZTViZDEyMjQ5M2NiMDM3YjdmNGVjYjdlIDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMKQEAgLTQ5OCw3ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0tdXNl
Q29uY3VycmVudEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMAog
QjNPMV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0g
WyItLW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRl
ZmF1bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQot
UFJPQkVfT1NSX0VYSVRfT1BUSU9OID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZPUkNF
X0xMSU5UX0VYSVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQogCiBy
ZXF1aXJlX3JlbGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3skdGVz
dFdyaXRlcn0iCkBAIC03MTMsNyArNzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUo
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZhbGlk
YXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2Ft
cGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRM
X09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUt
c2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGlu
Z1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BU
SU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBl
bmQKIAogZGVmIHJ1bkZUTE5vQ0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKQpAQCAtNzI5LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxp
ZGF0aW9uKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRGR0Vh
Z2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAq
KEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVfT1NS
X0VYSVRfT1BUSU9OICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKKyAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENP
TExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5vQ0pJ
VFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZjYzM3
OThmYWQ0MzZjY2IxZDg4M2I1MTlmYTEuLjdkMjkxOTk5YmU5ZjYwMDU3NDNlNmRmYWI1MjJjZjI5
NmViMjkxYmYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRo
X21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBl
eGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5l
ZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorCisyMDE5
LTEyLTEzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNv
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3Ry
ZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanM6Cisg
ICAgICAgIChjaGVja0VxdWFsKToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1
a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJyYXksIGFuZCB1
c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pT
VGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJp
Y3QuanMKaW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3
MzIzMTkwY2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5q
cworKysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5k
LWV4aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwg
YikgewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2
ZXJzdXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEu
Yy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBp
ZiAoYS5jLmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIg
KyBiLmMubGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAg
ICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3Vz
ICIgKyBiLmM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385679</attachid>
            <date>2019-12-13 21:36:54 -0800</date>
            <delta_ts>2019-12-13 21:42:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191213213641.patch</filename>
            <type>text/plain</type>
            <size>617872</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDViYzhiNjRiY2JjNzEyYmQ2NDFmNjg1MTBkNmFmMjU2NzhmODA5Li5iZmRkM2Y1ZDM1ZWI5MGJm
NjRkYWFlYmM5Mzg5Y2Y1ZGJhNjJkNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NjggQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGUgdGhlIHByb2JlLWJhc2VkIE9TUiBleGl0
IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uIHRodXMgdGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQgY29kZSBzaW5jZSBpdAorICAgICAgICB3b3VsZCBiZSBhIG5vbi10cml2aWFs
IGFtb3VudCBvZiB3b3JrIHRvIGdldCBjaGVja3BvaW50cyB3b3JraW5nCisgICAgICAgIHdpdGgg
cHJvYmUgT1NSLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAg
ICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUluZGV4OjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6YXNCaXRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjplbnVt
VmFsdWVzRXF1YWxBc0ludGVncmFsKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZSk6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNBbHdheXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNMaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZUlu
ZGV4Rm9yRXhpdCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1UbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6
OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29k
ZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6dW5tYXBPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAg
ICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJh
bmQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6Ok9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpr
aW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kOjp2aXJ0dWFsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1RtcCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNI
ZWFkZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0FyZ3VtZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJpdHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZM
b2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZUbXBzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXApOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omxv
Y2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRG
b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldEZvck9wZXJh
bmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvckluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdl
dENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6On5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcjo6flZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCk6CisgICAg
ICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpk
dW1wKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBh
cnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpm
bHVzaERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNo
T3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFu
dG9tTG9jYWxEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0
T1NSKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RG
R0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5k
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5C
eXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRs
ZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9j
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdU
b0NoZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5m
by5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
YWxsZWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xh
eW91dFBoYXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5k
bGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVu
a3MuaDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JF
bnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
OjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBm
dGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjptYXhVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjptaW5VbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptYXhTaWduZWQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bWluU2lnbmVkKToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50
cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBn
ZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmN1cnJlbnRWUEMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKEpTQzo6Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU6OmdldFRtcCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6c2l6ZU9m
VmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklU
OjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9y
ZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudElu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFs
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlND
OjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRo
dW5rSklUKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRjaE5leHRJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVy
Zmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OmR1bXBSZWdpc3Rlcik6CisgICAg
ICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToK
KyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6
CisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJy
YXksIGFuZCB1c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0YmE4ZTBhN2Ix
NzQ2MDEwNzdlNjUzYmZlZmZkYTFlZTQzOGI0Y2FkLi4zNGMyMmM2ZDhkODBhNjdiMWNlM2JlNTZm
ZDVhMzY0MTUzMTE5OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTEyLTEzICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxk
IGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAg
ICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6
b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0
KToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0
UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6
b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAg
ICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEZhc3RCaXRWZWN0b3IgKG1vcmUp
IHRlbXBsYXRlIGNvbXBhdGFibGUgd2l0aCBWZWN0b3I8Ym9vbD4gc28gb3RoZXIgY29udGFpbmVy
cworICAgICAgICB1c2luZyBhIFZlY3RvcjxUPiBtZW1iZXIgY2FuIHVzZSBGYXN0Qml0VmVjdG9y
IGluc3RlYWQgaWYgdGhlIFQgaXMgYm9vbC4KKworICAgICAgICBBbHNvLCBhZGQgc29tZSBoYW5k
eSBtZXRob2RzIHRvIEJpdG1hcC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJh
dG9yKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6Cisg
ICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVy
ZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJh
dG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpmaWxsKToKKyAgICAgICAgKFdU
Rjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisKIDIwMTktMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgSGVhcDo6ZmluYWxpemUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQ5OTZjMWU0YmQ2MTY1NWMyYzkxNTkyMjJlMGI0ZWJlZTRlMTcwN2YuLjNlZjFmOTA5OTIx
NDcwMTc0ZGI1MzkxZmJjOWM3M2Q4YzNkNWQwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzIsNiArOTMyLDcgQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcyMURBQzM0M0Mw
MEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1
MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9t
aXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzYwMCw2ICszNjAxLDcgQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIz
RXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2Ny
aXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0
aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAw
RTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBw
YXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzYxNCw2ICszNjE2LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8q
IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0Qx
QkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1
NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVy
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVs
cGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAw
NTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2
NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU5NTAsNiArNTk1NSw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBD
YWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENh
bGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BT
dGFja0lubGluZXMuaCAqLywKQEAgLTg1ODEsNyArODU4Nyw5IEBACiAJCQkJQTUyNzA0ODUxRDAy
N0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJ
CQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAq
LywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMg
Ki8sCkBAIC04NTkyLDYgKzg2MDAsNyBAQAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAv
KiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBS
ZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4
NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEw
MDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIx
MDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MDkzLDYgKzkx
MDIsNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQy
NjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFB
OTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMu
LjY4ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aApAQCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0g
ICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggMzVkMDE3
NTZkNTMyYTcxZWMwN2ZlNDAzZWY3YTUyNTBiNWZjNmY2MS4uNDFiYzk2MWExNTMwODVmYmE4NTUw
NjVjMzliNmM2ZGE2ZmIyYTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMjYz
LDIwICsyNjMsMjAgQEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29t
cGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KLXN0cnVjdCBPcGVyYW5kIHsKK3N0cnVjdCBCM09wZXJhbmQgewogICAgIGNv
bnN0IGNoYXIqIG5hbWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgT3BlcmFuZDxp
bnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVy
YW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5cGVkZWYgT3Bl
cmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50NjRfdD4gSW50
NjRPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlw
ZWRlZiBCM09wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8
aW50OF90PiBJbnQ4T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIE9wZXJh
bmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQorI2RlZmluZSBNQUtFX09QRVJB
TkQodmFsdWUpIEIzT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3Rp
bmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQordm9pZCBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+JiBv
cGVyYW5kcykKIHsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDAuKSB9KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigtMC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVXaXRo
SW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci1WZWN0b3I8T3BlcmFuZDxGbG9hdFR5
cGU+PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQorVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+
PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQogewotICAgIFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlw
ZT4+IG9wZXJhbmRzOworICAgIFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7
CiAgICAgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMob3BlcmFuZHMpOwogICAgIHJldHVy
biBvcGVyYW5kczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcAppbmRleCA2MDU4ZmIwNjIwMzk0NmM0Y2Q1NmVmNmE5ODM4NzlkMmQ2
YzgxZmI2Li44MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNhZTVjMGVlM2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAg
LTYzLDcgKzYzLDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLAogCiB2b2lkIEJ5dGVjb2RlRHVt
cGVyQmFzZTo6ZHVtcFZhbHVlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgbV9vdXQucHJp
bnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcub2Zmc2V0KCkpLmRhdGEoKSk7CisgICAgbV9vdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcpLmRhdGEoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFRyYWl0cz4KQEAgLTgzLDEyICs4MywxMiBAQCB0ZW1wbGF0ZSB2b2lkIEJ5dGVjb2Rl
RHVtcGVyQmFzZTo6ZHVtcFZhbHVlKEdlbmVyaWNCb3VuZExhYmVsPFdhc206OkdlbmVyYXRvclRy
YQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKGludCByKSBjb25z
dAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVn
aXN0ZXIgcikgY29uc3QKIHsKLSAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgocikpCisg
ICAgaWYgKHIuaXNDb25zdGFudCgpKQogICAgICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIpOwog
Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0ZXIocikpOworICAgIHJldHVybiB0
b0NTdHJpbmcocik7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCbG9jaz4KQEAgLTk4LDEwICs5OCwx
MCBAQCBpbnQgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4K
LUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAogewotICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25z
dGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgpLCAiKSIpOworICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25zdGFu
dChyZWcpOworICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgcmVnLCAiKSIpOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEJ5dGVjb2Rl
RHVtcGVyOjpkdW1wQ29uc3RhbnRzKCkKICAgICB9CiB9CiAKLUNTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI6OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVy
Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25zdAogewogICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAgYXV0byB2YWx1ZSA9IGZv
cm1hdENvbnN0YW50KGJsb2NrLT5nZXRDb25zdGFudFR5cGUoaW5kZXgpLCBibG9jay0+Z2V0Q29u
c3RhbnQoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmgKaW5kZXggMGQ3MTY3NTAzOTRiMTVkNGViNWU4N2M1YTg4MjUxMDc1ZWZlMDNl
ZS4uZWRiMTEyOTIxYWY3NTNlNjNkODYxMzcyZmJkZTBlZWY4OWZjYTE1OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcFZhbHVlKFQgdikgeyBtX291dC5wcmludCh2KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rl
cikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldCkgY29uc3QgPSAwOwogCiAgICAgQnl0ZWNvZGVEdW1wZXJCYXNl
KFByaW50U3RyZWFtJiBvdXQpCkBAIC05MSwxMSArOTEsMTEgQEAgcHJvdGVjdGVkOgogCiAgICAg
dm9pZCBkdW1wQnl0ZWNvZGUoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0
IElDU3RhdHVzTWFwJik7CiAKLSAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25z
dCBvdmVycmlkZTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgQ1N0
cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKIAogICAgIEJsb2NrKiBt
X2Jsb2NrOwogfTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIEpTQzo6
Qnl0ZWNvZGVEdW1wZXI8RnVuY3Rpb25Db2RlQmxvY2s+OjpCeXRlY29kZUR1bXBlcjsKIAogICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRl
eCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lz
dGVyIGluZGV4KSBjb25zdCBvdmVycmlkZTsKICAgICBDU3RyaW5nIGZvcm1hdENvbnN0YW50KFR5
cGUsIHVpbnQ2NF90KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJhOTA0MDFhNzExN2RjMGY5ZjI2
ZTE5MTM3ZWIyYzMxNTliLi5iODEyZmI0MWJmOWFiZTY2NGY0NDc1OTEzZTljZTM0MjlkYjQxMmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
Y3BwCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMiw2ICszNCw4IEBAIG5hbWVz
cGFjZSBKU0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1wKFdURjo6UHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9mZnNldCgpKTsKKyAgICBpZiAoY2hl
Y2twb2ludCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIsIGNoZWNrcG9pbnQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMxZjcyYWMyMDczMWMxZDNiY2U5MzUx
NThkZi4uNjA4NzAwYzU3YWQ3MDE3MmMyY2IwMGYxMDlhNWM0MTMxNzQyZDViMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0
cmVhbTsKQEAgLTMzLDI4ICszNCwzOSBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKKwogY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJs
aWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUluZGV4KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChkZWxldGVk
VmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZhbHVlKCku
YXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQot
ICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3Qg
Y2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZz
ZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0Owor
ICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAibnVt
YmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMgLSAx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpn
ZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9
CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXgg
ZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09
IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1
aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlk
T2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQogICAg
IGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRvciAhPShj
b25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KIApAQCAtNjksMTMgKzgxLDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0
IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWlu
dDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRP
ZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQz
Ml90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NFUlQoY2hl
Y2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNvZGVJbmRl
eCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29kZUluZGV4
KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBjaGVja3Bv
aW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1
aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJlc3VsdC5t
X29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIKaW5kZXggNzFiZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3ODdhZmZh
NC4uZGYwYmRlYjFjYjBmMDU0MDgwN2U5YWZhN2UyOTMxNGExNzBjMjdkZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3ICs1OSw3
IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2ZpbGUsCi0g
ICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkJpbmFy
eUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwxMyBAQCBv
cCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAg
ICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgwNSw2ICs4
MTIsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAg
IH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmls
LAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cywKQEAgLTg0NSw2ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAog
ICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAg
IGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAg
ZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0K
IAogb3AgOnJldCwKQEAgLTk5Miw3ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJv
d25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6
dGhyb3csCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBiNmNmZjEwMTE0
M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2ZDNjOTE2Y2U1
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBAIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5
cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEg
djEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6
dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50VHlwZTIgPSB0
eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOworICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2
Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9
PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVtQ2hlY2twb2lu
dFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxtYXhOdW1DaGVj
a3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2Fs
bFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wVGFpbENhbGxW
YXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVh
bEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6
bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJn
Q291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgaWYgKGNoZWNr
cG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisgICAgICAgICAgICByZXN1bHQuc2V0
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
CmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzkuLjNlNWVkYzBh
NjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIKICNpbmNsdWRl
ICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFw
aDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxpbmUgYm9vbCBv
cGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRUaGF0
SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJh
bmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmluZGV4IDNkMTJl
MTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEwOWI3ODk2N2Yx
MDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaApA
QCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuICFWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlzTG9jYWwoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJlZy50b0xvY2Fs
KCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkg
fHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDg2
OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1YTFiZDJjMTYz
ZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVT
dHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNsb25l
ZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnBy
ZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmVwbGFj
ZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1l
bnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUp
OworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVn
aXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAgICBib29sIHNo
b3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRDb2RlLT53YXND
b21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENvZGUtPndhc0Nv
bXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEsNyArNjQyLDcg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRv
IGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fdmFyICE9
IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRD
b25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwpAQCAtNzA5
LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVM
b2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9
IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29u
c3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7
CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIg
cGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0
IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0xMDg2LDYgKzEw
ODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVj
b2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXguY2hlY2twb2lu
dCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24ubmV4dCgpLmlu
ZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4MTEsMTAgKzE4
MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5p
cXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkpOwor
ICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocHJv
ZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9maWxlcy0+bV9i
dWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOworICAg
ICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRz
W2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0yNzEzLDcgKzI3
MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8qIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQg
OiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9maWxlQnVja2V0
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDA5MmM3YWFjODQyNmMx
ZTRjOWQ1OWY1NGY5MWU1NTYzNmMzNzRhMWYuLjc5NjM0MzVlYWIzNzQ0ZTk2Y2RlYTU0ZTY4ZDQ4
YmYxMjNlMDAwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKQEAgLTE1OCw2ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxlZUxvY2Fscygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQgbnVtVmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50
VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1f
bnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJz
KTsgfQpAQCAtMjI2LDIwICsyMjcsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVk
Vk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3Bv
aW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgp
CisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYm
ICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0ZXIoKSAmJiAh
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAo
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9y
YXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVybiBp
bmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gbV9udW1W
YXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRs
ZXIpOwpAQCAtNTc4LDEwICs1NzksOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXgg
Pj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25bcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9
CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KQEAgLTc3MSw2ICs3NzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJl
c3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9yRXhpdChCeXRl
Y29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JFeGl0KCkgeyBt
X29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3MSw3ICs4NzIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCi0gICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+IG1f
Y2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAKICAgICAgICAg
RGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAgfTsKQEAgLTkz
OCwxMCArOTM5LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJz
KGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKLSAgICB2
b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBy
ZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3Zt
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1MWM3MzE4ZWJj
MDQzMS4uMThhZjI0MjJiMTAwMWYyNWY5MDk2ODJlNGQ5ZWIwMWE1OWI2NTQ5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAsNyArMTYwLDkg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJhbWUq
IHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOworICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsKKworICAgIGJv
b2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAg
ICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQg
Zm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygp
IGNvbnN0OwpAQCAtMjc4LDYgKzI4MCwxNiBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVy
YXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdAogICAgICAgICAmJiBpbmxpbmVD
YWxsRnJhbWUoKSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWUoKTsKIH0KIAoraW5saW5lIGJvb2wg
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAor
eworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChD
b2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9y
aWdpbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFi
NTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLmFiYTlmMmQzZGYwZWJjN2RmYzUwZDc4MWY2MzEz
YWI5ZDA3MGQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwog
CisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVzbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1w
IGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4K
IGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2
ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlz
TGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lz
dGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBw
b2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZl
Y3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1F
OiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8
UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0
Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uMzkwNDk0Zjk0NTRhNzAyMmU0NWM4OTdjYmEwOTU5ZGQx
YmY5NzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVP
cmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisg
ICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7
CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBp
c0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Nj
b3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJs
ZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsx
OTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUn
cyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNp
b24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElu
bGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAg
ICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xv
c3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihz
dGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9m
ZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1
cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0OSw3ICsyNTgsNyBAQCBpbmxpbmUgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVP
cmlnaQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLWlubGluZSB2
b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhp
czsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMTggQEAgaW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQog
ICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorQUxX
QVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJh
bmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6IG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIHJldHVybiBv
cGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihyZWcub2Zmc2V0
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnOworICAg
ICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmlu
ZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5
NTU1MmViZjM4ZjdiNGFiMmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2
ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIK
KyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAt
NjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJh
bmQudmFsdWUoKSArIG1fb3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCgpIGNvbnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkw
LDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3Bl
cmFuZCBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlI
YXNoIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1
NTc4OWRmZmRlNjdmMzk2Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4
YmMwNjcwNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsK
ICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwot
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgp
OworICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFs
dWVSZWcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7Cisg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEs
NyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFs
dWUgdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNv
ZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgK
aW5kZXggNWQ4MWM0YzkwMGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBj
MDBmYmQ0NGM4NTVhMzg5ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldDsKLSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kOwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWVi
MzczNDU5NDQ2ZGM3NGNkMTIwMjc1NjI1NzYuLjVkYWQzYTlkZDFkMzAzMTllMzE2YWJhNDFhNzIw
ZTZhNGE2NTEwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CkBAIC0zNSwxMTEgKzM1LDIyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFy
Z3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVt
Q2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25lIHRoYXQgZXhpc3Rz
IGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBi
eXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJh
bmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFu
ZCgpID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1l
bnRPcGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsg
fQorCisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAg
ICAgICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS5pc0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3Bl
cmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVy
YW5kKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0K
KyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWlu
dDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgp
OyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVy
YW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3Vt
ZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5s
aW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQ7CisgICAgaW50IG1fb3BlcmFu
ZDsKK307CisKK0FMV0FZU19JTkxJTkUgYm9vbCBPcGVyYW5kOjpvcGVyYXRvcj09KGNvbnN0IE9w
ZXJhbmQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZSgpID09IG90aGVyLnZhbHVlKCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpID09
IG90aGVyLnZpcnR1YWxSZWdpc3RlcigpOworfQorCitpbmxpbmUgYm9vbCBPcGVyYW5kOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkg
Pj0gMDsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpOworfQorCitpbmxp
bmUgT3BlcmFuZCBPcGVyYW5kOjpmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBPcGVy
YW5kIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxPcGVyYW5kPih2YWx1ZSk7CisgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpY19hc3NlcnQo
c2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZih1aW50NjRfdCksICJPcGVyYW5kOjphc0JpdHMoKSBy
ZWxpZXMgb24gdGhpcy4iKTsKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2Ug
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKLSAg
ICBPcGVyYW5kcygpCi0gICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykK
KyAgICAvLyB1c2luZyBTdG9yYWdlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKKyAgICAvLyB1c2luZyBSZWZUeXBlID0gdHlwZW5hbWUgc3RkOjpjb25k
aXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yOjpCaXRSZWZl
cmVuY2UsIFQmPjsKKyAgICAvLyB1c2luZyBDb25zdFJlZlR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKKyAg
ICB1c2luZyBTdG9yYWdlID0gVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKKyAg
ICB1c2luZyBSZWZUeXBlID0gVCY7CisgICAgdXNpbmcgQ29uc3RSZWZUeXBlID0gY29uc3QgVCY7
CisKKyAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNp
emVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCiAgICAgewotICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5l
ZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1
bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAg
ICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkp
OwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFy
Z3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCiAgICAgewotICAgICAg
ICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsK
KyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
KTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlr
ZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKKyAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQog
ICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkgKyBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhl
ci5zaXplKCkpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQot
ICAgIAorCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Bcmd1bWVudHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQotICAgIAorICAgIHNpemVfdCBu
dW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9CisgICAgc2l6ZV90
IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9m
QXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisKKyAgICBzaXplX3QgdG1wSW5kZXgo
c2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRt
cHMoKSk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CisgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlk
eDsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX251bUFyZ3VtZW50cyArIGlkeDsKKyAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIGlkeDsKICAgICB9CisKKyAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6
ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAK
LSAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFs
dWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQotICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNp
emVfdCBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsKLSAgICB9CisgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGFy
Z3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgo
aWR4KV07IH0KICAgICAKLSAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1tsb2NhbEluZGV4KGlkeCldOyB9Ci0gICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIFJlZlR5cGUgbG9j
YWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAg
IENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2lu
ZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZUbXBzKCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fscygp
OworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkxvY2FscygpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgotICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCisgICAgUmVmVHlwZSBhdEZvcihz
aXplX3QgaWR4KQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3Bl
cmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9w
ZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1l
bnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJl
dHVybiBsb2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAg
IHJldHVybiBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJh
bmRLaW5kIG9wZXJhbmRLaW5kPgotICAgIGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0
CisgICAgQ29uc3RSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9w
ZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVy
biB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAg
IGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisK
KyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVl
ID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAg
ICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxv
Y2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBuZXdTaXplID0g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6
ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHNpemVfdCBvbGRO
dW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
Ci0gICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBUKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTnVtVG1wczsgKytpKQorICAgICAgICAgICAgbV92YWx1
ZXNbbmV3U2l6ZSAtIDEgLSBpXSA9IG1fdmFsdWVzW3RtcEluZGV4KG9sZE51bVRtcHMgLSAxIC0g
aSldOworCisgICAgICAgIG1fbnVtTG9jYWxzID0gc2l6ZTsKKyAgICAgICAgaWYgKGVuc3VyZWRW
YWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUgLSBvbGROdW1Mb2Nh
bHM7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2Fs
cyArIGkpXSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5z
dXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUpCisgICAgdm9pZCBl
bnN1cmVUbXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAg
ewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6
ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXpl
IDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mVG1wcygpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOworCisgICAgICAgIGlmIChlbnN1
cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXph
dGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXpl
OyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBU
JiB2YWx1ZSkKQEAgLTE2NCw4NCArMjc0LDc2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlk
eCA+PSBudW1iZXJPZkxvY2FscygpIHx8IGxvY2FsKGlkeCkgPT0gVCgpKTsKICAgICAgICAgc2V0
TG9jYWwoaWR4LCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgo
aW50IG9wZXJhbmQpIGNvbnN0CisKKyAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBn
ZXRGb3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PE9wZXJhbmRzKj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KKworICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1
cm4gYXJndW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9j
YWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJu
IGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKLSAgICBzaXplX3Qg
b3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CisgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChPcGVyYW5kIG9wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wZXJhbmRJbmRleCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAo
IW9wLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOwogICAgIH0K
ICAgICAKLSAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFJlZlR5cGUgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkp
OworICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIAotICAg
IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBSZWZUeXBl
IG9wZXJhbmQoT3BlcmFuZCBvcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kKHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJu
IHRtcChvcC52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVy
YW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJh
bmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBU
Jj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KKyAg
ICBDb25zdFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQogICAgIAotICAg
IGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxz
KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgp
KSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQotICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKG9wLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcC52YWx1ZSgpID49IDAp
OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3AudmFsdWUoKSkgPCBu
dW1iZXJPZlRtcHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChvcC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQg
b3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3Bl
cmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5vcGVyYW5kKG9wZXJh
bmQpID0gdmFsdWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNl
dE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgfQogCiAgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25z
dCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQot
ICAgIFQmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAg
Y29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7
IH0KLQotICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4IDwgbV9udW1Bcmd1bWVudHM7IH0KLSAgICBib29sIGlzTG9jYWwoc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgb3BlcmFuZEZvcklu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBSZWZUeXBlIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBS
ZWZUeXBlIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKwor
ICAgIE9wZXJhbmQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpLm9mZnNldCgpOwotICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZv
ckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICBlbHNlIGlmIChpbmRleCA8
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7
CisgICAgICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0
T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHNldEFy
Z3VtZW50Rmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCksIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c2V0TG9jYWxGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFs
dWUpOwotICAgIH0KLSAgICAKKwogICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKQEAgLTI1Nyw2
ICszNTksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHMoKSA9PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mTG9jYWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChu
dW1iZXJPZlRtcHMoKSA9PSBvdGhlci5udW1iZXJPZlRtcHMoKSk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gbV92YWx1ZXMgPT0gb3RoZXIubV92YWx1ZXM7CiAgICAgfQpAQCAtMjY1LDkgKzM2
OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4KLSAgICBWZWN0b3I8VCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFsdWVzOwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1l
bnRzOworICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJn
dW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJl
IHRtcHMuCisgICAgU3RvcmFnZSBtX3ZhbHVlczsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
cyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
ZXJhbmRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCmluZGV4IDY1ZmVkZGEwNzMwYTgzOTFmODMxNTYzZGJkZWI4MTZhZjkyNTY2ZmQu
LjBiMWNjMWYyZDE5N2FkMDgzNjVhOGY3ODU2MWZkZjY3YTdkOWVkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKQEAgLTMwLDYgKzMw
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIG91dC5w
cmludCgidG1wIiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKIHsKQEAgLTQ0LDYgKzUyLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRl
eCwgIjoiLCBpbkNvbnRleHQobG9jYWwobG9jYWxJbmRleCksIGNvbnRleHQpKTsKICAgICB9Cisg
ICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9mVG1wcygpOyAr
K3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBp
bkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOworICAgIH0KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KQEAgLTYwLDYgKzczLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGxvY2FsKGxvY2FsSW5kZXgpKTsK
ICAgICB9CisgICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9m
VG1wcygpOyArK3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRl
eCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKaW5kZXggZDVkZGVlOGQ1NjA3NzAzMjNiMWZkNWYxYWNjY2NjMDUwMmMxMjY1NC4uN2U5
MzI2MmRmYjA5NTlkZWMyYTkyNDFmZjhjNjExZjMzYjkyYjQ0NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC03Miw2
ICs3Miw3IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlCiAgICAgLCBtX2NvZGVUeXBlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkpCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hh
c0NoZWNrcG9pbnRzKGZhbHNlKQogICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkK
ICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1f
bWV0YWRhdGEoVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpjcmVhdGUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggYTRmYTdl
MDU1YjhlOTJiNmFhYWFhNThjMWE5ZDllY2JhYmY0OThmMy4uYjk1MTY1Y2VmMGI4NjZiNDBlNjMx
MzQyNzFlODE5MzQyYTkwYmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTE0Miw2ICsxNDIsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOyB9CiAgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9u
SW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAorICAgIGJvb2wgaGFzQ2hlY2tw
b2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CisgICAgdm9pZCBzZXRI
YXNDaGVja3BvaW50cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KKwogICAgIC8vIFNw
ZWNpYWwgcmVnaXN0ZXJzCiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQogICAgIHZv
aWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Nj
b3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9CkBAIC0xOTksOSArMjAyLDggQEAgcHVibGlj
OgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KICAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlm
aWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsgfQpAQCAtNDIwLDYgKzQyMiw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9kaWRPcHRpbWl6ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9hZ2Ug
OiAzOwogICAgIHN0YXRpY19hc3NlcnQoKCgxVSA8PCAzKSAtIDEpID49IG1heEFnZSk7CisgICAg
Ym9vbCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKaW5kZXggYmJiOGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFlMTE4MzNlZmI5MDM2
Ny4uZWI5MTc5NDUzMGRmMWEzMjkyZGNkYmVkMzE2NGU5Yzc5MDlhNjlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApAQCAtMTc2LDI4ICsxNzYs
MjggQEAgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRl
eChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHIKICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
LT5tX2J5dGVjb2RlSW5kZXg7CiB9CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDog
cHVibGljIFZhbHVlUHJvZmlsZSB7Ci0gICAgaW50IG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogfTsKIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIgeworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQorICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgICAgICA6IG1fc2l6ZShzaXplKQog
ICAgIHsKICAgICAgICAgLy8gRklYTUU6IFZhbHVlUHJvZmlsZSBoYXMgbW9yZSBzdHVmZiB0aGFu
IHdlIG5lZWQuIFdlIGNvdWxkIG9wdGltaXplIHRoZXNlIHZhbHVlIHByb2ZpbGVzCiAgICAgICAg
IC8vIHRvIGJlIG1vcmUgc3BhY2UgZWZmaWNpZW50LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDEzCi0gICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0p
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKLSAgICB+
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcigpCisgICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlciB7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0
cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPiBtX2J1ZmZlcjsKKyAgICBNYWxsb2NQdHI8VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
Y3BwCmluZGV4IGM1Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0
N2YwZTE4ZGYwNjNhODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBA
QCBKU1ZhbHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0CiB7CiAgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS51bmJveGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUy
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1
MigpKTsKICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5h
TihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUo
KSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpKS51bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVy
biBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkQm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAg
Y2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5
NGYzMmEyOTNhZmQ4OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMw
OTRlNThkYTNiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAy
MWY1YWQwNDguLmViMGNjYzM4ZWRiYTRlODgzYmFhMTQ0MThiMDYxNmVlYWYzYTMyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAg
LTMxLDEyICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFu
ZElzTG9jYWwoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2Fs
KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVn
aXN0ZXJJc0FyZ3VtZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7
CiB9CkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElz
TG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNI
ZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVh
bFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAppbmRleCBmODBhN2M0ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2Uz
Li4yOWYzMGU0MmRmNjNiY2NkMGI4OTk3YmFkNDhjYTUwMWE2NTg1NTkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcApAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAg
ICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRv
IG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3Jj
MS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVh
bFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5
KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNy
YzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzIt
PnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkp
LT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7
CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5l
ZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIyOSw2ICszMjI5LDggQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAh
PSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMs
IHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDAp
LCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChWYXJhcmdz
T3AgIT0gT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpCisgICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1ZmZlZjBlZjI2Y2I1MWU2ZjkuLjQyZGI5N2Q2
NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTEwMDcs
NiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRDb250
cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVHZW5lcmF0aW9uTW9k
ZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNvbnRyb2xGbG93UHJvZmlsZXIpOyB9CiAg
ICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAgICB2b2lkIHNldFVzZXNDaGVja3BvaW50
cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KIAogICAgICAgICBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnBhcnNl
TW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZj
MTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0
IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhlYXA6
OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAg
IG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJh
Y3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGtp
bmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBSYW5n
ZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgiKCIp
OworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQucHJp
bnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIsIHBh
eWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4u
M2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRl
ICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIz
LDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXlsb2Fk
KE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAg
ICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVlKG9w
ZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxvYWQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFuZChv
cGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7CkBA
IC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQgIT0g
SW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAmJiBr
aW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5bG9h
ZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXlsb2Fk
KCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVh
cCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5kIG9w
ZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAmJiAh
cGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5
bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBl
KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRhY2I1NDBkNDBhZTE3OThm
N2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uM2NjZTJkZjcyN2I2OTE4MWY0YjZiNTVkMTU4NzViYTZl
NmQ3NTQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9w
ZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9w
ZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVh
ZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5p
c1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7
CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQp
OwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNo
ZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5
cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkK
QEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAg
bV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMg
aGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBtZWFu
cwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9m
LWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAg
ICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJh
bmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1OCw2ICs0NTgsMTIgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRU
eXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAg
ICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJl
Y29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDc2LDcgKzQ4
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJhbmQo
ZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRl
Lm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAg
ICAgICAgbV9zdGF0ZS5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQo
KSArIGkpKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKaW5kZXggZDczMjQ3
YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4uODljMDhmYTA4MGNlYTMyZmQ5YzU5
MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxl
c1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJp
YWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5v
cGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYyZWRhNGFkODhlOWI5N2FhZDVmNGY5
MzkyMzc2MjE5NTJhZWY4NC4uZmEyNGM2OWQwZmVjYjdiYWZjNzA1ZDg1YzNjNWFkMGM2NTM5MWU4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGlt
aW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSArMzU4LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJn
c0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRo
U3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5jaGlsZDEo
KS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBlc2Nh
cGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3Ao
KSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9
PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZl
cikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+YXJndW1lbnRzQ2hpbGQo
KSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtNDkzLDEwICs0OTYsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAu
cGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0byBhbiBhcmd1bWVudCBvciBsb2Nh
bCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQgU2V0QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQo
cmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhbmQuaXNIZWFk
ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5v
cGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC01NjAsMTIg
KzU2MywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xv
YmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJlZEJ5
QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNC
bG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXND
bG9iYmVyZWRCeUJsb2NrKSB7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVhcCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgpID09
IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5l
Q2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CkBAIC04NDUsOSArODQ4LDIzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5n
dGg6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVk
QWxsb2NhdGlvbihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwgc28gaXQgYmV0
dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKKworCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50
c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG9yaWdpbiwg
LyogYWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewotICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0No
aWxkKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9j
YXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTg2MiwxMCArODc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9k
ZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtl
VmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzTm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0
YS0+Y291bnQpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdp
bi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNo
ZWRJbnQzMikpLApAQCAtODc0LDE0ICs4OTEsMTUgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
ICAgICAgICBhdXRvIHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBzdG9y
ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
dmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxT
dGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8o
cmVnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50
LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndp
dGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRh
dGEpLCBFZGdlKHZhbHVlKSk7CkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNh
bmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zm
c2V0OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0Rh
dGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJnc0Rh
dGEtPmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXggNjI2
MTEyM2NiZmVjM2ViYTE5NWQwOWI5MzEwMjZmMjZjNzI1ODQ3Ni4uMjA2ZDZmYmRjNTRhMzZjYjg0
MThhOGIzODU0NmQ4NzU3Nzk5MDFiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9wZXJhbmQuaXNUbXAo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCByZWcu
aXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC01MiwxMyArNTYsMTMgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICByZXR1cm4g
cmVnID49IGFyZ3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51bUFyZ3VtZW50
czsKIH0KIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2Rl
KiBjYW5kaWRhdGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJndW1lbnRzSW52
b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUo
KSwgcmVnKTsKKyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9CiAKIE5vZGUq
IGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmIGlu
c2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmln
aW4gb3JpZ2luKQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVu
dHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgYWRkVGhpcykK
IHsKICAgICBHcmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApAQCAtNjksMTEg
KzczLDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAg
ICAgfHwgYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAgIHx8IGFyZ3Vt
ZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVm
ZmVyCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkLAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAgICAgYXJndW1l
bnRzLT5vcCgpKTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkK
KyAgICAgICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRp
b25TZXQsIGFyZ3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9yaWdpbiwgYWRk
VGhpcyk7CisKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSAw
OworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IGFkZFRoaXM7
CiAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRWZWN0b3IoKTsK
ICAgICAgICAgTm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpAQCAtMTAzLDcg
KzExMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKIAogICAg
IGlmIChhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5zZXJ0aW9uU2V0
Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVy
KGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgo
KSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50cy0+
Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRoaXMp
KTsKICAgICB9CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBh
cmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAgLTExMyw3ICsx
MjAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAg
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+PSBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0IEBAIE5vZGUq
IGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9kZUluZGV4LCBT
cGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tlZCks
CiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdp
biwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsKKyAg
ICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCArICFhZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkgewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1Y2Ug
YSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJlY3Qg
dGhhdCBoZXJlLgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwgCiAg
ICAgICAgICAgICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMCks
IEludDMyVXNlKSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JV
c2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVzZSkpOwogICAg
ICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5kZXgg
OWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5ZTgxNjIyZDQw
MjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFj
a1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wgYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rlcik7Citib29s
IGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCk7Citi
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5kKTsK
IAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlv
blNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luKTsK
KyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwg
Tm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2MyOGJk
NC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAgLTEz
OSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9i
bG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZhbHVl
JiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3Bl
cmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIHsgcmV0
dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJzdHJh
Y3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRh
aWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5j
cHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJhNS4uYzJiNTVh
YTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEwIEBA
IHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0eU1h
cDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsKLSAg
ICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVtYmVyT2ZBcmd1
bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFuZHNM
aWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFwaC5m
b3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoVmlydHVh
bFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAg
ICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAgICAg
ICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1NTI1NjAyM2Rk
Y2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0ZTIz
YzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAgewog
ICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFtZSBB
ZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKKyAg
ICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3QgSGFzRnVuY3Rv
ciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFiaWxp
dHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICBBdmFpbGFi
aWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAgICAgIGlmICgh
YXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCAwNTg0NDk2
M2U2MTBlZDI5M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYxNTYxOGI4MDY0
YTNhN2IyZDc4NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVC
ZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4
ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1bnNp
Z25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVnaW4o
Ynl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgsMTEg
QEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2VuZGlm
CiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAg
ICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIGludGVyc2Vj
dGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAg
LCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYgKzcwLDE1IEBA
IHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAg
ICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjplbnN1
cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVuc3Vy
ZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVt
VG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFs
dWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0aW9uT2ZQYXN0
VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRv
cCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWluYWwo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggYjVhZGYw
OTEyZDA5NDJiZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRjNmY0ZDFiMDg1
YmM4ZTA2MjU0ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKQEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4gQmxv
Y2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+
IHsKICAgICBCYXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQg
bnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25Db3Vu
dCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNp
Z25lZCBuZXdOdW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1U
bXBzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6
ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApp
bmRleCA3NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4wMDhjZjUyMjY5
NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBAQCB2
b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNCbG9j
az4mJiBibG9jaykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXpl
X3QgaW5kZXgsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291bnQp
KTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2so
Qnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMo
KSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAg
IGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92ZShi
bG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAppbmRleCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQwOGI3Li4xZTg2
MWRjMWE3NGQ5NzU4MzU4MDhmZTg4ZTg2NzkzNDBhODNhZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYgKzExMSw3IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJlcigx
KSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkp
CisgICAgICAgICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAgICwg
bV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAg
ICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMp
OwogICAgIH0KIAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQorICAg
IHsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRvIHJhaXNl
IG1fbnVtVG1wcyBmcm9tICIsIG1fbnVtVG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4iKTsK
KyAgICAgICAgaWYgKG5ld051bVRtcHMgPD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX251bVRtcHMgPSBuZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgu
YmxvY2soaSktPmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBIZWxw
ZXIgZm9yIG1pbiBhbmQgbWF4LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+
CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5cGUg
b3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBj
b25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwpAQCAtMjcwLDI1ICsyODIsMzMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJhc2lj
QmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFy
Z2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwcm9ncmVzc0NoZWNrcG9pbnQo
KQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVu
dEluZGV4Lm9mZnNldCgpLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKKyAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCwgaXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KKyAgICAgICAg
bV9leGl0T0sgPSB0cnVlOworICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAgICAg
cHJvY2Vzc1NldExvY2FsUXVldWUoKTsKKyAgICB9CisKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNU
bXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAg
ICAKICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFuZCk7
CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CiAg
ICAgfQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVj
b2RlIGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5k
LmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKIAot
ICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7CisgICAg
ICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAK
LSAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgotICAgICAgICByZXR1cm4gZ2V0TG9jYWwob3Bl
cmFuZCk7CisgICAgICAgIHJldHVybiBnZXRMb2NhbE9yVG1wKG9wZXJhbmQpOwogICAgIH0KIAog
ICAgIE5vZGUqIGdldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKQEAgLTI5OCw4ICszMTgsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRzLnNp
emUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1fY29u
c3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ29kZUJsb2Nr
JiBjb2RlQmxvY2sgPSAqbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7Ci0gICAgICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNl
dCgpKTsKLSAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBj
b2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBp
ZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fY29u
c3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCkBAIC0z
NTgsOSArMzc4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGluaXRpYWxpemluZyBsb2NhbHMg
YXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgogICAgICAgICBJbW1lZGlhdGVOYWtlZFNldAogICAg
IH07Ci0gICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorCisgICAgTm9kZSogc2V0RGlyZWN0
KE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNl
dCkKICAgICB7Ci0gICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQub2Zm
c2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJh
bmQpLCB2YWx1ZSk7CiAKICAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnltb3JlIGJlY2F1c2Ug
b3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICAgICBtX2V4aXRPSyA9IGZhbHNl
OwpAQCAtMzc0LDcgKzM5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
ZGVsYXllZC5leGVjdXRlKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgcHJvY2Vzc1Nl
dExvY2FsUXVldWUoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKQEAgLTM5MiwxOCArNDEzLDE3IEBAIHByaXZhdGU6
CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNTRVJU
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkgPT0gbV9jdXJyZW50SW5kZXgp
OwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5vcGVyYW5kKCkpOwog
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9s
YXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAgICAgICAgIG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwg
d2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRMb2Nh
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbE9yVG1wKE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xv
Y2FsKCk7Ci0KLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8IG9w
ZXJhbmQuaXNMb2NhbCgpKTsKKyAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICAvLyBU
aGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRhdGFz
LCBhbmQgMikKICAgICAgICAgLy8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBHZXRM
b2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IKQEAgLTQyOCwyMCArNDQ4LDI1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsK
ICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOwogICAgICAgICByZXR1
cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgc2Vt
YW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldExvY2FsT3JUbXAoY29uc3QgQ29k
ZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNl
dE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CisgICAgICAgIEFTU0VSVChvcGVyYW5k
LmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICBTZXRGb3JTY29wZTxDb2Rl
T3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3Jp
Z2luKTsKIAotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKLSAgICAg
ICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQ
b3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpICYm
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpID49IG1fbnVtVG1wcykgewor
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigqaW5saW5lQ2FsbEZyYW1lKCkpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQgb3Bl
cmFuZDogIiwgb3BlcmFuZCwgIiBidXQgY3VycmVudCBudW1iZXIgb2YgdG1wcyBpczogIiwgbV9u
dW1UbXBzLCAiIGNvZGUgYmxvY2sgaGFzOiAiLCBtX3Byb2ZpbGVkQmxvY2stPm51bVRtcHMoKSwg
IiB0bXBzLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRl
TmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1bWVu
dFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2Nh
bChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICAg
ICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9jb2Rl
QmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVl
ZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkp
CiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUxLDcg
KzQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVj
a0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgQmFk
SW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDgsMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0QXJn
dW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5v
ZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVyYW5k
IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAg
ewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50
U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnQg
PSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3Vt
ZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
cmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9yICd0
aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFrZSBz
dXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwgbV9n
cmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9IElt
bWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgp
ID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OCwxNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkg
LSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAg
ICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
Ci0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24o
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChv
cGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlv
bkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25G
b3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NzUsNiArNjAzLDcgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNvZGVC
bG9jayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUg
dG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQgdG8g
dGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRlY29k
ZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFwcHJv
cHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4pKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1DYWxs
ZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNz
QXRCeXRlY29kZVtsb2NhbF0pCkBAIC01ODQsMjcgKzYxMywyNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNo
RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
dm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERp
cmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3Np
dGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3Bl
cmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAg
IGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24p
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQgYWRk
Rmx1c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3Np
dGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwo
T3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VS
VChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFu
dCgpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAK
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02MTQs
MjYgKzY0MywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9HcmFw
aChub2RlVHlwZSwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChhcmd1
bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUo
dmFyaWFibGUpOwogICAgIH0KIAotICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQgb3Bl
cmFuZCkKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxvY2Fs
PihvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAg
dm9pZCBmbHVzaChJbmxpbmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKLSAg
ICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVh
bFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZs
dXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1
c2hEaXJlY3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0VudHJ5
LT5tX2lubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZvaWQg
Zmx1c2hGb3JUZXJtaW5hbCgpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0g
WyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0
KHJlZyk7IH07Ci0gICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVjdChy
ZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJh
bWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAgICAg
IGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVy
YW5kIG9wZXJhbmQpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBm
bHVzaEZvclRlcm1pbmFsSW1wbChjdXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVjdCwg
YWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3ODksMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxk
MykpOwogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBOb2Rl
KiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxkMSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIGFk
ZFRvR3JhcGgob3AsIE9wSW5mbyhvcGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZhbHVl
KCkpLCBjaGlsZDEpOworICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBP
cEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRn
ZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9
IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwOTEsOCArMTEyNCwxMCBAQCBwcml2YXRlOgogCiAgICAg
Ly8gVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICB1
bnNpZ25lZCBtX251bUFyZ3VtZW50czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFy
cyArIHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVtYmVy
IG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBmb3Ig
dGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBtYXgg
bnVtYmVyIG9mIHRlbXBzIHVzZWQgZm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhpdCB0
byBjaGVja3BvaW50LgorICAgIHVuc2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVtYmVy
IG9mIHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8K
ICAgICAvLyBwcmVhbGxvY2F0ZSBmb3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZyb20g
dGhpcyBmcmFtZS4gVGhpcwogICAgIC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1lIHNs
b3RzIHRoYXQgd2UgaW5pdGlhbGl6ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5NCwx
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsKICAg
ICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIGNvbnN0CisgICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJhbmQg
b3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxG
cmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVy
YW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgp
KTsKIAotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgp
ICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
OwogICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNzUsMTMgKzEyMTMsOCBAQCBwcml2YXRl
OgogICAgIElDU3RhdHVzQ29udGV4dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAgICAg
c3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFsdWU7
Ci0gICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXllZFNl
dExvY2FsKCkgeyB9Ci0gICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBv
cmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRN
b2RlKQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBP
cGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAgICAg
ICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAg
ICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCkBAIC0xMTk0LDggKzEyMjcsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3Bl
cmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNl
dExvY2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAgICAg
ICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1f
dmFsdWUsIG1fc2V0TW9kZSk7CiAgICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1fb3Jp
Z2luOworICAgICAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1ZSB7
IG51bGxwdHIgfTsKKyAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAKICAg
ICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4LDcg
KzEyNDYsNyBAQCBwcml2YXRlOgogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRl
VGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NF
UlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYo
Km5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2Fs
cywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNC
bG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1w
cywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgLy8g
bV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5n
IG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9j
a0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKQEAgLTEyMjAsNyArMTI1OCw3IEBAIEJhc2ljQmxvY2sq
IEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFy
Z2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigq
bmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2Nh
bHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2lj
QmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVt
VG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAg
bV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRy
OwpAQCAtMTQyMyw3ICsxNDYxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJz
aXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUgaXMg
VmFyYXJncywgd2UgZG8gbm90IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxseSBm
aWxsZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAgICAg
ICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBv
dGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIg
dG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVk
IGFyZ3VtZW50cyBieSB4a0xvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBm
cmFtZSB3aGljaCBtYXkgYmUKICAgICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVtcCBp
bnRvLgogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0xNjE0LDE2ICsxNjUyLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQsIENhCiAgICAgQVNTRVJUKCEobnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90cyAlIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwID0g
cmVnaXN0ZXJPZmZzZXQgLSBudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzOwogICAgIAotICAgIGlu
dCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkub2Zmc2V0KCkgKyBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKyAgICBPcGVyYW5kIGlubGluZUNhbGxGcmFt
ZVN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAKICAgICBlbnN1cmVMb2NhbHMoCi0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgpICsg
MSArCisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnRvTG9jYWwoKSArIDEgKwogICAgICAg
ICBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIGNvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCkpOwogICAgIAorICAgIGVuc3VyZVRtcHMobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKE9wZXJhbmQoVG1wT3BlcmFuZCwgY29kZUJsb2NrLT5udW1UbXBzKCkpKS52YWx1ZSgp
ICsgbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKKwogICAgIHNpemVfdCBhcmd1bWVu
dFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCiAg
ICAgaWYgKHJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOworICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAogICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxscHRyOwogICAgIGlmIChjYWxsZWUu
aXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xNjM2LDcgKzE2NzYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBDYQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSogY2FsbGVyU3RhY2tUb3AgPSBtX2lubGlu
ZVN0YWNrVG9wOwogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlzLCBj
b2RlQmxvY2ssIGNvZGVCbG9jaywgY2FsbGVlLmZ1bmN0aW9uKCksIHJlc3VsdCwKLSAgICAgICAg
KFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKKyAgICAgICAgaW5saW5lQ2FsbEZy
YW1lU3RhcnQudmlydHVhbFJlZ2lzdGVyKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBr
aW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1
YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgQnl0ZWNvZGVJbmRleCBvbGRJbmRleCA9
IG1fY3VycmVudEluZGV4OwpAQCAtMTY3MSw5ICsxNzExLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgQ2EKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3ZSBiZWdpbiBleGVjdXRpbmcgdGhlIGNh
bGxlZSwgd2UgbmVlZCBPU1IgZXhpdCB0byBiZSBhd2FyZSBvZiB3aGVyZSBpdCBjYW4gcmVjb3Zl
ciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZXR0ZXIsIGxvYzkgYW5kIGxvYzEwLiBUaGUgTW92SGlu
dHMgaW4gdGhlIGlubGluZWQKICAgICAgICAgLy8gY2FsbGVlIG1ha2UgaXQgc28gdGhhdCBpZiB3
ZSBleGl0IGF0IDxIRVJFPiwgd2UgY2FuIHJlY292ZXIgbG9jOSBhbmQgbG9jMTAuCiAgICAgICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsg
KytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBj
YWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlu
ZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvR2V0
ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBP
cEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3Jp
Z2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTcsMTYgKzE3NTcsMTYgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcywgd2UgZG8gbm90IG5lZWQgdG8g
bW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgIT0gcmVn
aXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNl
dCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50VG9H
ZXQpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvU2V0ID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlu
ZGV4KSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1l
bnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3Vt
ZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQs
IE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIG1fc2V0TG9j
YWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJn
dW1lbnRUb1NldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcml0eUZpeHVw
Q291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRv
U2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKLSAgICAgICAgICAg
IGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB1bmRl
ZmluZWQpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGlu
dCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgbV9zZXRM
b2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBh
cmd1bWVudFRvU2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9
CiAKQEAgLTE4OTMsMTIgKzE5MzMsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFy
YXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAg
ICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0Fy
Z3VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGludCByZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ID0K
LSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMb2NhbHMoVmlydHVhbFJlZ2lz
dGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAgICAgIAogICAgICAg
ICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lu
bGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQp
KS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLnZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0
YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgMSk7CkBA
IC0xOTA2LDExICsxOTQ2LDI0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGRh
dGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAgICAgZGF0YS0+bGltaXQgPSBtYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWluaW11
bSA9IG1hbmRhdG9yeU1pbmltdW07Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbE9wID09IFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJh
cmdzLCBPcEluZm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRUb0dyYXBo
KExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworCisg
ICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAg
ICAgTm9kZSogYXJndW1lbnRDb3VudDsKKyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
KCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoR2V0QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lQ2FsbEZy
YW1lKCktPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBnZXRE
aXJlY3QocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1f
Z3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBP
cEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAgICAg
IGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3BlcmFu
ZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICAgICAgc2V0
RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhkYXRh
KSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQoKTsKKworICAg
ICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXRMb2NhbE9y
VG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVwIGFs
aXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3VtZW50
c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQgYSBQ
aGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rl
cgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29u
cyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNTQS4K
ICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNvdW50
KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2UgdGhl
IGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAgLy8g
bWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5pdGVs
eSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3RseSBq
dXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3go
dHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNldEFy
Z3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2Fs
KCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudENv
dW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFy
dCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVuc2ln
bmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDYsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZp
cnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBO
b2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRhdG9y
eU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcElu
Zm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRzOwog
ICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNiw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpD
YWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAg
ICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0ZXJP
ZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZFUkJP
U0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAgICBz
ZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNo
KTsKIApAQCAtNTEwMiw3ICs1MTU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4o
KTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkpOwot
ICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ry
b25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5t
X3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4
cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpzQ29u
c3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfcmVn
ZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAmJiBt
X2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5vcCgp
ID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7
CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZl
ciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAgICAg
IGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOyAv
LyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSBy
YWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ4LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAg
ICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQo
cHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIyMywxNCArNjI3
NiwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkpOwog
ICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hMb2Nh
bCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVtYmVy
T2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5k
KSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVuZChz
dGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTEsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVl
KiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5m
cmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5
dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZl
T2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYgKGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4MjYsOCArNjg3
OSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVu
dmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUu
aXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7Ci0g
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9u
ZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxW
YWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAgICAg
ICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9s
VGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBo
LmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
Ynl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0gZ2V0
KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50
ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBPcElu
Zm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0
LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNzI3NSw4ICs3MzI4LDEwIEBAIEJ5dGVDb2RlUGFy
c2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAvLyBUaGUg
b3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIGJh
cnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgogICAgICAg
ICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRlQmFy
cmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUtPnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9jYWxs
ZXItPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2NvZGVC
bG9jay0+bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zm
c2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewogICAg
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsID0gZmFsc2U7CkBAIC03NjM4LDcgKzc2OTMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpICE9IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtNzY1OCwyNCArNzcxMywyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzc29yLT5wcmVkZWNl
c3NvcnMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdP
cCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBP
cGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFu
ZCBhcmd1bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIG9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50LmlzQXJndW1lbnQoKSAmJiAhYXJndW1l
bnQuaXNIZWFkZXIoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3Rv
cjxBcmd1bWVudFBvc2l0aW9uKj4mIGFyZ3VtZW50cyA9IG1faW5saW5lQ2FsbEZyYW1lVG9Bcmd1
bWVudFBvc2l0aW9ucy5nZXQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNbYXJndW1lbnQudG9Bcmd1bWVudCgpXS0+YWRkVmFyaWFibGUodmFy
aWFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgb3AsIG9yaWdp
biwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNl
cnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIEZsdXNoLCBvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFu
dG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFBo
YW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5l
c3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBQaGFudG9tTG9jYWwsIG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1p
bmFsSW1wbChvcmlnaW4uc2VtYW50aWMsIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9jYWxE
aXJlY3QpOwpAQCAtNzc0MCw2ICs3Nzk1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2Uo
KQogICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50
cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50
cygpKTsKICAgICB9CiAKKyAgICBtX2dyYXBoLm1fdG1wcyA9IG1fbnVtVG1wczsKICAgICBtX2dy
YXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRlclNs
b3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkFQaGFzZS5jcHAKaW5kZXggOGU5YmI0YWNiZTU1MDJkZGE3YjM3NDc4NGI1YTg1ZmZkZTcwM2Jm
ZC4uM2RjNzU2OGYxZWUyYzY5NzcyMjY4Y2M5NmRlYTRhMDVjNjIzNjI1MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE3MCwyMiArMTcwLDIyIEBAIHBy
aXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBjb25zdCBPcGVy
YW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxh
bi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtdXN0SGFuZGxl
VmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgT3B0
aW9uYWw8SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAgICAg
aWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBO
b3QgbGl2ZSBpbiBieXRlY29kZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFub2Rl
KSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBvcGVyYW5kLCAi
XG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBXaWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIgd2l0aCAiLCB2YWx1
ZS52YWx1ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBXaWRlbmluZyAi
LCBvcGVyYW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHRhcmdldCA9IGJsb2NrLT52YWx1ZXNBdEhlYWQu
b3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdGFyZ2V0Lm1lcmdlT1NS
RW50cnlWYWx1ZShtX2dyYXBoLCB2YWx1ZS52YWx1ZSgpLCBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSwgbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcAppbmRleCBkOThmZDRhZjQ0MGYwN2NiYzE2YjY3ZDYwMmJhNjQy
NmFmMGYyMzgyLi41NzcwZjA5ODk0MmM4OTZiN2FjZjgyM2ZjYWI5NDQ0YTIyNGNjZWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBzcGVjaWFsQ2FzZUFyZ3Vt
ZW50cygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKICAgICAgICAg
cHJvcGFnYXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBoaXM8
VG1wT3BlcmFuZD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hlZCgpOwogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAgLTIxMSwxMCArMjEyLDIwIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQogICAg
IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgp
KQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgc3dp
dGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3VtZW50
T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRP
cGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9wZXJh
bmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogeworICAgICAg
ICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8VG1wT3BlcmFuZD4obm9kZSwgdmFyaWFibGUs
IHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVU
eXBlLCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBBU1NFUlQob3Ro
ZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90
aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
YW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAg
ICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVu
dE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+
bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCku
a2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAgICBj
YW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9wZXJh
bmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDog
eworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlw
ZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xv
Y2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUbXBP
cGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9y
PG5vZGVUeXBlLCBUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQo
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXQoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2FsKCks
IG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2Rl
LT5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxv
Y2Fsc0luQmxvY2soKQpAQCAtMjg5LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBjbGVhclZhcmlhYmxlczxBcmd1bWVudE9wZXJhbmQ+KCk7CiAgICAgICAgIGNsZWFyVmFy
aWFibGVzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8VG1wT3BlcmFu
ZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVyZW5j
ZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAogICAgICAgICAv
LyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24ndCBh
c3N1bWUgdGhhdCB0aGUgcmVmCkBAIC0zODgsNyArNDExLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1w
bGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICB2b2lkIHByb3BhZ2F0ZVBoaXMoKQog
ICAgIHsKLSAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gb3Bl
cmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9sb2Nh
bFBoaVN0YWNrOworICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sg
PSBwaGlTdGFja0ZvcjxvcGVyYW5kS2luZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5LgogICAgICAgICBtX2Js
b2NrID0gMDsKQEAgLTQ2Niw5ICs0ODksMTIgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhp
U3RhY2tGb3IoKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3Bl
cmFuZCkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Ci0gICAgICAgIHJl
dHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAg
ICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Cisg
ICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAg
ICBjYXNlIFRtcE9wZXJhbmQ6IHJldHVybiBtX3RtcFBoaVN0YWNrOworICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcHV0ZUlzRmx1c2hlZCgpCkBAIC01MjEsNiArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fYXJndW1l
bnRQaGlTdGFjazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2xvY2FsUGhpU3Rh
Y2s7CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV90bXBQaGlTdGFjazsKICAgICBW
ZWN0b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAppbmRleCAyMzgxYzZiOGY4ZjRiYTc2
MzRiYjY2YjEyMzk0NzFiNWE2MTY2N2NlLi40Y2NlMTc0ODgzZTIwNDEwZDYyMjNhNmY0MTcyZWRk
ZTY5OGFhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcApA
QCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFN0YWNrOiB7CiAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkp
OwotICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gaGVhcC5wYXls
b2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVt
b3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlm
IChjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgbV9mYWxsYmFja1N0YWNr
TWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNzIsNyArMTcxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGlmICghY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAocGFpci5rZXkuaGVhcCgpLmtp
bmQoKSA9PSBTdGFjaykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9h
YnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUz
MigpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQo
KSAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBwYWlyLmtleSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yMjYsOCArMjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBhYnN0
cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CiAgICAgICAgICAgICBpZiAoYWJzdHJhY3RIZWFw
LnBheWxvYWQoKS5pc1RvcCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBhZGQobV9mYWxsYmFj
a1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWJzdHJhY3RI
ZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUzMigp
KTsKLSAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5h
ZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCksIG51bGxwdHIpOworICAgICAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhl
YXAucGF5bG9hZCgpLnZhbHVlKCksIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJlc3Vs
dC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9uLCBub2RlLCAwfSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksOCArMjQ3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBTaWRlU3RhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICBjYXNlIFN0YWNrOiB7Ci0gICAgICAgICAgICBBU1NFUlQobG9jYXRp
b24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpID09IGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCku
dmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0
YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAg
ICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2NhdGlv
bi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKICAgICAgICAgICAgICAgICAmJiBpdGVyYXRv
ci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0
b3ItPnZhbHVlLT52YWx1ZTsKQEAgLTI5OCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgIC8vIGEg
ZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1fZmFsbGJhY2tTdGFj
a01hcC4KICAgICAvLwogICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBnb2VzIGludG8gbV9m
YWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlxdWUgdmFsdWUuCi0g
ICAgSGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZh
dWx0SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
aW50MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBz
dGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQ2NF90Pjo6SGFz
aCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50NjRfdD4+IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXA7CiAgICAgTWFwIG1fZmFsbGJhY2tTdGFja01hcDsKIAogICAgIE1hcCBtX2hl
YXBNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDg5
YmM2NDFmNTI2YmI1M2ZmMDM3ZjczY2Y5NTBiYWM2NDZkNDk5NTQuLmUwYTA3YzdjZTZlNGQ1MjRk
OTY1NDRjNWQwMDgzMmMyYzM5NWI5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCkBAIC0xMTEsOSArMTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAvLyBzY2FuIHdvdWxkIHJlYWQuIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlu
bGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkK
LSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAK
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNwZWNpZmljYWxseSBhY2NvdW50IHdoaWNoIG5vZGVz
IGNhbiByZWFkIGZyb20gdGhlIHNjb3BlCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7Cisg
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAtNDk3
LDcgKzQ5Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNv
bnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5s
b2NhbCgpKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5k
KCkpKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBAIC03
ODgsMzYgKzc4OCw0MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tM
b2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlKSk7
CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywg
bm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFu
ZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAgICAg
ICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RI
ZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFu
ZCk7CiAgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
TG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAg
ICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CisgICAgICAgIHJldHVybjsgIAorICAgIH0K
KwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAg
IHdyaXRlKEhlYXApOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5j
b3VudC5vZmZzZXQoKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsg
aS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQu
b2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyNiw5ICs4MzMsOSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50Pihp
KSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCAr
IHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5l
c3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNw
cAppbmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0NmMw
NTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAg
c3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0
eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2Rl
KAogICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAgIHJl
ZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUwOWY5
MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2FkYi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEzMzJm
ZDUyNDk2NTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9y
aWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChj
b2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7
CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bv
c2FibGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRh
OjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0LDEz
ICs2NCwxMyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5k
ZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3Jp
Z2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAg
QVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVD
YWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjpsYXN0
Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNpemUo
KSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lucy5z
aXplKCkgLSAxKSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVPcmln
aW5zLnNpemUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25EYXRh
OjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggODU0MTIzMTQ3NDFlNmYxMTI2
MWYyZTk3YzQ5ZmU2NDRkYWU3YmFmNy4uZjM4YzgzZmRkMzBjMmY1M2IzZDUwOTNmNDBiMmM3MGU5
NTMxMDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjk0
LDYgKzI5NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1
c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdX
aXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1ZmJj
NDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0
IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0
aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAgICB2
bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICB2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWVlMWYwMDczYjBmNGJiY2M0NzM0ZWI2
NDFlNDY0OGMzMDU1YTI0NC4uY2EzM2RiMjI3ZDRiOTI3NzNmYTg2ZDcyZWUzZDRkMWI4NWJmOTgz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0y
NDMyLDYgKzI0MzIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKwogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0
IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ2NCw4ICsyNDcyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNh
c2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAg
Y2FzZSBOZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGb3JBbGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxs
cy5oCmluZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLjkzM2Ey
YmRlMjJlMTY2YzJhZWI2ZDRhYzFiYmU5Y2UxZTVjZWQ1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJuYWwg
eworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMgZm9y
IGZpbmRpbmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBTU0Eu
IFRoaXMgYWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMgaXMg
dXN1YWxseSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBwb2lu
dHMgd2hlcmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3aGVy
ZSB0aGUgbm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9ncmFt
IHBvaW50cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE9w
ZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBj
b25zdAogICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JF
eGl0OwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3BlcmFu
ZCBhbHJlYWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBs
aXZlIGF0IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAobm9k
ZUFmdGVyLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gbm9kZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAg
ICAgICAgICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5v
ZGVBZnRlci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5
dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsK
KyAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC03MCw4ICs3NCwyNCBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgIC8vIG90
aGVyIGxvb3AsIGJlbG93LgogICAgIGF1dG8qIGJlZm9yZUlubGluZUNhbGxGcmFtZSA9IGJlZm9y
ZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1lID09IGFm
dGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9y
ZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAw
OwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGJlZm9yZUlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhZnRlci5ieXRlY29kZUlu
ZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVjb2Rl
SW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQo
KSk7CisKKyAgICAgICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2tw
b2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGF1
dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVy
LmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBpbnQgdG1wT2Zmc2V0ID0gYmVmb3JlSW5s
aW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAg
ICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5maWx0
ZXIobGl2ZUFmdGVyKTsKKworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsm
XSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoT3BlcmFuZChUbXBPcGVy
YW5kLCB0bXAgKyB0bXBPZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgLy8g
Tm8gbG9jYWxzIGNhbiBkaWUgYXQgYSBjaGVja3BvaW50LgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZy
YW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihjb2Rl
QmxvY2spOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVsbExp
dmVuZXNzLmdldExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3Vs
YXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2
ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSwg
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwpAQCAtODIsMTcgKzEwMiwyMSBA
QCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9y
ZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgICAgICAgICAgfSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhZnRlci5ieXRlY29k
ZUluZGV4KCkuY2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmluZyBhY3Jvc3MgYSBjaGVja3BvaW50
IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFuIGlubGluZUNhbGxGcmFtZS4iKTsK
KwogICAgIC8vIERldGVjdCBraWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQgaXMg
a2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBCaXRWZWN0
b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwotICAgIGdy
YXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZlQWZ0ZXIg
PSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOworICAgIHVuc2lnbmVk
IG51bUxvY2FscyA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAg
ICAgIGJlZm9yZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAg
ICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3RlZCkKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9Mb2Nh
bCgpKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/IG51
bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAgICAg
ICAgaWYgKGxpdmVBZnRlci5nZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOwog
ICAgICAgICB9KTsKIH0KICAgICAKQEAgLTEwNSw3ICsxMjksOCBAQCB2b2lkIGZvckFsbEtpbGxl
ZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWVuSW5D
bG9zdXJlRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxsZWRGdW5j
dG9yRmxhZyA9IDI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IGZsYWdzOwotICAgIAor
CisgICAgQVNTRVJUKG5vZGVJbmRleCk7CiAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOwogICAgIAogICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKQEAgLTEyMCwxNSArMTQ1LDEz
IEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSk7CiAKLSAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOwotICAgIGlmIChub2RlSW5k
ZXgpCi0gICAgICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKKyAgICBOb2Rl
KiBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CiAKICAgICBmb3JBbGxLaWxsZWRP
cGVyYW5kcygKICAgICAgICAgZ3JhcGgsIGJlZm9yZSwgbm9kZSwKLSAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAgICAgICAg
ICAgICAgICByZWcsCisgICAgICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAgICAgICAgICBb
Jl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxh
Z3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xvc3VyZUZsYWc7CiAgICAgICAgICAgICAgICAgfSwKQEAg
LTE1OSw2ICsxODIsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAgICAvLyBTdGFydCBh
dCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8gb25s
eSBpbnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVwIHRv
IG5vZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0aGUg
ZnVuY3RvciBoYXMgbm90aGluZyB0byBkby4KICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgIGRh
dGFMb2dMbklmKEZvckFsbEtpbGxzSW50ZXJuYWw6OnZlcmJvc2UsICJsb2NhbCBhdmFpbGFiaWxp
dHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRleCwgIiAiLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWls
YWJpbGl0eSk7CiAgICAgICAgIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAg
ICAgICBncmFwaCwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHksIGJsb2NrLCBub2Rl
SW5kZXgsCiAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggNzk2NDk4NTMzMTYwM2MzOGJiYWVjZTQzYjQ3YThiYTA4
NzliZDg3MC4uZjM1ZDY1YzJhOGRmMThmZmE3ZWVlZjU0NjFjYTMyYTNjNGIyYWMyMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTMwOCw4ICszMDgsOCBAQCB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9k
ZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCB2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgq
dGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigiLCBWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgICAgICAg
ICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CiAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKQEAgLTMxNywxMyArMzE3LDEzIEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBu
b2RlLCBEdW1wQ29udGV4CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNTdGFja0FjY2Vzc0RhdGEo
KSkgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7CisgICAgICAgIG91
dC5wcmludChjb21tYSwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIGlmIChkYXRhLT5tYWNoaW5l
TG9jYWwuaXNWYWxpZCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZToi
LCBkYXRhLT5tYWNoaW5lTG9jYWwpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmZv
cm1hdCk7CiAgICAgfQotICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZExvY2FsKCkpIAotICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgaWYgKG5vZGUt
Pmhhc1VubGlua2VkT3BlcmFuZCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpKTsKICAgICBpZiAobm9kZS0+aGFzVmVjdG9yTGVuZ3RoSGludCgpKQog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ2ZWN0b3JMZW5ndGhIaW50ID0gIiwgbm9kZS0+dmVj
dG9yTGVuZ3RoSGludCgpKTsKICAgICBpZiAobm9kZS0+aGFzTGF6eUpTVmFsdWUoKSkKQEAgLTUx
NSw5ICs1MTUsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgQmFzaWNCbG9jayoKICAgICAgICAgb3V0LnByaW50
KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0g
YmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+b3AoKSA9PSBQaGkp
OwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVE
dW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9k
ZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+b3BlcmFu
ZCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CiAgICAgICAgICAgICBpZiAo
cGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBwaGlO
b2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNo
aWxkMigpKSB7CkBAIC04ODQsNyArODg1LDcgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExv
Y2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAg
ICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+
bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICBpZiAo
bm9kZS0+b3BlcmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKQogICAgICAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtODkzLDkgKzg5NCw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2Nh
bChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAg
ICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NE
YXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3Vic3RpdHV0ZShi
bG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICBOb2Rl
KiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2Nr
LnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKTsK
ICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAgIGJs
b2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkg
PSBuZXdHZXRMb2NhbDsKKyAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkgPSBuZXdHZXRMb2NhbDsKICAgICAg
ICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtMTEzMywyMyArMTEzNCw0MyBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6a2lsbHNG
b3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgcmV0dXJuIGtpbGxzRm9y
KGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOwogfQogCi1ib29sIEdyYXBo
Ojppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNo
ZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgYm9vbCBp
c0NhbGxlck9yaWdpbiA9IGZhbHNlOworCiAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0ciA9
ICZjb2RlT3JpZ2luOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBjb2Rl
T3JpZ2luUHRyLT5zdGFja09mZnNldCgpKTsKKyAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBj
b2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRs
ZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCisgICAg
Ly8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KKyAgICBmb3Ig
KDsgY29kZU9yaWdpblB0cjsgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZSA/ICZpbmxp
bmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlciA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcE9mZnNldCA9IGlubGlu
ZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAgICAg
IHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZh
bHVlKCkpOworCisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC52YWx1ZSgpID49IDApOworICAg
ICAgICAgICAgLy8gVGhpcyB0bXAgc2hvdWxkIGhhdmUgYmVsb25nZWQgdG8gc29tZW9uZSB3ZSBp
bmxpbmVkLgorICAgICAgICAgICAgaWYgKG9wZXJhbmRJbmRleCA+IHRtcE9mZnNldCArIG1heE51
bUNoZWNrcG9pbnRUbXBzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBvcGVy
YW5kSW5kZXggPCB0bXBPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGF1dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ss
IGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gYml0
TWFwLmdldChvcGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBjb2RlT3Jp
Z2luUHRyLT5zdGFja09mZnNldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCJyZWcgPSAiLCByZWcsICJcbiIpOwogCi0gICAgICAgIGF1dG8q
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwotICAg
ICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkg
KyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgeworICAgICAgICBpZiAob3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0
KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgewogICAgICAgICAgICAgaWYg
KHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWcu
b2Zmc2V0KCkgPCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAKQEAgLTExNzYs
NDIgKzExOTcsNDEgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9y
KGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZnVsbExp
dmVuZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHByb3By
aWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmln
aW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAg
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9m
IHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShyZWcs
IGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2Rl
T3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQXJn
dW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQgd2Fz
bid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5nLgotICAgICAg
ICBpZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmIHJl
Zy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRv
QXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCkp
IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFy
Z3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2Ug
bWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2Rl
IGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRyID0gJmlubGlu
ZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdpbiA9IHRydWU7
CiAgICAgfQorCisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ss
IHJldHVybmluZyB0cnVlLlxuIik7CisgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIAogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9jYWxz
TGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9yIEdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAg
IEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRl
Y29kZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9jYWxzICsgYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9yQWxsTG9jYWxz
QW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgp
KTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAgICAg
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9w
ZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9M
b2NhbCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAgICAgICAgIH0p
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM0LDggKzE2NTQsOCBAQCBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5vZGU7IG5vZGU7
KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAgICAg
ICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsK
KyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQoKS5pc0FyZ3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5vcGVyYW5kKCku
dG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fcm9v
dFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkgbm9k
ZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0xNjU1LDcgKzE2
NzUsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAg
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNv
ZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBmYWI5Y2YwMmEy
NTk3NmVmNDdkMTc5MDViYWQ5Y2UwM2UzODJiY2U1Li5mN2ExZDgyMTRjMzAyZDdkOTZhYzJhNzdh
MDE4NjZhOWQxMTlmNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04
NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBpZiBhIHNpbmds
ZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBj
YWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5IHF1
ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0aGUKICAgICAv
LyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVjaCBz
bG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNMaXZlSW5CeXRl
Y29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5CeXRl
Y29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5IGdldCBhbGwg
b2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMg
ZG9lc24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3Vt
ZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0
IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwgcHJl
c3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgdG8KICAgICAv
LyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gY2FsbGlu
ZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmln
aW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lkIGZvckFsbExv
Y2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBub3QgcmVkdW5k
YW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBvZiBh
IHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dzIHRoYXQgYXJn
dW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAgLTg4
MSw2ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0
ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsK
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVjb2Rl
SW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
LT5udW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZlbmVz
c0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgp
KTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRt
cCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVDYWxs
RnJhbWUsIE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wKSkpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwNCw5ICs5MTIsOSBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBv
ZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkg
dXNlZnVsIGlmCisgICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbG9jYWxzIGFu
ZCB0bXBzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKICAgICAvLyB5
b3Ugd2FudCB0byBjb21wYXJlIHR3byBzZXRzIG9mIGxpdmUgbG9jYWxzIGZyb20gdHdvIGRpZmZl
cmVudCBDb2RlT3JpZ2lucy4KLSAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29k
ZU9yaWdpbik7CisgICAgQml0VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2Rl
T3JpZ2luKTsKIAogICAgIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBhcHByb3ByaWF0ZUxpdmVu
ZXNzQ2FsY3VsYXRpb25Qb2ludChDb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0NhbGxlck9yaWdp
bikKICAgICB7CkBAIC05MzgsMTIgKzk0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBM
aXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZTsKICAgICB9CiAgICAgCi0gICAgLy8g
VGVsbHMgeW91IGFsbCBvZiB0aGUgYXJndW1lbnRzIGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2
ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCi0gICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFs
bExvY2Fsc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBw
cmVzdW1lZCBsaXZlLgorICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxpdmUg
YXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAorICAgIC8vIGV4dGVuc2lv
biB0byBmb3JBbGxMb2NhbHNPclRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1l
bnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgogICAgIHZvaWQgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yQWxsTG9jYWxzTGl2
ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CisgICAgICAgIGZvckFsbExvY2Fsc0Fu
ZFRtcHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFzIGJlaW5nIGxpdmUuCiAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCk7IGFyZ3VtZW50LS07KQpAQCAtMTExNCw2ICsxMTIyLDcgQEAgcHVibGljOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRyb2xF
cXVpdmFsZW5jZUFuYWx5c2lzOworICAgIHVuc2lnbmVkIG1fdG1wczsKICAgICB1bnNpZ25lZCBt
X2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5zaWdu
ZWQgbV9wYXJhbWV0ZXJTbG90czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggOTlhZWZmY2RjMDVhMTFjNDViMDU3
NDEyNTBmNGQyYWViNGUyMjhjZC4uMjAyZDIyNTA1M2ZhOWRmYmU1YzIzYzY0YmNmOGJlMzg0ZTNl
NzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTQ1LDggKzQ1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9hYnN0cmFj
dFZhbHVlcygqZ3JhcGgubV9hYnN0cmFjdFZhbHVlc0NhY2hlKQotICAgICwgbV92YXJpYWJsZXMo
bV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5tX2xvY2FsVmFycykK
LSAgICAsIG1fYmxvY2soMCkKKyAgICAsIG1fdmFyaWFibGVzKE9wZXJhbmRzTGlrZSwgZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIG1fYmxvY2sobnVsbHB0cikKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5oCmluZGV4IGJmNWVhZDE4ZWMxNjQ3ZWUxNjc2Njg4MzU3NDAxZmE3ZmVjNzEyOTkuLjE4
NjVlNmExZWZmYzNkYWFlZmU1ODRjYTg2MmM0OWJjMzY4NTg1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKQEAgLTE2Nywx
MyArMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFi
bGVzW2luZGV4XSk7CiAgICAgfQogCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3Bl
cmFuZCkKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7
CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLm9wZXJhbmRJbmRleChvcGVy
YW5kKSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIHRoaXMtPm9wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSk7
IH0KLSAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpCiAgICAgewog
ICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5sb2NhbEluZGV4KGluZGV4KSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDNk
ODQzY2U1OGYyMGI0MTE2MzM5ZmNkYTk1ODhhZWJhNmI3YThjMmUuLjZmNTExOTk4NDNkN2VmNTdi
MzA1NTY5ZGYzODMwNjY2YzdmNmMxODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCkBAIC04NSw4ICs4NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3Ny
RXhpdFRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRvIG9zckV4aXRUaHVua0xhYmVsID0gQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9u
SW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJl
SnVtcHM7CkBAIC05NywxMyArOTUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMo
KQogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAgICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS5vc3JFeGl0SW5kZXgpOwotICAgICAgICBpZiAoT3B0
aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAgICAgICAgICAgIEp1bXAgdGFyZ2V0ID0ganVt
cCgpOwotICAgICAgICAgICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRodW5rTGFiZWxd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKHRhcmdldCwgb3NyRXhpdFRodW5rTGFiZWwpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1w
KCk7CisgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOwogICAg
IH0KIH0KIApAQCAtMjg4LDExICsyODAsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpCiAgICAgYXV0byB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxK
SVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JF
eGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwotICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoaW5mby5tX3BhdGNoYWJsZUp1bXAubV9qdW1wLCB0YXJnZXQpOwotICAgICAg
ICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAgICAgICAg
IGV4aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwotICAgICAgICB9CisgICAgICAg
IGxpbmtCdWZmZXIubGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRhcmdldCk7Cisg
ICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07CisgICAgICAgIGV4
aXQubV9wYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oaW5mby5tX3BhdGNoYWJsZUp1bXApOwogICAgICAgICBpZiAoaW5mby5tX3Jl
cGxhY2VtZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29tbW9u
Lmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5tX3JlcGxhY2Vt
ZW50U291cmNlKSwKQEAgLTU5NSwxMSArNTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGlj
ZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9j
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkgIT0g
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFyaWFi
bGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFu
ZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAg
ICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxS
ZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuY3BwCmluZGV4IDQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkzZTA4YWMyNWNhNjMx
MzQuLjQ1ZWNiNDZhYTI0NDNiYTFiOTU1NzE2YmMxZjQyYTcwOGExYTA0ODcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRp
b24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9jayog
c3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4gV2UganVzdCB1c2Ug
aXQgZm9yIGFzc2VydGlvbnMuIElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywKICAgICAgICAgLy8g
dGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2ggdGhhdCB3ZSBpbnNl
cnQuCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBmbHVzaElzRGVmaW5p
dGVseUludmFsaWQgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkgewog
ICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpbmRleDsgaS0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkp
LT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+bG9jYWwoKSA9PSBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFjayht
X2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGFsbEdvb2QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
aGFuZGxlQmxvY2tGb3JUcnlDYXRjaChCYXNpY0Jsb2NrKiBibG9jaywgSW5zZXJ0aW9uU2V0JiBp
bnNlcnRpb25TZXQpCiAgICAgewogICAgICAgICBIYW5kbGVySW5mbyogY3VycmVudEV4Y2VwdGlv
bkhhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdENhdGNoSGVh
ZDsKLSAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIE9wZXJhbmRzPGJvb2w+IGxp
dmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1w
cygpKTsKIAogICAgICAgICBIYW5kbGVySW5mbyogY2FjaGVkSGFuZGxlclJlc3VsdDsKICAgICAg
ICAgQ29kZU9yaWdpbiBjYWNoZWRDb2RlT3JpZ2luOwpAQCAtMTMzLDExICsxMzIsMTEgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
b3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFu
ZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOworICAgICAgICAgICAgICAgICAg
ICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CiAKICAgICAgICAgICAgICAgICAgICAgQnl0
ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGhhbmRsZXItPnRh
cmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0
ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
dmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2lu
KGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9w
ZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7CkBAIC0xNTYsMTIgKzE1NSwxMiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3VsdDsKICAgICAg
ICAgfTsKIAotICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50Qmxv
Y2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwg
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsKKyAgICAg
ICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG51bGxwdHIpOwogCiAgICAgICAg
IGF1dG8gZmx1c2hFdmVyeXRoaW5nID0gWyZdIChOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQg
aW5kZXgpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRFeGNlcHRpb25IYW5k
bGVyKTsKLSAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRD
YXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewor
ICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5vcGVy
YW5kKG9wZXJhbmQpKSB7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRGbHVz
aExvY2F0aW9uKGJsb2NrLCBpbmRleCwgb3BlcmFuZCkpOwogCkBAIC0xNzgsNiArMTc3LDggQEAg
cHVibGljOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gMDsgbG9jYWwgPCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsKyspCiAgICAgICAg
ICAgICAgICAgZmx1c2godmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdG1wID0gMDsgdG1wIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZlRtcHMoKTsgKyt0bXApCisgICAgICAgICAgICAgICAgZmx1c2goT3BlcmFuZChUbXBP
cGVyYW5kLCB0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5Miw5ICsxOTMs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyZW50RXhj
ZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgpID09
IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50TWF5YmUp
KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2Nh
bCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2ZUF0Q2F0
Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKLQor
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKKyAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9w
ZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRGbHVz
aExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1cnJlbnRCbG9j
a0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKG1f
Z3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3VycmVu
dEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw5ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQo
IW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8
fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFuZCk7CiAgICAg
ICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApp
bmRleCA3M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5mZmY5NmJmY2Y2
MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBtX2dy
YXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFsKCkt
Pm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
CisgICAgICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
CkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9z
dGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgRXBv
Y2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1
cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7
CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3VycmVu
dEVwb2NoKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAgICBt
X3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwg
bm9kZSkgIT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9w
ZXJhbmRzKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4
IC0gMSksIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgeworICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBpdCBt
aWdodCBjbGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCB0
aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJlZykp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0
ICIsIG5vZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJlNjU1ZjUyNTFmOTZmNDA0ZTMzYjQ2Li5i
ODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0IFN0YWNrQWNjZXNz
RGF0YSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVhbFJl
Z2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9jYWwobG9jYWwp
CisgICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9ybWF0
KQorICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQog
ICAgIHsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIE9wZXJh
bmQgb3BlcmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5MDIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTIzLDkgKzkyNCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoK
KyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgp
OwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxk
MigpOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTczLDkgKzk3Niw5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNzRGF0
YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkK
KyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCkt
Pm9wZXJhbmQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2Nh
bCgpCkBAIC05ODMsNyArOTg2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFibGVB
Y2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1Vu
bGlua2VkTG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpA
QCAtOTk2LDEwICs5OTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5kIHVubGlua2VkT3Bl
cmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKLSAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90PigpKTsKKyAgICAg
ICAgQVNTRVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6
OmZyb21CaXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3ICsxMzUzLDcgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBv
cCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7CisgICAgICAgIHJl
dHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3Ao
KSA9PSBWYXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEqIGxv
YWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5k
ZXggMjRjNzMzZDM4NzAyNzlmNGE1NmI0ZTY4OGJmMGJmMDZhYzI0YzFkNC4uZTNlOWMzMmY4ZDA4
MTNhNmFkYTIyYWFjY2QzNzQ0MmQ0ZWJkOWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAvKiBUaGVzZSBhcmUg
dXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8oUHV0
U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0yMDIs
NiArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdl
dEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggMzI4MGY4N2E2MjY3
ZGYwMzRjODRlMzMxODUzMGM3NDE5ZTU1ZTk3ZS4uZDEwYTIwNzA0YjAxOWQ3ZTg3N2FjYjI5NjMy
NmJhODk3MDBjMTNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSwxMSArMzUs
OSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5h
bCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
T1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxM
aXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5mb3JF
eGl0LAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIg
Iik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwogICAg
ICAgICB9OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxp
dHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAgICAg
ICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MTIwLDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAg
ICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVu
ZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+
b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVy
IHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwOCwyOCArMjA2
LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShO
b2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3RhY2s6
IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwp
LnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6IHsK
LSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExv
Y2FsKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNl
dEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNo
ZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5v
cGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwo
KSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBAIHZvaWQgTG9jYWxP
U1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1
c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZhaWxhYmlsaXR5KEZs
dXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0
KCkgKyBpKSkgPQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hl
ZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBp
KSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5z
dGFydCArIGkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNo
ZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJp
bGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93IHRv
IHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAgICAg
QXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24o
QXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24o
QXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkgewog
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRQTG9jLCBub2RlLCBpKSwg
YXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50
cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTViMGM3Yzk0Yjg0M2U4OTBkYzcuLjBk
ODI5MzUwZDRjNmUwYTEyMDg2ODM2YzBiMGIxNzgwZjJiYmUyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0zODIsMTAgKzM4MiwxMCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50
cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAg
QVNTRVJUKGluc3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0
YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRh
ZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0YUJ1ZmZl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmls
ZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCkuaXNM
b2NhbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkYXRhQnVmZmVyW2luZGV4XSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmNwcAppbmRleCBkYzc2YmNiYWVkNDFlZWUwNjNkZmRiZWE4NDUwNjY1NTNk
MGNiNGQ2Li42MDk2ODY2M2I2NGMyYjY4NTRlNDYxNjFmOTQ5OTQ2NTdlMWFlZmQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmNwcApAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHVibGljOgogICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBsb2NhbHNbbG9jYWxdID0gbmV3Um9vdC0+YXBwZW5k
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBF
eHRyYWN0T1NSRW50cnlMb2NhbCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJp
YWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJs
ZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05v
bmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcElu
Zm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSksCiAgICAgICAgICAgICAg
ICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggMThjNjQxNDc5MzQyNDY5YjQxY2E4Zjk4ZjMwOGIz
YTRjOTMzYmE5OC4uMDVkZTk1OGNhZWVmMWI4ZjA5ZTMyZDA5N2E4ZmUzMmQ2Nzc0MjAxYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURl
Zi5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAi
Q2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdN
YXlFeGl0LmgiCkBAIC00Nyw4OTUgKzQ4LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi0vLyBQcm9iZSBiYXNlZCBPU1IgRXhpdC4KLQotdXNpbmcgQ1BVU3RhdGUgPSBQ
cm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2luZyBG
cmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9T
UkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6OkNv
bnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9T
UkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiwgdWludDMyX3Qgb3Ny
RXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVGb3Io
Q1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZS5p
c0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgc3RkOjptZW1j
cHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4oc291cmNlLmJhc2UoKSkgKyBzb3VyY2Uub2Zm
c2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShjcHUuZ3ByPEVu
Y29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsKLSNlbHNlCi0gICAgaWYgKHNvdXJjZS5oYXNL
bm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShzb3VyY2UudGFnKCksIGNwdS5ncHI8
aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlKGNwdS5n
cHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5
bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVH
SVNURVJTID4gMAotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJl
Z2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxs
ZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVUNQVVJlZ2lzdGVyKiBwaHlzaWNhbFN0YWNrRnJhbWUg
PSBjb250ZXh0LmZwPFVDUFVSZWdpc3Rlcio+KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5
ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMu
Z2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBUaGUg
Y2FsbGVlIHNhdmVkIHZhbHVlcyBjb21lIGZyb20gdGhlIG9yaWdpbmFsIHN0YWNrLCBub3QgdGhl
IHJlY292ZXJlZCBzdGFjay4KLSAgICAgICAgLy8gSGVuY2UsIHdlIHJlYWQgdGhlIHZhbHVlcyBk
aXJlY3RseSBmcm9tIHRoZSBwaHlzaWNhbCBzdGFjayBtZW1vcnkgaW5zdGVhZCBvZgotICAgICAg
ICAvLyBnb2luZyB0aHJvdWdoIGNvbnRleHQuc3RhY2soKS4KLSAgICAgICAgQVNTRVJUKCEoZW50
cnkub2Zmc2V0KCkgJSBzaXplb2YoVUNQVVJlZ2lzdGVyKSkpOwotICAgICAgICBjb250ZXh0Lmdw
cihlbnRyeS5yZWcoKS5ncHIoKSkgPSBwaHlzaWNhbFN0YWNrRnJhbWVbZW50cnkub2Zmc2V0KCkg
LyBzaXplb2YoVUNQVVJlZ2lzdGVyKV07Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVDYWxs
ZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAg
ICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsK
LQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVy
U2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZl
cy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7
IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0
KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFjay5zZXQoY29udGV4dC5mcCgpLCBlbnRy
eS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkp
OwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIHJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0
JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxs
ZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdp
c3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdp
c3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFZNRW50cnlSZWNvcmQq
IGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICBVQ1BV
UmVnaXN0ZXIqIGNhbGxlZVNhdmVCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFVDUFVSZWdpc3Rl
cio+KGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyKTsKLQotICAgIC8vIFJl
c3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
aXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxD
YWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQo
ZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHNpemVfdCB1aW50
cHRyT2Zmc2V0ID0gZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKTsKLSAgICAg
ICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBjb250ZXh0LmdwcihlbnRy
eS5yZWcoKS5ncHIoKSkgPSBjYWxsZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdOwotICAgICAg
ICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgY29udGV4dC5mcHIoZW50
cnkucmVnKCkuZnByKCkpID0gYml0d2lzZV9jYXN0PGRvdWJsZT4oY2FsbGVlU2F2ZUJ1ZmZlclt1
aW50cHRyT2Zmc2V0XSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dl
YmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJl
Z2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNl
ZCBvbiBBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29u
dGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwotCi0g
ICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5
RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVCdWZmZXIgPSBlbnRyeVJlY29yZC0+Y2FsbGVl
U2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAg
ICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6
ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykg
ewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkp
OwotICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAg
ICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4
dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkpOwotICAgICAgICBlbHNlIHsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZm
ZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygp
LmZwcigpKSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5v
cmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVy
cyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBB
c3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2
b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyIG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9vbCB3
YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNv
bnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0
KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsK
LSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAg
IFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9
IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChl
bnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB1aW50cHRyX3Qg
c2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlmICh3YXNDYWxsZWRWaWFUYWlsQ2FsbCAm
JiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBzYXZl
ZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0cl90PihlbnRyeS5vZmZzZXQoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGNvbnRleHQuZ3By
KGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBmcmFtZS5zZXQob2Zmc2V0VmlydHVhbFJl
Z2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9mZnNldCgpLCBzYXZlZFJlZ2lzdGVyVmFs
dWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lT
VEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBD
b2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0Jiwg
Q29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9Ci1z
dGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayos
IFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlRGlyZWN0QXJndW1l
bnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJf
dCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0K
LSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxG
cmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50
Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc3RkOjptYXgobGVuZ3RoLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgLSAxKSk7Ci0gICAg
RGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKLSAgICAg
ICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVy
ZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBjYWxs
ZWUpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkgKyAo
aW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwotICAg
IEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+c2V0SW5kZXhRdWlja2x5KHZt
LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgSlNDZWxsKiBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0m
IHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJy
ZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgQ2xvbmVk
QXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAotICAgICAg
ICB2bSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVlLCBs
ZW5ndGgpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkg
KyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwot
ICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMoQ29udGV4dCYgY29udGV4dCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIERGRzo6SklUQ29kZSogZGZnSklUQ29kZSwgY29uc3QgT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQotewotICAgIEZyYW1lIGZyYW1lKGNvbnRl
eHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgaW50
PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5v
ZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3Bl
cmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRz
Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAotICAgICAgICAgICAgJiYg
cmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292
ZXJ5Lm5vZGVJRCgpOwotICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1l
bnRzLmZpbmQoaWQpOwotICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1l
bnRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZyYW1l
Lm9wZXJhbmQoaXRlci0+dmFsdWUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPQotICAgICAgICAg
ICAgZGZnSklUQ29kZS0+bWluaWZpZWRERkcuYXQoaWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsKLQot
ICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICBzdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gMDsKLQotICAgICAgICBKU0Z1
bmN0aW9uKiBjYWxsZWU7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNh
bGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oZnJhbWUub3BlcmFuZChzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5h
c0NlbGwoKSk7Ci0KLSAgICAgICAgaW50MzJfdCBhcmd1bWVudENvdW50OwotICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAg
ICAgICAgYXJndW1lbnRDb3VudCA9IGZyYW1lLm9wZXJhbmQ8aW50MzJfdD4oc3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0KLSAgICAgICAgSlNDZWxsKiBhcmd1bWVudHNPYmplY3Q7
Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBE
aXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNP
YmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9j
aywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgot
ICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5n
RXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVu
dENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShhcmd1bWVu
dHNPYmplY3QpKTsKLQotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwg
b3BlcmFuZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBleHRy
YSBpbml0aWFsaXphdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUgaW4gb3JkZXIKLS8vIG9mIG1v
c3QgbGlrZWx5IG5lZWRlZCAobG93ZXIgZW51bSB2YWx1ZSkgdG8gbGVhc3QgbGlrZWx5IG5lZWRl
ZCAoaGlnaGVyIGVudW0gdmFsdWUpLgotLy8gRWFjaCBsZXZlbCBpbml0aWFsaXphdGlvbiBpbmNs
dWRlcyB0aGUgcHJldmlvdXMgbG93ZXIgZW51bSB2YWx1ZSAoc2VlIHVzZSBvZiB0aGUKLS8vIGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2YWx1ZSBiZWxvdykuCi1lbnVtIGNsYXNzIEV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbCB7Ci0gICAgTm9uZSwKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5LAot
ICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwKLSAgICBBcnJheVByb2ZpbGVVcGRhdGUsCi0gICAgT3Ro
ZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29u
dGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIEFTU0VSVCgmY2FsbEZyYW1lLT5kZXByZWNhdGVk
Vk0oKSA9PSAmdm0pOwotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotCi0gICAgaWYgKHZh
bGlkYXRlREZHRG9lc0dDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0aW1p
emVkIGNvZGUuIFNvLCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0aW1pemVkCi0gICAgICAgIC8v
IGNvZGUgcnVubmluZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAgICAgIHZtLmhlYXAuc2V0RXhw
ZWN0RG9lc0dDKHRydWUpOwotICAgIH0KLQotICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRjaCkg
ewotICAgICAgICBjYWxsRnJhbWUgPSB2bS5jYWxsRnJhbWVGb3JDYXRjaDsKLSAgICAgICAgY29u
dGV4dC5mcCgpID0gY2FsbEZyYW1lOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLQotICAgIC8v
IEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4g
QW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4K
LSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Ci0KLSAgICB1aW50MzJfdCBl
eGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7Ci0gICAgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2Rl
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIE9TUkV4aXQmIGV4aXQgPSBkZmdK
SVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0KLSAgICBBU1NFUlQoIXZtLmNhbGxGcmFtZUZv
ckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpOwotICAgIEVYQ0VQVElPTl9B
U1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhjZXB0
aW9uSGFuZGxlcigpKTsKLQotICAgIGlmIChVTkxJS0VMWSghZXhpdC5leGl0U3RhdGUpKSB7Ci0g
ICAgICAgIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmU7Ci0KLSAgICAgICAgLy8gV2Ugb25seSBu
ZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9jayBvbmNlIGZvciBlYWNoIE9TUkV4aXQgcmVjb3JkLiBU
aGUgY29tcHV0ZWQKLSAgICAgICAgLy8gcmVzdWx0cyB3aWxsIGJlIGNhY2hlZCBpbiB0aGUgT1NS
RXhpdFN0YXRlIHJlY29yZCBmb3IgdXNlIG9mIHRoZSByZXN0IG9mIHRoZQotICAgICAgICAvLyBl
eGl0IHJhbXAgY29kZS4KLQotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgICAgIEFTU0VSVChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAgICAg
ICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBudWxscHRyOwotICAgICAgICBpZiAo
ZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIHJlY292ZXJ5
ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhd
OwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9u
UmVjb3ZlcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9raW5k
ID09IEdlbmVyaWNVbndpbmQpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
ID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9u
TGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG51
bGxwdHI7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAg
ICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxp
emF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIGlmIChl
eGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUp
IHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRD
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgICAgICBhcnJheVBy
b2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQotICAgICAg
ICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9maWxl
VXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludDMyX3QgYWN0
aXZlVGhyZXNob2xkID0gYmFzZWxpbmVDb2RlQmxvY2stPmFkanVzdGVkQ291bnRlclZhbHVlKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpOwotICAgICAgICBk
b3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0FuZENv
bnZlcnRUb0ludChhY3RpdmVUaHJlc2hvbGQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
QVNTRVJUKGFkanVzdGVkVGhyZXNob2xkID4gMCk7Ci0gICAgICAgIGFkanVzdGVkVGhyZXNob2xk
ID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKLQotICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5l
Q29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAg
IGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29k
ZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7Ci0g
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgICAgIGlmIChleGl0VG9MTEludCkgewotICAg
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVPZmZzZXQpLnB0cigpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4o
Y3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFw
KCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9j
YXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwotICAgICAgICAgICAganVtcFRhcmdl
dCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICAgICAgT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bh
bj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICBkZmdKSVRDb2RlLT52YXJpYWJsZUV2
ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGRmZ0pJ
VENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzLCAmdW5kZWZp
bmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90IHN0YWNrUG9pbnRlck9mZnNldCA9
IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpOwotCi0g
ICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0LCBj
b2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywgV1RGTW92ZSh1bmRlZmluZWRP
cGVyYW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJlc2hv
bGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJheVByb2ZpbGUsIGV4aXRUb0xM
SW50KSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciAm
JiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewotICAg
ICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXI7Ci0gICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9u
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsK
LQotICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBpbGF0
aW9uLT5hZGRPU1JFeGl0KAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgUHJvZmlsZXI6Ok9y
aWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luKSwKLSAgICAg
ICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZhbGlk
YXRpb24pOwotICAgICAgICAgICAgZXhpdC5leGl0U3RhdGUtPnByb2ZpbGVyRXhpdCA9IHByb2Zp
bGVyRXhpdDsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4
KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpPdGhl
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRFYWNo
T1NSRXhpdCgpKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpP
dGhlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUtPmV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bCA9IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCkpKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nRigiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3
aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NTdHJp
bmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBleGl0S2luZFRv
U3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKLSAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVyYW5k
cykpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPU1JFeGl0U3RhdGUmIGV4aXRT
dGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gZXhpdFN0YXRlLmJhc2VsaW5lQ29kZUJsb2NrOwotICAgIEFTU0VSVChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAgICBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0U3RhdGUub3BlcmFuZHM7Ci0g
ICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZpbmVkT3BlcmFuZFNwYW5zID0g
ZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLQotICAgIGNvbnRleHQuc3AoKSA9IGNv
bnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zmc2V0OwotCi0g
ICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRvIHdoaWxlIGxvb3AgaXMgc28g
d2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0ZS4KLSAgICBkbyB7Ci0gICAg
ICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RhdGljX2Nhc3Q8RXh0cmFJbml0
aWFsaXphdGlvbkxldmVsPihleGl0U3RhdGUuZXh0cmFJbml0aWFsaXphdGlvbkxldmVsKTsKLQot
ICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09IEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbDo6Tm9uZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4
dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFNwZWN1bGF0aW9uUmVjb3ZlcnkKLQotICAgICAgICAv
LyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0aW9uIHJlY292ZXJ5IGZpcnN0IGJlY2F1c2UgYXJyYXkg
cHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9maWxpbmcKLSAgICAgICAgLy8gbWF5IHJlbHkgb24gYSB2
YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBIb3dldmVyLCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGF0IGl0
IGlzIGxpa2VseQotICAgICAgICAvLyB0byBoYXZlIGEgcmVjb3ZlcnkgdmFsdWUuIFNvLCB3ZSds
bCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VMWS4KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSog
cmVjb3ZlcnkgPSBleGl0U3RhdGUucmVjb3Zlcnk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShyZWNv
dmVyeSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAgICAg
ICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSBjcHUu
Z3ByPHVpbnQzMl90PihyZWNvdmVyeS0+c3JjKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwot
ICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVt
YmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNh
c2UgU3BlY3VsYXRpdmVBZGRTZWxmOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zlcnkt
PmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1LmdwcjxpbnQzMl90PihyZWNvdmVy
eS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwot
ICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVt
YmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNh
c2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNv
dmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIHJl
Y292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAg
ICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBCb29sZWFu
U3BlY3VsYXRpb25DaGVjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGNw
dS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIF4gSlNW
YWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5KQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogVmFsdWVQ
cm9maWxlVXBkYXRlCi0gICAgICAgIEpTVmFsdWUgcHJvZmlsZWRWYWx1ZTsKLSAgICAgICAgaWYg
KCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIHByb2ZpbGVkVmFsdWUgPSBq
c1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgaWYgKE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2ZpbGUp
Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5yZXBvcnRWYWx1ZShwcm9maWxlZFZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogQXJyYXlQcm9m
aWxlVXBkYXRlCi0gICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGV4aXRT
dGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghIWV4aXQubV9qc1ZhbHVl
U291cmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBl
eGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYmFzZWxpbmVDb2RlQmxv
Y2spOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJvZmls
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgICAgIGJvb2wgZG9Qcm9maWxl
ID0gIWluc3RydWN0aW9uLT5pczxPcEdldEJ5SWQ+KCkgfHwgaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKS5tZXRhZGF0YShwcm9maWxlZENvZGVCbG9jaykubV9tb2RlTWV0YWRhdGEubW9kZSA9
PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBpZiAoZG9Qcm9maWxlKSB7
Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm9maWxlZFZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+b2Jz
ZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gRXh0cmEgaW5pdGlsaXphdGlvbiBs
ZXZlbDogT3RoZXIKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9raW5kID09IEdlbmVyaWNV
bndpbmQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9j
YXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAgICAg
ICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9p
bnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZwKCkg
PT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4aXRT
dGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgICAgICBleGl0U3RhdGUucHJvZmlsZXJFeGl0LT5p
bmNDb3VudCgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JF
eGl0KCkpKQotICAgICAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRleHQsIHZtLm9zckV4aXRJbmRl
eCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxlIChmYWxzZSk7IC8vIEVuZCBleHRyYSBpbml0aWFsaXph
dGlvbi4KLQotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAg
IEFTU0VSVCghKGNvbnRleHQuZnA8dWludHB0cl90PigpICYgMHg3KSk7Ci0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0
X3Q+KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok5vdENlbGxNYXNr
KTsKLSNlbmRpZgotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBz
dG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAvLyBOb3RlOiB3ZSBuZWVkIHRv
IHJlY292ZXIgdmFsdWVzIGJlZm9yZSByZXN0b3JpbmcgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzIGJl
bG93Ci0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3ZlcnkgbWF5IHJlbHkgb24gdmFsdWVzIGluIHNv
bWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotCi0gICAgaW50IGNhbGxlZVNhdmVTcGFjZUFz
VmlydHVhbFJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2stPmNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZP
cGVyYW5kcyA9IG9wZXJhbmRzLnNpemUoKTsKLSAgICBzaXplX3QgbnVtVW5kZWZpbmVkT3BlcmFu
ZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zLnNpemUoKTsKLQotICAgIHNpemVfdCBuZXh0
VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsKLSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZE9wZXJhbmRJ
bmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgaWYgKG51bVVuZGVmaW5lZE9wZXJhbmRTcGFu
cykKLSAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRT
cGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotCi0gICAgSlNWYWx1ZSB1
bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwotICAgIGZvciAoc2l6ZV90IHNwYW5JbmRleCA9IDA7
IHNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFuczsgKytzcGFuSW5kZXgpIHsKLSAg
ICAgICAgYXV0byYgc3BhbiA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tzcGFuSW5kZXhdOwotICAg
ICAgICBpbnQgZmlyc3RPZmZzZXQgPSBzcGFuLm1pbk9mZnNldDsKLSAgICAgICAgaW50IGxhc3RP
ZmZzZXQgPSBmaXJzdE9mZnNldCArIHNwYW4ubnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLSAgICAgICAg
Zm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RPZmZzZXQ7IG9mZnNldCA8IGxhc3RPZmZzZXQ7ICsrb2Zm
c2V0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvZmZzZXQsIHVuZGVmaW5lZCk7Ci0g
ICAgfQotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mT3BlcmFu
ZHM7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52
aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKGlu
ZGV4ID09IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRleCAr
PSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleCsrXS5udW1iZXJP
ZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFVuZGVmaW5lZFNwYW5JbmRleCA8
IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVk
T3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5k
ZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV4dFVu
ZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xv
Y2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKLQotICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJh
bWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmZwcjxKU1ZhbHVlPihyZWNvdmVyeS5mcHIoKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNl
IEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZ3ByPEpT
VmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAg
ICAgIGNhc2UgSW5QYWlyOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBK
U1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkudGFnR1BSKCkpLCBjcHUuZ3ByPGludDMy
X3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8SlNDZWxsKj4ocmVjb3ZlcnkuZ3ByKCkp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2Fs
bEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZENl
bGwoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjcHUuZ3ByPGJvb2w+KHJlY292ZXJ5LmdwcigpKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFj
ZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5h
c2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNlbHNlCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9wZXJhbmQsIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkucGF5bG9hZCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVy
eS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZl
VW5ib3hlZEludDMyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5Lmdwcigp
KSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQ1MigpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1MkluR1BSOgotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3Zl
cnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0cmljdElu
dDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNh
blVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRp
ZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJp
ZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5mcHIoKSkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgcHVy
aWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2Fm
ZVVuYm94ZWREb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
Q29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIHJlY292ZXJ5
LmNvbnN0YW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXJlY3RB
cmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgeWV0Lgot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5kIHRoZW4gc2F2
ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVz
Rm9yKGNvbnRleHQsIGNvZGVCbG9jayk7Ci0gICAgc2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnRleHQs
IGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY3B1LmdwcihH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rl
cj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBjcHUuZ3ByKEdQUkluZm86Om5vdENlbGxNYXNr
UmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok5vdENl
bGxNYXNrKTsKLSNlbmRpZgotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0g
ICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29u
dGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNvdmVy
ZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50cwot
ICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhlci4g
QnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVmZXIg
dG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0aGlz
IGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBh
bHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBtYXRl
cmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29wZSAt
IGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLQotICAgIERGRzo6ZW1pdFJl
c3RvcmVBcmd1bWVudHMoY29udGV4dCwgY29kZUJsb2NrLCBkZmdKSVRDb2RlLCBvcGVyYW5kcyk7
Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdl
IGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRv
IHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAgIC8v
IGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0
IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9s
ZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1IgZXhp
dC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAgLy8K
LSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0
byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9w
dGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQgdG8g
ZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAgICAv
LwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMg
c3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZl
ciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBlcmZv
cm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8K
LSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1l
ZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2Yg
T1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFybHkg
ZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZl
biB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVubmlu
ZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJl
ZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4
ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFuZCAo
YiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5
IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2Vu
dGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1
bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAgIC8v
IGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJl
ZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3Qg
aW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBvZiBl
bnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAot
ICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhl
Y3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBz
cGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVy
ZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ug
c2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldh
cm1VcCgpLgotCi0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+dXBkYXRlT1NSRXhpdENvdW50
ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShleGl0U3RhdGUpID09IENvZGVCbG9jazo6T3B0
aW1pemVBY3Rpb246OlJlb3B0aW1pemVOb3cpKQotICAgICAgICB0cmlnZ2VyUmVvcHRpbWl6YXRp
b25Ob3coYmFzZWxpbmVDb2RlQmxvY2ssIGNvZGVCbG9jaywgJmV4aXQpOwotCi0gICAgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci0gICAg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNvbnRleHQsIHZtLCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29k
ZUJsb2NrLCBleGl0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhD
b250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLCBj
b25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKLXsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsK
LSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0YWNrIHdoZW4gcGVyZm9ybWlu
ZyBhbiBPU1IgZXhpdAotICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCi0g
ICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVybW9zdEJhc2VsaW5lQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKLSAgICBmcmFtZS5zZXRPcGVyYW5kPENvZGVCbG9jayo+KENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAg
Y29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKLSAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhp
dC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNl
bGluZUNvZGVCbG9jaygqY29kZU9yaWdpbiwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwot
ICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kOwotICAgICAg
ICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lw
cGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKLSAgICAgICAgdm9pZCogY2FsbGVy
RnJhbWUgPSBjcHUuZnAoKTsKLQotICAgICAgICBib29sIGNhbGxlcklzTExJbnQgPSBmYWxzZTsK
LQotICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVD
YWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAgICAgICAgICAgIHZvaWQqIHJldHVyblBDID0gZnJhbWUu
Z2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpOwotI2lmIENQVShBUk02NEUp
Ci0gICAgICAgICAgICB2b2lkKiBvbGRFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9IGNw
dS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNp
emVvZih2b2lkKik7Ci0gICAgICAgICAgICByZXR1cm5QQyA9IHJldGFnQ29kZVB0cihyZXR1cm5Q
QywgYml0d2lzZV9jYXN0PFB0clRhZz4ob2xkRW50cnlTUCksIGJpdHdpc2VfY2FzdDxQdHJUYWc+
KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxp
bmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIHJldHVyblBDKTsKLSAgICAgICAgICAgIGNh
bGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5ieXRl
Y29kZUluZGV4KCk7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJu
UEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2Fs
bGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNhbGxl
ci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBjcHUu
ZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tPZmZz
ZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAg
ICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJh
bWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVtcFRh
cmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50
cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxG
cmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMu
Ci0gICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0IHdp
bGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAgICAg
ICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJlYWR5
IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2ZU9y
Q29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQotICAg
ICAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2Fs
bEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJs
ZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgp
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQq
PihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTElu
dDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOwot
ICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZz
ZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
KS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZz
ZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1ZhbHVlKGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhp
cyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0
aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRh
Z09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJf
dD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwg
VGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFu
dCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQs
IHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8vIERv
bid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBp
bmxpbmUgdGFpbCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwg
VGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCi17Ci0g
ICAgT1NSRXhpdFN0YXRlKiBleGl0U3RhdGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLQotICAg
IFdURjo6c3RvcmVMb2FkRmVuY2UoKTsgLy8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhwZWN0
cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNoYW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2UuCi0g
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgLy8gV2Ug
YmFycmllciBhbGwgaW5saW5lZCBmcmFtZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50IGlu
bGluZSBzdGFjayAtLQotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxpbmVk
IGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVlIHByb2ZpbGUgdGhhdAotICAgIC8vIHdlJ2xsIHVwZGF0
ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBjYXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlmIGJv
dGgKLSAgICAvLyBhIGFuZCBiIGFyZSBpbmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBiIGR1
ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQKLSAgICAvLyBmcm9tIGEuCi0gICAgLy8gRklYTUU6IE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVCbG9j
ayBvd25zCi0gICAgLy8gdGhlIHZhbHVlIHByb2ZpbGUuCi0gICAgSW5saW5lQ2FsbEZyYW1lU2V0
KiBpbmxpbmVDYWxsRnJhbWVzID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5p
bmxpbmVDYWxsRnJhbWVzLmdldCgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAg
ICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZy
YW1lcykKLSAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgIH0KLQotICAgIGF1dG8qIGV4aXRJbmxpbmVD
YWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAo
ZXhpdElubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5mcDx1
aW50OF90Kj4oKSArIGV4aXRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKLQotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1bXBU
YXJnZXQ7Ci0gICAgQVNTRVJUKGp1bXBUYXJnZXQpOwotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRp
b25IYW5kbGVyKCkpIHsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRj
aCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0gICAgICAgIHZtLmNhbGxGcmFt
ZUZvckNhdGNoID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIH0KLQotICAgIHZtLnRv
cENhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLQotICAgIGlmIChleGl0U3Rh
dGUtPmlzSnVtcFRvTExJbnQpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1f
Y29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAg
IGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhp
dC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0KLSAgICAgICAgY29u
dGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBiR1BS
KSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9u
c1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBj
R1BSKSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpLm9mZnNldCgpKTsKLSNlbHNlCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdp
c3RlcnM6OnBjR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1Y3Rp
b24pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0g
ICAgICAgICAgICB2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudEluc3Ry
dWN0aW9uOwotICAgIH0KLQotICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPihqdW1wVGFyZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRl
eHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkK
LXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAg
Q29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAgICBF
eGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLQotICAgIGRhdGFMb2co
IlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAg
ZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtp
bmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKLSAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKLSAg
ICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0
aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLAotICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KSwKLSAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVybmF0
aXZlLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRh
dGFMb2coIm5vIGFsdGVybmF0aXZlIGNvZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0aXNv
bmVkKSIpOwotICAgIGRhdGFMb2coIiwgb3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2stPm9z
ckV4aXRDb3VudGVyKCksICJcbiIpOwotICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUgb2Yg
ZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3Rl
cihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIsIFJh
d1BvaW50ZXIoY29udGV4dC5ncHI8dm9pZCo+KGdwcikpKTsKLSAgICB9Ci0gICAgZGF0YUxvZygi
XG4iKTsKLSAgICBkYXRhTG9nKCIgICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsK
LSAgICAgICAgRlBSUmVnIGZwciA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRh
dGFMb2coIiAiLCBjb250ZXh0LmZwck5hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0X3Qg
Yml0cyA9IGNvbnRleHQuZnByPHVpbnQ2NF90PihmcHIpOwotICAgICAgICBkb3VibGUgdmFsdWUg
PSBjb250ZXh0LmZwcihmcHIpOwotICAgICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxuIik7
Ci19Ci0KLS8vIEpJVCBiYXNlZCBPU1IgRXhpdC4KLQogT1NSRXhpdDo6T1NSRXhpdChFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJl
YW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtpbmQs
IGppdC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5tX29y
aWdpbi53YXNIb2lzdGVkKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCkBA
IC05NTgsMTUgKzcwLDE4IEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NS
RXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFu
ZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwg
aW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRz
IG5vZGUgSUQgdG8gb3BlcmFuZC4KKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxSZWdp
c3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50
cyBub2RlIElEIHRvIG9wZXJhbmQuCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVy
YW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAgICAg
ICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3Jl
YXRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
VG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBNaW5pZmllZElEIGlkID0g
cmVjb3Zlcnkubm9kZUlEKCk7CiAgICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRB
cmd1bWVudHMuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRB
cmd1bWVudHMuZW5kKCkpIHsKQEAgLTk4Nyw3ICsxMDIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRz
PFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+
aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksCiAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaml0Lm1vdmUoCkBAIC05OTcsNyArMTEyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVz
dG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxW
YWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7CiAgICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEzOCw3IEBAIHZvaWQgT1NSRXhp
dDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3Qg
T3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJh
dGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAgYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOworICAgICAgICBhbHJlYWR5
QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsODQgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhp
dChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAog
ICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAgICBqaXQuY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAK
KyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNr
cG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBhIHBy
b2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBvdGhl
cndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5kcy5u
dW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZHMu
bnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRzLnRt
cChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGF1dG8qIHRtcFNjcmF0
Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CisgICAgICAgIGppdC5wcm9iZShb
PSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBC
eXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBX
VEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAg
ICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNldF07
CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUgRlRM
IGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRjaCBi
dWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25z
dGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
aWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRtcFNjcmF0Y2hb
aSArIHRtcE9mZnNldF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJ
bkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazog
eworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRtcE9m
ZnNldF0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNl
ZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ld
ID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRP
U1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5t
X2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7
IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tp
cHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5
dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
Y2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihD
UFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZz
ZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRl
Y29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRhdGEg
Zm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4K
IAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsr
aW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5k
c1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFs
UmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYg
cmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkt
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBvcGVy
YW5kID0gcmVnLm9mZnNldCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3Bl
cmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygp
LT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAg
IGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45ZTli
Y2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEyMzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUwLDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0IDog
cHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAgIGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZyYW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBleGVj
dXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjkyYTQ5
Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYgKzcw
LDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gR2Vu
ZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5nVG9D
aGVja3BvaW50SGFuZGxlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2Zp
bGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApp
bmRleCAyZmYzZWE4YjVmYmI2ZjNmMjcyMWQ1MDI0NDU2Mjk4YjA4NGQ1MTE1Li4wZmI0ODIwM2Jm
ZGI1ZDU0Yzk2M2QyNGY5ZGJmNzY5ZGU1YTI1ZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwxMiAr
MjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgor
I2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKICNp
bmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1ZGUg
IlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTE0Myw2ICsxNDYsOSBAQCB2b2lkKiBjYWxs
ZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29k
ZUluZGV4IGNhbGxCeQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4
aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oJmNoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCk7CisKICAgICB2b2lkKiBq
dW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTM4MiwxMSArMzg4LDEy
IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKIAogICAgIHZvaWQqIGp1bXBUYXJn
ZXQ7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY2hlY2twb2ludFJldHVy
blRhcmdldDsKICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9M
TEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rOwogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRy
PEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IGJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpID8gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9jYXN0
PHZvaWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSkgOiBMTEludDo6Z2V0Q29k
ZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlmIChl
eGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJlZ1Qy
KTsKQEAgLTQwMiw3ICs0MDksMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZt
LCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYKICAg
ICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRD
b2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAg
ICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4gPSBj
b2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxv
Y2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4pOwor
ICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgY2hlY2tw
b2ludFJldHVyblRhcmdldCA9IGNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2NhdGlv
biA9IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4o
JmNoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCkpOworICAgICAgICB9CisKICAgICAgICAg
QVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2NhdGlv
bi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNiNGIw
M2RjMTk5Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9kZSgp
KSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBp
bnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7Cisg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcElu
Zm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43N2Vm
Y2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAgICAg
ZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBsaWNp
dCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBiOTQ4
OGExMDMyODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3NzY5
MmRiMTA3Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKQEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKIAog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90
IG1hbmRhdG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudCB7
IGZpcnN0RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRz
KTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmlydHVh
bFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAtIDEp
OwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmlt
dW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpz
VW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1hbmRh
dG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCArIGkp
ID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1v
ZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhiZmFl
NGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi5iYjQyMDYxZDUxNjZmZTIxMGQ5Y2VkYzZj
N2VjNzE4ZjQ0YmJiYjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC0xMDgsMTcgKzEwOCwxNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1
ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG51bGxwdHI7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnRNYXliZToKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzOSwyMSArMTM5LDIxIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRF
cG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOworICAg
ICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHByb2Nl
c3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAg
ICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAg
ICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZDogIiwg
cmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVy
YW5kOiAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFu
ZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeUtp
bGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBhIFBo
YW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAogICAgICAg
ICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4KQEAg
LTE3OSwxNCArMTc5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhp
dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3
ZSBuZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0
byBiZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzS2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVh
ZHlLaWxsZWQgPSBsb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJh
bmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5k
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxv
Y2FsKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5k
KSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9w
ZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vz
c0tpbGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0
Mjk4ODZlMDc4ZjBhZmNjLi5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZB
cHByb3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMy
KCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5k
KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyAr
NjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxy
ZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAg
ICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3By
aWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgp
LnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlv
bmFsV3JpdGUsIGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAg
ICAgCi0gICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9h
ZCgpLnZhbHVlMzIoKSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3Bl
cmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBm
dW5jdG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJp
YXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAg
ICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFu
ZC50b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0
N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIw
NDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcy
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29u
c3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFw
aC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
aW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RI
YW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZjYmZl
Y2M4NGZlMTk1ODQyOGEwY2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5
YmU2ZDMxOTdjMTNmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoK
ICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoK
ICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2Jk
YjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBlN2Vk
ZjYzZjA3Zjc4ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAg
ICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3Jh
cGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAg
ICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50
IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
IGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgog
ICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAg
ICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFu
ZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAg
ICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVh
ZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxs
KGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4o
T3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAg
ICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBi
b29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07
KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVh
bFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFu
ZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRs
ZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxp
dmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBl
bmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09
IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3Ao
KSA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUt
Pm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRT
dGFjayB8fCBvcCA9PSBWYXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09
IEZvcndhcmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAg
ICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsg
fSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0p
OwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3
cml0ZXMpCisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVz
KQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFk
cykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZl
cnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRT
dGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0
ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3
ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZs
aWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZh
bGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
b3AoKSA9PSBQdXRTdGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
b3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJT
ZXR0aW5nIGZsdXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtp
bGxTdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBz
aW5rIGEgUHV0U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1
c2g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
REZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVh
ZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1
dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJk
VmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5v
cCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2Rl
LT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3Bl
cmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXpl
KAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwg
d3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5k
LCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAg
LTMxMywxMyArMzEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
Q29uc2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChp
KSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNz
b3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29y
XVtpXSwgIiBtZXJnZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBk
ZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAi
LT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwg
ZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRl
ZmVycmVkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdp
c3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3Bl
cmFuZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkp
OwotICAgICAgICAgICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1Zh
cmlhYmxlKCk7CiAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQp
ID0gdmFyaWFibGU7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09
IHZhcmlhYmxlLT5pbmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NU
b1NpbmsuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0Rl
ZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQp
LAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3Rh
Y2s6CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFi
bGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsm
XSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykg
LT4gTm9kZSogewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5k
ZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3Bl
cmFuZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBo
aSBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFk
ZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRF
eGl0KCkpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcu
ZmlsbChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IG1hcHBpbmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0g
b3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxv
Y2ssIHZhcmlhYmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAi
OiAiLCBtYXBwaW5nLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FD
YWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2Nr
KSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09w
ZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCld
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQo
MCwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGlu
ZyAiLCBvcGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAg
ICAgICAgfQpAQCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJy
ZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCAiIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJh
bmQob3BlcmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAg
ICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEt
PmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJy
ZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nv
bmNyZXRlKGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGlu
Z0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGlu
Z0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBp
cyBubyBkZWZlcnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90
IGlzIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBrZWVwIHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBp
bmcub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAg
bWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IApAQCAtNDcyLDIwICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBo
YXZlIHN0b3JlZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9y
bWF0LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5v
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+
ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRp
dHkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsK
KyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJh
bmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVs
dDogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFj
ay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sg
Zm9yICIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEz
LDcgKzUxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZd
IChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1
bmNvbmRpdGlvbmFsIHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRv
LiBUaGlzIG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRo
aXMgbWVhbnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFB1dFN0YWNrcyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09
IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdz
IHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAg
ICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3Jp
dGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIs
IExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBM
YXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfSB9CiAgICAgICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9y
LnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3Zh
cmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJD
cmVhdGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2Nr
KSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxv
Y2tdLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0
YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAKaW5kZXggNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRm
MmMwY2QzOTk4YjE4MWI5ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcg
KzE1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCks
IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZh
cmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFk
ZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQo
bm9kZSwgY2hpbGROb2RlKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRl
eFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLy8gUHJ1bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0
aGFuIGNvbXBpbGUgdGltZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAg
ICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVudCgp
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBub2Rl
LCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9y
U1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQs
IHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAg
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVmLT52
YWx1ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVj
Tm9uZSwgTW92SGludCwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksCi0g
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBo
aURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5m
byh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4
aXRPSykKQEAgLTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBN
b3ZIaW50OiB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ss
IG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxp
bmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmln
aW4uZXhpdE9LID0gZmFsc2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwxOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYgTm9k
ZUlzRmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1
dFN0YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vz
c0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9j
YWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBp
bmc6ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0g
Y2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJp
YWJsZS0+b3BlcmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJS
ZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUs
ICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9y
T3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM4
NSw3ICszODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBVbnR5cGVkVXNlKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKS0+ZGVmYXVsdEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkg
PSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVk
Z2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQyNSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAgICAg
ICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9y
bWF0KTsKIAotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0
aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBV
cHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUp
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Q
b2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVy
YW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2Ez
MTY5MTkuLjlhMzJkNjdhNTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIy
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lu
bGluZWRDYWxsZXI6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgog
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAg
Y2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNDhjMjhjMWI3NGE2Yjg1OGY3Mzg1NDMy
YzRhZDc2M2Y4ZDE2MzgzYS4uNjU5MjY3YTkzM2ZkOGExMmEyMWQwMzQ3NTA4ZDEyMzcyMGE2Mzgw
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0Q2FsbGVl
KENvZGVPcmlnaW4gb3JpZ2luLCBHUFJSZWcgY2FsbGVlR1BSKQogICAgICAgICAgICAgICAgIGNh
bGxlZUdQUik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBjYWxsZWVHUFIp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgY2FsbGVlR1BSKTsKIH0KIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcnQoQ29kZU9yaWdpbiBvcmlnaW4sIEdQ
UlJlZyBzdGFydEdQUikKQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1fc3Ry
ZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxk
KSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhW
YXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29uIHJl
YXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
dXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAg
IAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1f
YmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAg
ICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4
MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2Nr
KCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7
IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0ID0g
ZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3RyZWFt
LT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAgICAg
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOworICAg
ICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1lbnQo
KSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAgICAg
ICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5k
LCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1fb3Jp
Z2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkxOSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVk
SlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNz
RGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmlydHVh
bFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNv
dXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBu
b2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9k
ZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1
bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIEpT
VmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAg
ICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNl
dCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5q
c1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBHUFJU
ZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5s
b2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBh
IGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3
aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdz
IGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UK
LSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUg
d2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0
IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcgYXJn
Q291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0
Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGludDMy
UmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFy
Z3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVu
dENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
dW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJl
Z3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVk
Z2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
Ci0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUikpOworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVT
b3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFs
dWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1
ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkp
OworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291
bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50
c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRh
dG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFy
Z3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRh
dGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAg
ICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgsMTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSgpOworICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBpbmxp
bmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
R1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1w
KHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BSUmVn
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBH
UFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB0
ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlubGlu
ZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAgIAor
ICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAg
ICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRh
dGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtNzY1NCw3ICs3NjU1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBu
b2RlKQogICAgICAgICAgICAgICAgIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZQotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSksIHNjcmF0Y2gxR1BSKTsKIAogICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmllcnMg
c2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQogICAgIC8v
IGFjdGl2YXRpb24gbXVzdCBiZSB5b3VuZy4KQEAgLTEyNDMwLDE0ICsxMjQzMSwxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2V0dGVyKE5vZGUqIG5vZGUpCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0Q2FsbGVlKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCks
IG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2FsbGVlKE5vZGUq
IG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICBtX2ppdC5zdG9yZUNlbGwoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICBtX2ppdC5zdG9yZUNlbGwo
Y2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkBAIC0xMjQ1
NSw3ICsxMjQ1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKIHsKLSAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
OworICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5vZGUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IGM2
NGY5NzhhZGY4NWZiZjI3N2JiYTc5MjE2MDY0ZjQyODFiOGQ1YTkuLjAzZDQ4MzViZjRiN2E4ZGUw
OTM5ZWZjZmEzNzAyMmI0NjI2OTA5NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEzOTMsNiArMTM5Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5ld1Jl
Z2V4cChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvYWRW
YXJhcmdzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSopOwpAQCAtMTY2OSwx
NSArMTY3MCwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BS
UmVnLCBHUFJSZWcpOwogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoCi0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERh
dGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVn
aXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgeworICAgICAgICBBU1NF
UlQoIWJ5dGVjb2RlUmVnLmlzQXJndW1lbnQoKSB8fCBieXRlY29kZVJlZy52aXJ0dWFsUmVnaXN0
ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2co
VmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYnl0ZWNvZGVSZWcsIG1hY2hpbmVSZWcsIGZvcm1hdCkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXQgZm9ybWF0
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fY3VycmVu
dE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICByZWNvcmRTZXRMb2NhbCh2YXJp
YWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOworICAgICAg
ICByZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCksIGZvcm1hdCk7CiAgICAgfQogCiAgICAgR2VuZXJhdGlvbkluZm8mIGdlbmVyYXRpb25J
bmZvRnJvbVZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKaW5kZXggNjdiMGUwYjM3MDRjYTU5YTg5MGFjNTljODZkYmQwZDJhMDU2ZGI4MS4uMGFm
M2YxNzE4MTU0MTBkOWJlZjY0YTIwZmQwOTA1ZGRjMDNlNjdmNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0xODI4
LDcgKzE4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZv
dW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWdu
ZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMTkxMiw3ICsxOTEyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVu
dE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFk
KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5k
KCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODI0LDYgKzM4MjQsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAg
ICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUp
OwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDNlNjM4YzliOTQ5ZWI1ZWEyNmEzMTA1ZGRiOGFmZTc2
NjIxNjMzNDQuLjdiMWUyNTdkNjBkNDY4NDVmMWE5NDBmZjZkZmRjOTNhYzg2YzdjNTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApA
QCAtMTkzNiw3ICsxOTM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQo
KSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFu
ZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVu
IGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTIwMDcsNyArMjAw
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2NhbCht
X2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9y
bWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2Vk
T3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDQ2NCw2ICs0NDY0LDEx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1p
dENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7
CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJn
cyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAppbmRleCBiZWVjODZhYzdhN2QzMzNlMzk2NzllMjY3
NTU5MDc0ZTQ2NGM5YjgyLi5kNzYyOGU1YTExN2NlMzNkZTFkMTYxNWY2MDQyNzUyMjA0NzdhMjJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFz
ZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0cmVhdCBhIHZhcmlh
YmxlIGFzIGJlaW5nICJ1c2VkIiBpZiB0aGVyZSBleGlzdHMgYW4gYWNjZXNzIHRvIGl0IChTZXRM
b2NhbCwgR2V0TG9jYWwsCiAgICAgICAgIC8vIEZsdXNoLCBQaGFudG9tTG9jYWwpLgogICAgICAg
ICAKLSAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CisgICAgICAgIE9wZXJhbmRzPGJvb2w+
IHVzZWRPcGVyYW5kcygwLCBncmFwaCgpLm1fbG9jYWxWYXJzLCBncmFwaCgpLm1fdG1wcywgZmFs
c2UpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBh
cmUgdXNlZCBmcm9tIElSLgogICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IGZh
bHNlOwpAQCAtNjcsMjMgKzY3LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIEZs
dXNoOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJn
dW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNB
cmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIHVzZWRMb2NhbHMuc2V0KHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKGRhdGEtPmNvdW50LCB0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24gdGhlIGNv
bnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3Np
Z25tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lz
dGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0
YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gLy8g
dGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgogICAgICAgICAgICAgICAgICAgICBoYXNO
b2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTkyLDkgKzkxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFj
a0FjY2Vzc0RhdGEqIHN0YWNrID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdGFjay0+bG9jYWwuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2stPm9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHN0YWNrLT5s
b2NhbC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3Bl
cmFuZChzdGFjay0+b3BlcmFuZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDgsMjEgKzEwNywy
MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9ICppdGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxS
ZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewotICAgICAgICAgICAgICAgIHVzZWRM
b2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMu
c2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCi0gICAgICAgICAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhbGxv
Y2F0aW9uKHVzZWRMb2NhbHMuc2l6ZSgpKTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhbGxv
Y2F0aW9uKHVzZWRPcGVyYW5kcy5zaXplKCkpOwogICAgICAgICBtX2dyYXBoLm1fbmV4dE1hY2hp
bmVMb2NhbCA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMb2NhbHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmICghdXNlZExvY2Fscy5nZXQoaSkpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRPcGVyYW5kcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKCF1c2VkT3BlcmFuZHMuZ2V0Rm9yT3BlcmFuZEluZGV4KGkpKSB7CiAgICAgICAg
ICAgICAgICAgYWxsb2NhdGlvbltpXSA9IFVJTlRfTUFYOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQpAQCAtMTM1LDQ5ICsxMzQsNTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJp
YWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJn
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZh
cmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBs
b2NhbCA9IHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIGlmIChsb2Nh
bCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZh
cmlhYmxlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSB1c2VkT3BlcmFu
ZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICAgICAgaWYgKGluZGV4ID49IGFsbG9j
YXRpb24uc2l6ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCisgICAgICAgICAg
ICBpZiAoYWxsb2NhdGlvbltpbmRleF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9u
LCB2YXJpYWJsZS0+b3BlcmFuZCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9y
IChTdGFja0FjY2Vzc0RhdGEqIGRhdGEgOiBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhKSB7Ci0g
ICAgICAgICAgICBpZiAoIWRhdGEtPmxvY2FsLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgICAg
IGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgaWYgKGRhdGEt
Pm9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxv
Y2FsID0gZGF0YS0+b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0
YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bG9jYWwudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNp
emUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChhbGxvY2F0
aW9uW2RhdGEtPmxvY2FsLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0xvY2FsKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5vcGVyYW5kLnRvTG9j
YWwoKSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPm9wZXJhbmQudG9Mb2NhbCgp
XSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2ln
bihhbGxvY2F0aW9uLCBkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9j
YWwgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5vcGVyYW5kKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3Rl
cigpKQogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2Nv
cGVSZWdpc3Rlcihhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIo
KSkpOworICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKHVz
ZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOwog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEu
c2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9IG1f
Z3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWdu
KAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTsp
IHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3JhcGgu
bV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudFBv
c2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5jb3Vu
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24o
YWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+
bWFjaGluZUNvdW50ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+Y291
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWdu
KHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMjMxLDE3ICsyMzEsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9j
YXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihj
b25zdCBPcGVyYW5kczxib29sPiYgdXNlZE9wZXJhbmRzLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+
JiBhbGxvY2F0aW9uLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gc3JjOwotICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2Nh
bCgpXTsKLSAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0
aW9uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAob3Bl
cmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKTsKKworICAgICAgICBzaXplX3Qgb3BlcmFuZEluZGV4ID0gdXNlZE9wZXJhbmRzLm9w
ZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxs
b2NhdGlvbltvcGVyYW5kSW5kZXhdOworICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRf
TUFYKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKICAgICB9CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9u
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmNwcAppbmRleCBlYjNkZGJkNzE4NDNkNDlmNjViMzJjZTk2MWZmOWEwNzEyYTFhMDUx
Li5iNDhjNmY3ZjE5MDk3NzVkNzI3OTc5OTFmM2ZiOTgzZGU2MzhhNzI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5j
cHAKQEAgLTI4NSwxNyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVsbHB0cjsKLSAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG1fbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IG1fbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5vcGVyYW5kKCkg
PT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbCA9IG5vZGU7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNr
LCBsb2NhbCkpKQorICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwg
bm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAKaW5kZXggNmFjYWZiZjNiZjUzNWM5Njk2YmU2NDhhMjA3MGI2ZWU2ZjRmOGJmOS4uZjFi
MWZmNjRkZGE1M2NmNDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGpp
dChudWxscHRyKTsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2bSk7
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9T
UiBleGl0IHRodW5rIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzIGppdChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCmlu
ZGV4IDA1YTUwYTU0YjI1ZDUxZGJjYjE4NThmZTdhYWRjYTQ4NjgyMDVkOWUuLjhiNWMzZjAxYTQ4
NTIwYjdhYWFhYWViYWZmOTNjM2IyNmNjZDk4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaHVua3MuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2Vu
ZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAppbmRleCA2MGZiZjg5OTVmZGFkNzgyNTZhMDY3Yjg5YzRlYzVmNTcxM2YxZDdlLi43OTY2NWY4
YWI4NWZjMTExNmQ2MzlmYjNkOGI1NWY2ZWQ5MDI2OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTE0
Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1
ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjaGVja09wID0g
Q2hlY2tTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3BlY0NlbGxDaGVj
ayAmIFNwZWNFbXB0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgobG9jYWwgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCA6IDApKSA9PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBURFogdmFsdWUuIFRoZSBj
YWxsIGVudHJ5cG9pbnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERaLApAQCAtMTY4LDggKzE2OCw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQo
KSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExvY2FsOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwo
KmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11
c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RI
YW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggOWVlNWUwMDc0MDlkZjUyOTRi
ZmNmNTFiNzc2ZWI4Y2ZjZjQ3YzUwZS4uYTJkNmNmYzI0OTM0ZTNkYzNjNDZjMGUyNGQ0ZGExY2Ux
YjBjZjViNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAg
LTQ4Myw3ICs0ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+cGhpc1tpXTsKICAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNv
bnRhaW5zKG5vZGUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9w
KCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2Rl
LT5sb2NhbCgpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJh
bmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5u
dW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGls
ZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkK
QEAgLTUxOSwxMCArNTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJl
ZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5w
cmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0
aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2
ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2ssIGJsb2NrLT5wcmVk
ZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTUzMywxMSArNTMzLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChs
b2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBw
cmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv
Y2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3Vt
ZW50RGVmaW5pdGVseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50TWF5YmUKQEAgLTU0NywxOSArNTQ3LDE1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCBy
ZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJ
bkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
b3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5p
c0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBm
b3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAotICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAg
ICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAg
ICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0
TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAg
IFZBTElEQVRFKCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFy
Z3VtZW50KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2OCwyNCArNjY0LDI0IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQobm9k
ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQo
KSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBi
bG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnREZWZp
bml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIC8vIE9u
bHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExv
Y2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAg
ICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgp
KSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5v
cGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEg
c2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBmb3IgdGhhdCBs
b2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAg
Z2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0OworICAg
ICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQo
KSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05
NjgsMjYgKzk2NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4gIiwg
ZWRnZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmly
dHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB2b2lkIHJlcG9ydFZh
bGlkYXRpb25Db250ZXh0KE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogYmxvY2spCiAgICAg
ewogICAgICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGlu
IG51bGwgQmxvY2sgIik7CisgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gbnVsbCBC
bG9jayAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRhdGFM
b2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVyYW5k
LCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9j
ayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCisgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3Rp
bmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIs
ICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CisgICAgICAgIGRhdGFM
b2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0
aW9uQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0
KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2Nr
LCBOb2RlKiBwcmV2Tm9kZSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBz
b3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nKHByZXZO
b2RlLCAiIGZvciAiLCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOworICAgICAg
ICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3Vy
Y2VCbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
Tm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCAyNmYwMzI5
ZDU0MzA0MTU3MjA1ZTc4MTQ5OGM2NGUwYmU5OTMyMTEwLi45NWNkYzkyZTJjMjQxMGEzNWMwMTMx
MzFmZGMzYjdjY2MyODI5ZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTQxLDExICs0MSw5IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNwYWNl
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogcHVibGljOgogICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQogICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5nIikKQEAgLTU2LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBt
X2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZhcmFyZ3MgZm9yd2FyZGluZzpc
biIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDcgKzg2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNhbGxzIGludG8gdGhpcyBmdW5j
dGlvbiB0byBiZSByYXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGluIGEgc2ltcGxlIE8obikgbWFu
bmVyLgogICAgICAgICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gYmxvY2stPmF0KGNhbmRp
ZGF0ZU5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxv
ZygiSGFuZGxpbmcgY2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7CiAgICAgICAgIAogICAg
ICAgICAvLyBXZSBlbGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3JlYXRlQ2xvbmVkQXJndW1l
bnRzIGlmIHRoZSBidXR0ZXJmbHkgaXMgb25seQpAQCAtMTA1LDcgKzEwMyw3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE3LDkgKzExNSwxMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUtPnVubGlua2VkT3BlcmFuZCgp
LmlzVG1wKCksICJXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhIHRtcCByZWZlcnJpbmcgdG8g
YW4gYXJndW1lbnRzIG9iamVjdC4iKTsKICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0g
bm9kZUluZGV4OwotICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMo
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2Nh
bHMuYXBwZW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFy
ZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVn
aXN0ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrVmFyYXJnczoK
QEAgLTE0MCwxMyArMTM5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBz
YXdFc2NhcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICBpZiAoc2F3RXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAi
LCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5k
aWRhdGUpKQogICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpA
QCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFy
YXJnczoKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUtPmNo
aWxkMigpID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUg
YXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpID09IGNhbmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNMb2Fk
ZWRGcm9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpA
QCAtMjI2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXZhbGlkR2V0QnlP
ZmZzZXQpIHsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1dHRlcmZseSA6IGNhbmRpZGF0
ZUJ1dHRlcmZsaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9k
ZSwgYnV0dGVyZmx5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBC
dXR0ZXJmbHkgZXNjYXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLAotICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgcmVnLCAiIHdoaWxlIHdl
IGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2ls
bGluZyAiLCBvcGVyYW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1w
KHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWxldmFudExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJlZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNbaV0pIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fsc1tpLS1dID0gcmVsZXZhbnRMb2NhbHMu
bGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLnJlbW92
ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9k
ZUluZGV4OwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBpZiAoREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2VySW5kZXggPSAiLCBsYXN0VXNl
ckluZGV4LCAiLCAiLCBibG9jay0+YXQobGFzdFVzZXJJbmRleCksICJcbiIpOwogICAgICAgICAK
ICAgICAgICAgLy8gV2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERldGVybWluZSBpZiBiZXR3ZWVu
IHRoZSBjYW5kaWRhdGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMgYW55CkBAIC0yNjMsMTYg
KzI2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51
bmxpbmtlZExvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKLSAg
ICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQg
Iiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+
bG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52
b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPm9wZXJhbmQoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjk3LDEzICsyOTcsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlz
VG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFw
LnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCByZWcpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBoZWFwLm9wZXJh
bmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc0ludGVyZmVyZSA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9iYmVy
aXplKCkpOwogICAgICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJmZXJlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTMxMSw3ICszMTAsNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gbWFrZSB0
aGlzIHdvcmsuCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAg
IFdpbGwgZG8gZm9yd2FyZGluZyFcbiIpOwogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAg
ICAgICAKQEAgLTM0MSw4ICszNDAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRoZXNlLgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2Fu
ZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3Ro
KGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgLyogYWRk
VGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1
bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFyZ3Mp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDhlYmZmYjQzNWVkNGRiZjYwMmJk
NjJhZWQ0YzM0MzJlYTVhODI5MDIuLjJhYzJlZTM5YjRjY2FkMzA4MTI1YjRlNmVjYzg4YTg3Yzdk
MTc5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQotICAg
IDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWluKCkpKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgIDogbV9w
cmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVj
Tm9uZSkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxzZSkK
QEAgLTQ1LDEwICs0NCwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0
YSgpCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxl
QWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgOiBtX2xvY2FsKGxvY2FsKQot
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJs
ZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNOb25l
KQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94
KGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQpAQCAt
ODcsNyArODYsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9y
bWF0QWNjb3JkaW5nVG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgZmFj
aWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBm
b3IgYXJndW1lbnRzLgotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3Bl
cmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhp
cyBkb2Vzbid0CkBAIC0xMjEsNyArMTIwLDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnRh
bGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKQogewogICAgIEFTU0VSVChpc1Jvb3Qo
KSk7CiAgICAgICAgIAotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZl
clVuYm94KCkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZlclVu
Ym94KCkKICAgICAgICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUluZGV4
KSkKICAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJsZUZv
cm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgCkBAIC0xNzYsNyArMTc1LDcg
QEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1bnQgZm9yIG1hY2hpbmUgYXJn
dW1lbnRzLgotICAgIGlmIChtX2xvY2FsLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFuZCgp
LmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRoZSBh
cmd1bWVudC1hd2FyZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBhbGwgb2YgYW4gKGlubGlu
ZWQgb3IgbWFjaGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oCmluZGV4IDFkMzg5MmY5ZWMwOWNiYTIwNDNmYTI1NGU2MDk0MjMyMDE0
YTI4NGUuLmJlMmZiNTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNmY2VmZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaApAQCAt
NDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlvbkZp
bmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFyaWFi
bGVBY2Nlc3NEYXRhKTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsKKyAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEoT3BlcmFuZCk7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAg
ICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmlu
ZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgICAgIEFTU0VSVCht
X29wZXJhbmQgPT0gZmluZCgpLT5tX29wZXJhbmQpOworICAgICAgICByZXR1cm4gbV9vcGVyYW5k
OwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hpbmVMb2NhbCgpCkBAIC0y
MDgsMTAgKzIwOCwxMCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBs
aWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCiAgICAgLy8gdXNh
Z2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KIAotICAgIFZp
cnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2Nh
bDsKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAgICAgU3BlY3VsYXRlZFR5cGUg
bV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbjsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7CiAK
ICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCmluZGV4IDI4ZTQzN2ZkNTFmZWE0OTY5ZWI0OGVjZjBj
MDUwOGYwYTM3ZGY4MzUuLjViMmMxZWU5MDliNTQ4ZjM5ODI3MGM0M2JkMzZlZDcyZTNmOWNmYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcApA
QCAtNTksMTEgKzU5LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIsIGlkKCksICIpIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICBvdXQucHJpbnQoIk1v
dkhpbnQoIiwgaWQoKSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAiKSIpOworICAgICAgICBv
dXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgb3BlcmFuZCgpLCAiKSIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAgICAgIG91dC5wcmludCgKLSAg
ICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5
dGVjb2RlOiIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICJTZXRMb2NhbChtYWNo
aW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIG9wZXJhbmQoKSwKICAg
ICAgICAgICAgICIsICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpLCAiKSIpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuaAppbmRleCAyMDYwZDRhMmZkMjcyMjNkZDZmNjk5YzZkYmFkNmQy
MjQ2N2M5ODM0Li5jOGI4NGE3YzIxNjZlNzE1ZTUzMWNmNzVkMzg0OTc0ZjVjMzYwMjJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaApAQCAtNzYsNyAr
NzYsNyBAQCB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7CiAjZW5kaWYKLSAgICBp
bnQzMl90IHZpcnR1YWxSZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogfTsKIAogY2xhc3MgVmFy
aWFibGVFdmVudCB7CkBAIC0xNjIsNyArMTYyLDcgQEAgcHVibGljOgogICAgICAgICBXaGljaFR5
cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJpYWJs
ZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52
aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRh
dGlvbi5vcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBldmVudC5tX2tpbmQgPSBr
aW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2ZW50
Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE4MSwxMyArMTgxLDEzIEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgCiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwoCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcs
IERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAgICAg
ICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAg
ICB3aGljaC52aXJ0dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsKICAgICAgICAgVmFyaWFi
bGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24u
dmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlv
bi5vcGVyYW5kID0gYnl0ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVudC5tX2tpbmQgPSBTZXRM
b2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAg
IGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5NSwxMyArMTk1LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgVmFy
aWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3RlciBieXRlY29k
ZVJlZykKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIE9w
ZXJhbmQgYnl0ZWNvZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50Owog
ICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwog
ICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICBy
ZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAg
IHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAgICAgICAgZXZlbnQubV9r
aW5kID0gTW92SGludEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGlj
aCk7CiAgICAgICAgIGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKHJlcHJlc2VudGF0
aW9uKTsKQEAgLTI2NSwxMyArMjY1LDEzIEBAIHB1YmxpYzoKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3BpbGxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09IEJp
cnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVy
biBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
fQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkgY29uc3QKKwor
ICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5k
ID09IFNldExvY2FsRXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVudCk7Ci0gICAgICAgIHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsK
KyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZDsKICAgICB9CiAg
ICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3RlcigpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApp
bmRleCA0NTI2ZDM5YmIwOTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2Li43ZWQ0ZDkwM2Mx
NTk1NDZmZDQzNGM2OTU3MDlhNDg1NzQ3Y2QxYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTEyMyw2ICsxMjMs
NyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsK
IAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52
YWxpZEluZGV4OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBA
IC0xMzAsMzcgKzEzMSw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0
cnVjdCgKICAgICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVk
IGkpIHsKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVz
LnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAg
ICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXgoaSAtIDEpLm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292
ZXJpZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKTsKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50
IG1pbk9mZnNldCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAg
dW5kZWZpbmVkT3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0
LCBpIC0gZmlyc3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxp
ZEluZGV4OwogICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1
bnNpZ25lZCBpKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2Yg
YXJndW1lbnRzIGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFj
ZW50IG9wZXJhbmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZh
bGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5p
c0FyZ3VtZW50KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4
ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZv
ckluZGV4KGkpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFu
ZFNwYW4oaSk7CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkg
ewogICAgICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRl
ZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAg
ICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZv
ckluZGV4KGkpLmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsg
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSAr
IDE7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQp
LnRvTG9jYWwoKSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSAr
IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZh
cmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAg
bnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAg
IC8vIENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMg
bXVzdCBiZSBhbiBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ug
YWxsIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAog
ICAgIC8vIHJlZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVj
b3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBudW1WYXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVy
ZSBiZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3Zlcmll
cyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBu
dW1WYXJpYWJsZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVj
b3Zlcmllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0g
VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
LnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBudW1WYXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDcgKzE3Nyw3IEBAIHVuc2lnbmVkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07CiAg
ICAgCiAgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBh
bmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5k
U291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBP
cGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb3Bl
cmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5pZmll
ZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7CkBAIC0xOTgsMTIgKzIwNCwxMiBAQCB1
bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICAgICAg
aWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkK
LSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2Rl
UmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOworICAgICAgICAgICAgaWYgKG9w
ZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAg
ICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2Uo
ZXZlbnQuaWQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0TG9jYWxF
dmVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5
dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3Bl
cmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0
KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAg
ICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAg
ICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZh
bHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5k
YXRhRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIxMiw3ICsyMTgsNyBA
QCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICB9CiAgICAg
CiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVSZWNv
dmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVS
ZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZhbHVl
U291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJjZS5p
c1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTI2Niw3ICsyNzIsNyBAQCB1bnNpZ25lZCBW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0
dWFsUmVnKSwgaW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1h
dCk7CiAgICAgfQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0
ZWQpCiAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6
ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApp
bmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEwNzZk
ZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxs
ZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAg
ICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1NGYw
OGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUu
Y3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
IEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0ZWNv
ZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6IG1f
ZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGMyZGRhZGE1YzQzM2RmOTE5YTE0NzMxYmZmNDEy
MWE0ZTE5YjcwODIuLjM2Nzk0Y2QyOGZjNjU4OTAxNDM1NmJlOWNmZGNhODA5MDQ0MTYxMTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTI3
NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3YW50
IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVzZQog
ICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVkLgot
ICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENo
ZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJl
Z2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1NSw3
IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1h
cCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0g
T3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAw
KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVk
QXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBAIC0x
MjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAgICAg
ICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAg
Y29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyArMTk1
Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0g
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0
Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9u
b2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3BlcmFu
ZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNv
bXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAg
IAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5m
b3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MTksMTMgKzc5MjIsMTMgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2b2lk
IGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGNh
bGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpCkBAIC03OTQwLDcgKzc5NDMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxl
U2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQuc3Rv
cmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBt
X291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQpA
QCAtOTUzNSw1MSArOTUzOCw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNo
cG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAg
dm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0g
bG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1ZSBs
ZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJn
cywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklY
TUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5n
dGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFu
ZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20g
YSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRp
b24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJh
cmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwogICAg
ICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0
LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdzT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0
aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNsdWRp
bmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgewor
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1
bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAgIExW
YWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAorICAg
ICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhpcyks
IG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMs
IHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAvLyBG
SVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RW
YXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdzIGp1
c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rl
ciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNoaW5l
U3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0
YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAg
ICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCksIG1f
Y2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAgICAg
CiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJhcmdz
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50
MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zm
c2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRv
cnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25z
dEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQx
KCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAgICAg
ICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRz
LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9yd2Fy
ZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU4OCw1
MCArOTU5MSwyNiBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExWYWx1
ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3Ro
IGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOwot
ICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAgaWYg
KGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0
aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNv
bnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9
IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlv
biBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgotICAg
ICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJn
dW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1
ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5z
dXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0
KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhS
ZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigx
KSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGluZ1Ro
aXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aElu
Y2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAg
ICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQubWF4U2lnbmVkKG1fb3V0LnN1Yihj
YWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKSksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAg
IGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzOworCisgICAg
ICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQu
aW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZs
b3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aElu
Y2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAgIAog
ICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0
YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0
ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFj
aGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05NjkwLDY1ICs5NjY5LDE3IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBh
cyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAgICAg
ICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3Vt
ZW50c0xlbmd0aC52YWx1ZTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0
Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwg
bV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNMYXJn
ZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJn
dW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291
dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1
bHQpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CisgICAgICAgIHJldHVy
biBtX291dC5tYXhTaWduZWQobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCBtX291dC5pbnQzMlplcm8pOwog
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCiAgICAg
ewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZhdWx0
SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8SW5s
aW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgTm9kZSogYXJn
dW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGFyZ3VtZW50
cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3Vt
ZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJndW1l
bnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKLQotICAg
ICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVjdXJzYWJsZUxhbWJkYShbJl0oYXV0
byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAgICAgICAgICAgaWYgKHRhcmdldC0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VsZih0YXJnZXQtPmNo
aWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IHRhcmdldC0+Yml0
VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdl
dC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYobV9ncmFwaC52YXJBcmdD
aGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyArPSB0YXJnZXQtPmNhc3RPcGVyYW5k
PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0LT5vcCgpID09
IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBwZW5k
KGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKLSAgICAgICAg
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbGxlY3RB
cmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOwotICAg
ICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQotICAgICAgICAgICAgbGVu
Z3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5ndGgp
OworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTk3NTksNyArOTY5MCw3IEBA
IHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFkID0g
cmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMsICZ0YXJnZXRTdGFy
dF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUg
eworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAm
dGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkg
LT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUoKSwg
c3RvcmVJbmRleCk7CiAKQEAgLTk3OTEsOCArOTcyMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJnZXQt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExl
bmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2Fs
bEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdGFy
Z2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9v
dXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTIyNDcsOCArMTIxNzksOCBAQCBw
cml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBwYWNrZXQsIG1faGVhcHMu
U2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9Q
YWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5TaGFk
b3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5s
b2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDApKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsK
ICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlj
a2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAtMTIzMzksNyArMTIyNzEsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3Io
ZnJhbWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxs
KCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9
CiAgICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MDQsNyArMTc1MzYsNyBA
QCBwcml2YXRlOgogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0
YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAgICBt
X291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4
LmJpdHMoKSksCi0gICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgICAgICAgICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAhQVNT
RVJUX0RJU0FCTEVECiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5h
YnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTIsNyArMTc2NDQs
OCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhp
dERlc2NyaXB0b3JzLmFsbG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHByb2Zp
bGUsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZM
b2NhbHMoKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJP
ZkxvY2FscygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZUbXBzKCkpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODE3LDE1
ICsxNzc1MCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3Zh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBl
eGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFw
Lm1fbG9jYWxzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9w
bGFuLm1vZGUoKSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAgIGlm
IChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBu
b3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiLCBh
dmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4p
LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBt
X2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAgICAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRl
Y29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxh
YmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRh
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4
aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAg
ICAgICAgICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCkBA
IC0xODEyNSwzOSArMTgwNTgsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmFs
cmVhZHlSZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsKICAg
ICB9CiAgICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVz
W29wZXJhbmRdLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBt
X2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwgb2Zm
c2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGlu
dCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVy
YW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFs
dWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFz
ZSwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFz
ZSwgb3BlcmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NG
b3IoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBh
ZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCks
IG9mZnNldCk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVy
ZWQsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQotICAg
IFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBw
YXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9y
KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgcGF5
bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZGRyZXNzRm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkp
OwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50
cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXgg
OTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5ODM0
MDc2YThkNmY5MTc0MmNjYjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAog
ICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOwog
ICAgIAogICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7
IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNhblVu
c2FmZUpTVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNWYWx1
ZSgpOwogICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2YWx1
ZXMuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1ZSAm
JiB2YWx1ZU9uU3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1bWVu
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5jcHAKaW5kZXggMDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThlMy4u
MDRjODU3OTllNGQ0NjkyM2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcgbmFt
ZXNwYWNlIERGRzsKIAogT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAogICAg
IERhdGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgdmFsdWVQcm9maWxlLAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25l
ZCBudW1iZXJPZkxvY2FscykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJvZmls
ZURhdGFGb3JtYXQocHJvZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1
ZVByb2ZpbGUpCi0gICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2Nh
bHMpCisgICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMsIG51
bWJlck9mVG1wcykKIHsKIH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1bXA8
SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxv
Y2sqIGZ0CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRhODdj
Y2YzMjczZmU0YmUzNjA2ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2YWVj
ZTA5N2FkOGE0ZDFlMjdiODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCkBAIC02OSw3ICs2OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9TUkV4
aXREZXNjcmlwdG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZvcm1h
dCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKTsK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9j
YWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50
IHRvIHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgogICAg
IC8vIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFu
ZCB3ZSdsbCBoYXZlIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAppbmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgxNzZl
ZTcyLi5hMzc4NDEwZGE5YjgwMTU3MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUg
IkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZv
ck9wZXJhbmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEgQEAK
ICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNs
dWRlICJGVExTYXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwu
aCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIApAQCAtNDc0LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0m
IHZtLCB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAog
ICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAorICAg
IGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2lu
dCgpKSB7CisgICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rlc2Ny
aXB0b3ItPm1fdmFsdWVzLnRtcEluZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07Cisg
ICAgICAgIGppdC5wcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJ
bmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtl
VW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAg
c2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAg
ICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOwor
CisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUs
IFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25z
dCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVP
cmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkg
eworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5l
Q2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGlu
ZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxs
Qnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9y
aWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAg
ICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0
Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFy
ZQogICAgIC8vIGFscmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9y
LT5tX3ZhbHVlcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworCisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3Rh
dGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRp
Y19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpKSk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwg
ZXhpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRl
eCA3ZjdjZDM4MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFiZDll
YjNiNDcxMzM3NDRmODQzZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFs
T2JqZWN0KgogICAgICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0
dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxs
b2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAg
ICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9m
ZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJs
ZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3
ZDVkYjNhZDljZTVlOWNmLi4yYzMwNDhmYmJlMzUxODg3M2YzYWZiYjY1YjIzMzhmYTBhZDc0NTIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xNzYsNiArMTc2
LDM4IEBAIExWYWx1ZSBPdXRwdXQ6Om5lZyhMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6TmVnLCBvcmlnaW4oKSwgdmFsdWUpOwog
fQogCitMVmFsdWUgT3V0cHV0OjptYXhVbnNpZ25lZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KQoreworICAgIGF1dG8gaXNMZWZ0R3JlYXRlciA9IGFib3ZlT3JFcXVhbChsZWZ0LCByaWdodCk7
CisgICAgaWYgKGlzTGVmdEdyZWF0ZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBpc0xl
ZnRHcmVhdGVyLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgaXNMZWZ0R3Jl
YXRlciwgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptaW5VbnNpZ25lZChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQoreworICAgIGF1dG8gaXNMZWZ0TGVzcyA9IGJlbG93T3JF
cXVhbChsZWZ0LCByaWdodCk7CisgICAgaWYgKGlzTGVmdExlc3MtPmhhc0ludDMyKCkpCisgICAg
ICAgIHJldHVybiBpc0xlZnRMZXNzLT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4o
KSwgaXNMZWZ0TGVzcywgbGVmdCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptYXhTaWdu
ZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKK3sKKyAgICBhdXRvIGlzTGVmdEdyZWF0ZXIg
PSBncmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOworICAgIGlmIChpc0xlZnRHcmVhdGVy
LT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gaXNMZWZ0R3JlYXRlci0+YXNJbnQzMigpID8g
bGVmdCA6IHJpZ2h0OworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGlzTGVmdEdyZWF0ZXIsIGxlZnQsIHJpZ2h0KTsKK30K
KworTFZhbHVlIE91dHB1dDo6bWluU2lnbmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCit7
CisgICAgYXV0byBpc0xlZnRMZXNzID0gbGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsKKyAg
ICBpZiAoaXNMZWZ0TGVzcy0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdExlc3Mt
PmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBpc0xlZnRMZXNzLCBsZWZ0LCBy
aWdodCk7Cit9CisKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUFkZChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KQogewogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuaAppbmRleCBjNTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1NzBj
YTJlLi45NmQzZDEzM2U4NTgxNTBmNDA2ZWQxNDIzZmFjNGRmNTVjMGE5ZDhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTE1Niw2ICsxNTYsMTEgQEAgcHVibGljOgog
ICAgIExWYWx1ZSBjaGlsbE1vZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIG5lZyhMVmFs
dWUpOwogCisgICAgTFZhbHVlIG1heFVuc2lnbmVkKExWYWx1ZSwgTFZhbHVlKTsKKyAgICBMVmFs
dWUgbWluVW5zaWduZWQoTFZhbHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtYXhTaWduZWQoTFZh
bHVlLCBMVmFsdWUpOworICAgIExWYWx1ZSBtaW5TaWduZWQoTFZhbHVlLCBMVmFsdWUpOworCiAg
ICAgTFZhbHVlIGRvdWJsZUFkZChMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJsZVN1
YihMVmFsdWUsIExWYWx1ZSk7CiAgICAgTFZhbHVlIGRvdWJsZU11bChMVmFsdWUsIExWYWx1ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2OTM0
YzNmMGQzNzkxZjY0YmE0Mjk2M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3YTY3
MGQyNTgwNGFhOGNhZTIyYjNhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJh
dGlvbigKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigKICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygp
KSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1cm4g
Y2FsbE9wZXJhdGlvbih2bSwgdXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQsIGZ1
bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdkZDYz
MWFjZDRjY2JlY2QxNGIyNGNjNWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBACisj
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50Cisg
ICAgYXR0cl9yZWFkZXIgOnVzZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJfcmVh
ZGVyIDpuYW1lCisgICAgYXR0cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6ZShu
YW1lLCBpbmRleCwgdG1wcykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRleCA9
IGluZGV4CisgICAgICAgIEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNl
RGVmID09IDp1c2UgfQorICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURl
Zil8IHVzZURlZiA9PSA6ZGVmaW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhuYW1l
c3BhY2UpCisgICAgICAgIEVPRjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9Ogor
RU9GCisgICAgZW5kCitlbmQKKworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlhbGl6
ZShvcGNvZGUsIHRtcHMsIGNoZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisg
ICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5t
YXBfd2l0aF9pbmRleCB7IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhuYW1l
LCBpbmRleCwgdG1wcykgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAgIEBj
aGVja3BvaW50cy5lYWNoIGRvIHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAgICBF
T0Y8LS0KK0JpdE1hcDxtYXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBpdGFs
aXplZF9uYW1lfSh1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3BvaW50
KSB7CisKKyAgICB9Cit9CitFT0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL09wY29kZS5yYgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNlYmI0
ZjBhYjI0NDg1Li5jZmQ5ZGYxNTExNDdhODZkYTRiYzc1YmU0NmE2NzgyNWUyNTM3NWYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAsNyBA
QCBjbGFzcyBPcGNvZGUKICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVyIDpt
ZXRhZGF0YQogICAgIGF0dHJfcmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hlY2tw
b2ludHMKIAogICAgIG1vZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXplOjpO
YXJyb3ciCkBAIC00NSwxMiArNDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAogICAg
IGVuZAogCi0gICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBt
ZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNlY3Rp
b24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycywg
dG1wcywgY2hlY2twb2ludHMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAgICBA
bmFtZSA9IG5hbWUKICAgICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBAbWV0
YWRhdGEgPSBNZXRhZGF0YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwogICAg
ICAgICBAYXJncyA9IGFyZ3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwgaW5k
ZXh8IEFyZ3VtZW50Lm5ldyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFyZ3Mu
bmlsPworICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2tw
b2ludHMubWFwIHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3Bv
aW50cy5uaWw/CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEyMSw4
IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25h
bWV9IDogcHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9
CisgICAgI3tjaGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTEz
Miw2ICsxMzcsMTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURU
eXBlfSBvcGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRW
YWx1ZXMKKyAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJl
bnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNo
ZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51
bWJlck9mQ2hlY2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAg
ICBkZWYgdGVtcHMKKyAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVu
dW0gVG1wcyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAg
ICAgICAgI3t0bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAg
ICBkZWYgZW1pdHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBv
cGNvZGVJRFR5cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIs
IG9wY29kZUlEVHlwZSwgMCkKQEAgLTIwMCw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRlbXBs
YXRlPE9wY29kZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNv
ZGVHZW5lcmF0b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3Iq
IGdlbiN7dHlwZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBj
aGVja3BvaW50cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAg
ICAgICBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+
YWxpZ25XaWRlT3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNp
emU6OldpZGUzMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
U2VjdGlvbi5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpp
bmRleCAyMDRhYzc1OWUxM2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUw
MDgwZTRjMjNjYzBlYmVjMTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAg
ZW5kCiAKICAgZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5l
dyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0
YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3
KHNlbGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRh
ZGF0YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29u
ZmlnWzpjaGVja3BvaW50c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUs
IG9wY29kZXMsIGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAKaW5kZXggZjYzOTRhYzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5NTM2
YTYwMC4uMGZkNTYyYmIxYTkyYjAzNGM1ZGM4MDYzNjA5MDViNDY0ZWI1M2VhNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTUwLDcg
KzUwLDcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdn
ZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGwKICAgICBBU1NFUlQoZ2xvYmFsRXhlYy0+
aXNEZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSk7CiB9CiAKLWJvb2wgQ2FsbEZyYW1l
OjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0Citib29sIENhbGxGcmFtZTo6
Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVC
bG9jaygpKTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKQEAgLTEwMCwx
MiArMTAwLDEyIEBAIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxs
U2l0ZUFzUmF3Qml0cygpIGNvbnN0CiAKIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0
ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4Ojpmcm9tQml0cyhjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9CiAKIFNVUFBSRVNTX0FT
QU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBjb25zdAog
ewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2FsbFNpdGVB
c1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZy
b21CaXRzKHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCkBAIC0xMjMsMjggKzEyMywyOSBAQCB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQ
Qyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJp
dHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwot
ICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQo
Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCkt
PmJ5dGVjb2RlT2Zmc2V0KGN1cnJlbnRWUEMoKSk7ICAgICAKIH0KIAogI2Vsc2UgLy8gVVNFKEpT
VkFMVUUzMl82NCkKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBj
b25zdAogewotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAg
ICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQo
KSkucHRyKCk7CiB9CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3Ry
dWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShjb2RlQmxvY2soKS0+
Ynl0ZWNvZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRdLnRhZygpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0cygpKTsKKyAgICB0
aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gY2FsbFNpdGUuYml0cygp
OworICAgIEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZy
YW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
Y29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgp
KTsKLSAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICBBU1NFUlQoY2FsbFNp
dGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5
dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKIH0KIAogI2VuZGlmCkBAIC0xNjUsOCArMTY2LDggQEAg
Qnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKQogICAgICAgICByZXR1cm4g
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgfQogI2VuZGlmCi0gICAgQVNTRVJUKGNh
bGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIHJldHVybiBCeXRlY29kZUluZGV4
KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0
c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29k
ZUluZGV4KCk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAgLTE4
MCw3ICsxODEsNyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAg
IHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0g
ICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2Rl
T2Zmc2V0KCkpKTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0ZWNv
ZGVJbmRleCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFs
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRl
eCBjZmI3NzE4NTYwMzk5MzM5MTAwNGZjMTMyMTE4Mzg0MjNjNWRjNmE5Li4wNWY2OTE3NzQ4OTUz
MzFkOTIzMTAwMWExNWEyYzA1YWJlOGE4OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC00NiwxOCArNDYsMTggQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKICAgICAg
ICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi0g
ICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAg
OiBtX2JpdHMoYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkKICAgICAgICAgeyB9CiAKLSAgICAgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4
OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleDsg
fQorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2Jp
dHM7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAgICAgdWlu
dDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQor
ICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29k
ZUluZGV4OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJpdHMoKSk7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50MzJf
dCBtX2JpdHMgeyBCeXRlY29kZUluZGV4KCkuYXNCaXRzKCkgfTsKICAgICB9OwogCiAgICAgY2xh
c3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC03
OCw3ICs3OCw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNh
bGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxs
ZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rp
b24qIHJldHVyblBDOworICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5Q
QzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNp
emVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGlj
X2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJ
blJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNl
IEpTQyAgewogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENhbGxlckZyYW1lQW5kUEMsIHJldHVyblBDKTsgfQogICAgICAg
ICBBYnN0cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBD
KHZtLCB0aGlzKTsgfQogCi0gICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZz
ZXQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkg
Y29uc3Q7CiAgICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29u
c3Q7CiAKICAgICAgICAgdW5zaWduZWQgY2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdDsKQEAgLTE4
MiwxMCArMTgyLDggQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgdm9pZCBpbml0
RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlND
YWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20g
dGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2NrKS4KLSAgICAgICAg
UmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsK
LSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFudAotICAgICAgICBS
ZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9y
IGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1
YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQu
IChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRp
b24uKQpAQCAtMjU0LDcgKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgdm9pZCBz
ZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVn
aXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5wYXlsb2FkKCkgPSBj
b3VudDsgfQogICAgICAgICBpbmxpbmUgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqKTsKICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVCbG9jayopOwotICAgICAgICB2b2lkIHNl
dFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPih2YWx1ZSk7IH0KKyAgICAgICAgdm9p
ZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMg
PSB2YWx1ZTsgfQogCiAgICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZSgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5s
aW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGlu
ZXMuaAppbmRleCBhOTdkZWNhNTNiY2UxNzkyODliMGMzODBkMDRlOGYyYTg2MDQ3N2QxLi5hZTM1
ODk4ZmI1YzlmNDZkNWIwY2FmM2M2NWY0NzdkMzQ4MTNiOTk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMyLDI4
ICszMiwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJh
bWU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29k
ZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5k
ZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOwot
fQotCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgQ2Fs
bEZyYW1lOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07
CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWdpc3Rlcio+KCZ0aGlzLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRSZWdpc3RlcihyZWcp
KTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgUmVnaXN0ZXIm
IENhbGxGcmFtZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVy
biB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CisgICAgQVNTRVJUKCFyZWcuaXNDb25zdGFudCgp
KTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBD
YWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMzYTFiZTRmNThkYWVhODA3ZTNiYWZlZjBkNGJh
MDJmZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3Qg
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldFRtcChzaXpl
X3Qgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNp
emVvZih1aW50NjRfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHRtcHNb
b2Zmc2V0XSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9m
KHVpbnQzMl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAo
c2l6ZW9mKFQpID09IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBzaXplb2YodWlu
dDhfdCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1
aW50OF90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICB2b2lkKiBuZXh0SW5zdHJ1Y3Rpb25KdW1wVGFyZ2V0
OworICAgIHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdOworfTsKKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5k
ZXggZTdhM2QyMmJlOGNjY2IzMTJmZDExNWI3NDhhMDJlZGQ2OGZmMzUwNS4uYzEwMTMxZTczM2Rm
OThjYjZjMDNmYzJjNzgyODBjNmMzMTA0Mjk2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1
ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1
ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpTVmFsdWUgZXZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIENh
bGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1lLT5jYWxsU2l0ZUlu
ZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51
bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJh
bWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxpbmtlZENvZGVCbG9j
ayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIGJvb2wgaXNB
cnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVu
Y3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4
dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90CiAgICAgfQog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAgIGlmIChsZW5ndGgg
Pj0gbWF4QXJndW1lbnRzKQorICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKKwogICAgIGlmIChsZW5ndGggPj0gZmlyc3RWYXJBcmdPZmZzZXQpCiAg
ICAgICAgIGxlbmd0aCAtPSBmaXJzdFZhckFyZ09mZnNldDsKICAgICBlbHNlCkBAIC0yNDksNyAr
MjUzLDcgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwKICAgICByZXR1cm4gbGVuZ3RoOwogfQog
Ci12b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBh
cmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQordm9pZCBsb2FkVmFy
YXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgp
CiB7CiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMuaXNDZWxsKCkpIHx8ICFsZW5ndGgpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2MSwzMSArMjY1LDMxIEBAIHZvaWQgbG9hZFZhcmFyZ3MoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpCiAgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKICAgICBjYXNlIERpcmVjdEFyZ3VtZW50
c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PERpcmVjdEFy
Z3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PERpcmVj
dEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVs
ZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNj
b3BlZEFyZ3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganND
YXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAg
anNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2Jq
ZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRv
QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwp
LT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQs
IGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsgCiAgICAgZGVmYXVsdDogewogICAgICAgICBBU1NF
UlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSkgewog
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAganNDYXN0PEpTQXJyYXkq
PihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0
RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5
Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVz
dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGggJiYgb2JqZWN0
LT5jYW5HZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7ICsraSkKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBvYmplY3QtPmdldEluZGV4UXVpY2tseShp
ICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBvYmplY3QtPmdl
dEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGdsb2JhbE9iamVj
dCwgaSArIG9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IHZhbHVlOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHZhbHVlOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KQEAgLTI5Nyw4ICszMDEsNyBAQCB2b2lkIHNl
dHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDYWxsRgogICAgIAogICAgIGxvYWRWYXJhcmdzKAogICAgICAgICBnbG9iYWxP
YmplY3QsCi0gICAgICAgIGNhbGxGcmFtZSwKLSAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApLAorICAgICAgICBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCZjYWxsRnJhbWUtPnIoY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KDApKSksCiAgICAgICAgIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwogICAgIAog
ICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobGVuZ3RoICsg
MSk7CkBAIC01MzgsOCArNTQxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2
aXNpdG9yLT5jb2RlQmxvY2soKTsKIAogICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAg
ICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2Nr
KSB7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBjaGVja3BvaW50cy4KKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgIGlmIChtX3JldHVyblBDID09ICZjaGVja3BvaW50
X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQpCisgICAgICAgICAgICAgICAg
bV9jb2RlQmxvY2stPnZtKCkuZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUobV9jYWxsRnJhbWUp
OworI2VuZGlmCisgICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewogICAgICAgICAg
ICAgICAgIG1faGFuZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJs
b2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgICAgICAgICAgICAgIGlmICht
X2hhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7
CkBAIC01NjEsNiArNTY5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2hvdWxkU3RvcFVud2lu
ZGluZykKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKKyAgICAgICAg
bV9yZXR1cm5QQyA9IG1fY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCk7CiAgICAgICAgIHJl
dHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0KIApAQCAtNTk3LDYgKzYwNiw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYgbV9j
b2RlQmxvY2s7CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgbXV0YWJsZSBjb25z
dCB2b2lkKiBtX3JldHVyblBDIHsgbnVsbHB0ciB9OwogfTsKIAogTkVWRVJfSU5MSU5FIEhhbmRs
ZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1l
LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKQEAgLTg2Niw3ICs4NzYsNyBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNPYmplY3QqCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2Jh
bE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKQor
ICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6ZSgp
ICsgMSAvKiB0aGlzICovID49IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVja2Vk
UmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkp
OwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3QqIElu
dGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkp
IHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNp
emUoKSArIDEgLyogdGhpcyAqLyA+PSBtYXhBcmd1bWVudHMpKSB7CiAgICAgICAgIHRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmgKaW5kZXggODZjMzI0NjkyMDRlOWFlNTkxMWZlY2VhOTAyYWU5N2NhYjU1
ZDNhMC4uZmYxYjRlODYxMDRjOTYyNTk3NzllMjUyNzkyMmFmMzM0N2NmMjk0NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE3MSw3
ICsxNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heEFyZ3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJn
cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVu
c2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAg
ICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpOwotICAgIHZvaWQg
bG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1
YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zm
c2V0LCB1aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxl
ZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJf
dCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdP
ZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNG
cmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBkNzFhNTk3MWRkYzhmMGY1ZWE2
NzhkNWZjZTQ4ZTM5NmUyMmE4NzU0Li44MThmNGRiMmI2N2RlMzkzYTE3OTg0ZGQ1MDY4YTg0MmQy
MWZiMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFk
SW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2lu
CiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJh
bWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQz
MigpOworICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
Y2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJv
eGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBTdGFja1Zp
c2l0b3I6OkZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwgV1RG
OjpGdW5jdGlvbjwKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiAhaXNJbmxpbmVkKSB7CiAgICAg
ICAgICAgICBpbmRlbnQrKzsKIAotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKSB7CiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CiAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KGluZGVudCwgYnl0ZWNvZGVJbmRleCwgIiBvZiAiLCBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLnNpemUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggYzhk
ZjIwMGI5ODFmZjgyNmE1MmVmMDY3MGVjN2RlZWRjYmZmNjk2ZS4uYzNlOGQwYzNkYTExM2Q5OWFj
MGM4ZGY0MDE1OTg5YjI5MGQ2OTM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpqaXRBc3NlcnRJc051bGwoR1BSUmVnIGdwcikKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCkKIHsKLSAgICBKdW1wIG9rID0gYnJhbmNoMzIo
QmVsb3csIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIFRydXN0ZWRJ
bW0zMigxMDAwMDAwMCkpOworICAgIEp1bXAgb2sgPSBicmFuY2gzMihCZWxvdywgcGF5bG9hZEZv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBUcnVzdGVk
SW1tMzIoMTAwMDAwMDApKTsKICAgICBhYm9ydFdpdGhSZWFzb24oQUhJbnNhbmVBcmd1bWVudENv
dW50KTsKICAgICBvay5saW5rKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMjIwMDljNWZkMmJhMjI3ZDQ3Y2ZlODU0OTM5ZjUyZGVm
MmQ3MWJjMi4uNTg3MDdmYTg0M2NkZGU4NzI1Y2E3MjhiODhjMTEzZjhhOTFmMjIxYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xMTQ4LDkgKzEx
NDgsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQo
KSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2
aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0gICAg
c3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVz
cyBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTEx
NjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIu
aXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdP
ZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisg
ICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7Cisg
ICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0Zvcihv
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBw
YXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BS
KQpAQCAtMTE3OCw5ICsxMTgwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxS
ZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9y
KGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsK
KyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCmluZGV4IDg0ODVhOWZiZDY4
M2RiZWY2NThmNjcwODgxM2Y3NThkNWRkYjk4ZDEuLmIzZjBlMTY5MmMwZGFiYTc5OTU2ZTFlNTEx
OTk4YjlmMjlkMmQ3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2MKICAgICBzdG9y
ZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKENh
bGxlckZyYW1lQW5kUEMsIGNhbGxlckZyYW1lKSksIHNjcmF0Y2gxKTsKICAgICBzdG9yZVB0cihz
Y3JhdGNoMSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxlckZyYW1lKSkpOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpLCBzY3JhdGNoMSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgc2NyYXRjaDEpOwogICAgIHN0
b3JlUHRyKHNjcmF0Y2gxLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
c2NvcGUpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMTdjMGVkYWE4MmI5
Zjk0ZjU3NDEzMTEwNjFhNjUxMjk0YTUxNmY4NS4uYjY2MTI3YTRmYjFlY2JjNmYxNDkyMTdiYzAw
M2UxMDJlMTdhZTU3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNzU1LDcgKzc1
NSw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayk7CiAKLSAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCksIHJlZ1QxKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgcmVnVDEpOwogICAgICAgICBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggMjgw
MzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEyYTcz
YzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEs
MTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJp
Y3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAg
ICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9p
ZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBD
b21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERv
dWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExv
YWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7
CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBS
ZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1
ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVy
IGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAg
ICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3Jh
dGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93
bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVy
TW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3du
ZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZv
aWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHBy
b2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0
LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVj
dE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZv
aWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAg
ICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNW
YWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29u
c3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0
YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50
JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBp
bnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4
LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0
TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
KTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdp
c3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3Rl
cklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5
bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
IHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5k
ZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1p
dFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElz
SW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9p
ZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4
SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgs
IEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNl
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVn
aXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAg
IHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9
IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2b2lk
IGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAK
LSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdp
c3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50
IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0
YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZp
ZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywg
SnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJ
blJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxz
ZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2
b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGlu
dCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdp
c3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lk
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBm
cm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxz
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBh
eWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1
c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1Niwy
OSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3Ro
SlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9p
ZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rl
cik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklE
LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFi
bGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAg
ICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZp
ZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVy
IGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJf
NjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwot
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENv
bmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJl
bGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERv
dWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3OCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwg
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2
b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
SlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCArNjg3
LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7
CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQ
UlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRD
bG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQp
OwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAg
IHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwot
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAg
ICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAg
dm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50
cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9w
ZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNy
Yyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAgICAg
ICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwg
UHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQo
KSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZp
cnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEzICs3
NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBp
bnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAg
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0
aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBB
cmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAg
ICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmlu
dEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQg
cHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJl
Z2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJj
ZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5Zjkx
ZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
dW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBv
cDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9y
aHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24p
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5n
IGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0
YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9u
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1
NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5t
X3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZElt
cGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5z
aXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUg
Y29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcg
KzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwg
aW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0g
Ynl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwg
cmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTksNyAr
Mzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Owog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFy
ZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09
IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5
T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxp
bmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBh
dGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBK
SVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+
KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBv
cDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRU
eXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVk
RnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRl
Y29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0
cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkg
KzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBO
b25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0
aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
SlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUs
OSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjpl
bWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVhYzMu
LmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVn
VDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAs
IHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zm
c2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3Vt
ZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5v
ZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBu
ZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNv
ZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKIHsK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2Nh
bGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9j
YWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5
Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAsNyAr
NTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2co
IkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUg
YmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgV1RG
QnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNr
ZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLjdiYzE0
ZTgzNWFkMWFkMWRkNjczZmNhNTA2OTY4MGUyNTVmYmM5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJbnN0
cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJldHVy
biBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChpbnQg
c3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQg
ZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNTRVJU
KGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBzdG9y
ZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTEwOSw3ICsxMTAsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhbWUoKQogI2Vsc2UKICAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwog
I2VuZGlmCi0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihs
b2NhdGlvbkJpdHMpLCB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhp
cyBpcyBuZWVkZWQuIEpJVE9wZXJhdGlvbnMgdGVuZCB0byB1cGRhdGUgdGhlIHRvcCBjYWxsIGZy
YW1lIG9uCiAgICAgLy8gdGhlIEMrKyBzaWRlLgpAQCAtMTQzLDcgKzE0NCw3IEBAIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBp
bnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xNTUsNyArMTU2LDcgQEAgQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEpOwpAQCAtMTY3LDkgKzE2OCw5IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIGludCB2UmVnKQor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQorICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUocmVnKSkKICAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogfQogCkBAIC0yODQsOSArMjg1LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6c2FtcGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQogI2VuZGlmCiAjZW5kaWYK
IAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMp
CitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0
cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cisg
ICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNT
dHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxl
bmd0aCgpID09IDE7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKQEAgLTM2MywyNiArMzY0LDI2IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxl
KQogICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCi1BTFdBWVNfSU5MSU5FIGludDMyX3Qg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgaW50MzJf
dCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitBTFdB
WVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJs
ZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKGludCBk
c3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVz
c0Zvcihkc3QpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0g
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50
T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzkwLDkgKzM5MSw5IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoaW50IGluZGV4LCBS
ZWdpc3RlcklEIHRhZykKICAgICBsb2FkMzIodGFnRm9yKGluZGV4KSwgdGFnKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBSZWdpc3RlcklEIHBheWxvYWQpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkucGF5bG9hZCgpKSwgcGF5
bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MDYsMTM2ICs0MDcsMTMzIEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCkKICAgICBtb3ZlKEltbTMyKHYudGFnKCkpLCB0YWcpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMs
IEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXQoVmlydHVh
bFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRMb2FkKHNyYywgZHN0
LnRhZ0dQUigpLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRTdG9yZShkc3QsIGZyb20udGFn
R1BSKCksIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVy
SUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKIAogICAgIGlmIChiYXNlID09IGNh
bGxGcmFtZVJlZ2lzdGVyKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBheWxvYWQgIT0gYmFz
ZSk7Ci0gICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9hZCk7Ci0gICAgICAgIGVt
aXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICBlbWl0TG9hZFBheWxvYWQocmVnLCBwYXls
b2FkKTsKKyAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07CiAgICAgaWYgKHBh
eWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCi0gICAgICAgIGxvYWQzMih0
YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IodGFy
Z2V0LCBiYXNlKSwgcGF5bG9hZCk7CisgICAgICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwg
dGFnKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJh
c2UpLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Cisg
ICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7CisgICAgbG9hZDMyKHRh
Z0ZvcihyZWcsIGJhc2UpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihp
bnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRl
eDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lz
dGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3RlcklEIHRhZzIsIFJl
Z2lzdGVySUQgcGF5bG9hZDIpCiB7Ci0gICAgZW1pdExvYWQoaW5kZXgyLCB0YWcyLCBwYXlsb2Fk
Mik7Ci0gICAgZW1pdExvYWQoaW5kZXgxLCB0YWcxLCBwYXlsb2FkMSk7CisgICAgZW1pdExvYWQo
cmVnMiwgdGFnMiwgcGF5bG9hZDIpOworICAgIGVtaXRMb2FkKHJlZzEsIHRhZzEsIHBheWxvYWQx
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihp
bmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wp
LCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRl
eCksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsK
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBG
UFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgY2hhciogYnl0ZVBvaW50ZXIgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1
YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lz
dGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKLSAg
ICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3RvcmUz
Mih0YWcsIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxv
YWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMih0YWcsIHRhZ0ZvcihyZWcsIGJhc2UpKTsK
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7Cisg
ICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0lu
dDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRh
Z0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQz
MihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgVHJ1c3Rl
ZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9h
ZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihy
ZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQ2VsbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCiB7Ci0g
ICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXls
b2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0NlbGwpCi0gICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihyZWcp
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzQm9vbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAg
ICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQm9v
bCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRh
Z0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURv
dWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsK
LSAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihpbmRleCkpOworICAgIHN0b3JlRG91
YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRT
dG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0IEpT
VmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGFyZ2V0IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnBheWxvYWQoKSks
IHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFudC50
YWcoKSksIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50
LnBheWxvYWQoKSksIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihj
b25zdGFudC50YWcoKSksIHRhZ0ZvcihyZWcsIGJhc2UpKTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KQor
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyIHJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZp
cnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5p
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxS
ZWdpc3RlckluZGV4KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlND
ZWxsKHJlZykpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZykKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25O
b3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bCh0YWcpKTsKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3Rh
bnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29u
c3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAgICAg
Y29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CkBAIC01NTUsMTEg
KzU1MywxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
aW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKIAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJh
eSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CkBAIC01NzEsNDcgKzU2OSwzMiBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQogICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyksIGRzdCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywg
SlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
cmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLm9m
ZnNldCgpLCBkc3QpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJ
RCBkc3QyKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
VmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNy
YzIsIFJlZ2lzdGVySUQgZHN0MikKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEs
IGRzdDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdp
c3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3Rl
cklEIGRzdDIpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMS5vZmZzZXQoKSwg
ZHN0MSwgc3JjMi5vZmZzZXQoKSwgZHN0Mik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zv
cihkc3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBm
cm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBmcm9tLnBheWxvYWRHUFIo
KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQotewotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKLX0KLQogQUxXQVlTX0lOTElORSBKSVQ6
Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3Rl
cklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0Y2gp
OwpAQCAtNjI5LDI4ICs2MTIsMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWcpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywg
VmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5v
dEltbWVkaWF0ZSh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Zyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJl
Z2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxS
ZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIo
aW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29s
KSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5k
ZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7
CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIEFT
U0VSVChpc09wZXJhbmRDb25zdGFudEludChpbmRleCkpOwotICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLmFzSW50MzIoKSksIHZhbHVl
KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBBU1NFUlQoaXNPcGVyYW5k
Q29uc3RhbnRJbnQocmVnKSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdl
dENvbnN0YW50T3BlcmFuZChyZWcpLmFzSW50MzIoKSksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJsZUp1bXBJ
Zk5vdEludChSZWdpc3RlcklEIHJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCmluZGV4IDdjZmEwOTVmMDBkMTdlMTQxMWJlOWNmYjgwZjgwODA2Zjc4OGY2YzEuLjQ2
MTdlZTI5NGIxNGZlZjEyNDg4ODQ0MWRmZDk0NTEwMzY1YWE1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNTYsMTAgKzU2LDEwIEBAIG5hbWVzcGFjZSBK
U0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNb3Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
KSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCiAgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CiB9CiAKQEAgLTEyMCw3ICsxMjAs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3Qs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRl
Y29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0g
Ynl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3Ig
PSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5j
ZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKQEAgLTE1NSw5ICsxNTUsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCiAgICAgLy8gTG9hZCB0aGUgb3BlcmFu
ZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVy
cy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25l
IHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4K
QEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3Rh
bmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIApAQCAtMjA0LDggKzIwNCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKIHZv
aWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
c0VtcHR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdU
MCk7CkBAIC0yNDYsOCArMjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
c191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRl
ZmluZWRPck51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogCkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzQm9vbGVhbj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOwpAQCAtMjc0LDggKzI3NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xl
YW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
ICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBA
IC0yODYsOCArMjg2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dp
dGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBSZXR1cm4gdGhlIHJl
c3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5v
ZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNDMsOCArMzQz
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2MCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25hbWUub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKIAogICAgIC8vIElu
dmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBh
IGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNsZWFyIG90aGVyIHRoYW4g
dGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0
cyByZXNwZWN0aXZlbHkpLgpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKSk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTM5MCwxNCArMzkwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pl
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxs
PigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBAIC00NDUsNyArNDQ1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpudW5kZWZpbmVkT3JOdWxsPigpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NzAsOCArNDcwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXFQdHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0g
ICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5t
X3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV92YWx1ZTsKKyAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRP
cGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VSVChzcGVjaWFsUG9p
bnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIApAQCAtNDg1LDE4ICs0
ODUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZz
ZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwog
fQpAQCAtNTEwLDI2ICs1MTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTM5LDcgKzUzOSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4o
KTsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7
CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CkBAIC01NDgsOSArNTQ4LDkgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUu
bV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9
IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVn
VDAsIHNyYzIsIHJlZ1QxKTsKICAgICAKQEAgLTU5Miw4ICs1OTIsOCBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IENvbXBpbGVPcAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTY1MCw4ICs2NTAsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAgICAgCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKQEAgLTY2NCw4ICs2NjQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CkBAIC02ODQsMjAgKzY4NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
U3RyaW5nPigpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwpAQCAtNzI4LDEwICs3MjgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06
OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9m
ZnNldCgpKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2VwdGlv
bi5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2Vw
dGlvbik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNl
dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJv
d25WYWx1ZS5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Rocm93blZhbHVlKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJWE1FOiBjb25z
aWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1
ZGluZwpAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAo
YnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0
cygpKTsKICAgICBlbHNlCkBAIC03NDksNyArNzQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnku
bGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdU
MCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5k
LCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8
VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpAQCAtNzY2LDEwICs3NjYsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQg
SklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIGludCBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCBy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwogICAgIHNpemVfdCB0
YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRP
ZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0
T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVt
cFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC03
OTQsNyArNzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBi
eXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAg
IHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgxMSw3ICs4MTEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTd2l0Y2hTdHJpbmc+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5t
X3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVk
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0
ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBz
dGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgzNCw4ICs4MzQsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEs
IHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
QEAgLTg2Nyw4ICs4NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC05MDMsNyArOTAzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOwogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0g
ICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zmc2V0
KCkpOworICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
KTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC05MTMsNyArOTEz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRT
Y29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7
CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAgLTkyNCw3ICs5MjQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0Rz
dC5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSk7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgY2FsbGVl
ID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxl
ZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2Fj
aGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBj
YWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBA
IC05NjUsMTMgKzk2NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0
dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsK
ICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lz
dGVyLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQog
CkBAIC05ODUsNyArOTg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC05OTYsNyAr
OTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDI0LDEwICsxMDI0LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2Nv
bnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUu
bV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5t
X2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwpA
QCAtMTEwNCw4ICsxMTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGUKIHZvaWQgSklUOjpl
bWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHJl
Z2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNv
ZGUubV9yZWdleHA7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTExMTUsMTIgKzExMTUsMTIgQEAgdm9pZCBKSVQ6OmVt
aXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJs
b2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCkBAIC0xMTYxLDEx
ICsxMTYxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCk7CkBAIC0xMjA3LDEwICsxMjA3LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZXNJbmRl
eCA9IGJ5dGVjb2RlLm1fYXJndi5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNv
ZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOwogfQpAQCAtMTIxOSw4ICsxMjE5
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3Ro
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDAp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLApAQCAtMTIz
Niw5ICsxMjM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3Ry
dWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTI4
Miw5ICsxMjgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAgICAgCkBAIC0xMzMwLDkgKzEzMzAs
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4
ZWRQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAogICAgIExhYmVsIHNsb3dQYXRoID0g
bGFiZWwoKTsKQEAgLTEzNDksMTAgKzEzNDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24K
IHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM5MCw5ICsxMzkwLDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0MTQsOSArMTQxNCw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmlj
UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDQwLDcg
KzE0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxv
Y2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247Ci0gICAgaW50IHZhbHVlVG9Qcm9maWxl
ID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXI7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7
CiAKQEAgLTE1MDksNyArMTUwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0CiAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTE1MjMsOCArMTUyMyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9u
QXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQ
UlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1Qy
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCks
IHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpKTsKIH0KIApAQCAtMTU0NSw4ICsxNTQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBsb2FkMzIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFp
bGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CiAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CkBA
IC0xNTU2LDkgKzE1NTYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3Ro
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9T
a2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CisgICAgbG9hZDMyKHBh
eWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwg
cmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAgemVy
b0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFt
c1RvU2tpcCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKQEAg
LTE1ODYsNyArMTU4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qw
KTsKQEAgLTE1OTQsOSArMTU5NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QyKTsKKyAgICBsb2FkMzIocGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdU
Mik7CiAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVx
dWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAg
ICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogCiAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNhODEzNmVj
YWMxYjY0MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1MWZl
YmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRC
dWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYg
KGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0Jp
dHMoKSk7CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwog
ICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBw
cm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7CiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdz
KTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQ
cm9maWxlJj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0MzkzZC4u
OGNiNTVmYjViN2VmODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4IEBA
IFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2
bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2
ZXJib3NlT1NSKCkpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQg
Y29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5zaWduZWQg
bnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0g
MDsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBudW1WYXJzV2l0aFZh
bHVlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8
SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51
bVZhcnNXaXRoVmFsdWVzKTsKKworICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4g
bXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhW
YWx1ZXMsIDApOwogICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0gc3RhdGlj
X2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNM
b2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwgbG9j
YWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVz
dEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVT
YXZlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11c3RIYW5kbGVW
YWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAg
ICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVu
dCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25U
cnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICBj
b2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0
YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjpl
bmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkp
OwogICAgIH0pOwogCkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBzY29w
ZQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJl
ZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVn
KSA9IHNjb3BlLT5uZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9IHNjb3Bl
U2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxK
U09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgp
KS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwogICAgIEdl
dFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZ2V0
UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1
cmVWYXIgZm9yIGdldF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSW5zdHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNv
ZGVCbG9jayk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpT
T2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkp
LmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFs
dWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVl
KS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdp
c3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2MyOGJlOGM0
ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBA
IC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogewogICAgIGlmICho
YXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIApA
QCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIwOCw3
ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNlIENvbnRp
Z3VvdXNTaGFwZToKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdU
MSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRl
QmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUsNyArMjM1
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFiZWwg
c3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVy
KGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMp
OwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgLy8gcHJv
cGVydHk6IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRp
ZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNl
cyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1
dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBi
b29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9i
eV92YWxfZGlyZWN0OwotICAgIGludCBiYXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAgICBpbnQg
dmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKLSAg
ICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAgaWYgKGlz
RGlyZWN0KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmlidXRlID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRH
ZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQz
Ml90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1Qw
KTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwot
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAt
NTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNX
aXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJl
Y3QpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1
Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBAIC02
MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107
CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBz
Y29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCit2b2lk
IEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
CiB7CiAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAsOCArNjcw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRh
Lm1fbG9jYWxTY29wZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29w
ZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgSklU
OjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVn
IHJlZykKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9z
dXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdldENs
b3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9w
ZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRh
ZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hw
b2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBp
bnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hw
b2ludFNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAg
ICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5Mzgs
NyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFk
ZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNv
ZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVy
ZS5zbG90KCk7CkBAIC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rvcgog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIGludCBhcmd1bWVudHMg
PSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVy
LCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUK
ICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBAIC0x
MTUwLDggKzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjZWxz
ZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25l
ZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVt
cCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKQEAg
LTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0lu
dCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1MDEsNyAr
MTUwMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJmMzM5
MGE2YzdkYjI4NmE1YzEuLjY5OTg3NjljNThiMDBjMGJhY2M1YzkyZjFkNDc2YWE1N2UzNTMzMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1LDEy
ICs0NSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50
MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAg
ICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIGlubGlu
ZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2Fk
KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQgZHN0KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBKdW1wIGVt
aXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNlbmRpZgogCiAgICAgICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRv
LCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC02NCwzNiArNjQsMzYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQog
ICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
cGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdp
c3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVn
aXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRK
dW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAg
IH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cihw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgQVNTRVJU
KHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAg
bG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZp
cnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAg
ICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAg
ICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7Cisg
ICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAgLTEwMSwyMyAr
MTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRK
U0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7
CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAg
ICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIEp1bXAgbm90
SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRy
KGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5z
aWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWQ2NChh
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51
bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdEludCA9
IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHNjcmF0Y2gsIGRzdCk7CkBAIC0xMzcsMjQgKzEzNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOworICAgICAg
ICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpOwogI2Vs
c2UKLSAgICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5KSk7CisgICAgICAgIHN0
b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7CiAjZW5kaWYK
ICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KQogICAgIHsKLSAgICAgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyKGVudHJ5KSkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBl
bnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwotICAgICAgICBzdG9y
ZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7Cisg
ICAgICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7
CiAjZWxzZQotICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKKyAgICAg
ICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRyeSkpKTsKICNl
bmRpZgogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVj
aWFsaXplZFRodW5rSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVk
VGh1bmtKSVQuaAppbmRleCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEzZGYzNmE3MjQ5YjZjMzQz
Li45ZTNkNzYzM2Y5ZWNhMWE0MjZlYTE5ZTVkOGU5Mjk4NTMyNWQ5ZThiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNDMsNyArNDMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
CiAgICAgICAgICAgICBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwogICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYXJn
dW1lbnRzCi0gICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgVHJ1c3RlZEltbTMyKGV4
cGVjdGVkQXJnQ291bnQgKyAxKSkpOworICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBleHBsaWNpdCBTcGVjaWFsaXplZFRodW5rSklU
KFZNJiB2bSkKQEAgLTU1LDEzICs1NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAg
ICAgICAgIHZvaWQgbG9hZERvdWJsZUFyZ3VtZW50KGludCBhcmd1bWVudCwgRlBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVu
dCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZERvdWJsZShzcmMsIGRz
dCwgc2NyYXRjaCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRDZWxs
QXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCkKICAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWRK
U0NlbGwoc3JjLCBkc3QpKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTczLDcgKzczLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRJbnQzMkFyZ3VtZW50
KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZhaWxUYXJnZXQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
YXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIGZhaWxUYXJnZXQgPSBlbWl0
TG9hZEludDMyKHNyYywgZHN0KTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA1MjQxZTVmN2NjMzMyYTY0
ZTBkZTZkYjQ0YmRhZjllOGU4MGYyMmFhLi5hZGE0NTk2YjFiNDg4M2I3NDA3MzU1OWM0NjU2MDdk
OTQxNGI3NjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCkBAIC00MDEsNyArNDAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDMsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKICNlbmRpZgogICAgIGppdC5t
b3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QzKTsKLSAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKKyAg
ICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQ
UjIpOwogICAgIGppdC5hZGQzMihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7
CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBleHRyYSBzbG90cyB3ZSBjYW4gdXNl
CkBAIC00NjIsNyArNDYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQucmV0KCk7CiAjZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KSBzZWN0aW9uIGFib3ZlLCBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uIGJl
bG93LgogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBKU0ludGVyZmFjZUpJVDo6YXJn
dW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjphZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIEpTSW50ZXJmYWNl
SklUOjphcmd1bWVudEdQUjIpOwogICAgIGppdC5hZGQzMihKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbTMyKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgSlNJbnRlcmZhY2VKSVQ6
OmFyZ3VtZW50R1BSMik7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBleHRyYSBz
bG90cyB3ZSBjYW4gdXNlCkBAIC0xMDMyLDggKzEwMzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGFic1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKICAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICB1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoMCk7Ci0gICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAp
OworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIEdQUkluZm86OnJlZ1QwKTsKICAgICBhdXRvIG5vdEludGVnZXIgPSBqaXQuYnJhbmNo
SWZOb3RJbnQzMihHUFJJbmZvOjpyZWdUMCk7CiAKICAgICAvLyBBYnMgSW50MzIuCkBAIC0xMTM2
LDggKzExMzYsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5k
VGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdgogICAgIGppdC5lbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwogICAgIAogICAgIC8vIFNldCB1cCBvdXIgY2FsbCBmcmFtZS4KLSAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhl
bHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7Ci0gICAgaml0LnN0
b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6dGFnRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsKKyAgICBqaXQuc3Rv
cmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAKICAgICB1
bnNpZ25lZCBleHRyYVN0YWNrTmVlZGVkID0gMDsKICAgICBpZiAodW5zaWduZWQgc3RhY2tNaXNh
bGlnbm1lbnQgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgJSBzdGFja0FsaWdubWVudEJ5dGVz
KCkpCkBAIC0xMTU4LDcgKzExNTgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdgogICAgIC8v
CiAgICAgLy8gVGhhdCdzIHJlYWxseSBhbGwgdGhlcmUgaXMgdG8gdGhpcy4gV2UgaGF2ZSBhbGwg
dGhlIHJlZ2lzdGVycyB3ZSBuZWVkIHRvIGRvIGl0LgogICAgIAotICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBHUFJJ
bmZvOjpyZWdUMSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgR1BSSW5mbzo6cmVn
VDEpOwogICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cyksIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmxzaGlmdDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEp
LCBHUFJJbmZvOjpyZWdUMik7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRv
cihWTSYgdgogICAgIAogICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIp
OwotICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBH
UFJJbmZvOjpyZWdUMyk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVTdGFja1NwYWNlID0g
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgQ0NhbGxIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJl
Z1QyKTsKIAogICAgIC8vIFRocm93IFN0YWNrIE92ZXJmbG93IGV4Y2VwdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAppbmRleCA5NTFkNzY5ZDY5MjQ5YmYzYWM5
OGY0NDA4MzQxZjY1MTAyYTk1NWMxLi5hZmVlY2JhYzA3YjFlYjE3MGVkNmQ0NDY1NTA4MjU3ZGE3
NjUxYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21t
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaApAQCAt
MjksNyArMjksNyBAQAogLy8gLSBQcmludHMgZXZlcnkgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQgaWYg
T3B0aW9uczo6dHJhY2VMTEludEV4ZWN1dGlvbigpIGlzIGVuYWJsZWQuCiAvLyAtIFByaW50cyBz
b21lIGluZm9ybWF0aW9uIGZvciBzb21lIG9mIHRoZSBtb3JlIHN1YnRsZSBzbG93IHBhdGhzIGlm
CiAvLyAgIE9wdGlvbnM6OnRyYWNlTExJbnRTbG93UGF0aCgpIGlzIGVuYWJsZWQuCi0jZGVmaW5l
IExMSU5UX1RSQUNJTkcgMAorI2RlZmluZSBMTElOVF9UUkFDSU5HIDEKIAogLy8gRGlzYWJsZSBp
bmxpbmUgYWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgaXMgZ3JlYXQgaWYgeW91
J3JlIGNoYW5naW5nCiAvLyBob3cgdGhlIEdDIGFsbG9jYXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDM1N2E0NmU4ZTU3ODk3ZjI3
ODVjZDMzOWZjYmUyYmMwYzkwY2VkYjIuLjhmY2M1ZGI4ZDgzOGI5MjIyMWIxNzJlODlhN2M4MzJl
MDJjNmYwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgor
I2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29tbW9u
U2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5n
U2NvcGUuaCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTElu
dCB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0
YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBv
cGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSku
anNWYWx1ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+
cihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5vbkNv
bnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0K
K2lubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZCkuanNWYWx1ZSgp
OyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAg
IFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwK
QEAgLTE1NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0Nh
bGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgQ2FsbEZy
YW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5dGVjb2RlLm1fYXJndjsKICAgICAKICAg
ICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9h
cmdjKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
ID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxl
ZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwogICAgIAogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKQEAgLTE2ODksNyArMTY5MCw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJh
bWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3Bl
cmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7
CiAKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxs
ZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1
ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVu
dFZQQyhwYyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBDYWxs
KGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7CkBAIC0xNzI1LDcgKzE3MjYsNyBA
QCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGNhbGxlZUZyYW1l
LT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRS
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1l
LT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNh
bGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldFJldHVyblBDKHJldHVyblBvaW50LmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0
cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE5MzAsNyArMTkzMSw3
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0
YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29k
ZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAg
ICAgfSk7CiAKQEAgLTE5NjEsMTEgKzE5NjIsMTIzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgpOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+CitzdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdz
Q2hlY2twb2ludChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZGVT
dGF0ZS5nZXRUbXA8SlNWYWx1ZT4oT3Bjb2RlOjphcmdDb3VudCkuYXNVSW50MzIoKTsKKworICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5maWxsKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBidWZmZXIpIHsKKyAgICAgICAgbG9hZFZh
cmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2FyZ3Vt
ZW50cykuanNWYWx1ZSgpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAg
IH0pOworICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQoKSkgeworICAgICAgICB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAg
SlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0
ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXN1bHQg
PSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBh
cmdzLCAiIik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7Cit9CisKK2lu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCit7CisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAgICAg
YXV0byBuZXh0Qnl0ZWNvZGUgPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPigqcGMu
bmV4dCgpLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0Qnl0ZWNvZGUu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAg
IEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAg
ICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5
dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dEJ5dGVjb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCksIDApOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZv
aWQqLCBFbmNvZGVkSlNWYWx1ZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93
X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkKK3sKKyAgICAvLyBTaW5jZSBh
bGwgb3VyIGNhbGxpbmcgY2hlY2twb2ludHMgZG8gcmlnaHQgbm93IGlzIG1vdmUgcmVzdWx0IGlu
dG8gb3VyIGRlc3Qgd2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJlIGFuZCByZXR1cm4uCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9
IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsK
KyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5k
ZXg7CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJ
bmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHBjLT5hczxPcENhbGxWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRl
Y29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ29u
c3RydWN0VmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIC8vIG9wX3RhaWxfY2FsbF92YXJhcmdzIHNob3VsZCBuZXZl
ciByZXR1cm4gaWYgdGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5nIHdhcyBpbmxpbmVkLgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxv
Y2ssIHBjKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2No
ZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOworZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3Rh
dGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KTsKKworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
SW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJh
cmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENhbGxW
YXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0s
IGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLCAq
c2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90YWlsX2NhbGxf
dmFyYXJnczoKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYy5uZXh0KCktPm9wY29kZUlE
KCkgPT0gb3BfcmV0LCAiV2Ugc3Ryb25nbHkgYXNzdW1lIGFsbCB0YWlsIGNhbGxzIGFyZSBmb2xs
b3dlZCBieSBhbiBvcF9yZXQuIik7CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZt
LCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigpLCAq
c2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0
SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxs
RnJhbWUqIHByb3RvRnJhbWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+dG9w
Q2FsbEZyYW1lOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0K
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICBpZiAoY2Fs
bEZyYW1lKQogICAgICAgICBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxP
YmplY3QoKnZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKaW5k
ZXggZmNhZjgwZGExY2I1YzQ2YzUwZWU3ZjdmNTgwNTMzZjdmNTNjZTA0MS4uY2Q0NWFmMTBiMzEz
YTkxNmIwZDNlZWMwYmRiYTE2ZWNmOGZkOGFiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50VGh1bmtzLmgKQEAgLTM2LDYgKzM2LDggQEAgdHlwZWRlZiBpbnQ2NF90IEVuY29k
ZWRKU1ZhbHVlOwogZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvSmF2
YVNjcmlwdCh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOwogICAgIEVuY29kZWRKU1ZhbHVl
IHZtRW50cnlUb05hdGl2ZSh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOworICAgIHZvaWQg
Y2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KCk7CisgICAgdm9pZCBjaGVja3BvaW50X29z
cl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQoKTsKIH0KIAogaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIHZtRW50cnlUb1dhc20odm9pZCogY29kZSwgVk0qIHZtLCBQcm90b0NhbGxGcmFt
ZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20KaW5kZXggZTE3MzRkY2Y2MWI0Y2ZjNTUxMmZhMjg1NjAxYmNhYjMwYzg4
ZjJlNC4uOWVlNjk1YjI3MGRhZjk2YTJhMzQ3NDRjODMxYjc5OGQyZDVjZDk5NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpA
QCAtMTA5MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50
KG9wTmFtZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JFeGl0UmV0dXJuTGFiZWwob3BOYW1lLCBzaXpl
KQogCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCi0gICAgbG9hZGkgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2Zy
XSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVByb2ZpbGUob2Zmc2V0LCBjZWxsQW5kSW5kZXhpbmdU
eXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4MzksMTMgKzE4MzksMTcgQEAgZW5kKQogY2Fs
bE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8g
KGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwg
cHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCittYWNybyBicmFu
Y2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0s
IHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QzXSwgdDMKICAgICBidHB6IFZNOjptX2V4
Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgotICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93
X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0aW9uOgorICAgIGptcCBleGNlcHRpb25UYXJnZXQK
Ky5ub0V4Y2VwdGlvbjogICAgCitlbmQKKworbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwg
cHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNo
SWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAg
IyBjYWxsZWVGcmFtZSBpbiByMQogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBtb3ZlIHIxLCBz
cApAQCAtMTk5OSw2ICsyMDAzLDIyIEBAIG9wKGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0
cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBv
bGluZShJbnRlcm5hbEZ1bmN0aW9uOjptX2Z1bmN0aW9uRm9yQ29uc3RydWN0KQogZW5kKQogCitp
ZiBub3QgQ19MT09QIGFuZCBub3QgQ19MT09QX1dJTgorICAgIGdsb2JhbCBfY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50CisgICAgX2NoZWNrcG9pbnRfb3Ny
X2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludDoKKyAgICAgICAgbW92ZSByMCwgYTIK
KyAgICAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMAorCisgICAgZ2xvYmFsIF9j
aGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQKKyAgICBfY2hlY2twb2ludF9vc3JfZXhpdF9l
bnRyeXBvaW50OgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4gcHJvYmFibHkgZGlzcGF0Y2ggdG8g
dGhlIGNoZWNrcG9pbnQgaGFuZGxlciBkaXJlY3RseSBidXQgdGhpcyB3YXMgZWFzaWVyIAorICAg
ICAgICAjIGFuZCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBmb3IgcGVyZm9ybWFuY2UuCisgICAg
ICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCisgICAgICAg
IGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
KQorICAgICAgICBqbXAgcjAKK2VuZAogCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2Fu
IGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ug
b3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklU
LiBXZSBhc3NlcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggM2RkMmViNDhjYmJhNmVmNWNkOTg4NjM5Yzc5MTFl
MjJhNzEzMzE0OC4uYmRlMDJjNjM0YjA5ODJhZDlhMzJjNGU0ODRlZjNjYWY3MzA3YjdkYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KQEAgLTQyLDYgKzQyLDE3IEBAIG1hY3JvIG5leHRJbnN0cnVjdGlvbldpZGUzMigp
CiAgICAgam1wIFt0MSwgdDAsIFB0clNpemVdLCBCeXRlY29kZVB0clRhZwogZW5kCiAKK21hY3Jv
IHN0b3JlUEMoKQorICAgIGxzaGlmdGkgY29uc3RleHByIEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9p
bnRTaGlmdCwgUEMKKyAgICBzdG9yZWkgUEMsIExMSW50UmV0dXJuUENbY2ZyXQorICAgIHJzaGlm
dGkgY29uc3RleHByIEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCwgUEMKK2VuZAorCitt
YWNybyBsb2FkUEMoKQorICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKKyAgICByc2hp
ZnRpIGNvbnN0ZXhwciBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQsIFBDCitlbmQKKwog
bWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3Bjb2RlU3RydWN0LCBmaWVsZE5hbWUsIGRzdCkKICAg
ICBsb2FkYiBjb25zdGV4cHIgJW9wY29kZVN0cnVjdCVfJWZpZWxkTmFtZSVfaW5kZXhbUEIsIFBD
LCAxXSwgZHN0CiBlbmQKQEAgLTkyLDcgKzEwMyw3IEBAIGVuZAogCiAjIEFmdGVyIGNhbGxpbmcs
IGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVnaXN0ZXJzIGFyZSBub3QgdXNl
ZC4KIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gp
Ci0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRQ
QygpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1
Y3QsIG1fZHN0LCB0MSkKQEAgLTM5MCw3ICs0MDEsNyBAQCBlbmQKIAogIyBDYWxsIGEgc2xvdyBw
YXRoIGZvciBjYWxsIG9wY29kZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBh
Y3Rpb24pCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAg
ICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEw
CiAgICAgbW92ZSBQQywgYTEKQEAgLTM5OSwyMCArNDEwLDIwIEBAIG1hY3JvIGNhbGxDYWxsU2xv
d1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBjYWxsVHJhcEhhbmRsZXIodGhy
b3dIYW5kbGVyKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJd
CisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUgY2Zy
LCBhMAogICAgIG1vdmUgUEMsIGExCiAgICAgY0NhbGwyKF9sbGludF9zbG93X3BhdGhfaGFuZGxl
X3RyYXBzKQogICAgIGJ0cG56IHIwLCB0aHJvd0hhbmRsZXIKLSAgICBsb2FkaSBBcmd1bWVudENv
dW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQ
QwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICBjaGVja1N3aXRj
aFRvSklUKAogICAgICAgICAxLAogICAgICAgICBtYWNybygpCi0gICAgICAgICAgICBzdG9yZWkg
UEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICAgICAgc3RvcmVQQygp
CiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAgICAgICBtb3ZlIGNm
ciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00MjEsNyArNDMyLDcgQEAgbWFjcm8g
Y2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSByMSwgc3AKICAgICAg
ICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3ZlcjoKLSAgICAgICAg
ICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICAgICAgICAg
IGxvYWRQQygpCiAgICAgICAgIGVuZCkKIGVuZAogCkBAIC0yMDU3LDcgKzIwNjgsNyBAQCBtYWNy
byBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFy
ZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBhZGRwIGNmciwgdDMKICAgICAgICAgc3RvcmVxIHQy
LCBDYWxsZWVbdDNdCiAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIHQy
KQotICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAg
ICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9h
ZE9mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0
W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyZ0xpc3QuaAppbmRleCA4NDBmODliODhkNDIwY2MzYjc1YzgzZDZjNTc4MjQxNTQwMmYz
MzY2Li44ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1MDBmZGZiZTY5OTk4MDdjZGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCkBAIC0xMzMsNiArMTMzLDE3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgb3ZlcmZsb3dDaGVja05vdE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJm
bG93Q2hlY2soKTsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZpbGwoc2l6ZV90IGNvdW50LCBjb25zdCBGdW5jdG9yJiBmdW5jKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX3NpemUpOworICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7CisgICAgICAg
IGlmIChCYXNlOjpoYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1fc2l6ZSA9IGNvdW50OworICAgICAgICBmdW5jKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+
KCZzbG90Rm9yKDApKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNp
dHkoKTsKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggZjhkOTc5OTU4
NzQ1MjI2YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNlODdhMS4uZmZiNzQ1OWE2YWRjY2JhYjE2ZGE4YTRl
ZjhiMTcxMWQ4NzJhMWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcApAQCAtMTc4OCw2ICsxNzg4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBl
OyB9CiAgICAgdW5zaWduZWQgZXZhbENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFs
Q29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVy
biBtX2hhc1RhaWxDYWxsczsgfQorICAgIHVuc2lnbmVkIGhhc0NoZWNrcG9pbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29u
c3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KIApAQCAtMTgyMCw2ICsxODIxLDcgQEAgcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0VHlwZSA6IDI7CiAgICAgdW5zaWduZWQgbV9o
YXNUYWlsQ2FsbHMgOiAxOwogICAgIHVuc2lnbmVkIG1fY29kZVR5cGUgOiAyOworICAgIHVuc2ln
bmVkIG1faGFzQ2hlY2twb2ludHMgOiAxOwogCiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtMjAxOCw2ICsyMDIwLDcgQEAg
QUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2Rl
ciYgZGVjb2RlciwgU3RydWN0dXJlKgogCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hhc0No
ZWNrcG9pbnRzKGNhY2hlZENvZGVCbG9jay5oYXNDaGVja3BvaW50cygpKQogCiAgICAgLCBtX2Zl
YXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcygpKQogICAgICwgbV9wYXJzZU1vZGUoY2Fj
aGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQpAQCAtMjIwNiw2ICsyMjA5LDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnMKICAgICBtX3BhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsK
ICAgICBtX2NvZGVHZW5lcmF0aW9uTW9kZSA9IGNvZGVCbG9jay5tX2NvZGVHZW5lcmF0aW9uTW9k
ZTsKICAgICBtX2NvZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7CisgICAgbV9oYXNDaGVj
a3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwogCiAgICAgbV9tZXRhZGF0YS5l
bmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURh
dGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IGYz
NThkNDhhNTBkZTczZWFiMzg1Njk5YjNhNmY1MTEzYmJiZTliYmEuLmUyN2ZlM2NhOTc4YjM5NDQ4
MjYxNjdkNGEwNjFhMmVhZDRmOTI2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtOTgsOCArOTgsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBCRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBT
RVRfUENfRk9SX1NUVUJTKCkKIAotI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5j
aGVja2VkUihvcGVyYW5kLm9mZnNldCgpKSkKLSNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxG
cmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKSkKKyNkZWZpbmUgR0VUKG9wZXJhbmQpIChjYWxsRnJh
bWUtPnVuY2hlY2tlZFIob3BlcmFuZCkpCisjZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJh
bWUtPnIob3BlcmFuZCkpCiAKICNkZWZpbmUgUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7
ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAg
ICAgIFwKQEAgLTExMzksOCArMTEzOSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVh
dGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgaW50IHNjb3Bl
UmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2Nv
cGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwor
ICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihHRVRfQyhieXRlY29kZS5tX3N5bWJvbFRhYmxlKS5q
c1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9p
bml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5k
ZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpzVERaVmFsdWUoKSk7CkBAIC0xMTU1LDggKzEx
NTQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF93aXRoX3Njb3BlKQogICAgIEpT
T2JqZWN0KiBuZXdTY29wZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50
b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgaW50
IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUub2Zmc2V0KCk7Ci0gICAgSlNTY29w
ZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFJF
VFVSTihKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwg
bmV3U2NvcGUpKTsKIH0KIApAQCAtMTE2NSw3ICsxMTYzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZUZvckhv
aXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBj
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Ci0gICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSku
UmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNWYWx1ZSBy
ZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbElu
RXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAKICAgICBDSEVDS19FWENFUFRJT04o
KTsKQEAgLTExNzksNyArMTE3Nyw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZl
X3Njb3BlKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
dmFyKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29w
ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2Nv
cGUoKTsKICAgICBKU09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwogICAgIC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJv
ciBoZXJlLCBlLmcuIFByb3h5IGluIHdpdGggc3RhdGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAg
IENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTQyNCw3ICsxNDIyLDcgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHku
b2Zmc2V0KCkpKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkuaXND
b25zdGFudCgpKTsKICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5
ID0gYml0d2lzZV9jYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oR0VUX0MoYnl0ZWNvZGUubV9p
bW11dGFibGVCdXR0ZXJmbHkpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgYXV0byYgcHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
OwogCkBAIC0xNDQzLDcgKzE0NDEsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Fy
cmF5X2J1ZmZlcikKICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0
dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxs
b2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNv
ZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgY29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9j
aywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
ICAgICB9CiAKQEAgLTE0ODgsNCArMTQ4NiwxNiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
c3ByZWFkKQogICAgIFJFVFVSTihKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRlRnJvbUFycmF5
KGdsb2JhbE9iamVjdCwgdm0sIGFycmF5KSk7CiB9CiAKK2V4dGVybiAiQyIgdm9pZCBkdW1wUmVn
aXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKTsKK2V4dGVybiAiQyIgdm9pZCBkdW1wUmVnaXN0ZXIo
VUNQVVJlZ2lzdGVyIHZhbHVlKQoreworICAgIGRhdGFMb2dMbihSYXdQb2ludGVyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4odmFsdWUpKSk7Cit9CisKKy8vIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5U
eXBlIFNMT1dfUEFUSCBjaGVja1BDKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbiogcGMpOworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNo
ZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgKQorLy8g
eworCisvLyB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCA0YmQxOTJhNmM3N2VmYzAyNmU3YTk1
YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0MThjYTg4ZWZkMWI3OGU2MzExYjY3NWQxZWZhNWE1
ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3RE
YXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRh
LmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBKU09iamVjdCogY29u
c3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JP
YmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sK
KyAgICByZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNv
bnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU09iamVjdCogY29u
c3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JP
YmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFy
KiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTQ2LDEwICs1MSw5IEBA
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwg
Y29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNv
bnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1
Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3Ry
dWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAKIH0KIAotCiBKU09iamVjdCogY29uc3RydWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3Qs
IENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3Ry
dWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4IGQwYWUwMGJhMTFkN2NlZTI0ZGZmYWU5MTkxMTk2
N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzljNDkxZjlmOTNiYWViNmNhYzEyNjIxZjNiYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKQEAgLTYw
LDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVjdERhdGEgewogCiAvLyBDb252ZW5pZW5jZSB3cmFw
cGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUg
dW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCiBKU19FWFBPUlRfUFJJVkFURSBKU09i
amVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwg
Y29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3Qg
Q29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlIG5ld1RhcmdldCk7CiAKIEFM
V0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5
cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEwMjJhYzJkZDlhZWZhZmQ0M2EwMWE1Yzg1Li40YjM0
NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1MDlmMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKQEAgLTEzNywyMCArMTM3
LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdW5zaWdu
ZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3Ro
KCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fbWFwcGVkQXJndW1lbnRzKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0
aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9
IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8
IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IHN0b3Jh
Z2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0g
PSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkp
OworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxP
YmplY3QsIGkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2VuZXJpY0FyZ3VtZW50
czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnRE
ZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1l
bnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQog
CiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAppbmRleCAwYTZi
MWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNlNzcyZTBhLi44ZDk2NDJhMmM5NDA0MDgwYjkx
M2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6aXNNb2RpZmllZEFy
Z3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9sZW5ndGgpOwogICAgIH0KIAotICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xB
UkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBhYmQwMGNlZWFmNWViYjdlZTFkNDY3ZGE0ODg3MGQ1
MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJkYWIzZGFlZWIyNzJjYmJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCkBAIC01OSw3
ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlw
dG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBpc01v
ZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgp
OwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1bWVudHNQdHIgPSBDYWdlZEJhcnJpZXJQdHI8
R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47CiAgICAgTW9kaWZpZWRBcmd1bWVudHNQdHIgbV9t
b2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAppbmRleCAyMTgyYTYyYjEz
MDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZmLi5lMGFhYmY1ZjJlZTE4NWI3ZDEzMzE2MDM3
ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29s
IEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5z
aWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBH
ZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgR2VuZXJp
Y0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMDUsOSArMzA1LDkgQEAgdm9p
ZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpICsgb2Zmc2V0KSkK
LSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2Jq
ZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1l
bnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsg
aSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxl
bWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDQ0YzdlNTIwZjFj
MGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAuLjZkMDc1OTE3MTFlZWRiYzI4ZTBlNGRhNzg0
OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcgogICAgICAg
ICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0LCBpKSk7CiB9CiAKLXZvaWQgSlNBcnJheTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgICAgIGRv
dWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQodGhpcywgaSk7CiAgICAg
ICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNW
YWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
IC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTQsMTEgKzEyOTQsMTEgQEAgdm9pZCBK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVj
dG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fs
bEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IHYuZ2V0KCk7CisgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgpOwogICAgIH0KICAgICAK
ICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJz
dEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAg
ICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCAzMTc5NDljNTcyYTExYjc1
YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2NWI1ZmY0OTI1NGNjMWE2YzQ3OTAyYjc5MTBh
YzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0x
NjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAzM2RhYTk5YTU5MzZkZWExOWExYzQ5YzAuLmU0
OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEyYzE5MTFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKQEAg
LTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGkgKyBvZmZzZXQpOworICAg
ICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zmc2V0KTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpz
VW5kZWZpbmVkKCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4IGExODJkYzY2MThmYWFiYmZjYjNjZTYzZTA3
YzE3MTVkZjhkMWQ0OWIuLjQ4MmUwMjZhMjFmNTYyZGI1ZTM3MjYzNzMwNzlhNWVjNTU1NDk3OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZhYTM2
OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6Ondp
bGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9IG1fdm07CiAgICAgaWYg
KHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0tPmhhc0NoZWNr
cG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hlY2tw
b2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAgICB2bS0+ZHJhaW5NaWNy
b3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5Njgw
OGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1dGFi
bGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZt
KCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0
YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZt
KCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkpLT5j
bG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0
YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29u
c3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkpLmdl
dCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
aW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEwNTBjZGU4NmNiMjUyMWU1NDExNi4uM2Q3NzU3YjJl
MTdkZGMxYzE4Y2FmMTEzNGNhOTk0MTI4OGI1ZDQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMiArNTA5LDYgQEAgc3RhdGljIHZvaWQgcmVj
b21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpv
bmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRa
b25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IE9wdGlv
bnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplOwogCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAvLyBGSVhNRTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3b3Jr
IG9uIDMyLWJpdDoKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3OTU2Ci0gICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNlbmRp
ZgotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6
ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggMDNmMjg1MjQ0ZGI5OTAyZWFiYTk2ZDY5NzdlM2I3ZDM5
MTk3ZGU1Mi4uNGQxNTZjZjczZGZjZDU0ZmZhODNkY2Q3OThlZDdlYWQ2YzViYWJhMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC0xNDksNyArMTQ5
LDYgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxz
ZTsKICAgICB2KEJvb2wsIHZlcmJvc2VDb21waWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoQm9vbCwgdmVyYm9zZUZUTENvbXBpbGF0aW9uLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihCb29sLCBsb2dDb21waWxhdGlvbkNoYW5nZXMsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKLSAgICB2KEJvb2wsIHVzZVByb2JlT1NSRXhpdCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgcHJpbnRFYWNoT1NSRXhpdCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmFsaWRhdGVHcmFwaCwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCAwODFkOTc4YTdiMmE2MjY2YWM1NTJjMzc5ZDM4NDUw
MDVkYzExZjEwLi4zYzc0MGQ0OGY2MjQxYjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5ZGIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAK
QEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChW
TSYgdm0sIHVpbnQzMl90IGkpCiAgICAgICAgIHN0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmNs
ZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRz
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwg
Zmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgK
aW5kZXggZjg1ZTQ3ZGZiZWU4Y2E3YzM3MDRmMjllZDRjYjFiNGU5NzIwNDQ1Ny4uZTU4Y2IyMmVm
ZDQ4YzY3NGJmNWIxYjExMjgwYjUxYWJjMGRlMDg0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz46Omlz
TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fdGFibGUtPmxlbmd0aCgpKTsKICAg
ICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKaW5kZXggOWQ1NGZkY2Q4NDczZDcyM2ZiYWVjYTUxMzQ5MDYxZDk1MjAyNGI5MS4u
NzA3ODMzNGE1NTJiNWExNmM5NjlkMzFhZTFkMTA4OWQ5OTkxMzc4YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkJvb2xlYW5P
YmplY3QuaCIKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0YWJsZXMuaCIKICNpbmNsdWRlICJCeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTEwMjksNiArMTAzMCwyMCBAQCB2b2lk
IFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZh
dGl2ZVJvb3RzKQogfQogI2VuZGlmCiAKK3ZvaWQgVk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZT4mJiBwYXlsb2FkKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2hlY2twb2ludFNpZGVTdGF0
ZS5hZGQoY2FsbEZyYW1lLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgYXV0byBzaWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUu
dGFrZShjYWxsRnJhbWUpOworICAgIHJldHVybiBzaWRlU3RhdGU7Cit9CisKIHZvaWQgbG9nU2Fu
aXRpemVTdGFjayhWTSYgdm0pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5pdGl6ZVN0
YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApp
bmRleCBlOWE5MGYwOTBhZjVhYThmOGEzYjE3M2YyMTRlYmVhMjM2YTM5ZDQwLi5kMDE1NGI1ZGMw
ZmZmYzdhNDJiZGE4NWU0NGMxMmEwZDI5ZjZjY2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKQEAgLTEwMyw2ICsxMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEJ1aWx0aW5F
eGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxs
RnJhbWU7CitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTk0OCw2
ICs5NDksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKIAorICAgIHZvaWQgYWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gZmlu
ZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKik7CisgICAgYm9vbCBoYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja3BvaW50U2lkZVN0YXRlLnNp
emUoKTsgfQorCiAgICAgVk1FbnRyeVNjb3BlKiBlbnRyeVNjb3BlOwogCiAgICAgSlNPYmplY3Qq
IHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CkBAIC0xMTk4LDYg
KzEyMDMsNyBAQCBwcml2YXRlOgogICAgIExvY2sgbV9zY3JhdGNoQnVmZmVyTG9jazsKICAgICBW
ZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IG1fc2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6ZV90IG1fc2l6
ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgeyAwIH07CisgICAgSGFzaE1hcDxDYWxsRnJhbWUqLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNrcG9pbnRTaWRl
U3RhdGU7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxl
ZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJvbEZs
b3dQcm9maWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uQ29kZUJsb2NrLmgKaW5kZXggZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1
YTU2Ny4uMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdmMTkyNDczNTJjMGY4YiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAg
LTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgY29u
c3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KICAgICBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdHJ1Y3Rpb25z
OyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKGludCBpbmRl
eCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoT3B0aW9uczo6ZHVtcEdl
bmVyYXRlZFdhc21CeXRlY29kZXMoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07CisgICAgICAgIHJldHVybiBtX2Nv
bnN0YW50VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsKICAgICB9CiAKICAgICB2b2lkIHNl
dEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4
IGFiMTc0MDZhZmI3MzRhNzA4ZGYxMWRiYjY4MDE1MThiNzY2NWZiNDIuLmVlMmIzMjdkMmFmNTQ3
MTk2ODc5NjlhYzI1MmE4NGM3ODhlZjZlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtMjQyLDYgKzI0Miw5IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiog
cGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCisgICAgLy8gV2UgbmVlZCB0aGlzIGZv
ciBhdXRvZ2VuZXJhdGVkIHRlbXBsYXRlcyB1c2VkIGJ5IEpTIGJ5dGVjb2Rlcy4KKyAgICB2b2lk
IHNldFVzZXNDaGVja3BvaW50cygpIGNvbnN0IHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
IH0KKwogICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayopIHsg
fQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcAppbmRleCA1YThlYmI4MWQyZGJlZTAzYWM2OTMyYWNlZjZmYmI0NzI3MmVjODRiLi5jMjQw
NjkwOTM5ZDJjZTAxNGExNzNiMmUzNzljMmRiMTk5MmQzZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzUsNyArNzUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3Rl
cikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1Zh
bHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIub2Zm
c2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29u
c3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNt
OjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
LCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IGE0OTczZWJiYTA0Njhh
NjVkYjk1YzhiYTgzMjY0YWQ4ZmE4NmRkZDkuLjdhNzI1YjBiYzE1YjZlOWI2NTY2MTVhZTY5N2Uw
ZmM4N2Y4M2QxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5
cG9pbnRTbG93KCkKIAogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5z
dWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnN0b3JlNjQoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVn
ID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CkBAIC0yNDMsNyArMjQzLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVu
dHJ5cG9pbnRTbG93KCkKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBtaXNtYXRjaGVk
IGFyaXR5CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NjU2NAogICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
dywKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMSkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxKSkpOwogCiAgICAgaWYgKHVz
ZVRhZ1JlZ2lzdGVycygpKQogICAgICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAg
IC8vIDIuIFdlIG5lZWQgdG8ga25vdyB0byByZXN0b3JlIHRoZSBwcmV2aW91cyB3YXNtIGNvbnRl
eHQuCiAgICAgaWYgKCFtX2pzVG9XYXNtSUNDYWxsZWUpCiAgICAgICAgIG1fanNUb1dhc21JQ0Nh
bGxlZS5zZXQodm0sIHRoaXMsIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0KCksIHRoaXMpKTsKLSAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogCiAgICAg
ewogICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGp1c3QgZG8gYW4gaW5kaXJlY3QganVt
cC4gQnV0IHdlIHNob3VsZCB0ZWFjaCB0aGUgTW9kdWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYz
MmMzZWZjMDAwYmQxOGU5ZTM2OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUz
NjZhNzUwNTRkY2M2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBz
aXplX3QgbmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFyKHNp
emVfdCk7CiAgICAgdm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50
NjRfdCBmaW5kUnVuT2ZaZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXplX3Qg
Y291bnQoc2l6ZV90IHN0YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25z
dDsKQEAgLTEwMiw2ICsxMDMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yPShi
b29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5kZXgs
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgY29uc3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90IG1f
aW5kZXg7CkBAIC0xMTEsNiArMTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUp
OyB9CiAgICAgCisgICAgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0IGl0
ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRDbGVh
cihCaXRtYXAmKTsKICAgICB2b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAtMjI0
LDYgKzIzNCwxMyBAQCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpj
bGVhckFsbCgpCiAgICAgbWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwogfQog
Cit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUg
dm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRzW2ld
OworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBp
bmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVu
c2V0KHNpemVfdCBzdGFydCkgY29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5lIGJv
b2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAm
IG90aGVyKSBjb25zdAogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0
ZXJhdG9yCit7CisgICAgQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIGluZGV4KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVu
YW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7CisgICAg
cmV0dXJuICgqY29uc3RfY2FzdDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhpcykp
W2luZGV4XTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRU
eXBlPgogaW5saW5lIHVuc2lnbmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhhc2go
KSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oIGIv
U291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCmluZGV4IDg4NWI3YjE3M2IxMWE2MDFiZTI5
YTMzMmFiOWQyYTQxNGQ1NjIxMjIuLmEzOGM5NmMzNDkzZTlkMTBkNTZhODBiNWJkNzVmMWQ0YTZj
YmYzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKQEAgLTQ2NCw2ICs0NjQsOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBv
cGVyYXRvcnw9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgPSB2YWx1ZSA6ICp0
aGlzOyB9CisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3ImPShib29sIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZSA/ICp0aGlzIDogKnRoaXMgPSB2YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIHVp
bnQzMl90KiBtX3dvcmQgeyBudWxscHRyIH07CiAgICAgdWludDMyX3QgbV9tYXNrIHsgMCB9OwpA
QCAtNTA5LDcgKzUxMiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFy
QWxsKCk7CiAgICAgfQotICAgIAorCisgICAgLy8gRm9yIHRlbXBsYXRpbmcgYXMgVmVjdG9yPGJv
b2w+CisgICAgdm9pZCBmaWxsKGJvb2wgdmFsdWUpIHsgdmFsdWUgPyBzZXRBbGwoKSA6IGNsZWFy
QWxsKCk7IH0KKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpIHsgcmVzaXplKG5ld1NpemUp
OyB9CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdp
biwgc2l6ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgYml0dmVjdG9yIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggODdjNzIyNTU0NzI4YjA0NTI0ZjZiNDIzZmMwMWQxYTVjMDcw
M2JmNS4uNTgyOGJiMGVlMGZkZGRjYTlmZTMxMzQ5YWVmZGI2MjlhYzU4NDRmOSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDE5LTEyLTEzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEg
Ynl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNTIzMgorCisgICAgICAgIFJlbW92ZSBwcm9iZSBPU1IgZXhpdCBvcHRpb24gc2luY2Ugd2Ug
YXJlIG5vdCB1c2luZyB0aGF0IGFueW1vcmUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAy
MDE5LTEyLTEzICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgbWFjQ2F0YWx5c3QgYnVpbGQgYWZ0ZXIgcjI1MzQ4Ngpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1Nj
cmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggNTE0MjNhNzU4YWY4MjA0MmU5NThhMTg4
ZTYyZDczZmM3MDgzNTViNy4uNjU1Nzc0MGY3ZGExN2UwMWU1YmQxMjI0OTNjYjAzN2I3ZjRlY2I3
ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9U
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC00OTgsNyArNDk4LDYgQEAgTk9f
Q0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRG
b3JKSVRBZnRlcldhcm1VcD0xMDAKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZl
bD0xIl0KIEIzTzBfT1BUSU9OUyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNp
c2VBbmFseXNpcz0xMDAiLCAiLS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0g
WyItLXVzZUZUTEpJVD10cnVlIl0KLVBST0JFX09TUl9FWElUX09QVElPTiA9IFsiLS11c2VQcm9i
ZU9TUkV4aXQ9dHJ1ZSJdCiBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgPSBbIi0tZm9yY2VPU1JF
eGl0VG9MTEludD10cnVlIl0KIAogcmVxdWlyZV9yZWxhdGl2ZSAid2Via2l0cnVieS9qc2Mtc3Ry
ZXNzLXRlc3Qtd3JpdGVyLSN7JHRlc3RXcml0ZXJ9IgpAQCAtNzEzLDcgKzcxMiw3IEBAIGRlZiBy
dW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVm
IHJ1bkZUTE5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAg
cnVuKCJmdGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRl
R3JhcGg9dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJD
QWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVf
T1NSX0VYSVRfT1BUSU9OICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4o
ImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFw
aD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxv
Y2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVROb1B1dFN0YWNrVmFs
aWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOSw3ICs3MjgsNyBAQCBk
ZWYgcnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KQogZW5kCiAKIGRlZiBydW5ERkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQot
ICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VT
TFlfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09QVElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJkZmctZWFnZXIi
LCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0Vf
TExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAog
CiBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCA3YzVhZjQ0YmIzYzRmY2MzNzk4ZmFkNDM2Y2NiMWQ4ODNiNTE5ZmExLi5kNjUxNjI1Nzhi
MTAyOTg0MWZjMzY3Zjg5OTllNTU3NmM4MmMwNjNlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5n
ZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTEyLTEz
ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9G
VEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2Fw
cGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFs
bHkuanM6IEFkZGVkLgorICAgICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxs
ZWUpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6Cisg
ICAgICAgICogc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanM6
IEFkZGVkLgorICAgICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxsZWUpOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6CisgICAgICAg
ICogc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3Qu
anM6CisgICAgICAgIChjaGVja0VxdWFsKToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxl
IHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1p
bmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisK
IDIwMTktMTItMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBSZW1vdmUgSlNGaXhlZEFycmF5LCBhbmQgdXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5
IGluc3RlYWQKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3Vs
ZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0
cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2Nj
YXNpb25hbGx5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJj
NTBhYzBhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhp
dC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCkBAIC0w
LDAgKzEsMzYgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJn
Q291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVj
dGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsK
K30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQs
IGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3Vy
cmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgp
IHsKKyAgICBpZiAobGVuZ3RoQ2FsbHMrKyAlIDEwID09IDEpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigidGhyb3dpbmcgYW4gZXhjZXB0aW9uIGluIGxlbmd0aCIpOworICAgIHJldHVybiBjdXJy
ZW50QXJnQ291bnQKK30gfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTY7IGkrKykgeworICAgIHRy
eSB7CisgICAgICAgIHRlc3QoYXJyYXkpOworICAgIH0gY2F0Y2ggeyB9Cit9CisKK2N1cnJlbnRB
cmdDb3VudCA9IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVu
Z3RoQ2FsbHMgIT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9u
Y2UuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1v
bmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMwZmRiM2I5M2FhMGExMzZmZTBmZTRiODExZTk2MDhhOTc0OWE4
NzIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91
bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCkBAIC0wLDAgKzEsMzAgQEAKKworbGV0IGN1cnJlbnRBcmdD
b3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRB
cmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxs
ZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgewor
ICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOwor
CitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9
IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsgbGVuZ3RoQ2FsbHMrKzsgcmV0dXJuIGN1cnJl
bnRBcmdDb3VudCB9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdChh
cnJheSk7CisKKworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2FsbHMgPSAwOwordGVz
dChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJvdyBuZXcgRXJyb3Io
bGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRo
ZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQt
dmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKaW5kZXggMzYxOGY4
Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3MzIzMTkwY2Y0OWQ4OGUzZmZl
OTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJh
cmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcworKysgYi9KU1Rlc3RzL3N0
cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCkBA
IC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgewogICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKICAg
ICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjog
IiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxl
bmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21h
dGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBpZiAoYS5jLmxlbmd0aCAhPT0g
Yi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3Ro
IG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIgKyBiLmMubGVuZ3RoOwogICAg
IGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAgICAgIGlmIChhLmNbaV0gIT0g
Yi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0
Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385680</attachid>
            <date>2019-12-13 21:42:12 -0800</date>
            <delta_ts>2019-12-18 15:42:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191213214159.patch</filename>
            <type>text/plain</type>
            <size>617886</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDViYzhiNjRiY2JjNzEyYmQ2NDFmNjg1MTBkNmFmMjU2NzhmODA5Li5iZmRkM2Y1ZDM1ZWI5MGJm
NjRkYWFlYmM5Mzg5Y2Y1ZGJhNjJkNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NjggQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGUgdGhlIHByb2JlLWJhc2VkIE9TUiBleGl0
IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uIHRodXMgdGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQgY29kZSBzaW5jZSBpdAorICAgICAgICB3b3VsZCBiZSBhIG5vbi10cml2aWFs
IGFtb3VudCBvZiB3b3JrIHRvIGdldCBjaGVja3BvaW50cyB3b3JraW5nCisgICAgICAgIHdpdGgg
cHJvYmUgT1NSLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAg
ICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUluZGV4OjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpj
aGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6YXNCaXRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjplbnVt
VmFsdWVzRXF1YWxBc0ludGVncmFsKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZSk6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNBbHdheXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNMaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieXRlY29kZUlu
ZGV4Rm9yRXhpdCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1UbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6
OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29k
ZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6dW5tYXBPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAg
ICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJh
bmQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6Ok9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpr
aW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kOjp2aXJ0dWFsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1RtcCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNI
ZWFkZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0FyZ3VtZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJpdHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZM
b2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bnVtYmVyT2ZUbXBzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXApOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omxv
Y2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRG
b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldEZvck9wZXJh
bmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omhhc09wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvckluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdl
dENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6On5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcjo6flZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCk6CisgICAg
ICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fy
Z3VtZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpk
dW1wKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6Cisg
ICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBh
cnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpm
bHVzaERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNo
T3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFu
dG9tTG9jYWxEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0
T1NSKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RG
R0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcv
REZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5k
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5C
eXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAg
KiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRs
ZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9j
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVD
bG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdU
b0NoZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5m
by5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBw
cm9wcmlhdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
YWxsZWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xh
eW91dFBoYXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5k
bGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVu
a3MuaDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JF
bnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
OjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lz
dGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBm
dGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjptYXhVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjptaW5VbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptYXhTaWduZWQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bWluU2lnbmVkKToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50
cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBn
ZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmN1cnJlbnRWUEMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKEpTQzo6Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU6OmdldFRtcCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6c2l6ZU9m
VmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklU
OjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9y
ZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudElu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFs
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlND
OjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRo
dW5rSklUKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRjaE5leHRJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2twb2lu
dF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVy
Zmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFzQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OmR1bXBSZWdpc3Rlcik6CisgICAg
ICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToK
KyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6
CisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJy
YXksIGFuZCB1c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0YmE4ZTBhN2Ix
NzQ2MDEwNzdlNjUzYmZlZmZkYTFlZTQzOGI0Y2FkLi4zNGMyMmM2ZDhkODBhNjdiMWNlM2JlNTZm
ZDVhMzY0MTUzMTE5OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTEyLTEzICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxk
IGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAg
ICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6
b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0
KToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0
UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6
b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAg
ICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKworMjAxOS0xMi0xMyAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEZhc3RCaXRWZWN0b3IgKG1vcmUp
IHRlbXBsYXRlIGNvbXBhdGFibGUgd2l0aCBWZWN0b3I8Ym9vbD4gc28gb3RoZXIgY29udGFpbmVy
cworICAgICAgICB1c2luZyBhIFZlY3RvcjxUPiBtZW1iZXIgY2FuIHVzZSBGYXN0Qml0VmVjdG9y
IGluc3RlYWQgaWYgdGhlIFQgaXMgYm9vbC4KKworICAgICAgICBBbHNvLCBhZGQgc29tZSBoYW5k
eSBtZXRob2RzIHRvIEJpdG1hcC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJh
dG9yKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6Cisg
ICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVy
ZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJh
dG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpmaWxsKToKKyAgICAgICAgKFdU
Rjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisKIDIwMTktMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgSGVhcDo6ZmluYWxpemUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQ5OTZjMWU0YmQ2MTY1NWMyYzkxNTkyMjJlMGI0ZWJlZTRlMTcwN2YuLjNlZjFmOTA5OTIx
NDcwMTc0ZGI1MzkxZmJjOWM3M2Q4YzNkNWQwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzIsNiArOTMyLDcgQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcyMURBQzM0M0Mw
MEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1
MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9t
aXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzYwMCw2ICszNjAxLDcgQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIz
RXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2Ny
aXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0
aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAw
RTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBw
YXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzYxNCw2ICszNjE2LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8q
IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0Qx
QkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1
NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVy
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVs
cGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAw
NTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2
NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU5NTAsNiArNTk1NSw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBD
YWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENh
bGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BT
dGFja0lubGluZXMuaCAqLywKQEAgLTg1ODEsNyArODU4Nyw5IEBACiAJCQkJQTUyNzA0ODUxRDAy
N0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJ
CQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAq
LywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMg
Ki8sCkBAIC04NTkyLDYgKzg2MDAsNyBAQAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAv
KiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBS
ZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4
NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEw
MDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIx
MDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MDkzLDYgKzkx
MDIsNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQy
NjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFB
OTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMu
LjY4ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aApAQCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RF
X1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0g
ICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggMzVkMDE3
NTZkNTMyYTcxZWMwN2ZlNDAzZWY3YTUyNTBiNWZjNmY2MS4uNDFiYzk2MWExNTMwODVmYmE4NTUw
NjVjMzliNmM2ZGE2ZmIyYTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMjYz
LDIwICsyNjMsMjAgQEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29t
cGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KLXN0cnVjdCBPcGVyYW5kIHsKK3N0cnVjdCBCM09wZXJhbmQgewogICAgIGNv
bnN0IGNoYXIqIG5hbWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgT3BlcmFuZDxp
bnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVy
YW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5cGVkZWYgT3Bl
cmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50NjRfdD4gSW50
NjRPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlw
ZWRlZiBCM09wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8
aW50OF90PiBJbnQ4T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIE9wZXJh
bmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQorI2RlZmluZSBNQUtFX09QRVJB
TkQodmFsdWUpIEIzT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3Rp
bmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQordm9pZCBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+JiBv
cGVyYW5kcykKIHsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDAuKSB9KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigtMC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVXaXRo
SW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci1WZWN0b3I8T3BlcmFuZDxGbG9hdFR5
cGU+PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQorVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+
PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQogewotICAgIFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlw
ZT4+IG9wZXJhbmRzOworICAgIFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7
CiAgICAgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMob3BlcmFuZHMpOwogICAgIHJldHVy
biBvcGVyYW5kczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcAppbmRleCA2MDU4ZmIwNjIwMzk0NmM0Y2Q1NmVmNmE5ODM4NzlkMmQ2
YzgxZmI2Li44MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNhZTVjMGVlM2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAg
LTYzLDcgKzYzLDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLAogCiB2b2lkIEJ5dGVjb2RlRHVt
cGVyQmFzZTo6ZHVtcFZhbHVlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgbV9vdXQucHJp
bnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcub2Zmc2V0KCkpLmRhdGEoKSk7CisgICAgbV9vdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcpLmRhdGEoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFRyYWl0cz4KQEAgLTgzLDEyICs4MywxMiBAQCB0ZW1wbGF0ZSB2b2lkIEJ5dGVjb2Rl
RHVtcGVyQmFzZTo6ZHVtcFZhbHVlKEdlbmVyaWNCb3VuZExhYmVsPFdhc206OkdlbmVyYXRvclRy
YQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKGludCByKSBjb25z
dAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVn
aXN0ZXIgcikgY29uc3QKIHsKLSAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgocikpCisg
ICAgaWYgKHIuaXNDb25zdGFudCgpKQogICAgICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIpOwog
Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0ZXIocikpOworICAgIHJldHVybiB0
b0NTdHJpbmcocik7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCbG9jaz4KQEAgLTk4LDEwICs5OCwx
MCBAQCBpbnQgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4K
LUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAogewotICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25z
dGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgpLCAiKSIpOworICAgIGF1dG8gdmFsdWUgPSBibG9jaygpLT5nZXRDb25zdGFu
dChyZWcpOworICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgcmVnLCAiKSIpOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEJ5dGVjb2Rl
RHVtcGVyOjpkdW1wQ29uc3RhbnRzKCkKICAgICB9CiB9CiAKLUNTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI6OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVy
Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25zdAogewogICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAgYXV0byB2YWx1ZSA9IGZv
cm1hdENvbnN0YW50KGJsb2NrLT5nZXRDb25zdGFudFR5cGUoaW5kZXgpLCBibG9jay0+Z2V0Q29u
c3RhbnQoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmgKaW5kZXggMGQ3MTY3NTAzOTRiMTVkNGViNWU4N2M1YTg4MjUxMDc1ZWZlMDNl
ZS4uZWRiMTEyOTIxYWY3NTNlNjNkODYxMzcyZmJkZTBlZWY4OWZjYTE1OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcFZhbHVlKFQgdikgeyBtX291dC5wcmludCh2KTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rl
cikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldCkgY29uc3QgPSAwOwogCiAgICAgQnl0ZWNvZGVEdW1wZXJCYXNl
KFByaW50U3RyZWFtJiBvdXQpCkBAIC05MSwxMSArOTEsMTEgQEAgcHJvdGVjdGVkOgogCiAgICAg
dm9pZCBkdW1wQnl0ZWNvZGUoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0
IElDU3RhdHVzTWFwJik7CiAKLSAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25z
dCBvdmVycmlkZTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgQ1N0
cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKIAogICAgIEJsb2NrKiBt
X2Jsb2NrOwogfTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIEpTQzo6
Qnl0ZWNvZGVEdW1wZXI8RnVuY3Rpb25Db2RlQmxvY2s+OjpCeXRlY29kZUR1bXBlcjsKIAogICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRl
eCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lz
dGVyIGluZGV4KSBjb25zdCBvdmVycmlkZTsKICAgICBDU3RyaW5nIGZvcm1hdENvbnN0YW50KFR5
cGUsIHVpbnQ2NF90KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJhOTA0MDFhNzExN2RjMGY5ZjI2
ZTE5MTM3ZWIyYzMxNTliLi5iODEyZmI0MWJmOWFiZTY2NGY0NDc1OTEzZTljZTM0MjlkYjQxMmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
Y3BwCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMiw2ICszNCw4IEBAIG5hbWVz
cGFjZSBKU0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1wKFdURjo6UHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9mZnNldCgpKTsKKyAgICBpZiAoY2hl
Y2twb2ludCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIsIGNoZWNrcG9pbnQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMxZjcyYWMyMDczMWMxZDNiY2U5MzUx
NThkZi4uNjA4NzAwYzU3YWQ3MDE3MmMyY2IwMGYxMDlhNWM0MTMxNzQyZDViMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0
cmVhbTsKQEAgLTMzLDI4ICszNCwzOSBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKKwogY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJs
aWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUluZGV4KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChkZWxldGVk
VmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZhbHVlKCku
YXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQot
ICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3Qg
Y2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZz
ZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0Owor
ICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAibnVt
YmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMgLSAx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpn
ZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9
CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXgg
ZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09
IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1
aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlk
T2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQogICAg
IGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRvciAhPShj
b25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KIApAQCAtNjksMTMgKzgxLDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0
IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWlu
dDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRP
ZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQz
Ml90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NFUlQoY2hl
Y2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNvZGVJbmRl
eCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29kZUluZGV4
KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBjaGVja3Bv
aW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1
aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJlc3VsdC5t
X29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIKaW5kZXggNzFiZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3ODdhZmZh
NC4uZGYwYmRlYjFjYjBmMDU0MDgwN2U5YWZhN2UyOTMxNGExNzBjMjdkZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3ICs1OSw3
IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2ZpbGUsCi0g
ICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkJpbmFy
eUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwxMyBAQCBv
cCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAg
ICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgwNSw2ICs4
MTIsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAg
IH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmls
LAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cywKQEAgLTg0NSw2ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAog
ICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAg
IGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAg
ZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0K
IAogb3AgOnJldCwKQEAgLTk5Miw3ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJv
d25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6
dGhyb3csCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBiNmNmZjEwMTE0
M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2ZDNjOTE2Y2U1
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBAIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5
cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEg
djEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6
dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50VHlwZTIgPSB0
eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOworICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2
Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9
PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVtQ2hlY2twb2lu
dFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxtYXhOdW1DaGVj
a3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2Fs
bFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wVGFpbENhbGxW
YXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVh
bEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6
bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJn
Q291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgaWYgKGNoZWNr
cG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisgICAgICAgICAgICByZXN1bHQuc2V0
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
CmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzkuLjNlNWVkYzBh
NjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIKICNpbmNsdWRl
ICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFw
aDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxpbmUgYm9vbCBv
cGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRUaGF0
SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJh
bmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmluZGV4IDNkMTJl
MTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEwOWI3ODk2N2Yx
MDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaApA
QCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuICFWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlzTG9jYWwoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJlZy50b0xvY2Fs
KCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkg
fHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxSZWdp
c3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDg2
OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1YTFiZDJjMTYz
ZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVT
dHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNsb25l
ZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnBy
ZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmVwbGFj
ZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1l
bnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUp
OworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVn
aXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAgICBib29sIHNo
b3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRDb2RlLT53YXND
b21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENvZGUtPndhc0Nv
bXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEsNyArNjQyLDcg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRv
IGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fdmFyICE9
IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRD
b25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwpAQCAtNzA5
LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVM
b2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9
IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29u
c3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7
CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIg
cGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0
IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0xMDg2LDYgKzEw
ODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVj
b2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXguY2hlY2twb2lu
dCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24ubmV4dCgpLmlu
ZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4MTEsMTAgKzE4
MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5p
cXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkpOwor
ICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocHJv
ZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9maWxlcy0+bV9i
dWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOworICAg
ICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRz
W2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0yNzEzLDcgKzI3
MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8qIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQg
OiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9maWxlQnVja2V0
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDA5MmM3YWFjODQyNmMx
ZTRjOWQ1OWY1NGY5MWU1NTYzNmMzNzRhMWYuLjc5NjM0MzVlYWIzNzQ0ZTk2Y2RlYTU0ZTY4ZDQ4
YmYxMjNlMDAwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKQEAgLTE1OCw2ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxlZUxvY2Fscygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQgbnVtVmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50
VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1f
bnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJz
KTsgfQpAQCAtMjI2LDIwICsyMjcsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVk
Vk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3Bv
aW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgp
CisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYm
ICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0ZXIoKSAmJiAh
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAo
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9y
YXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVybiBp
bmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gbV9udW1W
YXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRs
ZXIpOwpAQCAtNTc4LDEwICs1NzksOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXgg
Pj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25bcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9
CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KQEAgLTc3MSw2ICs3NzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJl
c3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9yRXhpdChCeXRl
Y29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JFeGl0KCkgeyBt
X29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3MSw3ICs4NzIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCi0gICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+IG1f
Y2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAKICAgICAgICAg
RGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAgfTsKQEAgLTkz
OCwxMCArOTM5LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJz
KGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKLSAgICB2
b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBy
ZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3Zt
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1MWM3MzE4ZWJj
MDQzMS4uMThhZjI0MjJiMTAwMWYyNWY5MDk2ODJlNGQ5ZWIwMWE1OWI2NTQ5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAsNyArMTYwLDkg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJhbWUq
IHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOworICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsKKworICAgIGJv
b2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAg
ICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQg
Zm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygp
IGNvbnN0OwpAQCAtMjc4LDYgKzI4MCwxNiBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVy
YXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdAogICAgICAgICAmJiBpbmxpbmVD
YWxsRnJhbWUoKSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWUoKTsKIH0KIAoraW5saW5lIGJvb2wg
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAor
eworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChD
b2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9y
aWdpbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFi
NTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLmFiYTlmMmQzZGYwZWJjN2RmYzUwZDc4MWY2MzEz
YWI5ZDA3MGQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwog
CisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVzbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1w
IGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4K
IGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2
ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlz
TGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lz
dGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBw
b2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZl
Y3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1F
OiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8
UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0
Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uMzkwNDk0Zjk0NTRhNzAyMmU0NWM4OTdjYmEwOTU5ZGQx
YmY5NzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVP
cmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisg
ICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7
CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBp
c0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Nj
b3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJs
ZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsx
OTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUn
cyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNp
b24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElu
bGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAg
ICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xv
c3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihz
dGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9m
ZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1
cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0OSw3ICsyNTgsNyBAQCBpbmxpbmUgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVP
cmlnaQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLWlubGluZSB2
b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhp
czsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMTggQEAgaW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQog
ICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorQUxX
QVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJh
bmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6IG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIHJldHVybiBv
cGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihyZWcub2Zmc2V0
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnOworICAg
ICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmlu
ZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5
NTU1MmViZjM4ZjdiNGFiMmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2
ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIK
KyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAt
NjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJh
bmQudmFsdWUoKSArIG1fb3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCgpIGNvbnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkw
LDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3Bl
cmFuZCBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlI
YXNoIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1
NTc4OWRmZmRlNjdmMzk2Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4
YmMwNjcwNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsK
ICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwot
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgp
OworICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFs
dWVSZWcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7Cisg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEs
NyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFs
dWUgdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNv
ZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgK
aW5kZXggNWQ4MWM0YzkwMGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBj
MDBmYmQ0NGM4NTVhMzg5ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldDsKLSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kOwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWVi
MzczNDU5NDQ2ZGM3NGNkMTIwMjc1NjI1NzYuLjVkYWQzYTlkZDFkMzAzMTllMzE2YWJhNDFhNzIw
ZTZhNGE2NTEwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CkBAIC0zNSwxMTEgKzM1LDIyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFy
Z3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVt
Q2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25lIHRoYXQgZXhpc3Rz
IGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBi
eXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJh
bmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFu
ZCgpID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1l
bnRPcGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsg
fQorCisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAg
ICAgICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS5pc0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3Bl
cmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVy
YW5kKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0K
KyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWlu
dDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgp
OyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVy
YW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3Vt
ZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5s
aW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQ7CisgICAgaW50IG1fb3BlcmFu
ZDsKK307CisKK0FMV0FZU19JTkxJTkUgYm9vbCBPcGVyYW5kOjpvcGVyYXRvcj09KGNvbnN0IE9w
ZXJhbmQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZSgpID09IG90aGVyLnZhbHVlKCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpID09
IG90aGVyLnZpcnR1YWxSZWdpc3RlcigpOworfQorCitpbmxpbmUgYm9vbCBPcGVyYW5kOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkg
Pj0gMDsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpOworfQorCitpbmxp
bmUgT3BlcmFuZCBPcGVyYW5kOjpmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBPcGVy
YW5kIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxPcGVyYW5kPih2YWx1ZSk7CisgICAgQVNTRVJUKHJl
c3VsdC5pc1ZhbGlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpY19hc3NlcnQo
c2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZih1aW50NjRfdCksICJPcGVyYW5kOjphc0JpdHMoKSBy
ZWxpZXMgb24gdGhpcy4iKTsKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2Ug
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKLSAg
ICBPcGVyYW5kcygpCi0gICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykK
KyAgICAvLyB1c2luZyBTdG9yYWdlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKKyAgICAvLyB1c2luZyBSZWZUeXBlID0gdHlwZW5hbWUgc3RkOjpjb25k
aXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yOjpCaXRSZWZl
cmVuY2UsIFQmPjsKKyAgICAvLyB1c2luZyBDb25zdFJlZlR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKKyAg
ICB1c2luZyBTdG9yYWdlID0gVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKKyAg
ICB1c2luZyBSZWZUeXBlID0gVCY7CisgICAgdXNpbmcgQ29uc3RSZWZUeXBlID0gY29uc3QgVCY7
CisKKyAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNp
emVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCiAgICAgewotICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5l
ZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1
bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAg
ICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkp
OwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFy
Z3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCiAgICAgewotICAgICAg
ICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsK
KyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
KTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlr
ZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKKyAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQog
ICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkgKyBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhl
ci5zaXplKCkpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQot
ICAgIAorCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Bcmd1bWVudHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQotICAgIAorICAgIHNpemVfdCBu
dW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9CisgICAgc2l6ZV90
IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9m
QXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisKKyAgICBzaXplX3QgdG1wSW5kZXgo
c2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRt
cHMoKSk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CisgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlk
eDsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX251bUFyZ3VtZW50cyArIGlkeDsKKyAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIGlkeDsKICAgICB9CisKKyAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6
ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAK
LSAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFs
dWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQotICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNp
emVfdCBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsKLSAgICB9CisgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGFy
Z3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgo
aWR4KV07IH0KICAgICAKLSAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1tsb2NhbEluZGV4KGlkeCldOyB9Ci0gICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIFJlZlR5cGUgbG9j
YWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAg
IENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2lu
ZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZUbXBzKCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fscygp
OworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkxvY2FscygpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgotICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCisgICAgUmVmVHlwZSBhdEZvcihz
aXplX3QgaWR4KQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3Bl
cmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9w
ZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1l
bnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJl
dHVybiBsb2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAg
IHJldHVybiBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJh
bmRLaW5kIG9wZXJhbmRLaW5kPgotICAgIGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0
CisgICAgQ29uc3RSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9w
ZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVy
biB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAg
IGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisK
KyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVl
ID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAg
ICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxv
Y2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBuZXdTaXplID0g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6
ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHNpemVfdCBvbGRO
dW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
Ci0gICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBUKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTnVtVG1wczsgKytpKQorICAgICAgICAgICAgbV92YWx1
ZXNbbmV3U2l6ZSAtIDEgLSBpXSA9IG1fdmFsdWVzW3RtcEluZGV4KG9sZE51bVRtcHMgLSAxIC0g
aSldOworCisgICAgICAgIG1fbnVtTG9jYWxzID0gc2l6ZTsKKyAgICAgICAgaWYgKGVuc3VyZWRW
YWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUgLSBvbGROdW1Mb2Nh
bHM7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2Fs
cyArIGkpXSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5z
dXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUpCisgICAgdm9pZCBl
bnN1cmVUbXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAg
ewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6
ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXpl
IDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mVG1wcygpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOworCisgICAgICAgIGlmIChlbnN1
cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXph
dGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXpl
OyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBU
JiB2YWx1ZSkKQEAgLTE2NCw4NCArMjc0LDc2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlk
eCA+PSBudW1iZXJPZkxvY2FscygpIHx8IGxvY2FsKGlkeCkgPT0gVCgpKTsKICAgICAgICAgc2V0
TG9jYWwoaWR4LCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgo
aW50IG9wZXJhbmQpIGNvbnN0CisKKyAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBn
ZXRGb3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PE9wZXJhbmRzKj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KKworICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1
cm4gYXJndW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9j
YWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJu
IGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKLSAgICBzaXplX3Qg
b3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CisgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChPcGVyYW5kIG9wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wZXJhbmRJbmRleCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAo
IW9wLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOwogICAgIH0K
ICAgICAKLSAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFJlZlR5cGUgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkp
OworICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIAotICAg
IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBSZWZUeXBl
IG9wZXJhbmQoT3BlcmFuZCBvcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kKHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJu
IHRtcChvcC52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVy
YW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJh
bmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBU
Jj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KKyAg
ICBDb25zdFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQogICAgIAotICAg
IGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxz
KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgp
KSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQotICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKG9wLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcC52YWx1ZSgpID49IDAp
OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3AudmFsdWUoKSkgPCBu
dW1iZXJPZlRtcHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChvcC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQg
b3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3Bl
cmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5vcGVyYW5kKG9wZXJh
bmQpID0gdmFsdWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNl
dE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgfQogCiAgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25z
dCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQot
ICAgIFQmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAg
Y29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7
IH0KLQotICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4IDwgbV9udW1Bcmd1bWVudHM7IH0KLSAgICBib29sIGlzTG9jYWwoc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgb3BlcmFuZEZvcklu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBSZWZUeXBlIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBS
ZWZUeXBlIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKwor
ICAgIE9wZXJhbmQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpLm9mZnNldCgpOwotICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZv
ckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICBlbHNlIGlmIChpbmRleCA8
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7
CisgICAgICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0
T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHNldEFy
Z3VtZW50Rmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCksIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c2V0TG9jYWxGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFs
dWUpOwotICAgIH0KLSAgICAKKwogICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKQEAgLTI1Nyw2
ICszNTksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVu
dHMoKSA9PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mTG9jYWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChu
dW1iZXJPZlRtcHMoKSA9PSBvdGhlci5udW1iZXJPZlRtcHMoKSk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gbV92YWx1ZXMgPT0gb3RoZXIubV92YWx1ZXM7CiAgICAgfQpAQCAtMjY1LDkgKzM2
OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4KLSAgICBWZWN0b3I8VCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFsdWVzOwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1l
bnRzOworICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJn
dW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJl
IHRtcHMuCisgICAgU3RvcmFnZSBtX3ZhbHVlczsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
cyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
ZXJhbmRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCmluZGV4IDY1ZmVkZGEwNzMwYTgzOTFmODMxNTYzZGJkZWI4MTZhZjkyNTY2ZmQu
LjBiMWNjMWYyZDE5N2FkMDgzNjVhOGY3ODU2MWZkZjY3YTdkOWVkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKQEAgLTMwLDYgKzMw
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIG91dC5w
cmludCgidG1wIiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKIHsKQEAgLTQ0LDYgKzUyLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRl
eCwgIjoiLCBpbkNvbnRleHQobG9jYWwobG9jYWxJbmRleCksIGNvbnRleHQpKTsKICAgICB9Cisg
ICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9mVG1wcygpOyAr
K3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBp
bkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOworICAgIH0KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KQEAgLTYwLDYgKzczLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGxvY2FsKGxvY2FsSW5kZXgpKTsK
ICAgICB9CisgICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9m
VG1wcygpOyArK3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRl
eCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKaW5kZXggZDVkZGVlOGQ1NjA3NzAzMjNiMWZkNWYxYWNjY2NjMDUwMmMxMjY1NC4uN2U5
MzI2MmRmYjA5NTlkZWMyYTkyNDFmZjhjNjExZjMzYjkyYjQ0NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC03Miw2
ICs3Miw3IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlCiAgICAgLCBtX2NvZGVUeXBlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkpCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hh
c0NoZWNrcG9pbnRzKGZhbHNlKQogICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkK
ICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1f
bWV0YWRhdGEoVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpjcmVhdGUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggYTRmYTdl
MDU1YjhlOTJiNmFhYWFhNThjMWE5ZDllY2JhYmY0OThmMy4uYjk1MTY1Y2VmMGI4NjZiNDBlNjMx
MzQyNzFlODE5MzQyYTkwYmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTE0Miw2ICsxNDIsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOyB9CiAgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9u
SW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAorICAgIGJvb2wgaGFzQ2hlY2tw
b2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CisgICAgdm9pZCBzZXRI
YXNDaGVja3BvaW50cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KKwogICAgIC8vIFNw
ZWNpYWwgcmVnaXN0ZXJzCiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQogICAgIHZv
aWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Nj
b3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9CkBAIC0xOTksOSArMjAyLDggQEAgcHVibGlj
OgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KICAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlm
aWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsgfQpAQCAtNDIwLDYgKzQyMiw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9kaWRPcHRpbWl6ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9hZ2Ug
OiAzOwogICAgIHN0YXRpY19hc3NlcnQoKCgxVSA8PCAzKSAtIDEpID49IG1heEFnZSk7CisgICAg
Ym9vbCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKaW5kZXggYmJiOGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFlMTE4MzNlZmI5MDM2
Ny4uZWI5MTc5NDUzMGRmMWEzMjkyZGNkYmVkMzE2NGU5Yzc5MDlhNjlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApAQCAtMTc2LDI4ICsxNzYs
MjggQEAgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRl
eChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHIKICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
LT5tX2J5dGVjb2RlSW5kZXg7CiB9CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDog
cHVibGljIFZhbHVlUHJvZmlsZSB7Ci0gICAgaW50IG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogfTsKIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIgeworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQorICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgICAgICA6IG1fc2l6ZShzaXplKQog
ICAgIHsKICAgICAgICAgLy8gRklYTUU6IFZhbHVlUHJvZmlsZSBoYXMgbW9yZSBzdHVmZiB0aGFu
IHdlIG5lZWQuIFdlIGNvdWxkIG9wdGltaXplIHRoZXNlIHZhbHVlIHByb2ZpbGVzCiAgICAgICAg
IC8vIHRvIGJlIG1vcmUgc3BhY2UgZWZmaWNpZW50LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDEzCi0gICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0p
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKLSAgICB+
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcigpCisgICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlciB7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0
cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPiBtX2J1ZmZlcjsKKyAgICBNYWxsb2NQdHI8VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
Y3BwCmluZGV4IGM1Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0
N2YwZTE4ZGYwNjNhODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBA
QCBKU1ZhbHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0CiB7CiAgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS51bmJveGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUy
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1
MigpKTsKICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5h
TihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUo
KSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpKS51bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVy
biBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkQm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAg
Y2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5
NGYzMmEyOTNhZmQ4OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMw
OTRlNThkYTNiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAy
MWY1YWQwNDguLmViMGNjYzM4ZWRiYTRlODgzYmFhMTQ0MThiMDYxNmVlYWYzYTMyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAg
LTMxLDEyICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFu
ZElzTG9jYWwoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2Fs
KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVn
aXN0ZXJJc0FyZ3VtZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7
CiB9CkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElz
TG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNI
ZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVh
bFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAppbmRleCBmODBhN2M0ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2Uz
Li4xMDNmYjI4YmE3MDQwYmVlMjk2ZjAxNGFiMTMxMjI4OWQyZGRiYWQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcApAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAg
ICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRv
IG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3Jj
MS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVh
bFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5
KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNy
YzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzIt
PnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkp
LT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7
CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5l
ZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIyOSw2ICszMjI5LDggQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAh
PSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMs
IHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDAp
LCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChWYXJhcmdz
T3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMxZmUwN2EwNDVmZmVmMGVmMjZjYjUx
ZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZmZWMwNjY2NDY1NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQ
cm9maWxlcik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9CisgICAgICAgIHZvaWQgc2V0
VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQog
CiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKaW5kZXggYjgzZmVlMGQzYzA5ZDE0OTdhYTdlYTFk
ZTNlMDQ5MDYyZjIyNmMxNC4uZTY0MDcxYjFhYTBlMzQ4OTQ0MzQzOWZmMjhmY2EyNTFiNjJiOTY1
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcApA
QCAtNDAsNiArNDAsMTQgQEAgdm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KHZhbHVlKCkpOwogfQogCit2b2lk
IEFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAg
IGVsc2UKKyAgICAgICAgb3V0LnByaW50KE9wZXJhbmQ6OmZyb21CaXRzKHZhbHVlKCkpKTsKK30K
Kwogdm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBvdXQucHJpbnQoa2luZCgpKTsKQEAgLTQ5LDYgKzU3LDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFw
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiKCIsIERP
TUpJVDo6SGVhcFJhbmdlOjpmcm9tUmF3KHBheWxvYWQoKS52YWx1ZTMyKCkpLCAiKSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChraW5kKCkgPT0gU3RhY2spIHsKKyAgICAgICAg
b3V0LnByaW50KCIoIik7CisgICAgICAgIHBheWxvYWQoKS5kdW1wQXNPcGVyYW5kKG91dCk7Cisg
ICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgb3V0
LnByaW50KCIoIiwgcGF5bG9hZCgpLCAiKSIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuaAppbmRleCBiZjk5Mzc3OTcwNDcwMmQ4ZDViMjBiNmMyZjZm
NzM5NWFmZTZiODY4Li4zYzRjZTNkNWQwMmRjM2E4MWYzYWE0MjRjZmMzZmQxYzQ0N2M1MjkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRPTUpJVEhlYXBSYW5n
ZS5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CkBAIC0xMjMsMTAgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fdmFs
dWUoYml0d2lzZV9jYXN0PGludHB0cl90Pihwb2ludGVyKSkKICAgICAgICAgewogICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorCisg
ICAgICAgIFBheWxvYWQoT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICAgICAgOiBtX2lzVG9wKGZh
bHNlKQotICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgICAgICAg
ICAsIG1fdmFsdWUob3BlcmFuZC5hc0JpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgICAgIDogUGF5
bG9hZChPcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xODMsNiArMTg5LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wQXNPcGVyYW5k
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgbV9pc1RvcDsKQEAgLTIwNCw2ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBB
U1NFUlQoa2luZCAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQgJiYga2lu
ZCAhPSBIZWFwICYmIGtpbmQgIT0gU2lkZVN0YXRlKTsKICAgICAgICAgbV92YWx1ZSA9IGVuY29k
ZShraW5kLCBwYXlsb2FkKTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPmtpbmQoKSA9PSBraW5kICYm
IHRoaXMtPnBheWxvYWQoKSA9PSBwYXlsb2FkKTsKICAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RI
ZWFwKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKQEAgLTIxOSw2ICsyMjcsMTEgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAhPSBJbnZh
bGlkQWJzdHJhY3RIZWFwKTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CiAgICAgfQor
ICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFN0YWNrICYmICFwYXlsb2FkKCkuaXNUb3AoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5k
Ojpmcm9tQml0cyhwYXlsb2FkKCkudmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIEFic3RyYWN0
SGVhcCBzdXBlcnR5cGUoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCA2NGFj
YjU0MGQ0MGFlMTc5OGY3YzIyMzZkODFkZmUxYzg0MDhkNTMwLi4zY2NlMmRmNzI3YjY5MTgxZjRi
NmI1NWQxNTg3NWJhNmU2ZDc1NDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zODEsNyArMzgx
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0
TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1
ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkp
OworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxl
QWNjZXNzRGF0YS0+b3BlcmFuZCgpKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2Nh
bCBzaG91bGQgYWxyZWFkeSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG5vZGUsIHZhbHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1
c2hGb3JtYXQoKSkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC0zOTIsNyArMzky
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFj
azogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRh
LT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQo
ZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxk
IGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2
YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2
YWx1ZS52YWx1ZSgpKQpAQCAtNDAyLDEyICs0MDIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFj
azogewotICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxv
Y2FsKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQo
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjksNyArNDI5LDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50RGVmaW5pdGVseS9TZXRBcmd1
bWVudE1heWJlIG1lYW5zCiAgICAgICAgIC8vIHRoYXQgc29tZW9uZSBzZXQgdGhlIGFyZ3VtZW50
IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0
aW5nIHRvIGEKICAgICAgICAgLy8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NFUlQoIW1f
c3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBBU1NFUlQo
IW1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czogewpAQCAtNDU4
LDYgKzQ1OCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7
CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZh
cmFyZ3M6IHsKICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVjayBp
ZiB0aGUgY291bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0dXJu
CkBAIC00NzYsNyArNDgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIG1f
c3RhdGUub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykKLSAgICAg
ICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFw
VG9wKCk7CisgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEt
PnN0YXJ0Lm9mZnNldCgpICsgaSkpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24u
aAppbmRleCBkNzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZh
MDgwY2VhMzJmZDljNTkxZjMwZjFlN2RkNDZmMWQxMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG1fdmFyaWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBhZjJlZGE0YWQ4
OGU5Yjk3YWFkNWY0ZjkzOTIzNzYyMTk1MmFlZjg0Li5mYTI0YzY5ZDBmZWNiN2JhZmM3MDVkODVj
M2M1YWQwYzY1MzkxZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAg
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9
PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8
IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHND
aGlsZCgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09
IE5ld0FycmF5QnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5h
cmd1bWVudHNDaGlsZCgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00
OTMsMTAgKzQ5NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBvaW50IHRvIGFuIGFy
Z3VtZW50IG9yIGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVn
LmlzSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlz
QmxvY2sub3BlcmFuZChyZWcpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
b3BlcmFuZC5pc0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJl
ZEJ5VGhpc0Jsb2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAg
IH0KQEAgLTU2MCwxMiArNTYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzQ2xvYmJlcmVkQnlCbG9jayB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNs
b2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2spIHsKQEAgLTYyNyw3ICs2MzAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBOb09w
Q2xvYmJlcml6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFic3Ry
YWN0SGVhcCBoZWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aGVhcC5raW5kKCkgPT0gU3RhY2sgJiYgIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52
YWx1ZTMyKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIGhlYXAub3BlcmFuZCgp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTg0NSw5ICs4NDgsMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihy
ZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
c2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUg
PSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBWYXJhcmdzTGVuZ3RoIGNhbiBl
eGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAgICAgICAgICAg
ICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKHRydWUpOwor
CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29k
ZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJ
bmRleCwgb3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRW
YXJhcmdzOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9k
ZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNF
bGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtODYyLDEwICs4NzksMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
S2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9k
ZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmFyZ3NEYXRhLT5jb3VudCksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNO
b2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFj
aywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRh
LT5jb3VudCwgRmx1c2hlZEludDMyKSksCkBAIC04NzQsMTQgKzg5MSwxNSBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUs
IHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBT
cGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwg
T3BJbmZvKHJlZy5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2Fu
RXhpdCksIE9wSW5mbyhyZWcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVl
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZyksIEVkZ2UodmFsdWUp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBu
b2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKQEAgLTEwMTksOSArMTAzNyw3IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewot
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZh
cmFyZ3NEYXRhLT5vZmZzZXQ7CkBAIC0xMDMwLDcgKzEwNDYsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID49IDEpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rv
cmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCB2YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5p
bXVtLCB2YXJhcmdzRGF0YS0+bGltaXQsIHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVz
LmNwcAppbmRleCA2MjYxMTIzY2JmZWMzZWJhMTk1ZDA5YjkzMTAyNmYyNmM3MjU4NDc2Li4yMDZk
NmZiZGM1NGEzNmNiODQxOGE4YjM4NTQ2ZDg3NTc3OTkwMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCkBAIC0zMiwxMSAr
MzIsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKKyAgICBpZiAo
b3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgcmV0dXJuIChyZWcuaXNBcmd1bWVudCgpICYmIHJlZy50b0FyZ3Vt
ZW50KCkpIHx8IHJlZy5pc0hlYWRlcigpOwotICAgIAorCiAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbAogICAgICAgICAmJiByZWcgPT0gVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTUyLDEzICs1NiwxMyBAQCBib29sIGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rl
cgogICAgIHJldHVybiByZWcgPj0gYXJndW1lbnRTdGFydCAmJiByZWcgPCBhcmd1bWVudFN0YXJ0
ICsgbnVtQXJndW1lbnRzOwogfQogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9k
ZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCBvcGVyYW5kKQogewotICAgIHJldHVy
biBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSgpLCByZWcpOworICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpLCBvcGVyYW5k
KTsKIH0KIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgTm9kZU9yaWdpbiBvcmlnaW4pCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQs
IE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwg
Ym9vbCBhZGRUaGlzKQogewogICAgIEdyYXBoJiBncmFwaCA9IGluc2VydGlvblNldC5ncmFwaCgp
OwogCkBAIC02OSwxMSArNzMsMTQgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5
TGVuZ3RoKAogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIKICAg
ICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMKICAgICAgICAgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFu
dG9tTmV3QXJyYXlCdWZmZXIKLSAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21O
ZXdBcnJheVdpdGhTcHJlYWQsCisgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9t
TmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkLAog
ICAgICAgICBhcmd1bWVudHMtPm9wKCkpOwogCisgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tU3ByZWFkKQorICAgICAgICByZXR1cm4gZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5
TGVuZ3RoKGluc2VydGlvblNldCwgYXJndW1lbnRzLT5jaGlsZDEoKS5ub2RlKCksIG5vZGVJbmRl
eCwgb3JpZ2luLCBhZGRUaGlzKTsKKwogICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVh
ZEFyZ3VtZW50cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1l
bnRzID0gYWRkVGhpczsKICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcmd1bWVudHMt
PmJpdFZlY3RvcigpOwogICAgICAgICBOb2RlKiBjdXJyZW50U3VtID0gbnVsbHB0cjsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy0+bnVtQ2hpbGRyZW4oKTsgaSsr
KSB7CkBAIC0xMDMsNyArMTEwLDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5
TGVuZ3RoKAogCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlciB8fCBh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7CiAgICAgICAgIHJldHVy
biBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9y
aWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSo+KCktPmxlbmd0aCgpKSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1i
ZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0
aCgpICsgYWRkVGhpcykpOwogICAgIH0KICAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGFyZ3VtZW50cy0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgp
OwpAQCAtMTEzLDcgKzEyMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxl
bmd0aCgKICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBhcmd1bWVudHMtPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gIWFkZFRoaXM7CiAgICAgICAgIGlmIChhcmd1bWVudHNT
aXplID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgYXJndW1lbnRzU2l6
ZSAtPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgZWxzZQpAQCAtMTI5LDE0ICsx
MzYsMTQgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAg
ICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoU3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0
aDo6VW5jaGVja2VkKSwKICAgICAgICAgRWRnZShhcmd1bWVudENvdW50LCBJbnQzMlVzZSksCiAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgICAgIG5v
ZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigxICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLCBJ
bnQzMlVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwICsgIWFkZFRoaXMpLCBJbnQzMlVzZSkpOwogCiAgICAgaWYgKG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CiAgICAgICAgIC8vIFRoZSBhYm92ZSBzdWJ0cmFjdGlv
biBtYXkgcHJvZHVjZSBhIG5lZ2F0aXZlIG51bWJlciBpZiB0aGlzIG51bWJlciBpcyBub24temVy
by4gV2UgY29ycmVjdCB0aGF0IGhlcmUuCiAgICAgICAgIHJlc3VsdCA9IGluc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aE1h
eCwgb3JpZ2luLCAKICAgICAgICAgICAgIEVkZ2UocmVzdWx0LCBJbnQzMlVzZSksIAotICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2lu
LCBqc051bWJlcigwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYWRkVGhpcyksIElu
dDMyVXNlKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1V0aWxpdGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGls
aXRpZXMuaAppbmRleCA5YTc3MThmYmJmNTQ3YjJmNmFlMTAxZGFmMzc0YTA2YTJjM2RkZjEyLi43
NGY5MzllODE2MjJkNDAyNDZlMjM1NWQ1MDk4YTllZDJhODUyMTBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKQEAgLTMxLDExICsz
MSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIpOwot
Ym9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJl
Z2lzdGVyKTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUq
LCBPcGVyYW5kKTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRh
dGUsIE9wZXJhbmQpOwogCiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
Ci0gICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgs
IE5vZGVPcmlnaW4pOworICAgIEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBib29sIGFkZFRoaXMgPSBmYWxzZSk7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAppbmRleCA5NmRhYzM5YTQ0NGZmYmQzY2U1NDNmNTdm
MzZjZDYxZGVjYzI4YmQ0Li44OTdjNzBkZmZiYTA2NmI2NDljYWZkY2MxZWYwOTMzNzY4MTA0ZDEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0
U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0
U3RhdGUuaApAQCAtMTM5LDggKzEzOSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5u
dW1iZXJPZkFyZ3VtZW50cygpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQotICAg
IEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZh
bHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQg
b3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7
IH0KICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5sb2NhbChpbmRleCk7IH0KICAgICBBYnN0cmFjdFZhbHVlJiBhcmd1
bWVudChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChpbmRleCk7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmNwcAppbmRleCA3NzQzZTdkMDFmMWNhZDc4MWQ4NGFiMDNkM2MwOWM3N2Y4
MDI5YmE1Li5jMmI1NWFhNWM0YTUyMjliMWIxYTQ0MzFjMTg3YWRlZjQ2YzNkYjI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCkBAIC02
NSwxMCArNjUsMTAgQEAgdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lSGVhcCgpCiAKIHZvaWQg
QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBDb2RlT3JpZ2lu
IHdoZXJlKQogewotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxzQ29weShtX2xvY2Fs
cy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2xvY2Fscy5udW1iZXJPZkxvY2FscygpLCBBdmFpbGFi
aWxpdHk6OnVuYXZhaWxhYmxlKCkpOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxz
Q29weShPcGVyYW5kc0xpa2UsIG1fbG9jYWxzLCBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkp
OwogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICB3aGVyZSwKLSAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcp
IHsKICAgICAgICAgICAgIGxvY2Fsc0NvcHkub3BlcmFuZChyZWcpID0gbV9sb2NhbHMub3BlcmFu
ZChyZWcpOwogICAgICAgICB9KTsKICAgICBtX2xvY2FscyA9IFdURk1vdmUobG9jYWxzQ29weSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAppbmRl
eCA1MzU1MjU2MDIzZGRjZjI4MGRjNTk1YjMzYTdjN2ZkZWM1NGU2NGYwLi44MGMxMmJmMTgwMjVh
NTYxMDU5NmRhMjRlMjNjMDI1ZjJhYmU0ZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKQEAgLTY2LDkgKzY2LDkgQEAgc3RydWN0IEF2YWls
YWJpbGl0eU1hcCB7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc0Z1bmN0
b3IsIHR5cGVuYW1lIEFkZEZ1bmN0b3I+Ci0gICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2Fs
KFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3QgQWRkRnVu
Y3RvciYgYWRkKQorICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChPcGVyYW5kIG9wLCBj
b25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKICAgICB7Ci0gICAg
ICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7Cisg
ICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKG9wKTsK
ICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CmluZGV4IDA1ODQ0OTYzZTYxMGVkMjkzYzU2MGZhYmZkMzg5YTlmMzk3ODBhMDcuLmUyMWIyOGI1
MjIxZjE1NjE4YjgwNjRhM2E3YjJkNzg2OTEzODQyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxv
Y2FscywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRtcHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAs
IGNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKQEAg
LTQ4LDExICs0OCwxMSBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZwogICAgICwgaXNMaW5rZWQo
ZmFsc2UpCiAjZW5kaWYKICAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQotICAgICwgdmFyaWFibGVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFyaWFibGVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzKQotICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQot
ICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJn
dW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1
bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpAQCAt
NzAsNiArNzAsMTUgQEAgdm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3
TnVtTG9jYWxzKQogICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVMb2Nh
bHMobmV3TnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpOwogfQogCit2b2lkIEJh
c2ljQmxvY2s6OmVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKK3sKKyAgICB2YXJpYWJs
ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YXJpYWJsZXNBdFRhaWwuZW5z
dXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1U
bXBzKTsKKyAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzLCBBYnN0cmFj
dFZhbHVlOjpmdWxsVG9wKCkpOworfQorCiB2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VUZXJtaW5h
bChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZUFuZEluZGV4IHJlc3VsdCA9
IGZpbmRUZXJtaW5hbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAppbmRleCBiNWFkZjA5MTJkMDk0MmJlOTdlOTg3Y2RjODlmNGFlMzRkMGMwYmM4Li4xZGQzOGM3
OTA4ZGM2ZjRkMWIwODViYzhlMDYyNTQ4MGRiNDQ5N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNDYsMTEgKzQ2LDEyIEBAIHR5cGVkZWYgVmVjdG9y
PE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50
ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCi0gICAgICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMs
CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1l
bnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRtcHMsCiAgICAgICAgIGZsb2F0
IGV4ZWN1dGlvbkNvdW50KTsKICAgICB+QmFzaWNCbG9jaygpOwogICAgIAogICAgIHZvaWQgZW5z
dXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7CisgICAgdm9pZCBlbnN1cmVUbXBzKHVu
c2lnbmVkIG5ld051bVRtcHMpOwogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ub2Rlcy5zaXplKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAh
c2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNl
cnRpb25TZXQuY3BwCmluZGV4IDc1MDhlMjE5ZGM3YzU4M2RiOWVhOGZjZTY0Njg1ODk5OWUwNDYw
ZjkuLjAwOGNmNTIyNjk1N2M5YTgzNTg1YzVlNWUyYzEyNWYyZjhjZTRiMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCkBAIC01
MSw3ICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgs
IFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNl
dDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiB7Ci0gICAgUmVm
PEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5k
ZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBl
eGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpu
ZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mVG1wcygpLCBleGVjdXRpb25Db3VudCkpOwogICAgIGJsb2NrLT5pc1JlYWNoYWJs
ZSA9IHRydWU7CiAgICAgYXV0byogcmVzdWx0ID0gYmxvY2sucHRyKCk7CiAgICAgaW5zZXJ0KGlu
ZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDdlNGE5ZmU2MjMzYjc0NDllODI4NjYyYzFlNDk5ZGM5
ZTg0NDA4YjcuLjFlODYxZGMxYTc0ZDk3NTgzNTgwOGZlODhlODY3OTM0MGE4M2FmYTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0x
MTEsNiArMTExLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY29uc3RhbnRPbmUoZ3JhcGguZnJl
ZXplKGpzTnVtYmVyKDEpKSkKICAgICAgICAgLCBtX251bUFyZ3VtZW50cyhtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG1fY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bVRtcHMobV9jb2RlQmxvY2stPm51bVRtcHMo
KSkKICAgICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAgICAgICAgICwgbV9udW1QYXNzZWRW
YXJBcmdzKDApCiAgICAgICAgICwgbV9pbmxpbmVTdGFja1RvcCgwKQpAQCAtMTM5LDYgKzE0MCwx
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7CiAgICAgfQogCisgICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5l
d051bVRtcHMpCisgICAgeworICAgICAgICBWRVJCT1NFX0xPRygiICAgZW5zdXJlTG9jYWxzOiB0
cnlpbmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051
bVRtcHMsICJcbiIpOworICAgICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQorICAgICAg
ICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisK
KwogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzAs
MjUgKzI4MiwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBW
ZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2Nr
cyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sq
PiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHByb2dy
ZXNzQ2hlY2twb2ludCgpCisgICAgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQo
KSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBl
eGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9L
KTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOworICAgIH0KKworICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NF
UlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3Rh
bnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFw
cGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLmxhc3QoKTsKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVz
dWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVjdChPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAg
QVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0Nv
bnN0YW50KCkpOwogCi0gICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlm
IChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChv
cGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpKTsKIAotICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVy
biBnZXRMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFu
ZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAt
Mjk4LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0g
bV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xk
U2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0pIHsKICAgICAgICAgICAgICAgICBj
b25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
azsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50
KG9wZXJhbmQub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kKTsKKyAgICAgICAgICAg
ICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0g
Y29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAg
ICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXpl
KCk7ICsraSkKQEAgLTM1OCw5ICszNzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlh
bGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0
ZU5ha2VkU2V0CiAgICAgfTsKLSAgICBOb2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisKKyAgICBO
b2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRN
b2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcElu
Zm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKIAogICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFu
eW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1f
ZXhpdE9LID0gZmFsc2U7CkBAIC0zNzQsNyArMzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAg
dm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQpAQCAtMzkyLDE4ICs0MTMs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwog
ICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBt
X2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUt
Pm9wZXJhbmQoKSk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAg
ICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdl
dC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAg
IE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldExv
Y2FsT3JUbXAoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwg
PSBvcGVyYW5kLnRvTG9jYWwoKTsKLQotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5k
LmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJs
ZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcg
cmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtNDI4LDIwICs0NDgs
MjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7
CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRMb2NhbChjb25zdCBD
b2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWxP
clRtcChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBO
b2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNl
dEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdp
biwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50
b0xvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtl
ZFNldCkgewotICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9
IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIGlmIChvcGVy
YW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUoKSkgPj0g
bV9udW1UbXBzKSB7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50IG51bWJlciBvZiB0
bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1fcHJvZmlsZWRCbG9j
ay0+bnVtVG1wcygpLCAiIHRtcHMuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9k
ZSAhPSBJbW1lZGlhdGVOYWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQ
b3NpdGlvbkZvckxvY2FsKHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikK
ICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3Bl
cmFuZCA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNj
b3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAg
fQogCkBAIC00NTEsNyArNDc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NE
YXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpLCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRv
R3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
ID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODMsMjAgKzUwOCwy
MSBAQCBwcml2YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAg
ICBOb2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3Jt
YWxTZXQpCisgICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNP
cmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5v
cm1hbFNldCkKICAgICB7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNo
YW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVu
dCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwor
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShyZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMs
IGV4Y2VwdCBmb3IgJ3RoaXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAg
Ly8gdGhlbiBtYWtlIHN1cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChh
cmd1bWVudCB8fCBtX2dyYXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYg
KHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJl
Y3Qob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lh
bGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzMiwxNCArNTU4LDE2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZC5vZmZzZXQoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQo
KTsKICAgICAgICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVu
dF07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKLSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlv
bihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJn
dW1lbnRQb3NpdGlvbihPcGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlv
bkZvckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRB
cmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJn
dW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU3NSw2ICs2
MDMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAg
ICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IG1fZ3JhcGgubGl2
ZW5lc3NGb3IoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBkb24ndCBu
ZWVkIHRvIGhhbmRsZSB0bXBzIGhlcmUgYmVjYXVzZSB0bXBzIGFyZSBub3QgcmVxdWlyZWQgdG8g
YmUgZmx1c2hlZCB0byB0aGUgc3RhY2suCiAgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2
ZW5lc3NBdEJ5dGVjb2RlID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgs
IG1fZ3JhcGguYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQob3JpZ2luLCBpc0Nh
bGxlck9yaWdpbikpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBjb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICAgICAgICAgICAg
ICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW2xvY2FsXSkKQEAgLTU4NCwyNyArNjEzLDI3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2goT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
ICAgICAgICAgZmx1c2hEaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJh
bmQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQp
KTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgZmx1c2hEaXJl
Y3QoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQog
ICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4ob3BlcmFuZCwgYXJn
dW1lbnRQb3NpdGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGU+
Ci0gICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgYWRkRmx1c2hP
clBoYW50b21Mb2NhbChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50
UG9zaXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsK
KyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgTm9k
ZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCk7CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwogICAg
ICAgICAKQEAgLTYxNCwyNiArNjQzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5v
ZGUgPSBhZGRUb0dyYXBoKG5vZGVUeXBlLCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAg
ICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9u
LT5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBwaGFudG9tTG9jYWxE
aXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwaGFudG9tTG9jYWxEaXJl
Y3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2Nh
bDxQaGFudG9tTG9jYWw+KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsK
ICAgICB9CiAKICAgICB2b2lkIGZsdXNoKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50
cnkpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxs
RnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07CisgICAg
ICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQg
b3BlcmFuZCkgeyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hJbXBsKGlu
bGluZVN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7CiAgICAg
fQogCiAgICAgdm9pZCBmbHVzaEZvclRlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRk
Rmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcp
IHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKLSAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJl
Y3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcGhhbnRv
bUxvY2FsRGlyZWN0KHJlZyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0g
KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChvcGVyYW5k
KTsgfTsKKyAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNh
bGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBwaGFudG9tTG9jYWxEaXJlY3Qob3BlcmFuZCk7
IH07CiAgICAgICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKGN1cnJlbnRDb2RlT3JpZ2luKCksIGFk
ZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwogICAgIH0KIApAQCAtNzYxLDYg
Kzc4OSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxk
MiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKHJlc3VsdCk7CiAg
ICAgfQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCwg
Tm9kZSogY2hpbGQxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wID09IE1vdkhpbnQpOworICAg
ICAgICByZXR1cm4gYWRkVG9HcmFwaChvcCwgT3BJbmZvKG9wZXJhbmQua2luZCgpKSwgT3BJbmZv
KG9wZXJhbmQudmFsdWUoKSksIGNoaWxkMSk7CisgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgo
Tm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBFZGdlIGNoaWxkMSwgRWRn
ZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAgICAgICAg
Tm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKApAQCAtMTA5MSw4ICsxMTI0LDEwIEBAIHBy
aXZhdGU6CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1
bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwotICAgIC8vIFRoZSBudW1iZXIg
b2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4gdGhlIGZ1bmN0aW9uLgorICAg
IC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgYnkgdGhl
IGJ5dGVjb2RlIGZvciB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHM7Cisg
ICAgLy8gVGhlIG1heCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3IgZm9yd2FyZGluZyBkYXRhIHRv
IGFuIE9TUiBleGl0IHRvIGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQgbV9udW1UbXBzOwogICAg
IC8vIFRoZSBudW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRo
YXQgd2UgbmVlZCB0bwogICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1bWVudHMgdG8gb3V0Z29p
bmcgY2FsbHMgZnJvbSB0aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVtYmVyIGluY2x1ZGVzIHRo
ZSBDYWxsRnJhbWUgc2xvdHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0aGUgY2FsbGVlCkBAIC0x
MTU5LDE0ICsxMTk0LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3Rh
Y2tFbnRyeSgpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAgT3BlcmFuZCByZW1hcE9w
ZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
IW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOworCisg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBP
cGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSArIG1faW5saW5lQ2FsbEZyYW1lLT50
bXBPZmZzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXND
b25zdGFudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIo
KS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBtX2lubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIH0KICAgICB9OwogICAgIApAQCAtMTE3NSwxMyArMTIx
Myw4IEBAIHByaXZhdGU6CiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2sgbV9pY0NvbnRleHRTdGFj
azsKICAgICAKICAgICBzdHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKLSAgICAgICAgQ29kZU9yaWdp
biBtX29yaWdpbjsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKLSAgICAgICAg
Tm9kZSogbV92YWx1ZTsKLSAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7Ci0gICAgICAgIAogICAg
ICAgICBEZWxheWVkU2V0TG9jYWwoKSB7IH0KLSAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0
IENvZGVPcmlnaW4mIG9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVl
LCBTZXRNb2RlIHNldE1vZGUpCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3Jp
Z2luJiBvcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9k
ZSkKICAgICAgICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAgLTExOTQsOCArMTIy
NywxMyBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9vcGVyYW5kLmlz
QXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRBcmd1bWVudCht
X29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwotICAgICAgICAgICAgcmV0
dXJuIHBhcnNlci0+c2V0TG9jYWwobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRN
b2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsT3JUbXAobV9vcmlnaW4s
IG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKICAgICAgICAgfQorCisgICAgICAgIENv
ZGVPcmlnaW4gbV9vcmlnaW47CisgICAgICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgICAgICBO
b2RlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKICAg
ICB9OwogICAgIAogICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1fc2V0TG9jYWxRdWV1
ZTsKQEAgLTEyMDgsNyArMTI0Niw3IEBAIHByaXZhdGU6CiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBh
cnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQogewogICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxv
Y2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVu
dHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxv
Y2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9jay5w
dHIoKTsKICAgICAvLyBtX2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdheXMgYmUgc29ydGVk
IGluIGluY3JlYXNpbmcgb3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlmIChtX2lubGluZVN0
YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpKQpAQCAtMTIyMCw3ICsxMjU4LDcg
QEAgQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIAogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6
OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9j
ayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1l
bnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0
UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251
bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9j
ay5wdHIoKTsKICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxvY2spKTsKICAgICBy
ZXR1cm4gYmxvY2tQdHI7CkBAIC0xNDIzLDcgKzE0NjEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlh
bnQgYwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IHN0YXRp
Y19jYXN0PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IElubGlu
ZUNhbGxGcmFtZSBpcyBWYXJhcmdzLCB3ZSBkbyBub3Qga25vdyBob3cgbWFueSBhcmd1bWVudHMg
YXJlIGFjdHVhbGx5IGZpbGxlZCBieSBMb2FkVmFyYXJncy4gVmFyYXJncyBJbmxpbmVDYWxsRnJh
bWUncwotICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11
bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSBMb2FkVmFyYXJncy4g
V2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCisgICAgICAgICAg
ICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3Rl
bnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIg
dG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQogICAgICAgICAgICAgLy8gYSBnb29kIHRh
cmdldCB0byBqdW1wIGludG8uCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE2MTQsMTYgKzE2NTIsMTggQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Ns
b3RzICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNl
dEFmdGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7
CiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5v
ZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQg
aW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52
YWx1ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVu
c3VyZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0
KS50b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgp
ICsgMSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcyhtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3BlcmFuZChUbXBPcGVyYW5kLCBjb2RlQmxvY2stPm51bVRt
cHMoKSkpLnZhbHVlKCkgKyBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAgICAg
c2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9u
cy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3Rlcigp
OwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAg
ICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzYsNyArMTY3Niw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFj
a1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFj
a0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVz
dWx0LAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAgICAg
ICBpbmxpbmVDYWxsRnJhbWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMg
d2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUlu
ZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBAIC0xNjcxLDkgKzE3MTEsOSBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4
ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJl
IGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9j
MTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBp
dCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBs
b2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVyYW5k
IGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICBhZGRUb0dy
YXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAg
ICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldCksIHZhbHVl
KTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsg
Y3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2Vk
U2V0IH0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxNywxNiArMTc1NywxNiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBk
byBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0
ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rl
ck9mZnNldCkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxl
clN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgs
IHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJl
Y3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQs
IE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29k
ZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkp
OwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5v
ZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQg
PSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAgICAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVmaW5lZCk7CiAgICAg
ICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRD
b2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQg
fSk7CiAgICAgICAgIH0KIApAQCAtMTg5MywxMiArMTkzMywxMiBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxS
ZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJn
ZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50IHJlbWFwcGVkUmVn
aXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxvY2Fs
cyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgpKTsKICAg
ICAgICAgCiAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJlbWFwcGVkQXJndW1l
bnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0
YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgp
OwogICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50
U3RhcnQgKyAxKTsKQEAgLTE5MDYsMTEgKzE5NDYsMjQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0
ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OwogICAgICAgICBkYXRh
LT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBkYXRhLT5t
YW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0Fy
Z3VtZW50KSk7CisKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
KSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9H
cmFwaChHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICBlbHNlIGlm
IChpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgYXJndW1l
bnRDb3VudCA9IGdldERpcmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lKCksIFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAg
ZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0
YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
d2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQp
OworICAgICAgICAgICAgYXV0byBhcmdDb3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChPcGVyYW5kKFRtcE9wZXJhbmQsIE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7Cisg
ICAgICAgICAgICBzZXREaXJlY3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0
aCwgT3BJbmZvKGRhdGEpLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzQ2hlY2tw
b2ludCgpOworCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0
YSksIGdldExvY2FsT3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBu
ZWVkIHRvIGtlZXAgYWxpdmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAv
LyBhbmQgYXJndW1lbnRzQXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdl
IG9ubHkgbmVlZCBhIFBoYW50b20gZm9yCkBAIC0xOTIyLDE0ICsxOTc1LDE0IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2
ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAv
LyBiZWZvcmUgU1NBLgogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3Vu
dFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBl
ZFJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoZGF0YS0+Y291bnQpOwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQg
d2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24n
dAogICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJn
dW1lbnREZWZpbml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAg
ICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnBy
ZWRpY3QoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9m
aXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFk
ZFRvR3JhcGgoU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRW
YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCks
IHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsK
ICAgICAgICAgdW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTE5NTMsNyArMjAwNiw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVu
dHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERl
ZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVu
dCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1T
ZXRBcmd1bWVudHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjA1Myw3ICsyMTA2LDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0
OiAiLCByZWdpc3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcs
ICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlh
dGVTZXRXaXRoRmx1c2gpOwogCkBAIC01MTAyLDcgKzUxNTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdl
eHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlz
Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVu
UmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC02MTc4LDcgKzYyMzEsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUoKSB8fCAobV9ncmFwaC5jb21w
aWxhdGlvbigpICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0gMSAmJiBtX2N1cnJlbnRCbG9j
ay0+YXQoMCktPm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAotICAgICAgICAgICAgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsK
IAogICAgICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYXRjaCk7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlz
IGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCkBAIC02MTk1LDcgKzYyNDgs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCi0gICAgICAgICAgICAg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
eworICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCkBA
IC02MjIzLDE0ICs2Mjc2LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAKIAogICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMgPSAwOwotICAgICAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAg
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9m
aWxlKSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5t
X29wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5k
LmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dyYXBoKEV4
dHJhY3RDYXRjaExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9jYWxQcmVk
aWN0aW9uc1tudW1iZXJPZkxvY2Fsc10pKTsKICAgICAgICAgICAgICAgICArK251bWJlck9mTG9j
YWxzOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKHByb2ZpbGUu
bV9vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwg
T3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbG9jYWxzVG9TZXQudW5j
aGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZhbHVlKSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGlmIChudW1iZXJPZkxvY2FscykKQEAgLTYzNTgsNyArNjQxMSw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgICAgICAg
ICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFs
UG9pbnRlci5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50
ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcikpOwogICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewpA
QCAtNjgyNiw4ICs2ODc5LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUu
bV9zeW1ib2xUYWJsZS5pc0NvbnN0YW50KCkgJiYgYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUuaXND
b25zdGFudCgpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChieXRlY29kZS5tX3N5bWJvbFRhYmxlLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBGcm96ZW5W
YWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxW
YWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkpOwogICAgICAgICAgICAgTm9k
ZSogc2NvcGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1i
b2xUYWJsZSksIE9wSW5mbyhpbml0aWFsVmFsdWUpLCBzY29wZSk7CiAgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGxleGljYWxFbnZpcm9ubWVudCk7CkBAIC03Mjc1LDggKzczMjgsMTAg
QEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAg
ICAgICAgIC8vIFRoZSBvd25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxy
ZWFkeSBoYXZlIGEgYmFycmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmlu
aXNoZXMuCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAg
ICBtX2lubGluZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxs
RnJhbWUgPyBtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9j
YWxsZXItPm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFt
ZS0+c2V0U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPT0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpZiAo
Y2FsbGVlKSB7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnkg
PSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc2MzgsNyArNzY5Myw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5vcGVy
YW5kKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC03NjU4LDI0ICs3NzEzLDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNj
ZXNzb3ItPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVu
ZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
Tm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSB2
YXJpYWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJh
bWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcGVyYW5kIGFyZ3VtZW50ID0gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwg
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQuaXNBcmd1bWVu
dCgpICYmICFhcmd1bWVudC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRzID0gbV9pbmxpbmVD
YWxsRnJhbWVUb0FyZ3VtZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0FyZ3VtZW50KCldLT5h
ZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNO
b25lLCBvcCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgRmx1
c2gsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIFBoYW50b21Mb2Nh
bCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAg
IGZsdXNoRm9yVGVybWluYWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1c2hEaXJlY3QsIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCk7CkBAIC03NzQwLDYgKzc3OTUsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mQXJndW1lbnRzKCkpOwogICAgIH0KIAorICAgIG1fZ3JhcGgubV90bXBzID0gbV9udW1U
bXBzOwogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBo
Lm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAppbmRleCA4ZTliYjRhY2JlNTUwMmRkYTdiMzc0Nzg0
YjVhODVmZmRlNzAzYmZkLi4zZGM3NTY4ZjFlZTJjNjk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2MjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTcwLDIy
ICsxNzAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAg
ICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9
IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAg
ICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07
CiAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6
ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6
ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5nICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
IiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgIFdpZGVuaW5nICIsIG9wZXJhbmQsICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxvY2st
PnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0
YXJnZXQubWVyZ2VPU1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVlKCksIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2Jj
MTZiNjdkNjAyYmE2NDI2YWYwZjIzODIuLjU3NzBmMDk4OTQyYzg5NmI3YWNmODIzZmNhYjk0NDRh
MjI0Y2NlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNw
ZWNpYWxDYXNlQXJndW1lbnRzKCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5k
PigpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAg
cHJvcGFnYXRlUGhpczxUbXBPcGVyYW5kPigpOwogICAgICAgICBjb21wdXRlSXNGbHVzaGVkKCk7
CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwpAQCAtMjEx
LDEwICsyMTIsMjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5v
ZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwo
KS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1
bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxM
b2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkp
OworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAgICAg
IGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2Nh
bEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LnRvQXJndW1lbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIExvY2FsT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8
TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUbXBPcGVy
YW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxUbXBPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
Tm9kZVR5cGUgbm9kZVR5cGUsIE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYgKzI0
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAg
ICAgIEFTU0VSVChvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAg
b3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjcwLDE1ICsyODIsMjUgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkK
ICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1l
bnQoKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9k
ZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgp
LnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZs
dXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFi
bGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUs
IEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
TG9jYWxPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+
b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQ
aGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJp
YWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQo
bm9kZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
ZXRPcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSwgbm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpCkBAIC0yODksNiArMzExLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIGNsZWFyVmFyaWFibGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKICAg
ICAgICAgY2xlYXJWYXJpYWJsZXM8TG9jYWxPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlh
YmxlczxUbXBPcGVyYW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFs
bCBwaGkgcmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0
aGF0CiAgICAgICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQs
IGJ1dCBkb2Vzbid0IGFzc3VtZSB0aGF0IHRoZSByZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJv
cGFnYXRlUGhpcygpCiAgICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYg
cGhpU3RhY2sgPSBvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhp
U3RhY2sgOiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAx
Mjg+JiBwaGlTdGFjayA9IHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpOwogICAgICAgICAKICAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHku
CiAgICAgICAgIG1fYmxvY2sgPSAwOwpAQCAtNDY2LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgogICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCAxMjg+JiBwaGlTdGFja0ZvcigpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQg
PT0gQXJndW1lbnRPcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFj
azsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgc3dpdGNoIChvcGVy
YW5kS2luZCkgeworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogcmV0dXJuIG1fYXJndW1l
bnRQaGlTdGFjazsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHJldHVybiBtX2xvY2FsUGhp
U3RhY2s7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogcmV0dXJuIG1fdG1wUGhpU3RhY2s7Cisg
ICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21wdXRlSXNGbHVzaGVkKCkKQEAgLTUyMSw2ICs1NDcsNyBAQCBwcml2
YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnks
IDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+
IG1fbG9jYWxQaGlTdGFjazsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX3RtcFBo
aVN0YWNrOwogICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4IDIz
ODFjNmI4ZjhmNGJhNzYzNGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UuLjRjY2UxNzQ4ODNlMjA0MTBk
NjIyM2E2ZjQxNzJlZGRlNjk4YWFlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCkBAIC0xNDcsOCArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXls
b2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaGVhcC5wYXlsb2FkKCkudmFsdWUo
KSA9PSBoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgbV9hYnN0cmFjdEhl
YXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAg
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpOwog
ICAgICAgICAgICAgaWYgKGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICBt
X2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE3Miw3ICsx
NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVyQ29uc2VydmF0aXZl
bHkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChwYWly
LmtleS5oZWFwKCkua2luZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFs
dWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBhaXIua2V5KQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIyNiw4ICsyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQWJz
dHJhY3RIZWFwIGFic3RyYWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAgICAgICAgICAgIGlm
IChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAgIEFT
U0VSVChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBheWxv
YWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
YWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSwgbnVsbHB0cik7CiAgICAgICAgICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5vZGUs
IDB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0OSw4ICsyNDcsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKLSAgICAgICAgICAg
IEFTU0VSVChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24uaGVh
cCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVl
MzIoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01h
cC5maW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQogICAgICAgICAgICAg
ICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAgICAgICAgICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk4LDcgKzI5NSw3IEBAIHByaXZh
dGU6CiAgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBvbmx5IGxpdmUgaW4g
bV9mYWxsYmFja1N0YWNrTWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5LCBUT1AgYWx3YXlz
IGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhIHVu
aXF1ZSB2YWx1ZS4KLSAgICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVE
YXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxpbnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKKyAgICBIYXNo
TWFwPGludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNo
PGludDY0X3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2NF90
Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOwog
CiAgICAgTWFwIG1faGVhcE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKaW5kZXggODliYzY0MWY1MjZiYjUzZmYwMzdmNzNjZjk1MGJhYzY0NmQ0OTk1NC4uZTBh
MDdjN2NlNmU0ZDUyNGQ5NjU0NGM1ZDAwODMyYzJjMzk1Yjk0YiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhpcyBk
b2VzLgogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5l
Q2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1l
KCkpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7
CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5IGFjY291
bnQgd2hpY2ggbm9kZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0MSw3ICs0NDEsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEtp
bGxTdGFjazoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBjYXNlIE1v
dkhpbnQ6CkBAIC00OTcsNyArNDk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICBy
ZXR1cm47CiAKQEAgLTc4OCwzNiArNzg4LDQzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExh
enlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9w
ZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhl
YXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24o
U3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNr
LCBub2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywg
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRT
dGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgcmVhZChoZWFwKTsKICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAg
ICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxv
Y2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgd3JpdGUoaGVhcCk7CiAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKKyAgICAgICAgcmV0
dXJuOyAgCisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICByZWFkKFdv
cmxkKTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAo
U3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNr
LCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxp
bnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODI2LDkgKzgz
Myw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoU3RhY2spOwogICAg
ICAgICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zm
c2V0KCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0
aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJp
bmVkTGl2ZW5lc3MuY3BwCmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBkMDljZDJh
YzMwZjMuLjE1NzQ2YzA1NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApAQCAt
MzksNyArMzksNyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVuZXNzKEdyYXBoJiBncmFw
aCwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAgICAgZ3JhcGguZm9yQWxs
TGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewog
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCiAgICAg
ICAgICAgICAgICAgcmVnLAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9v
bCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCA3
OTg3Yjg3MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiLi43ZmZkNGQzNWI2Y2Y1Yzlk
ZTM4MWU3ZGE2MTMzMmZkNTI0OTY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9y
aWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdp
bnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmln
aW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAg
ICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUlu
ZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMu
YXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6
ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwot
ICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1
cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENv
bW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29k
ZU9yaWdpbnMuc2l6ZSgpKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KGNvZGVPcmlnaW5zLnNpemUoKSAtIDEpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRl
SW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4IENvbW1vbkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA4NTQx
MjMxNDc0MWU2ZjExMjYxZjJlOTdjNDlmZTY0NGRhZTdiYWY3Li5mMzhjODNmZGQzMGMyZjUzYjNk
NTA5M2Y0MGIyYzcwZTk1MzEwNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC0yOTQsNiArMjk0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgSW5CeVZhbDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2Fz
ZSBJbnN0YW5jZU9mQ3VzdG9tOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXg6CiAgICAgY2FzZSBO
dW1iZXJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAKaW5kZXggMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIyNzJkNDc5
OTk4YjUzOS4uNDVmYmM0MzlkNTNiYTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcApAQCAtOTAsNyArOTAsNiBAQCBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
YW55IHN0dWJzIHRoYXQgdGhlIERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBX
ZSB3YW50IHRvCiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24g
ZG9lcyBmaW5hbGl6YXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZtLmdldENUSVN0dWIo
YXJpdHlGaXh1cEdlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5l
cmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cik7CiAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhZWUxZjAwNzNi
MGY0YmJjYzQ3MzRlYjY0MWU0NjQ4YzMwNTVhMjQ0Li5jYTMzZGIyMjdkNGI5Mjc3M2ZhODZkNzJl
ZTNkNGQxYjg1YmY5ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKQEAgLTI0MzIsNiArMjQzMiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUg
dG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bj
b2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CkBAIC0yNDY0LDggKzI0
NzIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgog
ICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
Ci0gICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmV3T2Jq
ZWN0OgogICAgICAgICBjYXNlIE5ld1Byb21pc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZvckFsbEtpbGxzLmgKaW5kZXggMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRj
ZmRlMjhiOS4uOTMzYTJiZGUyMmUxNjZjMmFlYjZkNGFjMWJiZTljZTFlNWNlZDU2YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtMzIsNiArMzIsMTAg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2UgRm9yQWxs
S2lsbHNJbnRlcm5hbCB7Citjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIC8v
IFV0aWxpdGllcyBmb3IgZmluZGluZyB0aGUgbGFzdCBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxp
dmUgaW4gREZHIFNTQS4gVGhpcyBhY2NvdW50cyBmb3IgbGl2ZW5lc3MgZHVlCiAvLyB0byBPU1Ig
ZXhpdC4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGVudW1lcmF0aW5nIG92ZXIgYWxsIG9mIHRo
ZSBwcm9ncmFtIHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSwKIC8vIGJ5IGV4cGxvcmluZyBh
bGwgYmxvY2tzIHdoZXJlIHRoZSBub2RlIGlzIGxpdmUgYXQgdGFpbCBhbmQgdGhlbiBleHBsb3Jp
bmcgYWxsIHByb2dyYW0gcG9pbnRzIHdoZXJlIHRoZQpAQCAtNTMsMTMgKzU3LDEzIEBAIHZvaWQg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2Rl
KiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgCiAgICAgQ29kZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRl
ci0+b3JpZ2luLmZvckV4aXQ7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3Rl
ZDsKKyAgICBPcGVyYW5kIGFscmVhZHlOb3RlZDsKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0
aGluZyB0aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVl
LgogICAgIGlmIChub2RlQWZ0ZXItPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSBub2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYg
KGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlcikpIHsKLSAgICAgICAgICAgIGZ1bmN0
b3IocmVnKTsKLSAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbm9kZUFmdGVyLT51bmxpbmtlZE9wZXJhbmQoKTsKKyAgICAgICAgaWYgKGdy
YXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgYWZ0ZXIpKSB7CisgICAgICAgICAgICBmdW5j
dG9yKG9wZXJhbmQpOworICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKICAgICAg
ICAgfQogICAgIH0KICAgICAKQEAgLTcwLDggKzc0LDI0IEBAIHZvaWQgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNv
bnN0CiAgICAgLy8gb3RoZXIgbG9vcCwgYmVsb3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5lQ2Fs
bEZyYW1lID0gYmVmb3JlLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxpbmVD
YWxsRnJhbWUgPT0gYWZ0ZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaW50IHN0YWNr
T2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCA6IDA7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoYmVmb3JlSW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFm
dGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChi
ZWZvcmUuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4
KCkuY2hlY2twb2ludCgpKTsKKworICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2
ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOwor
ICAgICAgICAgICAgYXV0byBsaXZlQWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNv
ZGVCbG9jaywgYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGludCB0bXBPZmZz
ZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnRtcE9m
ZnNldCA6IDA7CisgICAgICAgICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBs
aXZlQmVmb3JlLmZpbHRlcihsaXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZv
ckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihP
cGVyYW5kKFRtcE9wZXJhbmQsIHRtcCArIHRtcE9mZnNldCkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAvLyBObyBsb2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZv
cmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDog
MDsKICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxp
dmVuZXNzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVC
ZWZvcmUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSwg
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAgICAgICBjb25zdCBGYXN0
Qml0VmVjdG9yJiBsaXZlQWZ0ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0
ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CkBAIC04
MiwxNyArMTAyLDIxIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
IWFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9z
cyBhIGNoZWNrcG9pbnQgYnV0IGJlZm9yZSBhbmQgYWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5l
Q2FsbEZyYW1lLiIpOworCiAgICAgLy8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRp
dmUgd2F5OiBpdCBpcyBraWxsZWQgaWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVy
LgotICAgIEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShh
ZnRlcik7Ci0gICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVj
dG9yIGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShhZnRlcik7
CisgICAgdW5zaWduZWQgbnVtTG9jYWxzID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOworICAgIGdyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5C
eXRlY29kZSgKICAgICAgICAgYmVmb3JlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKLSAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5v
dGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIu
Z2V0KHJlZy50b0xvY2FsKCkpKQorICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFu
ZC5pc1RtcCgpID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2Fs
KCk7CisgICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChvZmZzZXQpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgIGZ1bmN0
b3Iob3BlcmFuZCk7CiAgICAgICAgIH0pOwogfQogICAgIApAQCAtMTA1LDcgKzEyOSw4IEBAIHZv
aWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHNlZW5JbkNsb3N1cmVGbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGNhbGxlZEZ1bmN0b3JGbGFnID0gMjsKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4g
ZmxhZ3M7Ci0gICAgCisKKyAgICBBU1NFUlQobm9kZUluZGV4KTsKICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgCiAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAt
MTIwLDE1ICsxNDUsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAg
ICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7Ci0g
ICAgaWYgKG5vZGVJbmRleCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAt
IDEpOworICAgIE5vZGUqIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAg
IGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAg
ICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExv
Y2FsKAotICAgICAgICAgICAgICAgIHJlZywKKyAgICAgICAgICAgICAgICBvcGVyYW5kLAogICAg
ICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmbGFncy5nZXQobm9kZSkgJiBzZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAg
ICAgICAgICB9LApAQCAtMTU5LDYgKzE4Miw3IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAog
ICAgIC8vIFN0YXJ0IGF0IHRoZSBzZWNvbmQgbm9kZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBl
eHBlY3RlZCB0byBvbmx5IGluc3BlY3Qgbm9kZXMgZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0
aGUgYmxvY2sgdXAgdG8gbm9kZUluZGV4IChleGNsdXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMg
emVybyB0aGVuIHRoZSBmdW5jdG9yIGhhcyBub3RoaW5nIHRvIGRvLgogICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMTsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoRm9yQWxsS2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxv
Y2FsIGF2YWlsYWJpbGl0eSBhdCBpbmRleDogIiwgbm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxh
YmlsaXR5Lm1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJ
bmRleCgKICAgICAgICAgICAgIGdyYXBoLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0
eSwgYmxvY2ssIG5vZGVJbmRleCwKICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA3OTY0OTg1MzMxNjAzYzM4YmJh
ZWNlNDNiNDdhOGJhMDg3OWJkODcwLi5mMzVkNjVjMmE4ZGYxOGZmYTdlZWVmNTQ2MWNhMzJhM2M0
YjJhYzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDgg
KzMwOCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciog
cHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgaWYgKG5vZGUtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAi
KCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIp
Iik7CiAgICAgICAgICAgICBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9j
YWwoKTsKICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOiIsIG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcs
MTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0
YWNrQWNjZXNzRGF0YSgpKSB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2Fs
KTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgaWYg
KGRhdGEtPm1hY2hpbmVMb2NhbC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJtYWNoaW5lOiIsIGRhdGEtPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgIG91dC5wcmludChj
b21tYSwgZGF0YS0+Zm9ybWF0KTsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9j
YWwoKSkgCi0gICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsK
KyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRPcGVyYW5kKCkpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JM
ZW5ndGhIaW50KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQg
PSAiLCBub2RlLT52ZWN0b3JMZW5ndGhIaW50KCkpOwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNW
YWx1ZSgpKQpAQCAtNTE1LDkgKzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAg
ICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIEFTU0VSVChwaGlOb2Rl
LT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRl
KCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgo
KSwgIjwiLCBwaGlOb2RlLT5sb2NhbCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4o
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBw
aGlOb2RlLT5vcGVyYW5kKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAg
ICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5w
cmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKQEAgLTg4NCw3ICs4ODUsNyBAQCB2b2lkIEdyYXBoOjpz
dWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJ
bkJsb2NrLCBWYQogICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAg
ICAgIGlmIChub2RlLT5sb2NhbCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAg
ICAgICAgICAgIGlmIChub2RlLT5vcGVyYW5kKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVy
YW5kKCkpCiAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04OTMsOSArODk0LDkgQEAgdm9pZCBHcmFwaDo6c3Vi
c3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5C
bG9jaywgVmEKICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2
YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAg
ICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRh
aWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRh
LT5vcGVyYW5kKCkpOwogICAgICAgICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAg
ICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpKSA9IG5ld0dldExvY2FsOworICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dl
dExvY2FsOwogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0xMTMzLDIzICsxMTM0LDQzIEBAIEJ5dGVjb2RlS2lsbHMm
IEdyYXBoOjpraWxsc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICBy
ZXR1cm4ga2lsbHNGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9
CiAKLWJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3Bl
cmFuZCBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgZGF0YUxvZygiQ2hlY2tpbmcgb2Ygb3BlcmFuZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4i
KTsKICAgICBib29sIGlzQ2FsbGVyT3JpZ2luID0gZmFsc2U7CisKICAgICBDb2RlT3JpZ2luKiBj
b2RlT3JpZ2luUHRyID0gJmNvZGVPcmlnaW47Ci0gICAgZm9yICg7OykgewotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgb3BlcmFuZC5v
ZmZzZXQoKSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkpOworICAgIGF1dG8qIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgIC8vIFdl
IG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhp
dCB0byB0aGUKKyAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBj
YWxsLgorICAgIGZvciAoOyBjb2RlT3JpZ2luUHRyOyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2Fs
bEZyYW1lID8gJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyIDogbnVsbHB0cikgeworICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgdG1w
T2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAw
OworICAgICAgICAgICAgdW5zaWduZWQgb3BlcmFuZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG9wZXJhbmQudmFsdWUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVl
KCkgPj0gMCk7CisgICAgICAgICAgICAvLyBUaGlzIHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0
byBzb21lb25lIHdlIGlubGluZWQuCisgICAgICAgICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1w
T2Zmc2V0ICsgbWF4TnVtQ2hlY2twb2ludFRtcHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVt
VG1wcygpIHx8IG9wZXJhbmRJbmRleCA8IHRtcE9mZnNldCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgYXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBiaXRNYXAuZ2V0KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CisgICAgICAg
IH0KKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAK
LSAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2Fs
bEZyYW1lKCk7Ci0gICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+
c3RhY2tPZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CisgICAg
ICAgIGlmIChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpIDwgY29kZU9yaWdpblB0
ci0+c3RhY2tPZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAg
ICAgICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlZy5vZmZzZXQoKSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
KTsKIApAQCAtMTE3Niw0MiArMTE5Nyw0MSBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2Rl
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNh
bGxGcmFtZSk7CiAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNz
ID0gbGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAg
IHJldHVybiBmdWxsTGl2ZW5lc3Mub3BlcmFuZElzTGl2ZShyZWcub2Zmc2V0KCksIGJ5dGVjb2Rl
SW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3JpZ2luUHRy
LCBpc0NhbGxlck9yaWdpbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFM
b2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5lc3MudmlydHVhbFJlZ2lz
dGVySXNMaXZlKHJlZywgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0
aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVu
ZGFudCBpZiBpdCB3YXNuJ3QgZm9yIG91cgogICAgICAgICAvLyBvcF9jYWxsX3ZhcmFyZ3MgaW5s
aW5pbmcuCi0gICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpCisgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUgJiYgcmVnLmlzQXJndW1lbnQoKQogICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
c2l6ZV90PihyZWcudG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0
aEZpeHVwLnNpemUoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQXJndW1lbnQgaXMgbGl2ZS5cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNhbGxl
cnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCi0gICAgICAgIC8vIHRoZSBy
ZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCi0gICAgICAgIGNvZGVPcmln
aW5QdHIgPSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgIGlzQ2FsbGVy
T3JpZ2luID0gdHJ1ZTsKICAgICB9CisKKyAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmFu
IG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKKyAgICByZXR1cm4gdHJ1ZTsgICAg
CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotQml0VmVjdG9y
IEdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCitCaXRW
ZWN0b3IgR3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiB7CiAgICAgQml0VmVjdG9yIHJlc3VsdDsKLSAgICByZXN1bHQuZW5zdXJlU2l6ZShi
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgIGZvckFsbExv
Y2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIHVuc2lnbmVkIG51bUxvY2FscyA9IGJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShu
dW1Mb2NhbHMgKyBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpKTsKKyAg
ICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGNvZGVPcmlnaW4s
Ci0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgQVNTRVJU
KHJlZy5pc0xvY2FsKCkpOwotICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KHJlZy50b0xvY2Fs
KCkpOworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1ZSgp
IDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAgICByZXN1bHQucXVpY2tTZXQob2Zmc2V0
KTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MzQsOCArMTY1NCw4
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBvcGVy
YW5kTm9kZTsgbm9kZTspIHsKICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMp
KSB7Ci0gICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5sb2NhbCgpLmlzQXJn
dW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCku
dG9Bcmd1bWVudCgpOworICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+b3Bl
cmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5v
ZGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1l
bnROb2RlID0gbV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50
XTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50
RGVmaW5pdGVseSBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEK
QEAgLTE2NTUsNyArMTY3NSw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6
Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9w
ZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9k
ZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmlu
ZGV4IGZhYjljZjAyYTI1OTc2ZWY0N2QxNzkwNWJhZDljZTAzZTM4MmJjZTUuLmY3YTFkODIxNGMz
MDJkN2Q5NmFjMmE3N2EwMTg2NmE5ZDExOWY1MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKQEAgLTg0MCwxMyArODQwLDEzIEBAIHB1YmxpYzoKICAgICAvLyBRdWlja2x5IHF1
ZXJ5IGlmIGEgc2luZ2xlIGxvY2FsIGlzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGlz
IGZhc3RlciB0aGFuIGNhbGxpbmcKICAgICAvLyBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIGlmIHlv
dSB3aWxsIG9ubHkgcXVlcnkgb25lIGxvY2FsLiBCdXQsIGlmIHlvdSB3YW50IHRvIGtub3cgYWxs
IG9mIHRoZQogICAgIC8vIGxvY2FscyBsaXZlLCB0aGVuIGNhbGxpbmcgdGhpcyBmb3IgZWFjaCBs
b2NhbCBpcyBtdWNoIHNsb3dlciB0aGFuIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkuCi0gICAgYm9v
bCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciwgQ29kZU9yaWdpbik7CisgICAgYm9v
bCBpc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQsIENvZGVPcmlnaW4pOwogICAgIAotICAgIC8vIFF1
aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIGF0IHRoZSBnaXZl
biBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CisgICAgLy8gUXVpY2tseSBnZXQgYWxsIG9m
IHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGFuZCB0bXBzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50
LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKICAgICAvLyBhbnkgYXJndW1lbnRzIGJlY2F1c2UgdGhv
c2UgYXJlIGFsbCBwcmVzdW1lZCBsaXZlLiBZb3UgY2FuIGNhbGwgZm9yQWxsTGl2ZUluQnl0ZWNv
ZGUoKSB0bwogICAgIC8vIGFsc28gZ2V0IHRoZSBhcmd1bWVudHMuIFRoaXMgaXMgbXVjaCBmYXN0
ZXIgdGhhbiBjYWxsaW5nIGlzTGl2ZUluQnl0ZWNvZGUoKSBmb3IgZWFjaCBsb2NhbC4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUluQnl0
ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHZvaWQgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIC8vIFN1cHBvcnQg
Zm9yIG5vdCByZWR1bmRhbnRseSByZXBvcnRpbmcgYXJndW1lbnRzLiBOZWNlc3NhcnkgYmVjYXVz
ZSBpbiBjYXNlIG9mIGEgdmFyYXJncwogICAgICAgICAvLyBjYWxsLCBvbmx5IHRoZSBjYWxsZWUg
a25vd3MgdGhhdCBhcmd1bWVudHMgYXJlIGxpdmUgd2hpbGUgaW4gdGhlIGNhc2Ugb2YgYSBub24t
dmFyYXJncwpAQCAtODgxLDYgKzg4MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYg
KGxpdmVuZXNzQXRCeXRlY29kZVtyZWxhdGl2ZUxvY2FsXSkKICAgICAgICAgICAgICAgICAgICAg
ZnVuY3RvcihyZWcpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29kZU9yaWdp
blB0ci0+Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgICAgICAgICAgICAgYXV0byBsaXZlVG1w
cyA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5i
eXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRCaXQo
WyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVy
YW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChUbXBPcGVyYW5kLCB0bXApKSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA0LDkgKzkx
Miw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBCaXRW
ZWN0b3Igb2YgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgcmlnaHQgbm93LiBU
aGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKKyAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9m
IHRoZSBsb2NhbHMgYW5kIHRtcHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1
bCBpZgogICAgIC8vIHlvdSB3YW50IHRvIGNvbXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2NhbHMg
ZnJvbSB0d28gZGlmZmVyZW50IENvZGVPcmlnaW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNMaXZl
SW5CeXRlY29kZShDb2RlT3JpZ2luKTsKKyAgICBCaXRWZWN0b3IgbG9jYWxzQW5kVG1wc0xpdmVJ
bkJ5dGVjb2RlKENvZGVPcmlnaW4pOwogCiAgICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IGFw
cHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBib29s
IGlzQ2FsbGVyT3JpZ2luKQogICAgIHsKQEAgLTkzOCwxMiArOTQ2LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAgIH0K
ICAgICAKLSAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBhcmd1bWVudHMgYW5kIGxvY2FscyBs
aXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRl
bnNpb24gdG8gZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50
cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUg
b3BlcmFuZHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCisg
ICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExvY2Fsc09yVG1wc0xpdmVJbkJ5dGVjb2RlKCksIHNp
bmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBm
b3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAg
Zm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOwog
ICAgICAgICAKICAgICAgICAgLy8gUmVwb3J0IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZS4K
ICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspCkBAIC0xMTE0LDYgKzExMjIsNyBA
QCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNrd2FyZHND
Rkc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRvcnM+IG1fYmFja3dhcmRz
RG9taW5hdG9yczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlz
aXM+IG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM7CisgICAgdW5zaWduZWQgbV90bXBzOwog
ICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2Nh
bDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAppbmRleCA5OWFlZmZj
ZGMwNWExMWM0NWIwNTc0MTI1MGY0ZDJhZWI0ZTIyOGNkLi4yMDJkMjI1MDUzZmE5ZGZiZTVjMjNj
NjRiY2Y4YmUzODRlM2U3NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcApAQCAtNDUsOCArNDUsOCBAQCBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogSW5QbGFjZUFic3RyYWN0U3RhdGU6Oklu
UGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiAg
ICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCi0gICAg
LCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBo
Lm1fbG9jYWxWYXJzKQotICAgICwgbV9ibG9jaygwKQorICAgICwgbV92YXJpYWJsZXMoT3BlcmFu
ZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICwgbV9ibG9jayhu
dWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmgKaW5kZXggYmY1ZWFkMThlYzE2NDdlZTE2NzY2ODgzNTc0MDFm
YTdmZWM3MTI5OS4uMTg2NWU2YTFlZmZjM2RhYWVmZTU4NGNhODYyYzQ5YmMzNjg1ODUwMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaApAQCAtMTY3LDEzICsxNjcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFzdEZv
cndhcmQobV92YXJpYWJsZXNbaW5kZXhdKTsKICAgICB9CiAKLSAgICBBYnN0cmFjdFZhbHVlJiBv
cGVyYW5kKGludCBvcGVyYW5kKQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMub3Bl
cmFuZEluZGV4KG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gdGhpcy0+b3BlcmFuZChvcGVy
YW5kLm9mZnNldCgpKTsgfQotICAgIAogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBp
bmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLmxvY2Fs
SW5kZXgoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKaW5kZXggM2Q4NDNjZTU4ZjIwYjQxMTYzMzlmY2RhOTU4OGFlYmE2YjdhOGMyZS4uNmY1
MTE5OTg0M2Q3ZWY1N2IzMDU1NjlkZjM4MzA2NjZjN2Y2YzE4MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTg1LDggKzg1LDYgQEAgdm9pZCBK
SVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCku
Z2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwotICAgIGF1dG8gb3NyRXhpdFRodW5r
TGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNv
ZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5z
aXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9l
eGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0g
aW5mby5tX2ZhaWx1cmVKdW1wczsKQEAgLTk3LDEzICs5NSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cygpCiAKICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsK
ICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7Ci0g
ICAgICAgIGlmIChPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewotICAgICAgICAgICAgSnVt
cCB0YXJnZXQgPSBqdW1wKCk7Ci0gICAgICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JF
eGl0VGh1bmtMYWJlbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsodGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbCk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9
IHBhdGNoYWJsZUp1bXAoKTsKKyAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFi
bGVKdW1wKCk7CiAgICAgfQogfQogCkBAIC0yODgsMTEgKzI4MCw5IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICBhdXRvIHRhcmdldCA9IENvZGVM
b2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7
CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlv
bkluZm9baV07Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRh
cmdldCk7Ci0gICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXRDb2RlLT5vc3JFeGl0W2ld
OwotICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihpbmZvLm1fcGF0Y2hhYmxlSnVtcCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGluZm8ubV9wYXRjaGFibGVKdW1wLm1fanVt
cCwgdGFyZ2V0KTsKKyAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtp
XTsKKyAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihpbmZvLm1fcGF0Y2hhYmxlSnVtcCk7CiAgICAgICAg
IGlmIChpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UuaXNTZXQoKSkgewogICAgICAgICAgICAgbV9q
aXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVtcFJlcGxhY2VtZW50KAog
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihp
bmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UpLApAQCAtNTk1LDExICs1ODUsMTIgQEAgdm9pZCBKSVRD
b21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGls
ZXI6OkxhYmVsIGJsb2MKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKworICAgICAgICAgICAg
QVNTRVJUKCF2YXJpYWJsZS0+b3BlcmFuZCgpLmlzVG1wKCkpOworICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgK
ICAgICAgICAgICAgICAgICAgICAgT1NSRW50cnlSZXNodWZmbGluZygKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5vcGVy
YW5kKCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFy
aWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBm
OTNlMDhhYzI1Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1Zh
bGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRl
eCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlv
bihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0
LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25n
LAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVz
aCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRv
IGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2ln
bmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlm
IChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5s
b2NhbCgpID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5h
Y2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJh
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJ
bnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBj
dXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3Ig
bGl2ZUF0Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3Bl
cmFuZHM8Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVy
UmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEg
KzEzMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
Y29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykp
IHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAg
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxM
b2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hI
ZWFkLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAog
ICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1
NiwxMiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVy
UmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0
YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51
bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50Qmxv
Y2tBY2Nlc3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0
cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3Jp
Z2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVu
dEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2Nh
bCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNB
cmd1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0
Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3
OCw2ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwg
PSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9j
YWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2Nh
bCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVz
aChPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1c2goVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAgICAgICAgfTsKIApA
QCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09IFNldExvY2FsIHx8
IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwo
KSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJn
dW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3Bl
cmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZl
QXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3BlcmFuZCkpOwogCiAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIw
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFj
Y2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNz
RGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3Bl
cmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7
CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChv
cGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxh
c3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJl
bW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVk
ODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApA
QCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7
CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICBibG9j
ay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAg
IH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewotICAgICAgICAgICAgICAgIEVwb2NoIGxv
Y2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQg
Iiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2Nh
bEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxF
cG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOworICAg
ICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBF
cG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWF5
RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSArMTE2LDE1IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2Nr
LT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0
IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJv
dGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRl
Lm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3Bl
cmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdNb3ZI
aW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywg
IlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1
cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2ls
bGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50RXBvY2g7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5
NmY0MDRlMzNiNDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1
Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0YWNrQWNjZXNz
RGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKLSAgICAgICAg
OiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVz
aEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAsIGZv
cm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9j
YWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAg
ICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05
MjMsOSArOTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBy
ZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBA
IC05NzMsOSArOTc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8VmFy
aWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZE9wZXJhbmQo
KQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgRXh0cmFjdE9T
UkVudHJ5TG9jYWw6CkBAIC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJh
bmQgdW5saW5rZWRPcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExv
Y2FsKCkpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMy
X3Q+KCkpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICBy
ZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0K
ICAgICAKICAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJn
czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJk
VmFyYXJncyB8fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRW
YXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAppbmRleCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0
Li5lM2U5YzMyZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAg
IC8qIFRoZXNlIGFyZSB1c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wK
ICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxT
dGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0
SlMpIFwKQEAgLTIwMiw2ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oR2V0QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRz
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xl
bmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExv
YWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3Ms
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRl
eCAzMjgwZjg3YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi5kMTBhMjA3MDRiMDE5
ZDdlODc3YWNiMjk2MzI2YmE4OTcwMGMxM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
QEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci19CiAKIGNsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAg
ICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDgg
QEAgcHVibGljOgogICAgICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBt
X2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgw
KS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAg
ICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2cob3BlcmFuZCwgIiAiKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFM
b2dMbigiIik7CiAgICAgICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sg
IyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHko
YmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAg
ICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAg
ICAgICAgICB9CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4
KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNj
ZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiQWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpA
QCAtMjA4LDI4ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6
OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
Y2FzZSBQdXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChkYXRhLT5sb2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEt
PmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEtpbGxTdGFjazogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gp
KTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9k
ZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRB
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21i
aWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVu
YXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQyLDE1ICsyNDAsMTgg
QEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUq
IG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKworICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsK
KyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPSBB
dmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7Ci0gICAgICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRh
LT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZs
dXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFy
dC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShG
bHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCArIGkpKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3MywyMCBAQCB2b2lkIExv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8v
IFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQu
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0gICAgICAgICAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBM
b2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRi
ODQzZTg5MGRjNy4uMGQ4MjkzNTBkNGM2ZTBhMTIwODY4MzZjMGIwYjE3ODBmMmJiZTJkOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTM4MiwxMCArMzgy
LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVw
YXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGCiAKICAgICBhdXRvIGluc3RydWN0aW9uID0g
YmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJ
bmRleCgpKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwotICAgIFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENh
dGNoPigpLm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxP
cENhdGNoPigpLm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKICAgICBKU1Zh
bHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5j
YXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKLSAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CisgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUu
bV9vcGVyYW5kKS5pc0xvY2FsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRhdGFC
dWZmZXJbaW5kZXhdID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5q
c1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCmluZGV4IGRjNzZiY2JhZWQ0MWVlZTA2M2Rm
ZGJlYTg0NTA2NjU1M2QwY2I0ZDYuLjYwOTY4NjYzYjY0YzJiNjg1NGU0NjE2MWY5NDk5NDY1N2Ux
YWVmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNI
ZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGxvY2Fsc1tsb2NhbF0gPSBu
ZXdSb290LT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5w
cmVkaWN0aW9uKCksIEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBvcmlnaW4sCi0gICAgICAgICAgICAg
ICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAg
T3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPmxvY2Fs
KCkub2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50
LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSwK
ICAgICAgICAgICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAxOGM2NDE0NzkzNDI0Njli
NDFjYThmOThmMzA4YjNhNGM5MzNiYTk4Li4wNWRlOTU4Y2FlZWYxYjhmMDllMzJkMDk3YThmZTMy
ZDY3NzQyMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUu
aCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgog
I2luY2x1ZGUgIkRGR01heUV4aXQuaCIKQEAgLTQ3LDg5NSArNDgsNiBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFByb2JlIGJhc2VkIE9TUiBFeGl0LgotCi11c2lu
ZyBDUFVTdGF0ZSA9IFByb2JlOjpDUFVTdGF0ZTsKLXVzaW5nIENvbnRleHQgPSBQcm9iZTo6Q29u
dGV4dDsKLXVzaW5nIEZyYW1lID0gUHJvYmU6OkZyYW1lOwotCi1zdGF0aWMgdm9pZCByZWlmeUlu
bGluZWRDYWxsRnJhbWVzKFByb2JlOjpDb250ZXh0JiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jaywgY29uc3QgT1NSRXhpdEJhc2UmKTsKLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1Rh
cmdldChQcm9iZTo6Q29udGV4dCYsIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jaywgT1NSRXhpdCYpOwotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQm
LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmKTsKLQotc3RhdGljIEpTVmFs
dWUganNWYWx1ZUZvcihDUFVTdGF0ZSYgY3B1LCBKU1ZhbHVlU291cmNlIHNvdXJjZSkKLXsKLSAg
ICBpZiAoc291cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAg
ICAgICBzdGQ6Om1lbWNweSgmcmVzdWx0LCBjcHUuZ3ByPHVpbnQ4X3QqPihzb3VyY2UuYmFzZSgp
KSArIHNvdXJjZS5vZmZzZXQoKSwgc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVj
b2RlKGNwdS5ncHI8RW5jb2RlZEpTVmFsdWU+KHNvdXJjZS5ncHIoKSkpOwotI2Vsc2UKLSAgICBp
ZiAoc291cmNlLmhhc0tub3duVGFnKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKHNvdXJjZS50
YWcoKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UudGFnR1BSKCkpLCBjcHUuZ3ByPGludDMy
X3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSNlbmRpZgotfQotCi0jaWYgTlVNQkVSX09GX0NB
TExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNh
dmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEFT
U0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxl
ZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0
ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBVQ1BVUmVnaXN0ZXIqIHBoeXNp
Y2FsU3RhY2tGcmFtZSA9IGNvbnRleHQuZnA8VUNQVVJlZ2lzdGVyKj4oKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVy
QXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVz
dG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIC8vIFRoZSBjYWxsZWUgc2F2ZWQgdmFsdWVzIGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwg
c3RhY2ssIG5vdCB0aGUgcmVjb3ZlcmVkIHN0YWNrLgotICAgICAgICAvLyBIZW5jZSwgd2UgcmVh
ZCB0aGUgdmFsdWVzIGRpcmVjdGx5IGZyb20gdGhlIHBoeXNpY2FsIHN0YWNrIG1lbW9yeSBpbnN0
ZWFkIG9mCi0gICAgICAgIC8vIGdvaW5nIHRocm91Z2ggY29udGV4dC5zdGFjaygpLgotICAgICAg
ICBBU1NFUlQoIShlbnRyeS5vZmZzZXQoKSAlIHNpemVvZihVQ1BVUmVnaXN0ZXIpKSk7Ci0gICAg
ICAgIGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IHBoeXNpY2FsU3RhY2tGcmFtZVtl
bnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpXTsKLSAgICB9Ci19Ci0KLS8vIEJh
c2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGlj
IHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29k
ZUJsb2NrKQotewotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwotICAgIEFTU0VS
VChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQg
ZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3Vu
dCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBj
YWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50
cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YWNrLnNldChjb250
ZXh0LmZwKCksIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5
LnJlZygpLmdwcigpKSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6
OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgot
c3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZN
Kj4oKTsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCBk
b250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAg
IHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAg
Vk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5RnJh
bWUpOwotICAgIFVDUFVSZWdpc3RlciogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VUNQVVJlZ2lzdGVyKj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXIp
OwotCi0gICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgc2l6ZV90IHVpbnRwdHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVn
aXN0ZXIpOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIGNv
bnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9m
ZnNldF07Ci0gICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBj
b250ZXh0LmZwcihlbnRyeS5yZWcoKS5mcHIoKSkgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihjYWxs
ZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhN
RTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxv
YXRpbmcgcG9pbnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0KQotewotICAg
IFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0
LnN0YWNrKCk7Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNv
cmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAgdm9pZCogY2FsbGVlU2F2ZUJ1ZmZlciA9IGVudHJ5
UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVy
T2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENh
bGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0
ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxs
ZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnku
cmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5p
c0dQUigpKQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIsIGVudHJ5Lm9m
ZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0g
ICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdGFjay5zZXQo
Y2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZnByPFVDUFVSZWdpc3Rl
cj4oZW50cnkucmVnKCkuZnByKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcg
cG9pbnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVPckNvcHlDYWxsZWVTYXZlc0Zv
cigpLgotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIgb2Zmc2V0VmlydHVhbFJl
Z2lzdGVyLCBib29sIHdhc0NhbGxlZFZpYVRhaWxDYWxsKQotewotICAgIEZyYW1lIGZyYW1lKGNv
bnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQot
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJz
ID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0
OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+
c2l6ZSgpOwotCi0gICAgUmVnaXN0ZXJTZXQgYmFzZWxpbmVDYWxsZWVTYXZlcyA9IFJlZ2lzdGVy
U2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVS
ZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIHVpbnRwdHJfdCBzYXZlZFJlZ2lzdGVyVmFsdWU7Ci0KLSAgICAgICAgaWYgKHdhc0NhbGxl
ZFZpYVRhaWxDYWxsICYmIGJhc2VsaW5lQ2FsbGVlU2F2ZXMuZ2V0KGVudHJ5LnJlZygpKSkKLSAg
ICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGZyYW1lLmdldDx1aW50cHRyX3Q+KGVudHJ5
Lm9mZnNldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVl
ID0gY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpOwotCi0gICAgICAgIGZyYW1lLnNldChv
ZmZzZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zmc2V0KCksIHNh
dmVkUmVnaXN0ZXJWYWx1ZSk7Ci0gICAgfQotfQotI2Vsc2UgLy8gbm90IE5VTUJFUl9PRl9DQUxM
RUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVz
Rm9yKENvbnRleHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0
aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENv
bnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiwgQ29kZUJsb2NrKiwgVmlydHVhbFJlZ2lzdGVyLCBib29sKSB7IH0KLQotI2VuZGlmIC8vIE5V
TUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgSlNDZWxsKiBjcmVh
dGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiog
Y2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQu
YXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1h
eChsZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSAtIDEpKTsKLSAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERpcmVjdEFyZ3VtZW50czo6
Y3JlYXRlKAotICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGlyZWN0QXJn
dW1lbnRzU3RydWN0dXJlKCksIGxlbmd0aCwgY2FwYWNpdHkpOwotCi0gICAgcmVzdWx0LT5zZXRD
YWxsZWUodm0sIGNhbGxlZSk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJl
Z2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5zZXRJ
bmRleFF1aWNrbHkodm0sIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQo
Q29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3Vu
dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZt
LmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAg
IGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0g
MTsKLSAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50czo6Y3JlYXRl
RW1wdHkoCi0gICAgICAgIHZtLCBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVy
ZSgpLCBjYWxsZWUsIGxlbmd0aCk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZw
PFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2RlKiBkZmdKSVRD
b2RlLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCi17Ci0gICAgRnJh
bWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgSGFzaE1hcDxN
aW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRv
bSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgotICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVy
YW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVj
b3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCi0g
ICAgICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0
V2VyZU5vdENyZWF0ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNaW5pZmll
ZElEIGlkID0gcmVjb3Zlcnkubm9kZUlEKCk7Ci0gICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlB
bGxvY2F0ZWRBcmd1bWVudHMuZmluZChpZCk7Ci0gICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlB
bGxvY2F0ZWRBcmd1bWVudHMuZW5kKCkpIHsKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgZnJhbWUub3BlcmFuZChpdGVyLT52YWx1ZSkpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9Ci0gICAgICAgICAgICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNh
bGxGcmFtZSgpOwotCi0gICAgICAgIGludCBzdGFja09mZnNldDsKLSAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwot
Ci0gICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgY2FsbGVl
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihmcmFtZS5vcGVyYW5kKHN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKS5hc0NlbGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNh
bGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVy
eS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKLQotICAgICAgICBpbnQzMl90IGFyZ3VtZW50Q291bnQ7
Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZnJhbWUub3BlcmFuZDxpbnQzMl90
PihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZz
ZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLQotICAgICAgICBKU0NlbGwqIGFy
Z3VtZW50c09iamVjdDsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewot
ICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAg
ICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoY29u
dGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2Vy
ZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVDbG9uZWRB
cmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBj
YWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBK
U1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOwotCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1
bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKLSAgICB9Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgaXMg
YSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBv
cmRlcgotLy8gb2YgbW9zdCBsaWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVlKSB0byBsZWFz
dCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51bSB2YWx1ZSkuCi0vLyBFYWNoIGxldmVsIGluaXRp
YWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVlIChzZWUgdXNl
IG9mIHRoZQotLy8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93KS4KLWVudW0g
Y2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHsKLSAgICBOb25lLAotICAgIFNwZWN1bGF0
aW9uUmVjb3ZlcnksCi0gICAgVmFsdWVQcm9maWxlVXBkYXRlLAotICAgIEFycmF5UHJvZmlsZVVw
ZGF0ZSwKLSAgICBPdGhlcgotfTsKLQotdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250
ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQVNTRVJUKCZjYWxsRnJh
bWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7
Ci0KLSAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpIHsKLSAgICAgICAgLy8gV2UncmUgYWJvdXQg
dG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6
ZWQKLSAgICAgICAgLy8gY29kZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4KLSAgICAgICAg
dm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKHZtLmNhbGxG
cmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNo
OwotICAgICAgICBjb250ZXh0LmZwKCkgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb2Rl
QmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdK
SVQpOwotCi0gICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3
aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAotICAgIC8vIHJlYWxseSBi
ZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKLQot
ICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBERkc6OkpJVENv
ZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0gICAgT1NSRXhp
dCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLQotICAgIEFTU0VSVCgh
dm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7Ci0g
ICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwotCi0gICAgaWYgKFVOTElLRUxZKCFleGl0LmV4
aXRTdGF0ZSkpIHsKLSAgICAgICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsKLQotICAgICAg
ICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NS
RXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2Fj
aGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhl
Ci0gICAgICAgIC8vIGV4aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKLQotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7
Ci0gICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1f
cmVjb3ZlcnlJbmRleF07Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBz
dGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtF
TFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpCi0gICAgICAgICAgICBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2Up
IHsKLSAgICAgICAgICAgIGlmIChleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAgICAgICAgICAg
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpOwotICAg
ICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJh
ZEluZGV4aW5nVHlwZSkgewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7Ci0gICAgICAgICAgICAgICAgQ29kZUJs
b2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAg
ICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUo
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChhcnJheVBy
b2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0
ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVs
OjpBcnJheVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+YWRqdXN0ZWRD
b3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAo
KSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VI
ZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxv
Y2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAgICAgICAgYWRq
dXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hv
bGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQpOwotCi0gICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3Jp
Z2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJs
b2NrKTsKLSAgICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRv
TExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJw
cmV0ZXJUaHVuazsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldDsKLSAgICAgICAgaWYgKGV4aXRU
b0xMSW50KSB7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlv
bnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxK
U0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAganVtcFRhcmdl
dCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4
aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpOwotICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7Ci0gICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgotICAgICAg
ICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICAgICAgVmVjdG9yPFVuZGVm
aW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0gICAgICAgIGRmZ0pJVENv
ZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29k
ZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3Bl
cmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3BhbnMpOwotICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQ
b2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAqIHNpemVvZihS
ZWdpc3Rlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihuZXcgT1NSRXhp
dFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZN
b3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQs
IGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQsIGFycmF5UHJv
ZmlsZSwgZXhpdFRvTExJbnQpKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRl
Y29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGls
YXRpb24pKSB7Ci0gICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZt
Lm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlv
biogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBp
bGF0aW9uLmdldCgpOwotCi0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJF
eGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4
LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVP
cmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNv
dW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBleGl0LmV4aXRTdGF0ZS0+cHJvZmls
ZXJFeGl0ID0gcHJvZmlsZXJFeGl0OwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6Ok90aGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxp
emF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwotCi0gICAgICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09T
UkV4aXQoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQgIyV1ICglcywg
JXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlc1xuIiwKLSAgICAgICAgICAgICAgICBleGl0
SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAgICAg
ICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jayku
ZGF0YSgpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENv
bnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE9TUkV4
aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOwotICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKLQotICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0
ZS5vcGVyYW5kczsKLSAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1bmRlZmluZWRP
cGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotCi0gICAgY29u
dGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5zdGFja1BvaW50
ZXJPZmZzZXQ7Ci0KLSAgICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hp
bGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgot
ICAgIGRvIHsKLSAgICAgICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNf
Y2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwpOwotCi0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRpb25SZWNvdmVy
eQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3ZlcnkgZmlyc3Qg
YmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZwotICAgICAgICAvLyBt
YXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24n
dCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5Ci0gICAgICAgIC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2
YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVOTElLRUxZLgotICAgICAgICBTcGVjdWxh
dGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHJlY292ZXJ5KSkgewotICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+
ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0
KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8
PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNlbGY6Ci0gICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihjcHUuZ3ByPGlu
dDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0
KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8
PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAgICAgICAgICAg
ICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5
LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIp
KTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6
Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIocmVjb3Zlcnkt
PmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9u
IGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUKLSAgICAgICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVl
OwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICAgICAgcHJv
ZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAg
ICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlID0gZXhpdC5t
X3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZhbHVlKHByb2Zp
bGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxl
dmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKLSAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQ
cm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgQVNTRVJUKCEh
ZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5kID09
IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBi
YXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICAgICAg
Ym9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVN
ZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGlm
IChkb1Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHBy
b2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAg
YXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0
cnVjdHVyZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2Zp
bGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBFeHRyYSBp
bml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tp
bmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMg
YSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53
aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1l
IGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotICAgICAgICAgICAgQVNTRVJU
KGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkKLSAgICAgICAgICAgIGV4aXRTdGF0ZS5w
cm9maWxlckV4aXQtPmluY0NvdW50KCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBwcmludE9TUkV4aXQoY29udGV4dCwg
dm0ub3NyRXhpdEluZGV4LCBleGl0KTsKLQotICAgIH0gd2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4
dHJhIGluaXRpYWxpemF0aW9uLgotCi0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQu
c3RhY2soKSk7Ci0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkgJiAweDcpKTsK
LQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgQVNTRVJU
KGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1
ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29u
dmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgotICAgIC8vIE5v
dGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2
ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBtYXkgcmVseSBv
biB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0KLSAgICBpbnQgY2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihiYXNlbGlu
ZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwotICAgIHNp
emVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMuc2l6ZSgpOwotICAgIHNpemVfdCBudW1V
bmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6ZSgpOwotCi0g
ICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFuSW5kZXggPSAwOwotICAgIHNpemVfdCBuZXh0VW5k
ZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICBpZiAobnVtVW5kZWZp
bmVkT3BlcmFuZFNwYW5zKQotICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5k
ZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0K
LSAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgZm9yIChzaXplX3Qg
c3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zOyArK3Nw
YW5JbmRleCkgewotICAgICAgICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW3Nw
YW5JbmRleF07Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zmc2V0OwotICAg
ICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVy
czsKLQotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFz
dE9mZnNldDsgKytvZmZzZXQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9mZnNldCwg
dW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
bnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBp
ZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkpIHsKLSAgICAg
ICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3Bhbklu
ZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0gMTsKLSAgICAgICAgICAgIGlmIChuZXh0VW5kZWZp
bmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICAgICAgICAg
IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVu
ZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2Fs
KCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNl
dCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2Fm
ZUpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluRlBSOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpTVmFsdWU+KHJl
Y292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotI2Vsc2UKLSAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIoKSks
IGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxKU0NlbGwqPihy
ZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5V
bnNhZmVVbmJveGVkQ2VsbCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3Zl
cnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2Ug
Qm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkpKTsKLSNlbmRp
ZgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGlu
dDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgotICAgICAg
ICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4o
cmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUyKCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1Lmdwcjxp
bnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6Ci0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAg
ICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29k
ZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBD
bG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBk
byB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZl
cyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KLSAgICByZXN0
b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgY29kZUJsb2NrKTsKLSAgICBzYXZlQ2FsbGVlU2F2
ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpT
Qzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIGNwdS5ncHIoR1BSSW5m
bzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4o
SlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcihjb250ZXh0KTsKLQotICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBvbiB0aGUgc3Rh
Y2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRo
YXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVseSByZWZlciB0
byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkK
LSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBu
ZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUuCi0gICAgLy8g
Tm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0
IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAgIC8vIGlubGluZSBjYWxs
IGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0aGF0LgotCi0g
ICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENv
ZGUsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291
bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gdGhhdCBhbGwg
bmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBl
eGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJm
b3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4
ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwot
ICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMg
dHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBn
ZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNvZGUgZXZlbnR1
YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAv
LyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykg
YmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwg
c3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgSklUJ3MgY29k
ZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAg
ICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4
aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBz
aG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRyeSwgc2luY2Ug
Ym90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAg
IHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJlcXVlbnQgT1NS
IGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAg
IC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdl
dHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtl
IHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAg
ICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0
aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9T
UiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyBmcmVxdWVu
dGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxs
IG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2
ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEg
bG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8v
IGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2Ug
Y2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxk
IHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sgaGVyZSBpZiB0
aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAv
LyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2Vz
cyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51
bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3VudGVyIHRvIDA7
IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0KLSAgICBpZiAoVU5MSUtFTFkoY29kZUJsb2NrLT51cGRh
dGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0g
Q29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCi0gICAgICAgIHRyaWdn
ZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2NrLCAmZXhpdCk7
Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2Nr
LCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0sIGNvZGVCbG9j
aywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotfQotCi1zdGF0aWMgdm9pZCByZWlmeUlubGlu
ZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxp
bmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQotewotICAgIGF1dG8mIGNwdSA9
IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkp
OwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sg
d2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5l
ZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDc1MTEKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0
QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29k
ZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVC
bG9jayk7Ci0KLSAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAgIGZvciAoY29k
ZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0g
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1vc3RCYXNlbGlu
ZUNvZGVCbG9jayk7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2Fs
bEtpbmQ7Ci0gICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUt
PmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQpOwotICAgICAg
ICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgpOwotCi0gICAgICAgIGJvb2wgY2FsbGVySXNM
TEludCA9IGZhbHNlOwotCi0gICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewotICAgICAgICAgICAg
QVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOwotICAgICAgICAgICAgdm9pZCogcmV0
dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7Ci0j
aWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBjcHUuZnA8dWlu
dDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAgICB2b2lkKiBu
ZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5Q
Q09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIHJldHVyblBDID0gcmV0YWdD
b2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQKSwgYml0d2lz
ZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5z
ZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0dXJuUEMpOwot
ICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRy
dWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQg
PSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2Rl
SW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7Ci0KLSAgICAgICAgICAg
IGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAgICAgICBjYWxs
ZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFt
ZSgpLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSNpZiBDUFUoQVJN
NjRFKQotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSAr
IGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAg
ICAgICAgICBqdW1wVGFyZ2V0ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8
UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lk
Kj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2Nr
KTsKLQotICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSdzIGNhbGxlZSBz
YXZlIHJlZ2lzdGVycy4KLSAgICAgICAgLy8gSWYgdGhpcyBpbmxpbmVkIGZyYW1lIGlzIGEgdGFp
bCBjYWxsIHRoYXQgd2lsbCByZXR1cm4gYmFjayB0byB0aGUgb3JpZ2luYWwgY2FsbGVyLCB3ZSBu
ZWVkIHRvCi0gICAgICAgIC8vIGNvcHkgdGhlIHByaW9yIGNvbnRlbnRzIG9mIHRoZSB0YWcgcmVn
aXN0ZXJzIGFscmVhZHkgc2F2ZWQgZm9yIHRoZSBvdXRlciBmcmFtZSB0byB0aGlzIGZyYW1lLgot
ICAgICAgICBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxv
Y2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgIXRydWVD
YWxsZXIpOwotCi0gICAgICAgIGlmIChjYWxsZXJJc0xMSW50KSB7Ci0gICAgICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVD
b2RlQmxvY2spOwotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZl
U2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJz
OjptZXRhZGF0YVRhYmxlR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5t
ZXRhZGF0YVRhYmxlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5z
ZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotI2VuZGlmCi0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCwgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Ci0gICAgICAgIEFTU0VSVChj
YWxsZXJGcmFtZSk7Ci0gICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXJGcmFtZU9mZnNldCgpLCBjYWxsZXJGcmFtZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJf
dD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpTVmFsdWUo
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQo
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVp
bnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1ZhbHVlOjpD
ZWxsVGFnKSk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZUNvbnN0YW50KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0
aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAg
fQotCi0gICAgLy8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlm
IHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNhbGxzCi0gICAgaWYgKGNvZGVPcmlnaW4pIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotI2Vsc2UKLSAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gb3V0ZXJtb3N0QmFzZWxpbmVDb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRy
KCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSNl
bmRpZgotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgfQotfQotCi1zdGF0
aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhp
dCYgZXhpdCkKLXsKLSAgICBPU1JFeGl0U3RhdGUqIGV4aXRTdGF0ZSA9IGV4aXQuZXhpdFN0YXRl
LmdldCgpOwotCi0gICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOyAvLyBUaGUgb3B0aW1pemluZyBj
b21waWxlciBleHBlY3RzIHRoYXQgdGhlIE9TUiBleGl0IG1lY2hhbmlzbSB3aWxsIGV4ZWN1dGUg
dGhpcyBmZW5jZS4KLSAgICB2bS5oZWFwLndyaXRlQmFycmllcihiYXNlbGluZUNvZGVCbG9jayk7
Ci0KLSAgICAvLyBXZSBiYXJyaWVyIGFsbCBpbmxpbmVkIGZyYW1lcyAtLSBhbmQgbm90IGp1c3Qg
dGhlIGN1cnJlbnQgaW5saW5lIHN0YWNrIC0tCi0gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBrbm93
IHdoaWNoIGlubGluZWQgZnVuY3Rpb24gb3ducyB0aGUgdmFsdWUgcHJvZmlsZSB0aGF0Ci0gICAg
Ly8gd2UnbGwgdXBkYXRlIHdoZW4gd2UgZXhpdC4gSW4gdGhlIGNhc2Ugb2YgImYoKSB7IGEoKTsg
YigpOyB9IiwgaWYgYm90aAotICAgIC8vIGEgYW5kIGIgYXJlIGlubGluZWQsIHdlIG1pZ2h0IGV4
aXQgaW5zaWRlIGIgZHVlIHRvIGEgYmFkIHZhbHVlIGxvYWRlZAotICAgIC8vIGZyb20gYS4KLSAg
ICAvLyBGSVhNRTogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBzaG91bGQgcmVtZW1iZXIg
d2hpY2ggQ29kZUJsb2NrIG93bnMKLSAgICAvLyB0aGUgdmFsdWUgcHJvZmlsZS4KLSAgICBJbmxp
bmVDYWxsRnJhbWVTZXQqIGlubGluZUNhbGxGcmFtZXMgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnQ29tbW9uKCktPmlubGluZUNhbGxGcmFtZXMuZ2V0KCk7Ci0gICAgaWYgKGlubGluZUNhbGxG
cmFtZXMpIHsKLSAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6
ICppbmxpbmVDYWxsRnJhbWVzKQotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoaW5s
aW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Ci0gICAgfQotCi0gICAgYXV0
byogZXhpdElubGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSgpOwotICAgIGlmIChleGl0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb250ZXh0LmZwKCkg
PSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGV4
aXRTdGF0ZS0+anVtcFRhcmdldDsKLSAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0KLSAgICBpZiAo
ZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1w
aW5nIHRvIG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAg
ICAgdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAg
fQotCi0gICAgdm0udG9wQ2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotCi0g
ICAgaWYgKGV4aXRTdGF0ZS0+aXNKdW1wVG9MTEludCkgewotICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29k
ZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpj
b2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsK
LQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BS
KSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFi
bGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJl
Z2lzdGVyczo6cGJHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhp
dC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkpOwotI2Vsc2UKLSAgICAgICAgY29udGV4dC5n
cHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1
cnJlbnRJbnN0cnVjdGlvbik7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtLnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb247Ci0gICAgfQotCi0gICAgY29udGV4dC5wYygpID0gdW50YWdD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KGp1bXBUYXJnZXQpOwotfQotCi1zdGF0aWMgdm9pZCBwcmlu
dE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBP
U1JFeGl0JiBleGl0KQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxD
YWxsRnJhbWUqPigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpOwotICAgIEV4aXRLaW5kIGtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwot
Ci0gICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAg
ICBkYXRhTG9nKCIgQCBleGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKCIsIGJ5dGVjb2RlT2Zmc2V0
LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOwotICAgIGlmIChhbHRl
cm5hdGl2ZSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVy
ID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICAgICAiLCBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpLAotICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
ID0gIiwgYWx0ZXJuYXRpdmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZGF0YUxvZygibm8gYWx0ZXJuYXRpdmUgY29kZSBibG9jayAoaS5lLiB3ZSd2
ZSBiZWVuIGpldHRpc29uZWQpIik7Ci0gICAgZGF0YUxvZygiLCBvc3JFeGl0Q291bnRlciA9ICIs
IGNvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSwgIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEdQ
UnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5ncHJOYW1l
KGdwciksICI6IiwgUmF3UG9pbnRlcihjb250ZXh0Lmdwcjx2b2lkKj4oZ3ByKSkpOwotICAgIH0K
LSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRpbWUgb2YgZXhp
dDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkgewotICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9SZWdpc3Rlcihp
KTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZnByTmFtZShmcHIpLCAiOiIpOwotICAg
ICAgICB1aW50NjRfdCBiaXRzID0gY29udGV4dC5mcHI8dWludDY0X3Q+KGZwcik7Ci0gICAgICAg
IGRvdWJsZSB2YWx1ZSA9IGNvbnRleHQuZnByKGZwcik7Ci0gICAgICAgIGRhdGFMb2dGKCIlbGx4
OiVsZiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYml0cyksIHZhbHVlKTsKLSAgICB9Ci0gICAg
ZGF0YUxvZygiXG4iKTsKLX0KLQotLy8gSklUIGJhc2VkIE9TUiBFeGl0LgotCiBPU1JFeGl0OjpP
U1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQs
IHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogT1NS
RXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFu
dGljLCBqaXQtPm1fb3JpZ2luLndhc0hvaXN0ZWQpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNW
YWx1ZVNvdXJjZSkKQEAgLTk1OCwxNSArNzAsMTggQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVy
bmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCkgY29uc3QKIAogdm9p
ZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZt
LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCiB7Ci0gICAgSGFzaE1h
cDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhh
bnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgorICAgIEhhc2hNYXA8TWluaWZpZWRJ
RCwgVmlydHVhbFJlZ2lzdGVyPiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBo
YW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQg
b3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAKICAgICAgICAgaWYg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRl
ZAogICAgICAgICAgICAgJiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIE1p
bmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKICAgICAgICAgYXV0byBpdGVyID0gYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewpAQCAtOTg3LDcgKzEwMiw3IEBAIHZvaWQg
T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwg
Y29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBqaXQubG9hZFB0cigK
LSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTk5Nyw3ICsxMTIsNyBAQCB2b2lkIE9T
UkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNv
bnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAg
ICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTEwMjMsNyArMTM4LDcg
QEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwg
Vk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsK
IAotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7Cisg
ICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpKTsKICAgICB9CiB9CiAKQEAgLTE0NjYsMTYgKzU4MSw4NCBAQCB2b2lkIE9TUkV4
aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQm
IGV4aXQsIGNvbnN0CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCiAgICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRh
aW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91
bGRuJ3QgdXNlIGEgcHJvYmUgYnV0IGZpbGxpbmcgYWxsIHRoZSBzaWRlIHN0YXRlIG9iamVjdHMg
aXMgdHJpY2t5IG90aGVyd2lzZS4uLgorICAgICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gdmFs
dWVzKG9wZXJhbmRzLm51bWJlck9mVG1wcygpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvcGVyYW5kcy5udW1iZXJPZlRtcHMoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzW2ld
ID0gb3BlcmFuZHMudG1wKGkpOworCisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAgICAg
YXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKKyAgICAg
ICAgaml0LnByb2JlKFs9LCB2YWx1ZXMgPSBXVEZNb3ZlKHZhbHVlcyldIChQcm9iZTo6Q29udGV4
dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxG
cmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4o
KTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRt
cHM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiByZWNvdmVyeSA9IHZhbHVlc1tp
ICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBk
byB3aGF0IHRoZSBGVEwgZG9lcyBhbmQgbWF0ZXJpYWxpemUgYWxsIHRoZSBKU1ZhbHVlcyBpbnRv
IHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0YW50OgorICAg
ICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2Rl
KHJlY292ZXJ5LmNvbnN0YW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNl
IFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxh
Y2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNb
aV0gPSBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odG1wU2Ny
YXRjaFtpICsgdG1wT2Zmc2V0XSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVk
Q2VsbEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3Rh
Y2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRl
U3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+
YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47
CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFt
ZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9y
aWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxp
bmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgp
LT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAg
ICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJl
dF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNl
dCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxs
RnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29k
ZU9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShj
YWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAv
LyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGlu
dG8gdGhlIHN0YWNrLgogCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJh
bmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9w
ZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVn
LmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxp
bmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
TG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2Vs
aW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IGE3ZTU4NzhjMDcxNzA4YTFkYTc2YzBiMGViNTRkNTRm
MWEwNGViOGUuLjllOWJjZWE0ODFjMWQ2ODc3OTcyZjI1OWQ2MmMxYTIzMDBiMmIxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCkBAIC0xNTAsOCArMTUwLDYgQEAgc3Ry
dWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogCiAgICAgZnJpZW5kIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21waWxlT1NSRXhpdChDYWxsRnJhbWUqKTsKIAotICAgIHN0
YXRpYyB2b2lkIGV4ZWN1dGVPU1JFeGl0KFByb2JlOjpDb250ZXh0Jik7Ci0KICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXBMb2NhdGlvbjsKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8T1NSRXhpdFB0clRhZz4gbV9jb2RlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKaW5kZXggMzEwOTYzZDg0NDM2YzUz
MzI3ODRmMGEyOTJhNDljYmUxYjgyYTU5Yi4uMDAzYjYxOGNkNDQwZTQwMGFiYWFjZWMwYWZiYzNj
MTI0MzVkYjk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2Uu
aApAQCAtNzAsNiArNzAsMTEgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgcmV0dXJu
IG1fa2luZCA9PSBHZW5lcmljVW53aW5kOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0V4aXRpbmdUb0NoZWNrcG9pbnRIYW5kbGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKTsKKyAgICB9CisK
IHByb3RlY3RlZDoKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENv
ZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpCiAgICAg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCmluZGV4IDJmZjNlYThiNWZiYjZmM2YyNzIxZDUwMjQ0NTYyOThiMDg0ZDUx
MTUuLjBmYjQ4MjAzYmZkYjVkNTRjOTYzZDI0ZjlkYmY3NjlkZTVhMjVmYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtz
LmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1Yklu
Zm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTQzLDYgKzE0Niw5
IEBAIHZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5CiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlv
bnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKKyAgICBpZiAoY2FsbEJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZv
aWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50KTsK
KwogICAgIHZvaWQqIGp1bXBUYXJnZXQ7CiAKICAgICBpZiAoY2FsbGVySXNMTEludCkgewpAQCAt
MzgyLDExICszODgsMTIgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgQVNTRVJUKEpJVENv
ZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwogCiAgICAg
dm9pZCoganVtcFRhcmdldDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBj
aGVja3BvaW50UmV0dXJuVGFyZ2V0OwogICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpm
b3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bms7CiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAgICAgICAg
IGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxv
Y2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJ
bnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgPyBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFn
PihiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQpKSA6
IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAK
ICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwg
R1BSSW5mbzo6cmVnVDIpOwpAQCAtNDAyLDcgKzQwOSwxNCBAQCB2b2lkIGFkanVzdEFuZEp1bXBU
b1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhp
dCkKICNlbmRpZgogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9j
a0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGluZGV4Rm9yQ2hlY2tw
b2ludFJldHVybiA9IGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJ
bmRleCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2Nh
dGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGluZGV4Rm9yQ2hlY2tw
b2ludFJldHVybik7CisgICAgICAgIGlmIChleGl0SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAg
ICAgICAgICBjaGVja3BvaW50UmV0dXJuVGFyZ2V0ID0gY29kZUxvY2F0aW9uOworICAgICAgICAg
ICAgY29kZUxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lz
ZV9jYXN0PHZvaWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSk7CisgICAgICAg
IH0KKwogICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgICAgICBqdW1wVGFyZ2V0
ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCmluZGV4IDIxNmM1YmFhMTRkOTZiMjliNWRk
MzY5YTczYmZlY2I0YjAzZGMxOTkuLjdkYTZhZmQ1YzIyMWM5N2ZmOTNmNDAwY2IzNDk0NDU0ZDRk
NDkyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcApAQCAtMjEwNyw3ICsyMTA3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2hlYXAuZm9sbG93KGF2YWlsYWJpbGl0eS5tX2xv
Y2Fsc1tpXS5ub2RlKCkpICE9IGVzY2FwZWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRG
b3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQs
IG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ob3BlcmFuZCksCiAgICAgICAg
ICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5kZWZhdWx0RWRnZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wSW5mby5oCmluZGV4IGYzOWMxNGI5ZjBhNDQ4Nzg5ZDc3MmRjMjdkZjE1ODgx
ZTUwODY4OTUuLjc3ZWZjZmIyNDgwMDJhNGJmNWVhNjBhNmU2NjUyMGZlMDUxNDRiY2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaApAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3Qg
T3BJbmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oSW50ZWdyYWxUeXBlIHZhbHVlKQogICAgICAg
ICA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSkgeyB9CiAgICAgZXhwbGlj
aXQgT3BJbmZvKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSA6IG1fdmFsdWUoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZSkpKSB7IH0K
LQorICAgIGV4cGxpY2l0IE9wSW5mbyhPcGVyYW5kIG9wKSA6IG1fdmFsdWUob3AuYXNCaXRzKCkp
IHsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgZXhwbGljaXQgT3BJbmZvKFQq
IHB0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4
IDUwY2EwMGIwMGI5NDg4YTEwMzI4NzI2MjhhOWUyZWU4NzNmMmMzNzkuLmNmMDlkODczOTc0YTg1
NjMzYTJlZGI2ODc3NjkyZGIxMDc2ODQwN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMjk0NiwxNSArMjk0NiwxNiBAQCBpbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVEb3VibGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iagogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCwgdWludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50IHsgZmlyc3RFbGVtZW50RGVzdCB9OwogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRBcmd1bWVudHMpOwogICAgIAotICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zm
c2V0LCBsZW5ndGgpOworICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCkpLCBhcmd1bWVudHMsIG9mZnNl
dCwgbGVuZ3RoIC0gMSk7CiAgICAgCi0gICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwg
bWFuZGF0b3J5TWluaW11bTsgKytpKQotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGgg
LSAxOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnIoZmly
c3RFbGVtZW50ICsgaSkgPSBqc1VuZGVmaW5lZCgpOwogfQogCiBkb3VibGUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCmlu
ZGV4IGNiYzJjOGJmYWU0ZTk0ZDA5NWRkYzkxNTdkYjM2YWI1YTBjNmFkYzIuLmJiNDIwNjFkNTE2
NmZlMjEwZDljZWRjNmM3ZWM3MThmNDRiYmJiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKQEAgLTEwOCwxNyAr
MTA4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIG1f
dmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM5LDIx
ICsxMzksMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+c2V0
RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFscmVh
ZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAgICAg
ICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcp
IHsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQg
b3BlcmFuZCkgewogICAgICAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxl
ZCBvcGVyYW5kOiAiLCByZWcsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgS2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAg
Ly8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKHJl
ZyA9PSBhbHJlYWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVh
ZHlLaWxsZWQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChyZWcp
OworICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChyZWcpID0g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpID0gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dG8gaW5zZXJ0IGEgUGhhbnRvbSBpZiB0aGUgbm9kZSBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIHRo
ZSBsYXN0CiAgICAgICAgICAgICAgICAgLy8gZXhpdCwgYW5kIHdhcyBib3JuIGJlZm9yZSB0aGUg
bGFzdCBleGl0LgpAQCAtMTc5LDE0ICsxNzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07
CiAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAg
aWYgKG5vZGVNYXlFeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2Nh
bCBkb2VzIGV4aXQsIHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAg
ICAgICAgICAgIC8vIHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAg
ICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzS2lsbGVkT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtp
bGxlZCA9IG9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQobG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5v
cGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRl
eCArIDEpLCBwcm9jZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IGE1OGUxNzk2NTYw
ZmM2ZDk0YmI0NjNkMTQyOTg4NmUwNzhmMGFmY2MuLmY1ZjA5NmM4ZWI1NmQ0NWZhOTg5YmI0OTM2
ZjcyZDQ0ODE5NWExNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5
bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFk
LCBoZWFwLm9wZXJhbmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNr
IHdyaXRlcyB0byBhbHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xv
YmJlcml6ZSgpLgogICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAg
IGNhbGxJZkFwcHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIo
aGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0
ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0g
U3RhY2spOwogICAgICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9u
LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0
aW9uLmhlYXAoKS5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQg
Y2FsbElmQXBwcm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihvcGVyYW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAKaW5kZXggNDQ3ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4uNWI0
Zjk5MjkzNDExNzljMjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVW
YWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvcklu
ZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+
IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVl
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5k
ZXggODA1MDUxNmNiZmVjYzg0ZmUxOTU4NDI4YTBjZjg3Y2Q1NGVlMTE3Yi4uMjIxYzUwMWRiZDE0
YzA0NTcyYTdmZTFkMTliZTZkMzE5N2MxM2YzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAg
LTEzNjUsNiArMTM2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4
IDg3Mjc3NjBjNmVjYmRiMzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcuLmZkNjEyM2ZhOWYxZDUy
OWU0YzJlZTJjMGU3ZWRmNjNmMDdmNzhkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVz
cGFjZSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogcHVibGljOgogICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAg
ICAgOiBQaGFzZShncmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhp
cyBpcyBpbXBvcnRhbnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCwxMSArODUs
OCBAQCBwdWJsaWM6CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWls
KG1fZ3JhcGgpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFti
bG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQpOwotICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRh
aWxbYmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBP
cGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNl
KTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFu
ZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAxLDM0IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgp
OyBub2RlSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6
ICIsIGxpdmUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7CisgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxPcGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Np
bmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9w
ZXJhbmQsICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlYWRzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8
IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJn
cyB8fCBub2RlLT5vcCgpID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG9wID09IFB1dFN0YWNrIHx8IG9wID09IFZhcmFyZ3NMZW5ndGggfHwgb3AgPT0gTG9hZFZh
cmFyZ3MgfHwgb3AgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AgPT0gS2lsbFN0YWNrKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAg
ICAgICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdy
aXRlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
LCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwg
TGF6eU5vZGUpIHsgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA6IHdyaXRlcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9w
ZXJhbmQgOiB3cml0ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3Bl
cmFuZCkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA6IHJlYWRzKQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFu
ZCA6IHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQp
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMzQsNyAr
MjI5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBk
ZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFj
aykgewpAQCAtMjYxLDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzOTgKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0NvbmZsaWN0aW5nID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9PSBDb25m
bGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFpc0NvbmZsaWN0aW5nKTsKQEAgLTI3NSwx
NyArMjcwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChub2RlLT5vcCgpID09IFB1dFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIlNldHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJh
bmQgIiwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5k
KG9wZXJhbmQpID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5v
ZGUtPm9wKCkgPT0gS2lsbFN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIHNpbmsgYSBQdXRTdGFjayBwYXN0IGEgS2lsbFN0YWNrLgotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0g
Q29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBmb3Ig
Iiwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNo
OwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3Bl
cmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRl
cigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MywxNiArMjkx
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVy
YW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5p
c1RtcCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5v
cCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRW
YXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwg
bm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VM
b2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBl
c2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRh
aWxbYmxvY2tdKQpAQCAtMzEzLDEzICszMTMsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJy
ZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3Bl
cmFuZEZvckluZGV4KGkpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50
ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0
SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNv
bnNpZGVyaW5nICIsIGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBhdCAiLCBwb2ludGVy
RHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVk
W2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAi
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtp
XSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoZGVmZXJyZWRBdEhlYWRbc3Vj
Y2Vzc29yXVtpXSwgZGVmZXJyZWRbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zNTIs
MTAgKzM1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFu
ZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0
b3I8VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAgICAgVmVjdG9yPE9wZXJh
bmQ+IGluZGV4VG9PcGVyYW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmRGb3JJbmRleChpKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7
CisKICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNh
bGN1bGF0b3IubmV3VmFyaWFibGUoKTsKICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9w
ZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3Bl
cmFuZC5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOwpAQCAtMzcwLDEyICszNzAsMTIgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAg
ICAgIHB1dFN0YWNrc1RvU2luay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNh
bGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFi
bGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdE
ZWYoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5k
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTM4Niw3ICszODYsNyBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAog
ICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2lj
QmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCld
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9j
a10ub3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0zOTcsNyArMzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghaXNDb25j
cmV0ZShmb3JtYXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJBZGRpbmcgUGhpIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2Nr
KSwgIlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBibG9jay0+YXQoMCktPm9yaWdp
bi53aXRoSW52YWxpZEV4aXQoKSk7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgbWFwcGluZy5maWxsKG51bGxwdHIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAg
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogdmFyaWFibGUgPSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGlu
Z0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOwpAQCAtNDIxLDE1ICs0MjEsMTUgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVy
RHVtcChibG9jayksICI6ICIsIG1hcHBpbmcsICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlz
Rm9yQmxvY2soYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFi
bGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgcGhpRGVmLT52YWx1ZSgpLCAiXG4i
KTsKICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZh
bHVlKCk7CiAgICAgICAgICAgICB9CkBAIC00MzcsMTUgKzQzNywxNSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gZGF0YS0+bG9jYWw7CisgICAg
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGRhdGEtPm9wZXJhbmQ7CiAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCksICIgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NTMsMTYgKzQ1MywxNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVk
Lm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBm
b3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
REZHX0FTU0VSVCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwp
ICE9IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQp
ICE9IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoZXJlIGlzIG5vIGRlZmVycmFsLiBObyBkZWZlcnJhbCBtZWFucyB0aGF0IHRoZSBt
b3N0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlIHZhbHVlIGZvciB0
aGlzIHN0YWNrIHNsb3QgaXMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHN0YWNrLiBTbywKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlIEdldFN0YWNrLgotICAgICAgICAgICAgICAg
ICAgICAgICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBub2RlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkBAIC00NzIsMjAgKzQ3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgc3RvcmVkIGFuZCBnZXQgcmlkIG9mIHRoZSBHZXRTdGFjay4KICAg
ICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBmb3JtYXQgPT0gZGF0
YS0+Zm9ybWF0LCBmb3JtYXQsIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRh
LT5sb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KSA9IGluY29taW5nLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b252ZXJ0VG9JZGVudGl0eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25m
bGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxl
ciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwg
IlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CkBAIC00OTksNyArNDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGlu
c2VydCBhIFB1dFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRp
bmcgYSBQdXRTdGFjayBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3Bl
cmFuZCk7CkBAIC01MTMsNyArNTEzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0
ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgRm9yd2Fy
ZFZhcmFyZ3MgYXJlIHVuY29uZGl0aW9uYWwgd3JpdGVzIHRvIHRoZSBzdGFjawpAQCAtNTIxLDEz
ICs1MjEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25z
IHRoZXkgd3JpdGUgdG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9jYXRpb25zIGRlYWQgcmln
aHQgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBMb2FkVmFyYXJncy9Gb3J3
YXJkVmFyYXJncy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2luawogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkg
PT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwog
ICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2Nh
bENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2Nh
cGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgIH0KQEAgLTUzOSw4ICs1MzksOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6
IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlh
YmxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5k
ZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAo
REZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCld
OworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNyZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9p
bnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVh
ZFtzdWNjZXNzb3JCbG9ja10ub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBpc0NvbmNyZXRlKGZvcm1hdCksIGZvcm1hdCk7
CkBAIC01ODUsNyArNTg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3Jh
cGggYWZ0ZXIgUHV0U3RhY2sgc2lua2luZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1w
KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAppbmRleCA0MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMx
MWQ2NzY4NjUwLi4wNGYyYzBjZDM5OThiMTgxYjllOThiYmE0MjcwNDg4M2I0MGQyZDhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjaGls
ZE5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJp
YWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUt
Pm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1
bWVudEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJp
YWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1
cyBtdWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAgICAgICAgICBOb2RlKiBo
ZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSk7CisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFo
ZWFkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMwMCw3
ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUt
PnJlcGxhY2VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGlu
ZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkp
LCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
TWFwcGluZzogIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBu
b2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9k
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTMsMTEgKzMxMywxMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJ
bnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQo
KSkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0
aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52
YWxpZEV4aXQoKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgp
Lm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlEZWYtPnZhbHVlKCktPmRl
ZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYmxvY2stPmF0
KDApLT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0YWNrIGNsb2JiZXJzIGV4
aXQuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0
OSwxOSArMzQ5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUHV0U3RhY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1
c2hGb3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIgLT4gIiwgY2hpbGQsICJc
biIpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1h
cHBpbmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOworICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFu
ZCgpKSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6
IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRHZXR0ZXJzLmNvbnRhaW5z
KG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5k
KSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5n
IG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFj
ZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9n
cmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAg
LTQyNSwxMiArNDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90
IGV4aXRPSy4KICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2Vk
VXNlS2luZEZvcihmb3JtYXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPmxvY2FsKCksICIgcHJv
cGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAi
IHRvICIsIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgcHJvcGFn
YXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICIg
dG8gIiwgcGhpTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdXBz
aWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPm9wZXJhbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2lu
ZCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMTViZTQyYWMzYjY5YWY0ZGM1ODM4
YTE4ZGYzOWQwNzhjYTMxNjkxOS4uOWEzMmQ2N2E1ODc0Mjk1ODViMzdkOWFlMWE2Y2ViYzVmYzk2
MmNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
QEAgLTMyMiw2ICszMjIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIFZh
cmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA0OGMyOGMxYjc0
YTZiODU4ZjczODU0MzJjNGFkNzYzZjhkMTYzODNhLi42NTkyNjdhOTMzZmQ4YTEyYTIxZDAzNDc1
MDhkMTIzNzIwYTYzODAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRHZXRDYWxsZWUoQ29kZU9yaWdpbiBvcmlnaW4sIEdQUlJlZyBjYWxsZWVHUFIpCiAgICAg
ICAgICAgICAgICAgY2FsbGVlR1BSKTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSksIGNhbGxlZUdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBjYWxsZWVHUFIp
OwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0QXJndW1lbnRTdGFydChDb2RlT3Jp
Z2luIG9yaWdpbiwgR1BSUmVnIHN0YXJ0R1BSKQpAQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBjaGls
ZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7CiAg
ICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1p
bmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+
YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwo
QWJvcnRSZWFzb24gcmVhc29uKQpAQCAtMTgyNSw3ICsxODI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2so
bV9ibG9jayk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICBO
b2RlKiBub2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRM
b2NhbCdzLgpAQCAtMTgzNSwxMSArMTgzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDdXJyZW50QmxvY2soKQogICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgogICAg
ICAgICBmb3JtYXQgPSBkYXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsKLSAg
ICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZygKLSAgICAgICAgICAgIFZhcmlhYmxlRXZlbnQ6
OnNldExvY2FsKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwKLSAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCi0gICAgICAgICAgICAgICAg
Zm9ybWF0KSk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW9wZXJh
bmQuaXNBcmd1bWVudCgpIHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgp
ID49IDApOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNl
dExvY2FsKG9wZXJhbmQsIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAgICAg
fQogCiAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CkBAIC0xOTE5LDcgKzE5MTYsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAoZm9y
bWF0ID09IEZsdXNoZWRKU1ZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKTsKIAogICAgICAgICBKU1ZhbHVl
U291cmNlIHZhbHVlU291cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgCkBAIC03MzQxLDU0ICs3MzM5LDU1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSogbm9kZSkKICAg
ICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRW
YXJhcmdzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xl
bmd0aChOb2RlKiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAgICB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICB9CisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkpOworICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsK
KyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzUmVn
cywgZGF0YS0+b2Zmc2V0KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbG9j
ayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdz
ID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgfQorICAgIEdQUlRlbXBvcmFyeSBhcmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7CisgICAg
R1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhpcy5n
cHIoKTsKICAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCi0gICAgLy8gRklY
TUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5n
dGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgIC8vIGZyb20gdGhlIHN0YW5kcG9p
bnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNw
ZWMgY29tcGxpYW5jZQotICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxk
IGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdo
dAotICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKIAot
ICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQotICAgICAgICBKSVRDb21waWxl
cjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVn
cyk7CisgICAgaW50MzJSZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2RlKTsgIAor
fQogCi0gICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQoreworICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIGFyZ3VtZW50Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKKyAgICBKU1Zh
bHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAg
R1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsK
KyAgICBKU1ZhbHVlUmVncyBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7
CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFs
dWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAg
ICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKSk7CisgICAgICAgIFZhcmFyZ3NPdmVy
ZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFZhcmFyZ3NP
dmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRp
bmdUaGlzR1BSLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCiAgICAg
ICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CiAKLSAgICBtX2ppdC5zdG9yZTMy
KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+
bWFjaGluZUNvdW50KSk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIG1faml0LnN0b3Jl
MzIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRh
dGEtPm1hY2hpbmVDb3VudCkpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFy
YXJncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZz
ZXQoKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25M
b2FkVmFyYXJncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFy
dC5vZmZzZXQoKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIAogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM5OCwxNyArNzM5NywxOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSogbm9kZSkKIHsK
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICBpZiAobm9kZS0+Y2hpbGQx
KCkpCi0gICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkp
CisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBlbHNlCiAgICAgICAgIGlubGluZUNh
bGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAorICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICBHUFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOwogICAgIEpTVmFsdWVSZWdz
VGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIo
KTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50
LmdwcigpOworICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBhcmd1bWVudENvdW50LmdwcigpOwogICAg
IEpTVmFsdWVSZWdzIHRlbXBSZWdzID0gdGVtcC5yZWdzKCk7Ci0gICAgICAgIAotICAgIGVtaXRH
ZXRMZW5ndGgoaW5saW5lQ2FsbEZyYW1lLCBsZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0gKi8g
dHJ1ZSk7CisgICAgCisgICAgbV9qaXQubW92ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
bGVuZ3RoR1BSKTsKICAgICBpZiAoZGF0YS0+b2Zmc2V0KQogICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoZGF0YS0+b2Zmc2V0KSwgbGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC03NjU0
LDcgKzc2NTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgc2NyYXRjaDFHUFIpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSwgc2NyYXRjaDFHUFIpOwogCiAgICAgLy8gRG9uJ3QgbmVlZCBhIG1l
bW9yeSBiYXJyaWVycyBzaW5jZSB3ZSBqdXN0IGZhc3QtY3JlYXRlZCB0aGUgYWN0aXZhdGlvbiwg
c28gdGhlCiAgICAgLy8gYWN0aXZhdGlvbiBtdXN0IGJlIHlvdW5nLgpAQCAtMTI0MzAsMTQgKzEy
NDMxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTZXR0ZXIoTm9kZSogbm9k
ZSkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDYWxsZWUoTm9kZSogbm9kZSkKIHsK
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgcmVzdWx0LmdwcigpKTsK
KyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcmVzdWx0LmdwcigpKTsKICAgICBjZWxsUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
ZXRDYWxsZWUoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIG1faml0LnN0b3JlQ2VsbChjYWxsZWUuZ3ByKCks
IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgIG1f
aml0LnN0b3JlQ2VsbChjYWxsZWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgbm9SZXN1bHQobm9kZSk7
CiB9CiAKQEAgLTEyNDU1LDcgKzEyNDU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2Rl
KQogewotICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG5vZGUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7CisgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobm9kZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIG5vUmVzdWx0
KG5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKaW5kZXggYzY0Zjk3OGFkZjg1ZmJmMjc3YmJhNzkyMTYwNjRmNDI4MWI4ZDVhOS4uMDNk
NDgzNWJmNGI3YThkZTA5MzllZmNmYTM3MDIyYjQ2MjY5MDk0MCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTM5Myw2ICsxMzkzLDcgQEAg
cHVibGljOgogICAgIHZvaWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlTmV3UmVnZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJn
cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2
YXRpb24oTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2Rl
Kik7CkBAIC0xNjY5LDE1ICsxNjcwLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFy
cmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2Nh
bCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIg
bWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVS
ZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7
CisgICAgICAgIEFTU0VSVCghYnl0ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVn
LnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0t
PmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGlu
ZVJlZywgZm9ybWF0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0
YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV9jdXJyZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29y
ZFNldExvY2FsKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZv
cm1hdCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5m
byYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA2N2IwZTBiMzcwNGNhNTlhODkwYWM1OWM4NmRiZDBk
MmEwNTZkYjgxLi4wYWYzZjE3MTgxNTQxMGQ5YmVmNjRhMjBmZDA5MDVkZGMwM2U2N2Y0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkp
OworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5v
cGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJp
YWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhh
dmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEy
LDcgKzE5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0
TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
RGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51
bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MjQsNiAr
MzgyNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9h
ZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggM2U2MzhjOWI5NDllYjVlYTI2
YTMxMDVkZGI4YWZlNzY2MjE2MzM0NC4uN2IxZTI1N2Q2MGQ0Njg0NWYxYTk0MGZmNmRmZGM5M2Fj
ODZjN2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCkBAIC0xOTM2LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDog
ewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5s
b2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRo
aXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNh
bm5vdCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpA
QCAtMjAwNyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJl
Y29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lz
dGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50
Tm9kZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVh
ZCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00
NDY0LDYgKzQ0NjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZh
cmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29t
cGlsZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IGJlZWM4NmFjN2E3
ZDMzM2UzOTY3OWUyNjc1NTkwNzRlNDY0YzliODIuLmQ3NjI4ZTVhMTE3Y2UzM2RlMWQxNjE1ZjYw
NDI3NTIyMDQ3N2EyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RhY2tMYXlvdXRQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IHRyZWF0IGEgdmFyaWFibGUgYXMgYmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nl
c3MgdG8gaXQgKFNldExvY2FsLCBHZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21M
b2NhbCkuCiAgICAgICAgIAotICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAg
T3BlcmFuZHM8Ym9vbD4gdXNlZE9wZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBo
KCkubV90bXBzLCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZh
cmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0
TmVlZEZpeHVwID0gZmFsc2U7CkBAIC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsK
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUt
PmxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUt
Pm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9M
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAg
ICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9M
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0
YS0+Y291bnQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNM
b2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJl
bGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFzc2lnbm1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZp
cnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNM
b2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEt
PmxpbWl0OyBpLS07KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAgICAgICAg
ICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAg
ICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtOTIsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQoc3RhY2stPmxvY2FsLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRP
cGVyYW5kcy5zZXRPcGVyYW5kKHN0YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAg
LTEwOCwyMSArMTA3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lID0gKml0ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQoVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgp
KTsKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIoCisgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAg
ICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAg
IHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKLSAg
ICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRy
dWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8
dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZExvY2Fscy5zaXplKCkpOworICAgICAgICBWZWN0b3I8
dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZE9wZXJhbmRzLnNpemUoKSk7CiAgICAgICAgIG1fZ3Jh
cGgubV9uZXh0TWFjaGluZUxvY2FsID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExv
Y2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCF1c2VkTG9jYWxzLmdldChpKSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZE9wZXJhbmRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBpZiAoIXVzZWRPcGVyYW5kcy5nZXRGb3JPcGVyYW5kSW5kZXgo
aSkpIHsKICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW2ldID0gVUlOVF9NQVg7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC0xMzUsNDkgKzEzNCw1MCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5s
b2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5v
cGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpID0gdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2l6ZV90IGxvY2FsID0gdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpOwotICAgICAg
ICAgICAgaWYgKGxvY2FsID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRl
eCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gYWxsb2NhdGlvbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01B
WCkKKyAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2luZGV4XSA9PSBVSU5UX01BWCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFu
ZHMsIGFsbG9jYXRpb24sIHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBmb3IgKFN0YWNrQWNjZXNzRGF0YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIGlmICghZGF0YS0+bG9jYWwuaXNMb2NhbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+bG9jYWw7CisgICAgICAg
ICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBk
YXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sb2NhbC50b0xvY2FsKCkpID49
IGFsbG9jYXRpb24uc2l6ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+bG9jYWwudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlz
TG9jYWwoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEt
Pm9wZXJhbmQudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3Bl
cmFuZC50b0xvY2FsKCldID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZGF0YS0+bWFjaGlu
ZUxvY2FsID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgIGRh
dGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEt
Pm9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZ3JhcGgubmVl
ZHNTY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVC
bG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+
c2NvcGVSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdp
c3Rlcihhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVS
ZWdpc3RlcigpKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2lubGlu
ZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIElubGluZVZhcmlhYmxl
RGF0YSBkYXRhID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXTsKICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIgPSBhc3NpZ24oCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFs
bG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgp
OyBhcmd1bWVudC0tOykgewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0
aW9uID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBk
YXRhLmFyZ3VtZW50UG9zaXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIxNSw4ICsyMTUsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRp
b24sIGRhdGEtPmNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVT
dGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0
aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
U3RhcnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMzEsMTcgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXNzaWduKGNvbnN0IE9wZXJhbmRzPGJvb2w+JiB1c2VkT3BlcmFuZHMsIGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNM
b2NhbCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9u
W3Jlc3VsdC50b0xvY2FsKCldOwotICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5U
X01BWCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChteUFsbG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpOworCisgICAgICAgIHNpemVfdCBvcGVyYW5kSW5kZXggPSB1
c2VkT3BlcmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBteUFs
bG9jYXRpb24gPSBhbGxvY2F0aW9uW29wZXJhbmRJbmRleF07CisgICAgICAgIGlmIChteUFsbG9j
YXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
ZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCmluZGV4IGViM2RkYmQ3MTg0M2Q0OWY2NWIzMmNlOTYx
ZmY5YTA3MTJhMWEwNTEuLmI0OGM2ZjdmMTkwOTc3NWQ3Mjc5Nzk5MWYzZmI5ODNkZTYzOGE3MjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcApAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRy
OwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbV9ub2RlLT5sb2NhbCgpOwor
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ub2RlLT5vcGVyYW5kKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+bG9jYWwoKSA9PSBs
b2NhbCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5v
ZGUtPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldExvY2Fs
ID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIGxvY2FsKSkpCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3Zl
cmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG9wZXJhbmQpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCA2YWNhZmJmM2JmNTM1Yzk2OTZiZTY0OGEyMDcwYjZl
ZTZmNGY4YmY5Li5mMWIxZmY2NGRkYTUzY2Y0NTk2NzA0ZWViODMxNWYxNmJmYmU5MDllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC00MCwxNCArNDAsNiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBD
Q2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwotICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRl
T1NSRXhpdCwgJnZtKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmgKaW5kZXggMDVhNTBhNTRiMjVkNTFkYmNiMTg1OGZlN2FhZGNhNDg2ODIwNWQ5
ZS4uOGI1YzNmMDFhNDg1MjBiN2FhYWFhZWJhZmY5M2MzYjI2Y2NkOTg0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIFZNOwogCiBu
YW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
c3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCmluZGV4IDYwZmJmODk5NWZkYWQ3ODI1NmEwNjdiODljNGVjNWY1NzEz
ZjFkN2UuLjc5NjY1ZjhhYjg1ZmMxMTE2ZDYzOWZiM2Q4YjU1ZjZlZDkwMjY4ZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGNoZWNrT3AgPSBDaGVja1N0cnVjdHVyZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChTcGVjQ2VsbENoZWNrICYgU3BlY0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxv
Y2FsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKChsb2NhbCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0IDogMCkpID09IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFRE
WiB2YWx1ZS4gVGhlIGNhbGwgZW50cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCkBA
IC0xNjgsOCArMTY4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZS0+b3BlcmFuZCgpKSA9PSBub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gZ2V0TG9jYWw7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0
aXR1dGVHZXRMb2NhbCgqYmxvY2ssIGluZGV4SW5CbG9jaywgdmFyaWFibGUsIGdldExvY2FsKTsK
ICAgICAgICAgICAgICAgICAgICAgCkBAIC00NDYsNyArNDQ2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVW
YWx1ZXMoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZh
bHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA5ZWU1
ZTAwNzQwOWRmNTI5NGJmY2Y1MWI3NzZlYjhjZmNmNDdjNTBlLi5hMmQ2Y2ZjMjQ5MzRlM2RjM2M0
NmMwZTI0ZDRkYTFjZTFiMGNmNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcApAQCAtNDgzLDcgKzQ4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5waGlzW2ldOwogICAgICAgICAgICAgICAgIEFTU0VSVChwaGlz
SW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlKSwgbm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5p
c1BoaUluZGV4KGkpKQpAQCAtNTE5LDEwICs1MTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpOyArK2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9j
ayA9IGJsb2NrLT5wcmVkZWNlc3NvcnNba107CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgoYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBw
cmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8g
KnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHBy
ZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9j
aywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAt
NTMzLDExICs1MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1tr
XSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgp
ID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZQpAQCAtNTQ3LDE5ICs1NDcsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAh
cHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSks
ICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlv
bnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSk7Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25z
KAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKSwKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9j
YWxzKCkpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucyhP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgT3BlcmFu
ZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBi
bG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwpAQCAtNjY4
LDI0ICs2NjQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVm
Q291bnRzLmdldChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSA9PSBub3RTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGJsb2NrKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBT
ZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAg
ICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUg
bXVsdGlwbGUgU2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1
c2hpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSAhPSBub3RTZXQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHNl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0
ZWx5OgogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdz
IG9rIHRvIGhhdmUgYSBzZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKICAg
ICAgICAgICAgICAgICAgICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1lbnREZWZpbml0
ZWx5IGZvciB0aGF0IGxvY2FsLgotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OwotICAgICAgICAgICAgICAgICAgICBz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OworICAgICAg
ICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkg
PSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTk2OCwyNiArOTY0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2co
bm9kZSwgIiAtPiAiLCBlZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0
aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2Nr
KiBibG9jaykKICAgICB7CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFM
b2cobG9jYWwsICIgaW4gbnVsbCBCbG9jayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFu
ZCwgIiBpbiBudWxsIEJsb2NrICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBk
YXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9j
aykKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFz
aWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWws
ICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsK
KyAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAt
PiAiLCAqZGVzdGluYXRpb25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9j
ayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQs
IEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAg
IGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VC
bG9jayk7CisgICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4g
QmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3Bw
CmluZGV4IDI2ZjAzMjlkNTQzMDQxNTcyMDVlNzgxNDk4YzY0ZTBiZTk5MzIxMTAuLjk1Y2RjOTJl
MmMyNDEwYTM1YzAxMzEzMWZkYzNiN2NjYzI4MjllZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEs
MTEgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2Ug
ewogCi1uYW1lc3BhY2UgREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFw
aCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpA
QCAtNTYsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBp
ZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJn
cyBmb3J3YXJkaW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAg
fQpAQCAtODgsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMg
aW50byB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBz
aW1wbGUgTyhuKSBtYW5uZXIuCiAgICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBi
bG9jay0+YXQoY2FuZGlkYXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVh
dGVDbG9uZWRBcmd1bWVudHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAz
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcsOSAr
MTE1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkuaXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1w
IHJlZmVycmluZyB0byBhbiBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxh
c3RVc2VySW5kZXggPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExv
Y2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZExvY2FsKCkpKQotICAgICAgICAgICAgICAgICAg
ICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpLnZpcnR1YWxSZWdpc3RlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2Nh
bHMuYXBwZW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tWYXJhcmdzOgpAQCAtMTQwLDEzICsxMzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgIGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAg
ICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51
c2VzKG5vZGUsIGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXgg
PSBub2RlSW5kZXg7CkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxp
bmVkQ2FsbGVyOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRh
dGUgfHwgbm9kZS0+Y2hpbGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0xvYWRlZEZyb20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2Nh
cGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
ICghdmFsaWRHZXRCeU9mZnNldCkgewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVy
Zmx5IDogY2FuZGlkYXRlQnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgudXNlcyhub2RlLCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEJ1dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUs
MTEgKzIzNSwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5k
cygKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4
ICsgMSksCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCBy
ZWcsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2Nh
bHMpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBLaWxsaW5nICIsIG9wZXJhbmQsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQg
aW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tp
XSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSBy
ZWxldmFudExvY2Fscy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZh
bnRMb2NhbHMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RV
c2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRl
eCA9ICIsIGxhc3RVc2VySW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxu
Iik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJt
aW5lIGlmIGJldHdlZW4gdGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBh
bnkKQEAgLTI2MywxNiArMjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxT
dGFjazoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5k
aWRhdGUsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFB1dFN0YWNrOgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90
KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0
ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIElu
dGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2Ug
Rmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2Fu
ZGlkYXRlLCBub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTMgKzI5Nywx
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50
ZXJmZXJlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAg
ICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJc
biIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAt
MzExLDcgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8v
IFdlIGNhbiBtYWtlIHRoaXMgd29yay4KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgV2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgIApAQCAtMzQxLDggKzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2Uu
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRz
Q2hpbGQoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+
b3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhG
b3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZi
NDM1ZWQ0ZGJmNjAyYmQ2MmFlZDRjMzQzMmVhNWE4MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjVi
NGU2ZWNjODhhODdjN2QxNzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNj
ZXNzRGF0YSgpCi0gICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05v
bmUpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQ
cmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZl
clVuYm94KGZhbHNlKQpAQCAtNDUsMTAgKzQ0LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFy
aWFibGVBY2Nlc3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNz
RGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1f
bG9jYWwobG9jYWwpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vz
c0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRp
Y3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25l
KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3No
b3VsZE5ldmVyVW5ib3goZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWls
ZWQoZmFsc2UpCkBAIC04Nyw3ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91
bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgdGhpcyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1h
a2UgdGhpcyB3b3JrIGZvciBhcmd1bWVudHMuCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgp
KQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGlj
dGlvbiwgdGhlbiB0aGlzIGRvZXNuJ3QKQEAgLTEyMSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxl
QWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAg
QVNTRVJUKGlzUm9vdCgpKTsKICAgICAgICAgCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgp
IHx8IHNob3VsZE5ldmVyVW5ib3goKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8
IHNob3VsZE5ldmVyVW5ib3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVz
ZXNBc0FycmF5SW5kZXgpKQogICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0
YXRlKG1fZG91YmxlRm9ybWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAg
LTE3Niw3ICsxNzUsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJ
bnQ1MkltcGwoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBm
b3IgbWFjaGluZSBhcmd1bWVudHMuCi0gICAgaWYgKG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAg
IGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgLy8gVGhlIGFyZ3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFs
bCBvZiBhbiAoaW5saW5lZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKaW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2Zh
MjU0ZTYwOTQyMzIwMTRhMjg0ZS4uYmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2Zj
ZWZmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oCkBAIC00OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDog
cHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShWYXJpYWJsZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOwor
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kKTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQo
bV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAg
ICAgICAgQVNTRVJUKG1fb3BlcmFuZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJl
dHVybiBtX29wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGlu
ZUxvY2FsKCkKQEAgLTIwOCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0
aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3Bh
Y2UKICAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmlj
YW50LgogCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IG1fbWFjaGluZUxvY2FsOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBT
cGVjdWxhdGVkVHlwZSBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9v
cGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxh
Z3MgbV9mbGFnczsKIAogICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5kZXggMjhlNDM3ZmQ1MWZl
YTQ5NjllYjQ4ZWNmMGMwNTA4ZjBhMzdkZjgzNS4uNWIyYzFlZTkwOWI1NDhmMzk4MjcwYzQzYmQz
NmVkNzJlM2Y5Y2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuY3BwCkBAIC01OSwxMSArNTksMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQo
KSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAg
IG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIp
Iik7CisgICAgICAgIG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCks
ICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAg
b3V0LnByaW50KAotICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lz
dGVyKCksICIgLT4gYnl0ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAorICAgICAgICAgICAg
IlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwg
b3BlcmFuZCgpLAogICAgICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3Jt
YXQoKSksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCmluZGV4IDIwNjBkNGEyZmQyNzIyM2Rk
NmY2OTljNmRiYWQ2ZDIyNDY3Yzk4MzQuLmM4Yjg0YTdjMjE2NmU3MTVlNTMxY2Y3NWQzODQ5NzRm
NWMzNjAyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVFdmVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dC5oCkBAIC03Niw3ICs3Niw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgIH0gcGFpcjsK
ICNlbmRpZgotICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiB9
OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Miw3ICsxNjIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAg
ICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJl
cHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAg
ICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIGV2
ZW50Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsK
ICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTgxLDEzICsxODEs
MTMgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRM
b2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0
ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNv
ZGVPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQp
CiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUg
d2hpY2g7CiAgICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVnLm9mZnNldCgpOwog
ICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICBy
ZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAg
IHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAgICAgICAgIGV2ZW50
Lm1fa2luZCA9IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZv
cm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTk1LDEz
ICsxOTUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgVmlydHVhbFJl
Z2lzdGVyIGJ5dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWlu
aWZpZWRJRCBpZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAgICAgIFZhcmlhYmxl
RXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQg
PSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRp
b247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZz
ZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlUmVnOwogICAg
ICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2gg
PSBXVEZNb3ZlKHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRhdGlvbiA9IFdURk1v
dmUocmVwcmVzZW50YXRpb24pOwpAQCAtMjY1LDEzICsyNjUsMTMgQEAgcHVibGljOgogICAgIFZp
cnR1YWxSZWdpc3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7Ci0gICAgICAgIHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsK
KyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnaXN0
ZXIoKSBjb25zdAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0gTW92SGludEV2ZW50
KTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgp
LnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVy
YW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZ2lzdGVyKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uY3BwCmluZGV4IDQ1MjZkMzliYjA5NGM0Yjg2NmU2N2VkM2UyZWUxYjQ4OTZhYmI3
MjYuLjdlZDRkOTAzYzE1OTU0NmZkNDM0YzY5NTcwOWE0ODU3NDdjZDFiOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApA
QCAtMTIzLDYgKzEyMyw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWN0KAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2Vs
aW5lVmVyc2lvbigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOworICAgIHVuc2lnbmVk
IG51bVRtcHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkSW5kZXggPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5zaWduZWQgZmlyc3RV
bmRlZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVmaW5lZElzQXJndW1l
bnQgPSBmYWxzZTsKQEAgLTEzMCwzNyArMTMxLDQyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRT
dHJlYW06OnJlY29uc3RydWN0KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbiA9
IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxp
ZEluZGV4KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2
YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLm9m
ZnNldCgpOwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFs
UmVnaXN0ZXJGb3JJbmRleChpIC0gMSkub2Zmc2V0KCk7CisgICAgICAgIGludCBmaXJzdE9mZnNl
dCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpOworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVj
b3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSAtIDEpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgp
OwogICAgICAgICBpbnQgbWluT2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZzZXQsIGxhc3RPZmZz
ZXQpOwogICAgICAgICB1bmRlZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7IGZpcnN0VW5kZWZp
bmVkLCBtaW5PZmZzZXQsIGkgLSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAgICAgZmlyc3RVbmRl
ZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29yZFVuZGVmaW5lZE9w
ZXJhbmQgPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBzZXBhcmF0
ZSB0aGUgc3BhbiBvZiBhcmd1bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2NhbHMgZXZlbiBpZiB0
aGV5IGhhdmUgYWRqYWNlbnQgb3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAgaWYgKGZpcnN0VW5k
ZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFs
dWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSkpCisgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAh
PSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zl
cmllcy5vcGVyYW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgZmx1c2hV
bmRlZmluZWRPcGVyYW5kU3BhbihpKTsKIAogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0g
aW52YWxpZEluZGV4KSB7CiAgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGk7Ci0gICAgICAg
ICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVu
dChpKTsKKyAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zl
cmllcy5vcGVyYW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpOwogICAgICAgICB9CiAgICAgfTsK
IAogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVzID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKS0+bnVtQ2Fs
bGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkudG9Mb2NhbCgpICsgMTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewor
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKKyAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9j
ay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CisgICAgfSBlbHNlIHsK
ICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpOworICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bVRtcHMoKTsKKyAg
ICB9CiAgICAgCiAgICAgLy8gQ3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdyZSBhdCBpbmRleCA9
PSAwIHRoZW4gdGhpcyBtdXN0IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAgLy8gZmFpbHVyZSwg
aW4gd2hpY2ggY2FzZSBhbGwgdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJlY292
ZXJpZXMgc2hvdWxkCiAgICAgLy8gcmVmbGVjdCB0aGlzLgogICAgIGlmICghaW5kZXgpIHsKLSAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgICAgIC8vIFdlIGRvbid0IGlu
Y2x1ZGUgdG1wcyBoZXJlIGJlY2F1c2UgdGhleSBjYW4ndCBiZSB1c2VkIHlldC4KKyAgICAgICAg
dmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcywgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZVJl
Y292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgo
aSkpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllcy5vcGVy
YW5kRm9ySW5kZXgoaSkudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0xNzEsNyArMTc3LDcg
QEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0
YXJ0SW5kZXgtLTsKICAgICAKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhl
IERGRydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVudHMuCi0gICAgT3BlcmFuZHM8VmFsdWVT
b3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJp
YWJsZXMpOworICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCBudW1UbXBzKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBvcGVyYW5kU291cmNlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG9wZXJhbmRT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICBIYXNoTWFwPE1pbmlm
aWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+IGdlbmVyYXRpb25JbmZvczsKQEAgLTE5OCwx
MiArMjA0LDEyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6
Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29k
ZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQo
ZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQor
ICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgp
LCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBTZXRMb2NhbEV2ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09w
ZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5k
U291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6
OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQo
KSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3Bl
cmFuZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50
Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lz
dGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MjEyLDcgKzIxOCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0
KAogICAgIH0KICAgICAKICAgICAvLyBTdGVwIDM6IENvbXB1dGUgdmFsdWUgcmVjb3ZlcmllcyEK
LSAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5PihPcGVyYW5kc0xpa2UsIG9wZXJhbmRTb3VyY2VzKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgVmFsdWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOwogICAgICAg
ICBpZiAoc291cmNlLmlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoKSkgewpAQCAtMjY2LDcgKzI3Miw3
IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oaW5mby51LnZpcnR1YWxSZWcpLCBpbmZvLmZvcm1hdCk7CisgICAgICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soaW5mby51Lm9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCksIGluZm8uZm9ybWF0KTsKICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9u
U3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihvcGVy
YW5kU291cmNlcy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCmluZGV4IDc4MWI3MWU2OTI0MzgyODY0ODk3ZWZmN2Y5ZGU2OGU0ZWU0ZWJm
MWQuLjMyY2JjMTA3NmRlNTlkYWE0YTcyN2RhYzdkNzVmYmRjYTYwN2RlNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTE5MSw2ICsxOTEs
NyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBj
YXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgVmFs
dWVUb0ludDMyOgogICAgIGNhc2UgQnJhbmNoOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCmluZGV4IDMwODBkYzM0NTA5YzczMzMy
NGI4MTQzZDJhOTU0ZjA4ZWRhZjEzZmIuLmMwMDRmYWNjYzFhZDA1ZDM2Y2VkYmVkZjk2NzgyYWFi
N2RjYjk4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogRm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQot
ICAgIDogbV9ieXRlY29kZUluZGV4KFVJTlRfTUFYKQotICAgICwgbV9lbnRyeUZhaWx1cmVDb3Vu
dCgwKQorICAgIDogbV9lbnRyeUZhaWx1cmVDb3VudCgwKQogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggYzJkZGFkYTVjNDMzZGY5
MTlhMTQ3MzFiZmY0MTIxYTRlMTliNzA4Mi4uMzY3OTRjZDI4ZmM2NTg5MDE0MzU2YmU5Y2ZkY2E4
MDkwNDQxNjExMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdGhlIENvZGVCbG9jayB0byBoYXZlIGEgd2VhayBwb2ludGVyIHRvIGl0
c2VsZiBiZWNhdXNlCiAgICAgICAgIC8vIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdl
dCBjb2xsZWN0ZWQuCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQ
dHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICAgICAgLy8gU3Rh
Y2sgT3ZlcmZsb3cgQ2hlY2suCiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dy
YXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CkBA
IC0zNTUsNyArMzU1LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVu
dHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCksIDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxh
YmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkpKTsKQEAgLTEyODEsNiArMTI4MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2Fs
bEV2YWw6CiAgICAgICAgICAgICBjb21waWxlQ2FsbEV2YWwoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlVmFyYXJn
c0xlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CiAgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTk1Myw3ICsxOTU2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEVuY29kZWRKU1Zh
bHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRh
QnVmZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0
ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpKSkpOwogICAgIH0K
IAogICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKQEAgLTE5NzIsNyArMTk3NSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVy
YW5kKTsKICAgICAgICAgCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0Nv
bmNyZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgIApAQCAtNzkxOSwx
MyArNzkyMiwxMyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgp
CiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSkpOwogICAg
IH0KIAogICAgIHZvaWQgY29tcGlsZVNldENhbGxlZSgpCiAgICAgewogICAgICAgICBhdXRvIGNh
bGxlZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRy
KGNhbGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgbV9v
dXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTc5NDAsNyArNzk0Myw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAg
ICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVHZXRTY29wZSgpCkBAIC05NTM1LDUxICs5NTM4LDUxIEBAIHByaXZhdGU6CiAgICAgICAgIHNl
dEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUxvYWRW
YXJhcmdzKCkKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCkKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAorICAgICAgICBMVmFsdWUg
anNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisKICAg
ICAgICAgTFZhbHVlIGxlbmd0aCA9IHZtQ2FsbCgKICAgICAgICAgICAgIEludDMyLCBvcGVyYXRp
b25TaXplT2ZWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBqc0FyZ3VtZW50cywK
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4g
ZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8v
IGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0
bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBU
aGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRo
ZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0g
ICAgICAgIAorCiAgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRk
KGxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOwogCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAg
ICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9v
dXQuYWJvdmUobGVuZ3RoLCBsZW5ndGhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHNldEludDMy
KGxlbmd0aEluY2x1ZGluZ1RoaXMpOworICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJh
cmdzKCkKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAg
IExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgp
KTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZh
cmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJv
dmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsK
LSAgICAgICAgCisgICAgICAgICAgICBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihsZW5ndGhJ
bmNsdWRpbmdUaGlzKSwgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5saW1pdCkpKSk7IAorCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3Ro
SW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYg
b3BlcmF0aW9uTGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9u
TG9hZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCiAgICAgICAgIC8vIG9mIGEg
VmlydHVhbFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKICAgICAgICAg
TFZhbHVlIG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAgICAgICBtX291dC5zdWIo
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZy
YW1lKSwKKyAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFy
dCkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
MykpOwogICAgICAgICAKICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgVm9pZCwgb3BlcmF0
aW9uTG9hZFZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICBt
X291dC5jYXN0VG9JbnQzMihtYWNoaW5lU3RhcnQpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5vZmZzZXQpLAotICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMy
KGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgewotICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkp
IHsKKyAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZl
ciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewogICAgICAgICAgICAgICAg
IGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CkBAIC05NTg4LDUwICs5NTkxLDI2IEBAIHByaXZhdGU6CiAKICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
KQotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVu
dHNDaGlsZCgpKQorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOyAK
LSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBudWxscHRyOwotICAgICAgICBB
cmd1bWVudHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGlu
ZUNhbGxGcmFtZSk7Ci0gICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgewotICAg
ICAgICAgICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247Ci0g
ICAgICAgICAgICBpZiAoa25vd25MZW5ndGggPj0gZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAg
ICAgIGtub3duTGVuZ3RoID0ga25vd25MZW5ndGggLSBkYXRhLT5vZmZzZXQ7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOwotICAgICAgICAgICAgbGVu
Z3RoID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7Ci0gICAgICAgICAgICBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxv
Z2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9w
ZXJhdGlvbnMuCi0gICAgICAgICAgICBpZiAoIWRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAg
ICBsZW5ndGggPSBhcmd1bWVudHNMZW5ndGgudmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKLQotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3Ro
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1l
bnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpLCB1bnN1cmUo
aXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5vZmZzZXQpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBzbWFsbGVy
T3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291
dC5jb25zdEludDMyKDEpKTsKLSAgICAgICAgfQotCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OworICAgICAgICBMVmFsdWUgY2FsbGVyTGVu
Z3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpczsgCisgICAgICAgIGlmIChudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5tYXhTaWdu
ZWQobV9vdXQuc3ViKGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIo
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICBlbHNl
IAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNhbGxlckxlbmd0aEluY2x1ZGlu
Z1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRp
bmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAg
IFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgbV9vdXQu
YWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkp
KTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywg
cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAgICBMVmFs
dWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVz
c0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk2OTAsNjUgKzk2NjksMTcg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2lj
YWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJh
dGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAg
ICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGlz
TGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVy
T3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsK
LSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRz
TGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSks
IHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxh
cmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlQzMl9NSU4pKTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0Lm1heFNpZ25lZChtX291dC5zdWIoYXJndW1lbnRzTGVuZ3Ro
LnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSksIG1fb3V0
LmludDMyWmVybyk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRo
U3ByZWFkKCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVl
LCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxl
SGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKLQotICAg
ICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
Tm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZTdGF0aWNBcmd1bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRM
ZW5ndGhzOwotCi0gICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSByZWN1cnNhYmxl
TGFtYmRhKFsmXShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7Ci0gICAgICAgICAg
ICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAgICAgICAgICAgICAgICBz
ZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9y
ID0gdGFyZ2V0LT5iaXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiht
X2dyYXBoLnZhckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50
czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1
ZmZlcikgewotICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRzICs9IHRhcmdl
dC0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVCh0
YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID0gdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgc3ByZWFk
TGVuZ3Rocy5hcHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1l
LCBbJl0gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJlYWRMZW5ndGhG
cm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApOwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgfSk7Ci0KLSAg
ICAgICAgY29sbGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAgICAgICAgTFZhbHVlIGxl
bmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0Fy
Z3VtZW50cyk7Ci0gICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCi0g
ICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRlKApAQCAtOTc1
OSw3ICs5NjkwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBh
ZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAgICBhdXRvIGZv
cndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVkU3ByZWFkTGVuZ3Ro
cywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5k
ZXgpIC0+IExWYWx1ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVM
YW1iZGEoW3RoaXMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1
ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9
PSBQaGFudG9tU3ByZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRhcmdldC0+Y2hp
bGQxKCkubm9kZSgpLCBzdG9yZUluZGV4KTsKIApAQCAtOTc5MSw4ICs5NzIyLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAg
ICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxs
RnJhbWUsIHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAgICAgICAgICBM
VmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhz
LmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAg
ICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxs
RnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgIExWYWx1ZSBzcHJl
YWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjI0Nyw4
ICsxMjE3OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIHBh
Y2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcGFja2V0
LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAgIG1fb3V0LnN0
b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoMCkpKSwgcGFj
a2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKKyAgICAgICAg
bV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1Bh
Y2tldF9jYWxsZWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFja2V0LCBtX2hl
YXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBAIC0xMjMzOSw3
ICsxMjI3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsK
ICAgICAgICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29u
c3RhbnQoKS5hc0NlbGwoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzYw
NCw3ICsxNzUzNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdp
bik7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMy
KGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRhZ0ZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FE
RFJFU1MpIHx8ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxs
RnJhbWUsIG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0x
NzcxMiw3ICsxNzY0NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5m
b3JtYXQoKSwgcHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
Lm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzLm51bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5udW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0
KApAQCAtMTc4MTcsMTUgKzE3NzUwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+
bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdERl
c2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBh
dmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAg
JiYgbV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUlu
Qnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkKLSAgICAgICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5
dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCksICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0g
IiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5
LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBleGl0T3JpZ2lu
KSkKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3Ry
aW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBvcGVy
YW5kLCAiLCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4
aXRPcmlnaW4pLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFp
bGFiaWxpdHkpOwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBM
b2NhdGlvbnMoKSkKQEAgLTE4MTI1LDM5ICsxODA1OCwzOSBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1
cmUuZ2V0KCkpOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFs
dWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9o
ZWFwcy52YXJpYWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX291dC5h
ZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCldLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihM
VmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZh
bHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKGJhc2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFn
Rm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAg
VHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0
ID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsK
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Cisg
ICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLCBvZmZzZXQp
OworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCwgb2Zmc2V0
KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAg
VHlwZWRQb2ludGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0
dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5
cGVkUG9pbnRlciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQot
ICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRh
Z0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVu
dHJ5LmNwcAppbmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5Li4w
OTFlN2YzYzliNDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZh
bHVlcywgIlxuIik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3Rh
Y2sgPSBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9m
ZnNldCgpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFj
ayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLmFz
YW5VbnNhZmVKU1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0
ZWRWYWx1ZSA9IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25z
dHJ1Y3RlZFZhbHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUo
KSkgfHwgIWFyZ3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZi
YjZkYWJjZGYxOGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0Nywx
MCBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERl
c2NyaXB0b3IoCiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQog
ICAgIDogbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFs
dWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRz
LCBudW1iZXJPZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1i
ZXJPZkxvY2FscywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29k
ZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JS
ZXBhdGNoKENvZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgKaW5kZXggZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3Zjlm
MDViYzQ4OWMxZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7
CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAg
ICAgICBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVt
YmVyT2ZMb2NhbHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUg
Zmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRv
IHByb2ZpbGUuCiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUg
bm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJi
Y2IzYThjMGE4ODE3NmVlNzIuLmEzNzg0MTBkYTliODAxNTcyNGE5ZGMxNmMzZmUxYWVjMDgwNTVk
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3
LDEwICszOCwxMSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExT
dGF0ZS5oIgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBj
b21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NS
RXhpdCYgZXhpdAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxl
ZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNB
Y3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2gg
KyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7CisgICAgICAgIFZNKiB2
bVB0ciA9ICZ2bTsKKyAgICAgICAgaml0LnByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRl
eHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZy
YW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3Rh
dGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAg
ICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSAr
IHRtcE9mZnNldF07CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29k
ZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29k
ZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGlu
Z1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNv
ZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2Rl
T3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUo
cmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxs
RnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJl
Z2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2Rl
SW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBOb3cgZ2V0IHN0YXRlIG91
dCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2su
IFRoZSB2YWx1ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1c3QgbW92ZSB0
aGVtLgogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1
ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhp
dC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsK
KyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50
b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNh
bGxlZVNhdmVzKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9M
b2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxs
ZWVTYXZlcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBqaXQubG9hZDY0KHNj
cmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlZykpOworICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgaGFuZGxlRXhpdENv
dW50cyh2bSwgaml0LCBleGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCmluZGV4IDdmN2NkMzgzMjQ5NjFhOGZmNGU0NzI1OWE4ODRkZTg2ZDU2NGIxMTcu
LjEwMmMxZTZhMWJkOWViM2I0NzEzMzc0NGY4NDNlYzY0ZDYzYTE4ZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApAQCAtNTA1LDcgKzUwNSw3IEBAIGV4
dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0
SW5PU1IoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxv
Y2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3Mg
aW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBhIGNvbXBpbGF0
aW9uIHRocmVhZC4KICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFi
bGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJm
bHkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVm
ZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0
dGVyZmx5KTsKICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IDc0OTMzZGM2MDUx
NWM1ZGEwMGVhMThmYzdkNWRiM2FkOWNlNWU5Y2YuLjJjMzA0OGZiYmUzNTE4ODczZjNhZmJiNjVi
MjMzOGZhMGFkNzQ1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAK
QEAgLTE3Niw2ICsxNzYsMzggQEAgTFZhbHVlIE91dHB1dDo6bmVnKExWYWx1ZSB2YWx1ZSkKICAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpOZWcsIG9yaWdp
bigpLCB2YWx1ZSk7CiB9CiAKK0xWYWx1ZSBPdXRwdXQ6Om1heFVuc2lnbmVkKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpCit7CisgICAgYXV0byBpc0xlZnRHcmVhdGVyID0gYWJvdmVPckVxdWFs
KGxlZnQsIHJpZ2h0KTsKKyAgICBpZiAoaXNMZWZ0R3JlYXRlci0+aGFzSW50MzIoKSkKKyAgICAg
ICAgcmV0dXJuIGlzTGVmdEdyZWF0ZXItPmFzSW50MzIoKSA/IGxlZnQgOiByaWdodDsKKyAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdp
bigpLCBpc0xlZnRHcmVhdGVyLCBsZWZ0LCByaWdodCk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6Om1p
blVuc2lnbmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCit7CisgICAgYXV0byBpc0xlZnRM
ZXNzID0gYmVsb3dPckVxdWFsKGxlZnQsIHJpZ2h0KTsKKyAgICBpZiAoaXNMZWZ0TGVzcy0+aGFz
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdExlc3MtPmFzSW50MzIoKSA/IGxlZnQgOiBy
aWdodDsKKyAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpT
ZWxlY3QsIG9yaWdpbigpLCBpc0xlZnRMZXNzLCBsZWZ0LCByaWdodCk7Cit9CisKK0xWYWx1ZSBP
dXRwdXQ6Om1heFNpZ25lZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQoreworICAgIGF1dG8g
aXNMZWZ0R3JlYXRlciA9IGdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgaWYg
KGlzTGVmdEdyZWF0ZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBpc0xlZnRHcmVhdGVy
LT5hc0ludDMyKCkgPyBsZWZ0IDogcmlnaHQ7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgaXNMZWZ0R3JlYXRlciwgbGVm
dCwgcmlnaHQpOworfQorCitMVmFsdWUgT3V0cHV0OjptaW5TaWduZWQoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkKK3sKKyAgICBhdXRvIGlzTGVmdExlc3MgPSBsZXNzVGhhbk9yRXF1YWwobGVm
dCwgcmlnaHQpOworICAgIGlmIChpc0xlZnRMZXNzLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1
cm4gaXNMZWZ0TGVzcy0+YXNJbnQzMigpID8gbGVmdCA6IHJpZ2h0OworICAgIHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGlzTGVm
dExlc3MsIGxlZnQsIHJpZ2h0KTsKK30KKwogTFZhbHVlIE91dHB1dDo6ZG91YmxlQWRkKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7CiAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OkFkZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5MzYyYjNiZGNh
MGZkNDZhMDNhYTU3MGNhMmUuLjk2ZDNkMTMzZTg1ODE1MGY0MDZlZDE0MjNmYWM0ZGY1NWMwYTlk
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMTU2LDYgKzE1Niwx
MSBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNoaWxsTW9kKExWYWx1ZSwgTFZhbHVlKTsKICAgICBM
VmFsdWUgbmVnKExWYWx1ZSk7CiAKKyAgICBMVmFsdWUgbWF4VW5zaWduZWQoTFZhbHVlLCBMVmFs
dWUpOworICAgIExWYWx1ZSBtaW5VbnNpZ25lZChMVmFsdWUsIExWYWx1ZSk7CisgICAgTFZhbHVl
IG1heFNpZ25lZChMVmFsdWUsIExWYWx1ZSk7CisgICAgTFZhbHVlIG1pblNpZ25lZChMVmFsdWUs
IExWYWx1ZSk7CisKICAgICBMVmFsdWUgZG91YmxlQWRkKExWYWx1ZSwgTFZhbHVlKTsKICAgICBM
VmFsdWUgZG91YmxlU3ViKExWYWx1ZSwgTFZhbHVlKTsKICAgICBMVmFsdWUgZG91YmxlTXVsKExW
YWx1ZSwgTFZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oCmluZGV4IDY5MzRjM2YwZDM3OTFmNjRiYTQyOTYzZTA1NTYzZGJiYzdkZGE1YTQuLmM3MjZh
ZDI3YzgxNWFjNjdhNjcwZDI1ODA0YWE4Y2FlMjJiM2EwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaApAQCAtMTAwLDcgKzEwMCw3IEBAIFNsb3dQYXRo
Q2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CiAgICAgICAgIGpp
dC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNp
dGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAg
fQogICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKHZtLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2Vw
dGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk2YTVmNTI3N2RkNjMxYWNkNGNjYmVjZDE0YjI0Y2M1ZDRhMzlhMjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCkBAIC0w
LDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2NsYXNz
IENoZWNrcG9pbnQKKyAgICBhdHRyX3JlYWRlciA6dXNlcworICAgIGF0dHJfcmVhZGVyIDpkZWZz
CisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX3JlYWRlciA6aW5kZXgKKworICAgIGRl
ZiBpbml0aWFsaXplKG5hbWUsIGluZGV4LCB0bXBzKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAg
ICAgICAgQGluZGV4ID0gaW5kZXgKKyAgICAgICAgQHVzZXMgPSB0bXBzLmZpbHRlciB7IHwodG1w
LCB1c2VEZWYpfCB1c2VEZWYgPT0gOnVzZSB9CisgICAgICAgIEBkZWZzID0gdG1wcy5maWx0ZXIg
eyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDpkZWZpbmUgfQorICAgIGVuZAorCisgICAgZGVm
IGxpdmVuZXNzKG5hbWVzcGFjZSkKKyAgICAgICAgRU9GPC0tCisgICAgY2FzZSAje25hbWVzcGFj
ZX06OiN7bmFtZX06CitFT0YKKyAgICBlbmQKK2VuZAorCitjbGFzcyBDaGVja3BvaW50cworICAg
IGRlZiBpbml0aWFsaXplKG9wY29kZSwgdG1wcywgY2hlY2twb2ludHMpCisgICAgICAgIEBvcGNv
ZGUgPSBvcGNvZGUKKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9
IGNoZWNrcG9pbnRzLm1hcF93aXRoX2luZGV4IHsgfChuYW1lLCB0bXBzKSwgaW5kZXh8IENoZWNr
cG9pbnQubmV3KG5hbWUsIGluZGV4LCB0bXBzKSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5l
c3MKKyAgICAgICAgQGNoZWNrcG9pbnRzLmVhY2ggZG8gfGNoZWNrcG9pbnR8CisKKyAgICAgICAg
ZW5kCisgICAgICAgIEVPRjwtLQorQml0TWFwPG1heE51bVRtcHM+IHRtcExpdmVuZXNzRm9yI3tA
b3Bjb2RlLmNhcGl0YWxpemVkX25hbWV9KHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBzd2l0
Y2ggKGNoZWNrcG9pbnQpIHsKKworICAgIH0KK30KK0VPRgorICAgIGVuZAorZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCmluZGV4IGRhYjg2ODZjYTMzYTEwMmM5
YmZhMWRmMTgwM2ViYjRmMGFiMjQ0ODUuLmNmZDlkZjE1MTE0N2E4NmRhNGJjNzViZTQ2YTY3ODI1
ZTI1Mzc1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bj
b2RlLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCkBA
IC0zMCw2ICszMCw3IEBAIGNsYXNzIE9wY29kZQogICAgIGF0dHJfcmVhZGVyIDphcmdzCiAgICAg
YXR0cl9yZWFkZXIgOm1ldGFkYXRhCiAgICAgYXR0cl9yZWFkZXIgOmV4dHJhcworICAgIGF0dHJf
cmVhZGVyIDpjaGVja3BvaW50cwogCiAgICAgbW9kdWxlIFNpemUKICAgICAgICAgTmFycm93ID0g
Ik9wY29kZVNpemU6Ok5hcnJvdyIKQEAgLTQ1LDEyICs0NiwxNCBAQCBjbGFzcyBPcGNvZGUKICAg
ICAgICAgdGlkCiAgICAgZW5kCiAKLSAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBl
eHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMpCisgICAgZGVmIGlu
aXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFf
aW5pdGlhbGl6ZXJzLCB0bXBzLCBjaGVja3BvaW50cykKICAgICAgICAgQHNlY3Rpb24gPSBzZWN0
aW9uCiAgICAgICAgIEBuYW1lID0gbmFtZQogICAgICAgICBAZXh0cmFzID0gZXh0cmFzIHx8IHt9
CiAgICAgICAgIEBtZXRhZGF0YSA9IE1ldGFkYXRhLm5ldyBtZXRhZGF0YSwgbWV0YWRhdGFfaW5p
dGlhbGl6ZXJzCiAgICAgICAgIEBhcmdzID0gYXJncy5tYXAud2l0aF9pbmRleCB7IHwoYXJnX25h
bWUsIHR5cGUpLCBpbmRleHwgQXJndW1lbnQubmV3IGFyZ19uYW1lLCB0eXBlLCBpbmRleCArIDEg
fSB1bmxlc3MgYXJncy5uaWw/CisgICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2tw
b2ludHMgPSBjaGVja3BvaW50cy5tYXAgeyB8KGNoZWNrcG9pbnQsIF8pfCBjaGVja3BvaW50IH0g
dW5sZXNzIGNoZWNrcG9pbnRzLm5pbD8KICAgICBlbmQKIAogICAgIGRlZiBjcmVhdGVfaWQhCkBA
IC0xMTgsNiArMTIxLDggQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIDw8LUVPRgogc3RydWN0ICN7
Y2FwaXRhbGl6ZWRfbmFtZX0gOiBwdWJsaWMgSW5zdHJ1Y3Rpb24gewogICAgICN7b3Bjb2RlSUR9
CisgICAgI3t0ZW1wc30KKyAgICAje2NoZWNrcG9pbnRWYWx1ZXN9CiAKICN7ZW1pdHRlcn0KICN7
ZHVtcGVyfQpAQCAtMTMyLDYgKzEzNywxOCBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4
cHIgI3tvcGNvZGVJRFR5cGV9IG9wY29kZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAgICBk
ZWYgY2hlY2twb2ludFZhbHVlcworICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8K
KworICAgICAgICBbImVudW0gQ2hlY2twb2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQoY2hlY2tw
b2ludHMubWFweyB8Y2hlY2twb2ludHwgIiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0pLmNvbmNh
dChbIiAgICAgICAgbnVtYmVyT2ZDaGVja3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4oIlxuIikK
KyAgICBlbmQKKworICAgIGRlZiB0ZW1wcworICAgICAgICByZXR1cm4gaWYgQHRtcHMubmlsPwor
CisgICAgICAgIFsiZW51bSBUbXBzIDogdWludDhfdCB7Il0uY29uY2F0KEB0bXBzLm1hcCB7fCh0
bXAsIHR5cGUpfCAiICAgICAgICAje3RtcH0sIn0pLnB1c2goIiAgICB9OyIpLmpvaW4oIlxuIikK
KyAgICBlbmQKKwogICAgIGRlZiBlbWl0dGVyCiAgICAgICAgIG9wX3dpZGUxNiA9IEFyZ3VtZW50
Lm5ldyh3aWRlMTYsIG9wY29kZUlEVHlwZSwgMCkKICAgICAgICAgb3Bfd2lkZTMyID0gQXJndW1l
bnQubmV3KHdpZGUzMiwgb3Bjb2RlSURUeXBlLCAwKQpAQCAtMjAwLDYgKzIxNyw3IEBAIHByaXZh
dGU6CiAgICAgdGVtcGxhdGU8T3Bjb2RlU2l6ZSBfX3NpemUsIGJvb2wgcmVjb3JkT3Bjb2RlLCB0
eXBlbmFtZSBCeXRlY29kZUdlbmVyYXRvcj4KICAgICBzdGF0aWMgYm9vbCBlbWl0SW1wbChCeXRl
Y29kZUdlbmVyYXRvciogZ2VuI3t0eXBlZF9hcmdzfSN7bWV0YWRhdGFfcGFyYW19KQogICAgIHsK
KyAgICAgICAgI3shQGNoZWNrcG9pbnRzLm5pbD8gPyAiZ2VuLT5zZXRVc2VzQ2hlY2twb2ludHMo
KTsiIDogIiJ9CiAgICAgICAgIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTE2KQogICAg
ICAgICAgICAgZ2VuLT5hbGlnbldpZGVPcGNvZGUxNigpOwogICAgICAgICBlbHNlIGlmIChfX3Np
emUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTMyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9TZWN0aW9uLnJiCmluZGV4IDIwNGFjNzU5ZTEzZWZmMTUxZjhjZDE3N2YzYmYxYjcwZTA3Nzlj
YWEuLjY2ODU1YmE2NTAwODBlNGMyM2NjMGViZWMxMGU3OTQ5Y2RlNzY4YjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKQEAgLTQzLDcgKzQzLDcgQEAgY2xh
c3MgU2VjdGlvbgogICBlbmQKIAogICBkZWYgY3JlYXRlX29wY29kZShuYW1lLCBjb25maWcpCi0g
ICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdz
XSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSkKKyAg
ICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3Nd
LCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdLCBjb25m
aWdbOnRtcHNdLCBjb25maWdbOmNoZWNrcG9pbnRzXSkKICAgZW5kCiAKICAgZGVmIGFkZF9vcGNv
ZGVfZ3JvdXAobmFtZSwgb3Bjb2RlcywgY29uZmlnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRleCBmNjM5NGFjNzEwNzEyNWI3Y2FiMjFh
ZDJiOTExM2MwNzk1MzZhNjAwLi4wZmQ1NjJiYjFhOTJiMDM0YzVkYzgwNjM2MDkwNWI0NjRlYjUz
ZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxs
RnJhbWVGb3JEZWJ1Z2dlcihDYWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbAogICAgIEFTU0VS
VChnbG9iYWxFeGVjLT5pc0RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpKTsKIH0KIAot
Ym9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKK2Jv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUo
KSkgewpAQCAtMTAwLDEyICsxMDAsMTIgQEAgU1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJh
bWU6OnVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIAogQ2FsbFNpdGVJbmRleCBDYWxs
RnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0K
IAogU1VQUFJFU1NfQVNBTiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJ
bmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1
bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleDo6ZnJvbUJpdHModW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwogfQogCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTEyMywyOCArMTIzLDI5IEBAIHZvaWQgQ2FsbEZyYW1l
OjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB1bnNpZ25lZCBDYWxsRnJh
bWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChj
b2RlQmxvY2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkp
OworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVy
biBjb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQogCiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6
Y3VycmVudFZQQygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2Rl
T2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwog
ICAgIHJldHVybiBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRzQXNC
eXRlY29kZU9mZnNldCgpKS5wdHIoKTsKIH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRW
UEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
KGNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5i
aXRzKCkpOworICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBj
YWxsU2l0ZS5iaXRzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMpOwogfQogCiB1
bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAog
ewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5
dGVjb2RlT2Zmc2V0KCkpOwotICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAg
IEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOworICAgIHJldHVybiBjYWxs
U2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOwogfQogCiAjZW5kaWYKQEAgLTE2
NSw4ICsxNjYsOCBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICB9CiAjZW5kaWYK
LSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJu
IEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NF
UlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJ
bmRleCgpLmJ5dGVjb2RlSW5kZXgoKTsKIH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVP
cmlnaW4oKQpAQCAtMTgwLDcgKzE4MSw3IEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3Jp
Z2luKCkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAg
ICB9CiAjZW5kaWYKLSAgICByZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRl
Qml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRl
SW5kZXgoKS5ieXRlY29kZUluZGV4KCkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BP
ZkZyYW1lSW50ZXJuYWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCmluZGV4IGNmYjc3MTg1NjAzOTkzMzkxMDA0ZmMxMzIxMTgzODQyM2M1ZGM2YTku
LjA1ZjY5MTc3NDg5NTMzMWQ5MjMxMDAxYTE1YTJjMDVhYmU4YTg5OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTQ2LDE4ICs0NiwxOCBA
QCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAg
ICAgICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CisgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4LmFzQml0cygpKQogICAgICAgICB7
IH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X2J5dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRl
SW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9i
eXRlY29kZUluZGV4OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1fYml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNp
dGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0K
IAotICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4
LmFzQml0cygpOyB9CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2Jp
dHM7IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cygpKTsgfQog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgICAgIHVpbnQzMl90IG1fYml0cyB7IEJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKSB9OwogICAg
IH07CiAKICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0
ZUluZGV4IHsKQEAgLTc4LDcgKzc4LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIGFybTY0
XzMyIGV4cGVjdHMgY2FsbGVyIGZyYW1lIGFuZCByZXR1cm4gcGMgdG8gdXNlIDggYnl0ZXMgCiAg
ICAgc3RydWN0IENhbGxlckZyYW1lQW5kUEMgewogICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVy
KSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lOwotICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBj
b25zdCBJbnN0cnVjdGlvbiogcmV0dXJuUEM7CisgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIp
IHZvaWQqIHJldHVyblBDOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBzaXplSW5SZWdp
c3RlcnMgPSAyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSAvIHNpemVvZihSZWdpc3Rlcik7CiAgICAg
fTsKICAgICBzdGF0aWNfYXNzZXJ0KENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyA9
PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpLCAiQ2FsbGVyRnJh
bWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzIGlzIGluY29ycmVjdC4iKTsKQEAgLTE0Niw3ICsxNDYs
NyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJuUENP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0dXJu
UEMpOyB9CiAgICAgICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0
dXJuIEFic3RyYWN0UEModm0sIHRoaXMpOyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpIGNvbnN0OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5
dGVjb2RlSW5kZXgoKSBjb25zdDsKICAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2RlT3Jp
Z2luSW5kZXgoKSBjb25zdDsKIAogICAgICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygp
IGNvbnN0OwpAQCAtMTgyLDEwICsxODIsOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0
YXRpYyB2b2lkIGluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBn
bG9iYWxFeGVjLCBKU0NhbGxlZSogZ2xvYmFsQ2FsbGVlKTsKIAogICAgICAgICAvLyBSZWFkIGEg
cmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZyYW1lIChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxv
Y2spLgotICAgICAgICBSZWdpc3RlciYgcihpbnQpOwogICAgICAgICBSZWdpc3RlciYgcihWaXJ0
dWFsUmVnaXN0ZXIpOwotICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0
YW50Ci0gICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKGludCk7CisgICAgICAgIC8vIFJlYWQg
YSByZWdpc3RlciBmb3IgYSBrbm93biBub24tY29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1l
bnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNhcHR1cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRp
ZmZlcmVudCBsb2NhdGlvbi4pCkBAIC0yNTQsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewog
ICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRd
LnBheWxvYWQoKSA9IGNvdW50OyB9CiAgICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09i
amVjdCopOwogICAgICAgICBpbmxpbmUgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0g
ICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygp
LnJldHVyblBDID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsg
fQorICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5k
UEMoKS5yZXR1cm5QQyA9IHZhbHVlOyB9CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rp
b25OYW1lKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lSW5saW5lcy5oCmluZGV4IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJh
ODYwNDc3ZDEuLmFlMzU4OThmYjVjOWY0NmQ1YjBjYWYzYzY1ZjQ3N2QzNDgxM2I5OTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGlu
ZXMuaApAQCAtMzIsMjggKzMyLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVn
aXN0ZXImIENhbGxGcmFtZTo6cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdp
c3Rlcio+KCZjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4g
dGhpc1tpbmRleF07Ci19Ci0KIGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5l
IFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVy
biB0aGlzW2luZGV4XTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFu
dFJlZ2lzdGVyKHJlZykpOworICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlu
bGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcp
CiB7Ci0gICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJl
Zy5pc0NvbnN0YW50KCkpOworICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlu
bGluZSBKU1ZhbHVlIENhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjA5YzNhMWJlNGY1OGRhZWE4
MDdlM2JhZmVmMGQ0YmEwMmZmNDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCAr
MSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQgZ2V0VG1wKHNpemVfdCBvZmZzZXQpIAorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChz
aXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8VD4odG1wc1tvZmZzZXRdKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVv
ZihUKSA9PSBzaXplb2YodWludDMyX3QpKQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUPihzdGF0aWNfY2FzdDx1aW50MzJfdD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2Ug
aWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHRtcHNbb2Zmc2V0
XSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQp
ID09IHNpemVvZih1aW50OF90KSk7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICB9CisgICAgfQor
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIHZvaWQqIG5leHRJbnN0cnVj
dGlvbkp1bXBUYXJnZXQ7CisgICAgdWludDY0X3QgdG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc107
Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAppbmRleCBlN2EzZDIyYmU4Y2NjYjMxMmZkMTE1Yjc0OGEwMmVkZDY4ZmYzNTA1
Li5jMTAxMzFlNzMzZGY5OGNiNmMwM2ZjMmM3ODI4MGM2YzMxMDQyOTY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVDbG9z
dXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNh
Y2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCkBAIC0xMjMsNyArMTI0LDcgQEAg
SlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZy
YW1lKCk7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbGVyRnJh
bWUtPmNhbGxTaXRlSW5kZXgoKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNh
bGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0g
Y2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCku
b2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hh
aW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2VkUihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0
ZXIoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNhbGxlclVu
bGlua2VkQ29kZUJsb2NrID0gY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwog
CiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxv
Y2stPmlzQXJyb3dGdW5jdGlvbigpIHx8IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93
RnVuY3Rpb25Db250ZXh0KCk7CkBAIC0yMTMsNiArMjE0LDkgQEAgdW5zaWduZWQgc2l6ZU9mVmFy
YXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3QKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgCisg
ICAgaWYgKGxlbmd0aCA+PSBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZh
ckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVs
c2UKQEAgLTI0OSw3ICsyNTMsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVy
biBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgp
Cit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUq
IGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkg
fHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUsMzEgQEAgdm9pZCBs
b2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2Ug
RGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBq
c0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAg
ICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50
cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5n
dGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+
KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0
dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7
CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJh
eShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBq
c0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAg
anNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBm
aXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxl
bmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0
SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
XSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5n
ZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0g
dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk3LDggKzMw
MSw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAg
ICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVG
cmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxl
bmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhsZW5ndGggKyAxKTsKQEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGljOgogICAgICAgICBt
X2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9
IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBp
ZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNr
cG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMg
PT0gJmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCkKKyAg
ICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShtX2NhbGxGcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9u
KSB7CiAgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlz
aXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAg
ICAgICAgICAgaWYgKG1faGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6RG9uZTsKQEAgLTU2MSw2ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChz
aG91bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9u
ZTsKIAorICAgICAgICBtX3JldHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUo
KTsKICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC01
OTcsNiArNjA2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBD
b2RlQmxvY2sqJiBtX2NvZGVCbG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKKyAg
ICBtdXRhYmxlIGNvbnN0IHZvaWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJh
bWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY2LDcgKzg3Niw3IEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlT
Y29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVj
dXJzZVNvZnQoKSkpCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkg
fHwgYXJncy5zaXplKCkgKyAxIC8qIHRoaXMgKi8gPj0gbWF4QXJndW1lbnRzKSkKICAgICAgICAg
cmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKSk7CiAKICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkzNSw3ICs5NDUsNyBA
QCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTTwogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRy
eVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9S
ZWN1cnNlU29mdCgpKSkgeworICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29m
dCgpIHx8IGFyZ3Muc2l6ZSgpICsgMSAvKiB0aGlzICovID49IG1heEFyZ3VtZW50cykpIHsKICAg
ICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVj
ZWE5MDJhZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2Yy
OTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaApAQCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXpl
RnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVl
IGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFy
QXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90
cyk7Ci0gICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhl
Y0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNl
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJn
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291
cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZh
cmFyZ3NGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZy
YW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdP
ZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNl
dFRoaXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSog
ZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJf
dCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9y
d2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVy
LCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1
OTcxZGRjOGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5
ODRkZDUwNjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFj
a1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmln
aW4qIGNvZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
ICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQo
KSkKLSAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNh
bGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQo
KSkudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zy
YW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5s
aW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBA
QCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50
ZXIgaW5kZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lu
bGluZWQpIHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZy
YW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAi
IG9mICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFC
TEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAppbmRleCBjOGRmMjAwYjk4MWZmODI2YTUyZWYwNjcwZWM3ZGVlZGNiZmY2OTZlLi5jM2U4
ZDBjM2RhMTEzZDk5YWMwYzhkZjQwMTU5ODliMjkwZDY5MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzTnVsbChHUFJSZWcgZ3ByKQogCiB2b2lkIEFz
c2VtYmx5SGVscGVyczo6aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKQogewotICAgIEp1bXAg
b2sgPSBicmFuY2gzMihCZWxvdywgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSwgVHJ1c3RlZEltbTMyKDEwMDAwMDAwKSk7CisgICAgSnVtcCBvayA9IGJyYW5jaDMyKEJl
bG93LCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSksIFRydXN0ZWRJbW0zMigxMDAwMDAwMCkpOwogICAgIGFib3J0V2l0aFJlYXNvbihBSElu
c2FuZUFyZ3VtZW50Q291bnQpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyMjAwOWM1ZmQyYmEyMjdkNDdj
ZmU4NTQ5MzlmNTJkZWYyZDcxYmMyLi41ODcwN2ZhODQzY2RkZTg3MjVjYTcyOGI4OGMxMTNmOGE5
MWYyMjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
QEAgLTExNDgsOSArMTE0OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVn
aXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
OwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKGludCBvcGVyYW5kKQorICAg
IHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5k
KSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIGFk
ZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEFkZHJlc3MgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBi
YXNlR1BSKQpAQCAtMTE2Myw5ICsxMTY0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZp
cnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSArIFRhZ09mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0Zvcihp
bnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICBy
ZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0
YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rlciwg
R1BSUmVnIGJhc2VHUFIpCkBAIC0xMTc4LDkgKzExODAsMTAgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRy
ZXNzIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZv
cihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVy
YW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpKTsKICAgICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBD
YWxsRnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKaW5k
ZXggODQ4NWE5ZmJkNjgzZGJlZjY1OGY2NzA4ODEzZjc1OGQ1ZGRiOThkMS4uYjNmMGUxNjkyYzBk
YWJhNzk5NTZlMWU1MTE5OThiOWYyOWQyZDcyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmNwcApAQCAtMzcsNyArMzcsNyBAQCB2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzYwogICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUp
KSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgY2FsbGVyRnJhbWUpKSwgc2NyYXRjaDEpOwog
ICAgIHN0b3JlUHRyKHNjcmF0Y2gxLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVyRnJhbWUpKSk7Ci0gICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIHNjcmF0Y2gxKTsKKyAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBzY3Jh
dGNoMSk7CiAgICAgc3RvcmVQdHIoc2NyYXRjaDEsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CiAgICAgc3RvcmVQ
dHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRl
eCAxN2MwZWRhYTgyYjlmOTRmNTc0MTMxMTA2MWE2NTEyOTRhNTE2Zjg1Li5iNjYxMjdhNGZiMWVj
YmM2ZjE0OTIxN2JjMDAzZTEwMmUxN2FlNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CkBAIC03NTUsNyArNzU1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
CiAgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKIAotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSwgcmVnVDEpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCByZWdUMSk7CiAg
ICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAg
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAppbmRleCAyODAzMmEyMWFhY2I5YTJkOTMyMjg1ZmUxZjk2NWFkZTNlMjdhODBhLi44NzMx
NWVmODQ3N2FjMTJhNzNjNTcwYWVmOTEyNTBjNTY5YTRmMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTMzMSwxNiArMzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmlj
dEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9
OwogICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwotICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOworICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICB2
b2lkIGVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpOworICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdp
c3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCiAgICAgICAgIGVudW0gV3JpdGVCYXJy
aWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNo
b3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKICAgICAgICAgLy8g
dmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRj
aCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRo
ZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKLSAg
ICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1
YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
KTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0
aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFi
bGUgZm9yCkBAIC00MDQsMzIgKzQwNCwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBl
bnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIAotICAg
ICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0
KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVS
ZWdzIHNyYyk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKIAotICAgICAg
ICBpbnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAgZG91Ymxl
IGdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgaW50MzJfdCBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CisgICAgICAgIGRvdWJsZSBn
ZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3Ax
LCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CisgICAgICAgIGJvb2wgZ2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsKIAotICAgICAgICB2b2lkIGVtaXRMb2Fk
VGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRMb2FkUGF5
bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdExv
YWRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1p
dExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAogICAg
ICAgICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdp
c3RlcklEIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklE
IHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwg
UmVnaXN0ZXJJRCBwYXlsb2FkMik7CisgICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2Ug
PSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKLSAgICAgICAgdm9p
ZCBlbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1p
dFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNl
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBp
bmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAg
ICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2Fk
LCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxs
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2Up
OwotICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlRG91
YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0U3Rv
cmUoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFN0
b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZh
bHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0
ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNDZWxsID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3Rl
cklEIHZhbHVlKTsKIAotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsK
KyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZyk7CiAKICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgo
Y29uc3QgSWRlbnRpZmllciopOwogCkBAIC00MzgsMTcgKzQzOCwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwg
T3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9w
MiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0g
dHJ1ZSk7CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHZvaWQgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAgICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRz
dCk7Ci0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lz
dGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0
MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7Ci0gICAgICAgIHZvaWQg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7
CiAgICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChp
bnQgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUz
Ml82NCAqLyA9IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcGF5bG9hZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbWl0U3RvcmVD
ZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKICAgICAg
ICAgfQpAQCAtNDU2LDI5ICs0NDksMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXAg
ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVn
KTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwg
VmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50KFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAgICAgICAgIFBhdGNoYWJsZUp1
bXAgZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90TnVtYmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0
Y2gpOwogCi0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlVlJlZywg
Y29uc3QgSWRlbnRpZmllciopOworICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVJlZywgY29uc3QgSWRlbnRpZmllciopOwogCiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3Ay
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBA
IC02ODUsOCArNjc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRz
dCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZvaWQgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRW
YXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpA
QCAtNjk0LDIwICs2ODcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQ
UlJlZyBwYXlsb2FkKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1
ZSogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwogI2VuZGlmCi0gICAgICAg
IHZvaWQgZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7Cisg
ICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRT
ZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7
Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGlu
dCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVy
KGludCBkc3QpOworICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KTsKIAotICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICBKU1ZhbHVl
IGdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25z
dGFudEludChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50
IHNyYyk7CisgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsK
KyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKIAog
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KICAgICAg
ICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKQEAg
LTczNCw3ICs3MjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghaXRl
ci0+ZnJvbS5pc1NldCgpKTsKICAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICB2b2lkIGxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAogICAgICAgICAgICAgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwog
CkBAIC03NTQsMTMgKzc0NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJu
VHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFp
dHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFy
Z3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CkBAIC04MDQsNyArNzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25U
cmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwog
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTg2NCw3
ICs4NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAg
ICAgICB2b2lkIHByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXMoaW50IHNyYzEsIGludCBzcmMyKTsK
KyAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBz
cmMxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTQU1QTElO
R19GTEFHUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmlu
ZGV4IDM0NTg3NDRmYmNkZDUzYWNmOWE0MzMyOGJjNDk0YjBmZWRjYjg5M2YuLjNhMzJjMzI2MTg5
ZmFiMTk3ZDdjZjlmOTFkNWY2YjRiMzEwMjAyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5z
aWduZWQ+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMTcyLDEz
ICsxNzIsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIg
PSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChp
bnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9y
IHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1l
ZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQpAQCAtMjMwLDEzICsyMzAsMTMgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRK
dW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDApOwpAQCAtMjU2LDEzICsyNTYsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9w
MiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIGVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChkc3QsIG9wMSwgb3AyLCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDApOwpAQCAtMjg0LDEzICsyODQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwg
aW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7
CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKIAogICAgIC8vIFdlIGdl
bmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBh
dGg6CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdAogdm9pZCBKSVQ6
OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7Ci0gICAg
aW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29k
ZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC00MTUsOSArNDE1LDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE1vZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBB
U1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtNDkxLDkgKzQ5MSw5IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogdm9pZCBKSVQ6
OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGluZ1BvbGljeSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTM4LDggKzUzOCw4IEBAIHZvaWQgSklUOjplbWl0Qml0
QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxpCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEJpdG5vdD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01OTksOSArNTk5LDkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0
aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdodFNoaWZ0R2Vu
ZXJhdG9yOjpTaGlmdFR5cGUgc25pcHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CkBAIC02NzQsOCArNjc0LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IE4KIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1
bmN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIC8vIEFyaXRo
TmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBk
c3QuCkBAIC03MjQsOSArNzI0LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC03OTksNyArNzk5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpA
QCAtODQ1LDkgKzg0NSw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CkBAIC05MDYsOSArOTA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9u
Kgogdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
aXY+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggYmYyMzA2YmNlNGQ1NmYxMDlhMDM2MThiMzQw
NzJmYzU3YzBlNWFjMy4uYWY5ZWViNjI3OWNjZTRkMTFiOTM0YWUxZjFiNWM2ZTRkNjcyMmY3NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9w
JiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYsNyArNjYsNyBAQCBKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwog
CiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAg
ICAgc3RvcmUzMihyZWdUMCwgbWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUu
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKQEAgLTg1LDkgKzg1LDkgQEAgc3RkOjpl
bmFibGVfaWZfdDwKICwgdm9pZD4KIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50cy5vZmZzZXQoKTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29k
ZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2Rl
Lm1fZmlyc3RGcmVlLm9mZnNldCgpOyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0dWFsIHJl
Z2lzdGVyIGlmIHdlIG5ldmVyIHVzZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RWYXJBcmdP
ZmZzZXQgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QxKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZAogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9
IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0g
VXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggYjdkMGNhMjM1OGJlNTI1
MDE4YTNmNGU5NjE2ZDljYjg0OGZmZjUyMS4uZTA3YTgzM2Q0Yzg1M2I5YzdhMDJkZThiNzQ2MDFk
ZjMwNjZiYWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNl
cHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZyYW1l
KSwgIiBmb3IgY29kZSBibG9jayAiLCBjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBDUkFTSCgp
OworICAgICAgICBXVEZCcmVha3BvaW50VHJhcCgpOwogICAgIH0KICAgICAKICAgICBpZiAoYXV0
byogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggMjIxNDljOWJkMWI4ZWMxMTgxMmNiZTBiODU0MWJlZTkz
YjEwYWIzNC4uN2JjMTRlODM1YWQxYWQxZGQ2NzNmY2E1MDY5NjgwZTI1NWZiYzliOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTQ4LDE5ICs0OCwyMCBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9yQXJyYXlN
b2RlKGNvbnN0IEluc3RydWN0aQogICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qo
KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
aW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3Rh
bnRPcGVyYW5kKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpOworICAgIEFTU0VSVChzcmMuaXNDb25zdGFu
dCgpKTsKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIGludCBlbnRyeSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkK
IHsKKyAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIoKSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRy
eSkpOwogICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTA5LDcgKzEx
MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAjZWxz
ZQogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KS5iaXRzKCk7CiAjZW5kaWYKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJp
dHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICAKICAgICAvLyBGSVhNRTogSXQncyBub3Qg
Y2xlYXIgdGhhdCB0aGlzIGlzIG5lZWRlZC4gSklUT3BlcmF0aW9ucyB0ZW5kIHRvIHVwZGF0ZSB0
aGUgdG9wIGNhbGwgZnJhbWUgb24KICAgICAvLyB0aGUgQysrIHNpZGUuCkBAIC0xNDMsNyArMTQ0
LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGkKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE1NSw3ICsxNTYs
NyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50
IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSk7CkBAIC0xNjcsOSArMTY4LDkgQEAgQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmUKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJl
ZykpCisgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShyZWcpKQogICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTI4NCw5ICsyODUsOSBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpzYW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAj
ZW5kaWYKICNlbmRpZgogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dENoYXIoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0
cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVu
Z3RoKCkgPT0gMTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQpAQCAtMzYzLDI2ICsz
NjQsMjYgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVBy
b2ZpbGUqIHByb2ZpbGUpCiAgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9CiAKLUFMV0FZU19J
TkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlT
X0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsK
IH0KIAotQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUo
aW50IHNyYykKK0FMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIoaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVm
aW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAot
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQor
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3Rl
cklEIHRhZykKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS50YWcoKSksIHRhZyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zOTAsOSArMzkxLDkgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRh
ZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQogICAgIGxvYWQzMih0YWdGb3IoaW5kZXgpLCB0
YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1
YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKIHsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5w
YXlsb2FkKCkpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwNiwxMzYg
KzQwNywxMzMgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBS
ZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIG1vdmUoSW1tMzIodi50YWco
KSksIHRhZyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1p
dExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVS
ZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3Jl
KGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3Rl
cklEIGJhc2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwogCiAgICAg
aWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2Fk
KTsKLSAgICAgICAgZW1pdExvYWRUYWcoaW5kZXgsIHRhZyk7CisgICAgICAgIGVtaXRMb2FkUGF5
bG9hZChyZWcsIHBheWxvYWQpOworICAgICAgICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXgg
fTsKICAgICBpZiAocGF5bG9hZCA9PSBiYXNlKSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAg
ICAgICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcpOwotICAgICAgICBsb2FkMzIo
cGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICAgICAgbG9hZDMyKHRhZ0Zv
cihyZWcsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2Up
LCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBi
YXNlKSwgdGFnKTsKKyAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsK
KyAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXls
b2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQor
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVy
SUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJlZ2lz
dGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKIHsKLSAgICBlbWl0TG9hZChpbmRleDIs
IHRhZzIsIHBheWxvYWQyKTsKLSAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsK
KyAgICBlbWl0TG9hZChyZWcyLCB0YWcyLCBwYXlsb2FkMik7CisgICAgZW1pdExvYWQocmVnMSwg
dGFnMSwgcGF5bG9hZDEpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGlu
dCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZp
bkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShh
ZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3Io
cmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJs
ZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
IHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBjaGFyKiBieXRlUG9pbnRl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZpbkNvbnN0YW50UG9vbCk7CiAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyhieXRlUG9pbnRlciArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlKTsKICAgICB9IGVsc2UK
LSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZvcihpbmRleCksIHZhbHVlKTsK
KyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZvcihyZWcpLCB2YWx1ZSk7CiB9
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQg
eyBpbmRleCB9OwotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2Up
KTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFnRm9y
KHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBp
bmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAg
aWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5k
ZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAg
c3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2Fk
LCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAg
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcp
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzQ2VsbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAg
ICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQ2Vs
bCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0Zv
cihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50
IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNCb29sKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBp
ZiAoIWluZGV4SXNCb29sKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
b29sZWFuVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3Rl
cklEIHZhbHVlKQogewotICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7
CisgICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVn
aXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVy
IHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZp
cnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3Rh
bnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKElt
bTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIo
SW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBz
dG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJl
Z2lzdGVySW5kZXgpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25O
b3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RK
U0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVt
aXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lz
dGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
VmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0
ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHRhZykpOwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBp
bnQzMl90JiBjb25zdGFudCkKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ax
KSkgewogICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIo
KTsKQEAgLTU1NSwxMSArNTUzLDExIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90CiAjZWxzZSAv
LyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNG
IHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgaWYgKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5p
c0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKQEAgLTU3
MSw0NyArNTY5LDMyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgbG9hZDY0KGFkZHJlc3NGb3Ioc3Jj
KSwgZHN0KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRz
dCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMub2Zmc2V0KCksIGRzdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBz
cmMyLCBSZWdpc3RlcklEIGRzdDIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQogewogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgZHN0MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBk
c3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVy
IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhz
cmMxLm9mZnNldCgpLCBkc3QxLCBzcmMyLm9mZnNldCgpLCBkc3QyKTsKLX0KLQotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7
Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29u
c3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0
ZXJJRCBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChm
cm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGZy
b20ucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCi17Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qub2Zmc2V0KCksIGZyb20pOwotfQotCiBBTFdB
WVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklE
IHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIG1vdmUo
cmVnMSwgc2NyYXRjaCk7CkBAIC02MjksMjggKzYxMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIGludCB2UmVn
KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJl
Z2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKICAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShp
bnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
aW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUo
YWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3Vi
bGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
IHsKLSAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KGluZGV4KSk7Ci0gICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkuYXNJ
bnQzMigpKSwgdmFsdWUpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIEFT
U0VSVChpc09wZXJhbmRDb25zdGFudEludChyZWcpKTsKKyAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKHJlZykuYXNJbnQzMigpKSwgdmFsdWUpOwog
ICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4
KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKHJlZyks
IHZhbHVlKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6OlBhdGNoYWJsZUp1bXAgSklUOjplbWl0
UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQgcmVnKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggN2NmYTA5NWYwMGQxN2UxNDExYmU5Y2ZiODBmODA4
MDZmNzg4ZjZjMS4uNDYxN2VlMjk0YjE0ZmVmMTI0ODg4NDQxZGZkOTQ1MTAzNjVhYTVkZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC01NiwxMCArNTYsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNzcsNyArNzcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
ZD4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CkBAIC0xMTAsNyArMTEw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAg
ICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KIH0KIApA
QCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1p
dFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEyOSw5ICsxMjksOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25z
dHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0lu
c3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAt
MTU1LDkgKzE1NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9w
cm90b3R5cGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKICAgICAvLyBM
b2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkp
IGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3
ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZv
ciB0aGUgcmVzdWx0LgpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Im
IGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQs
OCArMjA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKQEAgLTIxNyw4ICsyMTcs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJh
bmNoSWZDZWxsKHJlZ1QwKTsKQEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKQEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CkBAIC0yNzQsOCArMjc0LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc051bWJlcj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0
ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4ICsyODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1i
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nl
bGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC0zMDcsOCArMzA3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8v
IFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
QEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3Ny
Yy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICAKQEAgLTM2MCwxNSArMzYwLDE1IEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCksIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDAp
OwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3
YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xl
YXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNl
IG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzkwLDE0ICszOTAsMTQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElm
RmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pl
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGlu
dCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
QEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVs
bD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDU3
LDcgKzQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRP
ck51bGw+KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAg
LTQ3MCw4ICs0NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVy
YW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIg
PSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNT
RVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
CkBAIC00ODUsMTggKzQ4NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEs
IHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CiB9CkBAIC01MTAsMjYgKzUxMCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAg
IGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJl
Z1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAg
Y29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1
bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01Mzks
NyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KQEAgLTU0OCw5ICs1NDgs
OSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5
cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNy
YzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogICAgIApAQCAtNTkyLDggKzU5Miw4IEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBpbnQgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKIApAQCAtNjUwLDggKzY1MCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIGludCBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKICAgICAK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwpAQCAtNjY0LDggKzY2
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTY4NCwyMCArNjg0LDIwIEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC03MjgsMTAgKzcyOCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRy
ZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBW
TTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZXhjZXB0aW9uKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRp
b246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Rocm93blZhbHVlLm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
Ly8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9T
UiBlbnRyeSwgaW5jbHVkaW5nCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTc0OSw3ICs3NDksNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAg
IHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVl
UmVncyByZWdzKHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
ZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CkBAIC03NjYsMTAgKzc2Niwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1
Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgaW50IGN1cnJlbnRTY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJl
bnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCBy
ZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7
CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5z
aWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBi
eXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxl
SnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKICAgICBzaXplX3Qg
dGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0
T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVs
dE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1
bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAt
ODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsKICAgICBzaXplX3QgdGFibGVJbmRl
eCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7
Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9
ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODM0
LDggKzgzNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwpAQCAtODY3LDggKzg2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTkwMyw3ICs5MDMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiAgICAgLy8gb2Jq
ZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3Vu
dCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKS5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaikpOwogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAK
QEAgLTkxMyw3ICs5MTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hh
aW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwpAQCAtOTI0LDcg
KzkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0
YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxKTsKIApAQCAtOTM3LDcgKzkzNyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAg
ICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFS
ZWcgPSByZWdUNDsKQEAgLTk2NSwxMyArOTY1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDgo
QWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcs
IHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNr
X3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZz
ZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJn
ZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7CiB9CiAKQEAgLTk4NSw3ICs5ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4
MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3Vz
dG9tPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9
IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0
ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1
ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCByZWdUMSk7CkBAIC0xMTA0LDggKzExMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UmVnZXhwPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nh
c3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTExNSwxMiArMTExNSwxMiBA
QCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNF
eGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7
CiAKQEAgLTExNjEsMTEgKzExNjEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vs
c2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYK
IAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rp
b25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKQEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlc0luZGV4ID0gYnl0ZWNvZGUubV9hcmd2Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVz
U3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFs
dWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CkBA
IC0xMjE5LDggKzEyMTksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4ID0gYnl0
ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xl
bmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCkBAIC0xMjM2LDkgKzEyMzYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7CkBAIC0xMjgyLDkgKzEyODIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3Bl
cnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKQEAg
LTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAtMTM0OSwxMCArMTM0OSwxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7Ci0g
ICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3I7CiAKICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMzkwLDkgKzEzOTAsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVy
ZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQxNCw5
ICsxNDE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0
KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qx
KTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9u
KiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAgICBpbnQg
dmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1By
b2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUwOSw3ICsxNTA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3Qg
YmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVn
VDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcs
IHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAt
MTUyMyw4ICsxNTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2Ny
YXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVn
aXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5v
ZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCkBAIC0xNTQ1LDggKzE1NDUsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGxvYWQzMihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksIHJlZ1QwKTsKICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVn
czo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKICAgICBib3hJbnQzMihyZWdU
MCwgcmVzdWx0KTsKQEAgLTE1NTYsOSArMTU1Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFJlc3RMZW5ndGg+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25l
ZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QwKTsK
KyAgICBsb2FkMzIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
CiAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwg
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CiAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSwgcmVnVDApOwpAQCAtMTU4Niw3ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEFyZ3VtZW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDApOwpAQCAtMTU5NCw5ICsxNTk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2Fk
MzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDIpOworICAg
IGxvYWQzMihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSksIHJlZ1QyKTsKICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCksIHJl
c3VsdFJlZ3MpOworICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggYWU1
YjZhZDU0Y2E4MTM2ZWNhYzFiNjQxMWM5NTczNDMwZTVjMWY3YS4uYzQ2Mzc5YTlmOWVjY2FlNzQ0
YThlN2FjODA4NTUxZmViZjJmYTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1
ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5
LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
LSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJv
ZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVn
VDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5t
X29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0
aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAzYjQ4NTBmYWI4ZDZmYWU5MzBlOWU4NjkzYzQ0
YmJmNGExZTQzOTNkLi44Y2I1NWZiNWI3ZWY4NWYwYWMxMTlmMjJlZTJhZDE5MWFjMTkwNDRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE2NTQs
MTggKzE2NTQsMTggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWMKICAgICAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2Vy
aW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKIAotICAg
ICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFy
c1dpdGhWYWx1ZXMgPSAwOwogICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAg
IG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwotICAgICAgICBPcGVy
YW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworCisgICAgICAgIE9wZXJhbmRzPE9wdGlv
bmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBudW1WYXJzV2l0aFZhbHVlcywgMCk7CiAgICAgICAgIGludCBsb2NhbHNVc2VkRm9yQ2FsbGVl
U2F2ZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAg
aWYgKG9wZXJhbmRJc0xvY2FsKG9wZXJhbmQpICYmIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50
b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKworICAgICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgbG9jYWxz
VXNlZEZvckNhbGxlZVNhdmVzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5q
c1ZhbHVlKCk7CisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICAgICAg
fQogCiAgICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2st
Pm5ld1JlcGxhY2VtZW50KCk7CkBAIC0xNzgzLDcgKzE3ODMsNyBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShWTSogdm1Qb2lu
dGVyLCB1aQogICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRh
ZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2Zp
bGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1sw
XSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJh
bmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5MDcsOCArMTkwNyw4IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IHNjb3BlCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKIAotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQoKTsKKyAgICBhdXRvJiBzY29wZVNsb3QgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKHNjb3BlUmVnKSk7CisgICAgc2Nv
cGVTbG90ID0gc2NvcGVTbG90LlJlZ2lzdGVyOjpzY29wZSgpLT5uZXh0KCk7CiB9CiAKIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNPYmplY3QqIGNv
bnN0cnVjdG9yLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkSGFzSW5zdGFuY2UpCkBAIC0yNDE2LDcg
KzI0MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21T
Y29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNj
b3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFs
dWUoKSk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNv
ZGVCbG9jaykubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBjb252
ZXJ0ZWQgdG8gQ2xvc3VyZVZhciBmb3IgZ2V0X2Zyb21fc2NvcGUuCkBAIC0yNDU5LDggKzI0NTks
OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cgogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCogc2Nv
cGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1l
LT5yKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICBKU09iamVjdCog
c2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5
dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0g
bWV0YWRhdGEubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGRvZXMgbm90IGtlZXAg
dGhlIHNjb3BlIHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERGRy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYWI5OWZkOTg3YjA2MWYy
ZTc2YTE3YzI4YmU4YzRlNzI2NWEyZDgxNS4uZTcyOWZjMDU4ZWM2OGVjMTFmMzJkNTcwNzg5Yjc3
YTA5NzVkMjZmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiB7CiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIApAQCAtMTE3LDggKzExNyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5
VmFsSW5mbygpOwogCkBAIC0xNzcsNyArMTc3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQog
ewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwpAQCAtMjA4LDcgKzIwOCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0Nv
bnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAgfQog
ICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgogICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsK
QEAgLTIzNSw3ICsyMzUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CkBAIC0yNDksNyArMjQ5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSkKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMyk7CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVt
aXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVt
cHR5LmxpbmsodGhpcyk7CkBAIC0yNzQsOCArMjc0LDggQEAgSklUUHV0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0
ZWMKICAgICAvLyBwcm9wZXJ0eTogcmVnVDEKICAgICAvLyBzY3JhdGNoOiByZWdUMgogCi0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBl
bWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDEsIHByb3BlcnR5
TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTMwNCwxNCArMzA0LDE0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9w
IGJ5dGVjCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaW50IGJhc2U7Ci0gICAgaW50IHByb3Bl
cnR5OwotICAgIGludCB2YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogCiAgICAg
YXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKLSAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
Lm9mZnNldCgpOwotICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Cisg
ICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKKyAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIH07
CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC0zMzcsMzYgKzMzNywzNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJf
dCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2dldHRlci5vZmZzZXQoKSwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKQEAgLTM3NSwxOCArMzc1LDE4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVn
VDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJl
Z1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBpbnQgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwpAQCAtMzk1LDkgKzM5NSw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC00MDYsOCArNDA2
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00
NDUsOCArNDQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQ2OSw3ICs0
NjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDg1LDggKzQ4NSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTEzLDkgKzUxMyw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCByZWdUMCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTU1Niw3ICs1NTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CkBAIC01NzEs
OCArNTcxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBp
bnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlVlJl
ZyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUubV9mbGFncyAm
IFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNo
IGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUg
cG9pbnRlciwKQEAgLTYxNSw4ICs2MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNjM4LDcgKzYz
OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlk
PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9p
bkJ5SWRJbmRleCsrXTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUo
aW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25l
ZCBkZXB0aCkKK3ZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCkKIHsKICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
QEAgLTY3MCw4ICs2NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRl
cHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKQEAgLTc3MCw3ICs3NzAsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCkKIHsKICAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC03OTAsNyArNzkw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBv
cGVyYW5kLCBHUFJSZWcgcmVnKQogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKK3ZvaWQg
SklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CkBAIC04MDAs
OCArODAwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAg
dWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1l
dGFkYXRhLm1fb3BlcmFuZCk7CkBAIC05MTksMTcgKzkxOSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9
CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7CiB9
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2lu
dFNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiog
aW5kaXJlY3RXYXRjaHBvaW50U2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwpA
QCAtOTM4LDcgKzkzOCw3IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXCiAgICAgc3RvcmVQdHIo
cmVnVDAsIHJlZ1QxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9p
ZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC05NTAsOCArOTUwLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b1Njb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0
UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKQEAgLTEwODYsOCArMTA4Niw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29k
ZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJn
dW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKQEAgLTEwOTksOSArMTA5OSw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAg
aW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKQEAgLTExMTAsNyArMTExMCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
dW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVO
b3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVl
Tm90Q2VsbDsKQEAgLTExNTAsOCArMTE1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVs
ZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwpAQCAtMTE2NCw4ICsxMTY0LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEludGVybmFsRmllbGQ+KCk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTE3Niw3ICsxMTc2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZh
bHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSkgewpAQCAtMTQyNSw3ICsxNDI1LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1Qw
OwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVk
QXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHkKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJU
KGlzRmxvYXQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggMmNmOTE5OGY0MGVk
YWFmNTNhNjFkYmYzMzkwYTZjN2RiMjg2YTVjMS4uNjk5ODc2OWM1OGIwMGMwYmFjYzVjOTJmMWQ0
NzZhYTU3ZTM1MzMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0lu
dGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VK
SVQuaApAQCAtNDUsMTIgKzQ1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgaW5saW5lIEp1
bXAgZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJ
RCBkc3QpOwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsK
KyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIHBheWxvYWQpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9h
ZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2Ny
YXRjaCk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0
SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAg
aW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogI2VuZGlm
CiAKICAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnks
IFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAg
LTY0LDM2ICs2NCwzNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHBheWxvYWQpCiAgICAgewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJl
Z2lzdGVySW5kZXgpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0Nl
bGwodmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgcGF5bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlND
ZWxsKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklU
OjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1
YWxSZWdpc3RlckluZGV4KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lz
dGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4g
YnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIg
PCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihO
b3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4o
dmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAg
ICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+KHZp
cnR1YWxSZWdpc3RlckluZGV4KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwor
ICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6
ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3Rl
cklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXgpOwotICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNj
cmF0Y2gpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBz
Y3JhdGNoKTsKICAgICAgICAgSnVtcCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3JhdGNo
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90SW50
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgp
LCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwog
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhpcyk7
Ci0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRz
dCk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3Qp
OwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAg
fQpAQCAtMTAxLDIzICsxMDEsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIGRzdCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgZHN0KTsKICAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0KICAg
ICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAg
ICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0
KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAg
ICAgICAgSnVtcCBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAgemVy
b0V4dGVuZDMyVG9QdHIoZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAgICAg
fQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRz
dCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAg
ICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAg
ICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAg
ICAgIEp1bXAgbm90TnVtYmVyID0gYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAgICAg
IEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKQEAgLTEzNywyNCArMTM3LDI0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVu
dHJ5KSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVy
KGVudHJ5KSk7CiAjZWxzZQotICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkp
KTsKKyAgICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihlbnRy
eSkpKTsKICNlbmRpZgogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCiAg
ICAgewotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0Zvcihl
bnRyeSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoZW50cnkpKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2
b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5KSk7
Ci0gICAgICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOworICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKFZpcnR1YWxSZWdpc3Rl
cihlbnRyeSkpKTsKKyAgICAgICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdp
c3RlcihlbnRyeSkpKTsKICNlbHNlCi0gICAgICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihl
bnRyeSkpOworICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
KGVudHJ5KSkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0YWIyNjcxNTVjMTNk
ZjM2YTcyNDliNmMzNDMuLjllM2Q3NjMzZjllY2ExYTQyNmVhMTllNWQ4ZTkyOTg1MzI1ZDllOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKICAgICAgICAgICAgIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVn
aXN0ZXJzKCk7CiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVk
IG51bWJlciBvZiBhcmd1bWVudHMKLSAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBU
cnVzdGVkSW1tMzIoZXhwZWN0ZWRBcmdDb3VudCArIDEpKSk7CisgICAgICAgICAgICBtX2ZhaWx1
cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRBcmdD
b3VudCArIDEpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IFNwZWNp
YWxpemVkVGh1bmtKSVQoVk0mIHZtKQpAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50IGFyZ3VtZW50
LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQp
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2Fk
RG91YmxlKHNyYywgZHN0LCBzY3JhdGNoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHZvaWQgbG9hZENlbGxBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFw
cGVuZChlbWl0TG9hZEpTQ2VsbChzcmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
NzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9h
ZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRh
cmdldCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgZmFp
bFRhcmdldCA9IGVtaXRMb2FkSW50MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDUy
NDFlNWY3Y2MzMzJhNjRlMGRlNmRiNDRiZGFmOWU4ZTgwZjIyYWEuLmFkYTQ1OTZiMWI0ODgzYjc0
MDczNTU5YzQ2NTYwN2Q5NDE0Yjc2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTQwMSw3ICs0MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMywgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwogI2Vu
ZGlmCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEpTSW50ZXJmYWNlSklUOjphcmd1
bWVudEdQUjIpOworICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OmFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgSlNJbnRlcmZhY2VK
SVQ6OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVk
SW1tMzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6
YXJndW1lbnRHUFIyKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGV4dHJhIHNs
b3RzIHdlIGNhbiB1c2UKQEAgLTQ2Miw3ICs0NjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5yZXQo
KTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIHNlY3Rpb24gYWJvdmUsIFVTRShKU1ZBTFVFMzJf
NjQpIHNlY3Rpb24gYmVsb3cuCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5sb2FkMzIoSlNJbnRl
cmZhY2VKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIEpTSW50
ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOworICAgIGppdC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6
OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmFkZDMyKEpTSW50ZXJm
YWNlSklUOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBK
U0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3
ZSBoYXZlIGV4dHJhIHNsb3RzIHdlIGNhbiB1c2UKQEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZt
KQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4
ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMCk7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdl
ciA9IGppdC5icmFuY2hJZk5vdEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJ
bnQzMi4KQEAgLTExMzYsOCArMTEzNiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAg
aml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgCiAgICAgLy8gU2V0IHVwIG91ciBjYWxs
IGZyYW1lLgotICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsKLSAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkp
OworICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKIAogICAgIHVuc2lnbmVkIGV4dHJhU3RhY2tOZWVkZWQgPSAwOwogICAgIGlmICh1bnNp
Z25lZCBzdGFja01pc2FsaWdubWVudCA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAlIHN0YWNr
QWxpZ25tZW50Qnl0ZXMoKSkKQEAgLTExNTgsNyArMTE1OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9y
KFZNJiB2CiAgICAgLy8KICAgICAvLyBUaGF0J3MgcmVhbGx5IGFsbCB0aGVyZSBpcyB0byB0aGlz
LiBXZSBoYXZlIGFsbCB0aGUgcmVnaXN0ZXJzIHdlIG5lZWQgdG8gZG8gaXQuCiAgICAgCi0gICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbGVyRnJhbWVBbmRQQzo6
c2l6ZUluUmVnaXN0ZXJzKSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICBq
aXQubHNoaWZ0MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1l
bnRCeXRlcygpIC0gMSksIEdQUkluZm86OnJlZ1QyKTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKFZNJiB2CiAgICAgCiAgICAgaml0Lm5lZ1B0cihHUFJJbmZvOjpyZWdU
Mik7CiAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBH
UFJJbmZvOjpyZWdUMik7Ci0gICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LmxvYWRD
ZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSksIEdQUkluZm86OnJlZ1QzKTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2
ZVN0YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBD
Q2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgp
KSwgR1BSSW5mbzo6cmVnVDIpOwogCiAgICAgLy8gVGhyb3cgU3RhY2sgT3ZlcmZsb3cgZXhjZXB0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCmluZGV4IDk1MWQ3
NjlkNjkyNDliZjNhYzk4ZjQ0MDgzNDFmNjUxMDJhOTU1YzEuLmFmZWVjYmFjMDdiMWViMTcwZWQ2
ZDQ0NjU1MDgyNTdkYTc2NTFiZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludENvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dENvbW1vbi5oCkBAIC0yOSw3ICsyOSw3IEBACiAvLyAtIFByaW50cyBldmVyeSBpbnN0cnVjdGlv
biBleGVjdXRlZCBpZiBPcHRpb25zOjp0cmFjZUxMSW50RXhlY3V0aW9uKCkgaXMgZW5hYmxlZC4K
IC8vIC0gUHJpbnRzIHNvbWUgaW5mb3JtYXRpb24gZm9yIHNvbWUgb2YgdGhlIG1vcmUgc3VidGxl
IHNsb3cgcGF0aHMgaWYKIC8vICAgT3B0aW9uczo6dHJhY2VMTEludFNsb3dQYXRoKCkgaXMgZW5h
YmxlZC4KLSNkZWZpbmUgTExJTlRfVFJBQ0lORyAwCisjZGVmaW5lIExMSU5UX1RSQUNJTkcgMQog
CiAvLyBEaXNhYmxlIGlubGluZSBhbGxvY2F0aW9uIGluIHRoZSBpbnRlcnByZXRlci4gVGhpcyBp
cyBncmVhdCBpZiB5b3UncmUgY2hhbmdpbmcKIC8vIGhvdyB0aGUgR0MgYWxsb2NhdGVzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3
YTQ2ZThlNTc4OTdmMjc4NWNkMzM5ZmNiZTJiYzBjOTBjZWRiMi4uOGZjYzVkYjhkODM4YjkyMjIx
YjE3MmU4OWE3YzgzMmUwMmM2ZjBjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUg
IkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFs
dWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0
dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVy
YW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1
cm4gY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpT
VmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQp
LmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVy
YW5kKS5qc1ZhbHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNv
bmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNv
bmQpOyAgICAgICAgXApAQCAtMTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9h
cmd2OwogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhieXRlY29kZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNr
ZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFs
dWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4
OSw3ICsxNjkwLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndh
cmRBcmd1bWVudHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxl
ZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52
YXJhcmdzTGVuZ3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJh
bWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkg
PSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZy
YW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3
MjUsNyArMTcyNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVl
RnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAg
ICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJh
bWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7Cisg
ICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMo
cmV0dXJuUG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENv
ZGVCbG9jayhudWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAt
MTkzMCw3ICsxOTMxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVf
Y2F0Y2gpCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRh
Lm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
eworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0g
SlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCku
anNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjMgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5U
X0VORF9JTVBMKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lk
IGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gc2lkZVN0YXRlLmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJ
bnQzMigpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgewor
ICAgICAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5
dGVjb2RlLm1fYXJndW1lbnRzKS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMSk7CisgICAgfSk7CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAg
ICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAh
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmpl
Y3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQo
Y2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJl
c3VsdDsKK30KKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVj
dGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sK
KyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
aykgeworICAgICAgICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50
cnlQdHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpLCAwKTsKKyAgICB9CisKKyNpZiBFTkFC
TEUoSklUKQorICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCk7CisgICAgQnl0ZWNvZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRleCA9IHBjLm5leHQo
KS5pbmRleCgpOworICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkuZmluZChuZXh0Qnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0
Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7CisjZW5kaWYKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBz
bG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxs
KENhbGxGcmFtZSogY2FsbEZyYW1lLCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUgcmVzdWx0KQorewor
ICAgIC8vIFNpbmNlIGFsbCBvdXIgY2FsbGluZyBjaGVja3BvaW50cyBkbyByaWdodCBub3cgaXMg
bW92ZSByZXN1bHQgaW50byBvdXIgZGVzdCB3ZSBjYW4ganVzdCBkbyB0aGF0IGhlcmUgYW5kIHJl
dHVybi4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0
ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7
CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCkubV9kc3Qp
ID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3Mgc2hvdWxkIG5ldmVyIHJldHVybiBpZiB0aGUgdGhpbmcgaXQgd2FzIGNhbGxpbmcgd2FzIGlu
bGluZWQuCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3Ry
dWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSk7Citl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhp
dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAg
IFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpOworCisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgp
OworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwg
cGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdz
Q2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENvbnN0cnVj
dFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5l
eHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9yZXQsICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwg
Y2FsbHMgYXJlIGZvbGxvd2VkIGJ5IGFuIG9wX3JldC4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJn
c0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2Fs
bFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KHJldHVyblRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVy
biBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0q
IHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKLQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRy
OwogICAgIGlmIChjYWxsRnJhbWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRUaHVua3MuaAppbmRleCBmY2FmODBkYTFjYjVjNDZjNTBlZTdmN2Y1ODA1MzNmN2Y1M2NlMDQx
Li5jZDQ1YWYxMGIzMTNhOTE2YjBkM2VlYzBiZGJhMTZlY2Y4ZmQ4YWI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApAQCAtMzYsNiArMzYsOCBAQCB0eXBlZGVm
IGludDY0X3QgRW5jb2RlZEpTVmFsdWU7CiBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1
ZSB2bUVudHJ5VG9KYXZhU2NyaXB0KHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAg
RW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0aXZlKHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1l
Kik7CisgICAgdm9pZCBjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQoKTsKKyAgICB2b2lk
IGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCgpOwogfQog
CiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0s
IFByb3RvQ2FsbEZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEy
ODU2MDFiY2FiMzBjODhmMmU0Li45ZWU2OTViMjcwZGFmOTZhMmEzNDc0NGM4MzFiNzk4ZDJkNWNk
OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JF
eGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJl
bChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAg
ICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJ
bnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNl
bGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwx
NyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3Vs
YXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJh
cmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1Bh
dGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0
aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAg
IGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90
aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246CisgICAgam1wIGV4
Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJh
cmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1Bh
dGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0
aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJh
bXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAg
ICAgIG1vdmUgcjEsIHNwCkBAIC0xOTk5LDYgKzIwMDMsMjIgQEAgb3AobGxpbnRfaW50ZXJuYWxf
ZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAgaW50ZXJuYWxGdW5j
dGlvbkNhbGxUcmFtcG9saW5lKEludGVybmFsRnVuY3Rpb246Om1fZnVuY3Rpb25Gb3JDb25zdHJ1
Y3QpCiBlbmQpCiAKK2lmIG5vdCBDX0xPT1AgYW5kIG5vdCBDX0xPT1BfV0lOCisgICAgZ2xvYmFs
IF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQKKyAgICBf
Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50OgorICAgICAg
ICBtb3ZlIHIwLCBhMgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3BvaW50
X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihf
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIwCisK
KyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludAorICAgIF9jaGVja3Bv
aW50X29zcl9leGl0X2VudHJ5cG9pbnQ6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJs
eSBkaXNwYXRjaCB0byB0aGUgY2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdh
cyBlYXNpZXIgCisgICAgICAgICMgYW5kIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGZvciBwZXJm
b3JtYW5jZS4KKyAgICAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3Jf
ZXhpdCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19w
YXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMAorZW5kCiAKICMgTGFzdGx5LCBtYWtlIHN1
cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNv
ZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50
IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCAzZGQyZWI0OGNiYmE2ZWY1
Y2Q5ODg2MzljNzkxMWUyMmE3MTMzMTQ4Li5iZGUwMmM2MzRiMDk4MmFkOWEzMmM0ZTQ4NGVmM2Nh
ZjczMDdiN2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIsMTcgQEAgbWFjcm8gbmV4dEluc3Ry
dWN0aW9uV2lkZTMyKCkKICAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFn
CiBlbmQKIAorbWFjcm8gc3RvcmVQQygpCisgICAgbHNoaWZ0aSBjb25zdGV4cHIgQnl0ZWNvZGVJ
bmRleDo6Y2hlY2twb2ludFNoaWZ0LCBQQworICAgIHN0b3JlaSBQQywgTExJbnRSZXR1cm5QQ1tj
ZnJdCisgICAgcnNoaWZ0aSBjb25zdGV4cHIgQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0
LCBQQworZW5kCisKK21hY3JvIGxvYWRQQygpCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJd
LCBQQworICAgIHJzaGlmdGkgY29uc3RleHByIEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlm
dCwgUEMKK2VuZAorCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1Y3QsIGZpZWxk
TmFtZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8lZmllbGROYW1l
JV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZApAQCAtOTIsNyArMTAzLDcgQEAgZW5kCiAKICMg
QWZ0ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFpbWluZyBpbnB1dCByZWdpc3Rl
cnMgYXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0s
IFBDCisgICAgbG9hZFBDKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNp
emUsIG9wY29kZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzkwLDcgKzQwMSw3IEBAIGVuZAogCiAj
IENhbGwgYSBzbG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1Bh
dGgoc2xvd1BhdGgsIGFjdGlvbikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdP
ZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAg
ICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpAQCAtMzk5LDIwICs0MTAsMjAgQEAgbWFj
cm8gY2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQogZW5kCiAKIG1hY3JvIGNhbGxU
cmFwSGFuZGxlcih0aHJvd0hhbmRsZXIpCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsg
VGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgp
CiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Ns
b3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxv
YWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkaSBMTEludFJl
dHVyblBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQog
ICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAgICAgICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAg
ICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAg
ICAgICBzdG9yZVBDKCkKICAgICAgICAgICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICAg
ICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTQyMSw3ICs0
MzIsNyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3Zl
IHIxLCBzcAogICAgICAgICAgICAgam1wIHIwLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIC5yZWNv
dmVyOgotICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQ
QworICAgICAgICAgICAgbG9hZFBDKCkKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTIwNTcsNyAr
MjA2OCw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAg
ICAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1
Y3QsIG1fYXJnYywgdDIpCi0gICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09m
ZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50
Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAgICBw
cmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFj
aGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4IDg0MGY4OWI4OGQ0MjBjYzNiNzVjODNk
NmM1NzgyNDE1NDAyZjMzNjYuLjhmNTA1Y2M2OTljZDRhZTM3ZWYzNDUwMGZkZmJlNjk5OTgwN2Nk
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKQEAgLTEzMyw2ICsx
MzMsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBvdmVyZmxvd0NoZWNrTm90TmVlZGVkKCkgeyBj
bGVhck5lZWRzT3ZlcmZsb3dDaGVjaygpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZmlsbChzaXplX3QgY291bnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAgICAgIGVuc3VyZUNhcGFjaXR5KGNv
dW50KTsKKyAgICAgICAgaWYgKEJhc2U6Omhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9zaXplID0gY291bnQ7CisgICAgICAgIGZ1bmMocmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKj4oJnNsb3RGb3IoMCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9p
ZCBleHBhbmRDYXBhY2l0eSgpOwogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IG5ld0NhcGFj
aXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApp
bmRleCBmOGQ5Nzk5NTg3NDUyMjZhNDdlNmY4YjZjNTU4NjBjMThmY2U4N2ExLi5mZmI3NDU5YTZh
ZGNjYmFiMTZkYThhNGVmOGIxNzExZDg3MmExYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xNzg4LDYgKzE3ODgsNyBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJp
dmVkQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWduZWQgaGFzQ2hlY2tw
b2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAgdW5zaWduZWQg
bGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25lZCBl
bmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCkBAIC0xODIwLDYgKzE4
MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKICAg
ICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6
IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVja3BvaW50cyA6IDE7CiAKICAgICBDb2RlRmVhdHVy
ZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC0yMDE4
LDYgKzIwMjAsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENv
ZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqCiAKICAgICAsIG1fZGlkT3B0aW1p
emUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkK
KyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2FjaGVkQ29kZUJsb2NrLmhhc0NoZWNrcG9pbnRzKCkp
CiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKCkpCiAgICAgLCBt
X3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKCkpCkBAIC0yMjA2LDYgKzIyMDks
NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29ucwogICAgIG1fcGFyc2VNb2RlID0gY29kZUJsb2Nr
Lm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdlbmVyYXRpb25Nb2RlID0gY29kZUJsb2NrLm1fY29k
ZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsK
KyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAKICAg
ICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7
CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAKaW5kZXggZjM1OGQ0OGE1MGRlNzNlYWIzODU2OTliM2E2ZjUxMTNiYmJlOWJiYS4uZTI3
ZmUzY2E5NzhiMzk0NDgyNjE2N2Q0YTA2MWEyZWFkNGY5MjYxNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05OCw4ICs5OCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAg
ICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RVQlMoKQogCi0jZGVmaW5lIEdFVChvcGVyYW5kKSAo
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRfQyhv
cGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpKQorI2RlZmluZSBHRVQob3Bl
cmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkKKyNkZWZpbmUgR0VUX0Mob3Bl
cmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKIAogI2RlZmluZSBSRVRVUk5fVFdPKGZpcnN0
LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0
LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTEzOSw4ICsxMTM5LDcgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQogewogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsK
LSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0
ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEdFVF9DKGJ5dGVjb2RlLm1f
c3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRf
QyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChpbml0aWFs
VmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsK
QEAgLTExNTUsOCArMTE1NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhf
c2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNvZGUubV9uZXdTY29w
ZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZzZXQo
KTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2Nv
cGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2N1cnJlbnRTY29wZSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
Y3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQogCkBAIC0xMTY1LDcgKzExNjMsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNs
X2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVz
b2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsKICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
ICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKIAogICAgIENI
RUNLX0VYQ0VQVElPTigpOwpAQCAtMTE3OSw3ICsxMTc3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUp
LlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29w
ZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8gUHJveHkgY2Fu
IHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5z
Y29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xNDI0LDcgKzE0MjIsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICBB
U1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0
YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOworICAgIEFTU0VSVChieXRlY29kZS5tX2ltbXV0YWJs
ZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwogICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11
dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRf
QyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAg
ICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NDMsNyArMTQ0MSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxv
Y2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3Mg
aW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRpb24g
dGhyZWFkLgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICBjb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0
KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNl
dCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogICAgIH0KIApAQCAtMTQ4OCw0ICsxNDg2LDE2IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9zcHJlYWQpCiAgICAgUkVUVVJOKEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpj
cmVhdGVGcm9tQXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwgYXJyYXkpKTsKIH0KIAorZXh0ZXJuICJD
IiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpOworZXh0ZXJuICJDIiB2b2lk
IGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpCit7CisgICAgZGF0YUxvZ0xuKFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkpKTsKK30KKworLy8gZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CisvLyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjLCApCisvLyB7CisKKy8vIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRiZDE5MmE2
Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQxYjc4ZTYz
MTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1
Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9CisK
K0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
NDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3Qo
Z2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0
RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1
Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0KIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25z
dHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1Rh
cmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmExMWQ3Y2Vl
MjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2JhZWI2Y2Fj
MTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVj
dERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAKIC8vIENv
bnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENhbGxEYXRh
IGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpTX0VYUE9S
VF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsK
K0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYs
IGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1
Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3
VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5
cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29u
c3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFlZmFmZDQz
YTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApA
QCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQo
Vk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChpbmRleCwg
aW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYXBwZWRB
cmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGggKyBv
ZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAgZm9yIChp
ID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFy
dCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0KGds
b2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRd
ID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBH
ZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRz
Ojpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQs
IGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1lbnRz
U2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEuLjhkOTY0
MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+
Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAgfQog
Ci0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBW
aXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1ZWJiN2Vl
MWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVlYjI3MmNi
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9kaWZpZWRB
cmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9IENh
Z2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2RpZmllZEFy
Z3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmlu
ZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFiZjVmMmVl
MTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtMjk3LDcg
KzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50
RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMwNSw5
ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50
KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSAr
IG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOworICAgICAg
ICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5k
ZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5MTcxMWVl
ZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJheTo6Zmls
bEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZm
ZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0KIAot
dm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQog
ICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0
aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQp
ID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAgICBmaXJz
dEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwxMSArMTI5
NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0g
di5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYuZ2V0KCk7
CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2Fs
bEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9iYWxPYmpl
Y3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2Jh
bE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmluZGV4IDMx
Nzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5MjU0Y2Mx
YTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2
YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRl
YTE5YTFjNDljMC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCks
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVy
Zmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkK
LSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSAr
IG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZz
ZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3Rb
aV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggYTE4MmRjNjYxOGZh
YWJiZmNiM2NlNjNlMDdjMTcxNWRmOGQxZDQ5Yi4uNDgyZTAyNmEyMWY1NjJkYjVlMzcyNjM3MzA3
OWE1ZWM1NTU0OTc4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbW11dGFibGVCdXR0ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0g
ICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBDb21w
bGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcAppbmRleCBhNmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2
ODM0OTdlLi4xNmFhMzY5ZjQ4NTA3MDYxYzA2MzYxNTE4YWUxNWQyYmM2OGZiNmRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTIwNCw2ICsyMDQsNyBAQCB2
b2lkIEpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKCkKIHsgICAKICAgICBSZWZQdHI8Vk0+IHZtID0g
bV92bTsKICAgICBpZiAodm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdF
KCF2bS0+aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpLCAiUmVsZWFzaW5nIEpTTG9jayBidXQg
cGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGUgc3RpbGwgYXZhaWxhYmxlIik7CiAgICAgICAg
IHZtLT5kcmFpbk1pY3JvdGFza3MoKTsKIAogICAgICAgICBpZiAoIXZtLT50b3BDYWxsRnJhbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZS5jcHAKaW5kZXggZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2
ZGUzN2JhMC4uNTk2ODA4Y2FmYzBiMGY0Yzg0NzBiZDc1OWVkOWY0OTE2YzY2NDQ4NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSog
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwog
CiAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0KGds
b2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZSk7
CiAKLSAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGds
b2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNl
dCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOworICAgIGV4
ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0
LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rl
ck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsK
IAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAppbmRleCA0MTM4N2M4NTBhOTk1YWQ1NzQyMTA1MGNkZTg2Y2IyNTIxZTU0
MTE2Li4zZDc3NTdiMmUxN2RkYzFjMThjYWYxMTM0Y2E5OTQxMjg4YjVkNDU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTA5LDEyICs1MDksNiBAQCBz
dGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBpZiAoT3B0aW9uczo6
c29mdFJlc2VydmVkWm9uZVNpemUoKSA8IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1p
bmltdW1SZXNlcnZlZFpvbmVTaXplKQogICAgICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25l
U2l6ZSgpID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9u
ZVNpemU7CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIC8vIEZJWE1FOiBNYWtlIHByb2Jl
IE9TUiBleGl0IHdvcmsgb24gMzItYml0OgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYKLSAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9
IGZhbHNlOwotI2VuZGlmCi0KICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAg
ICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCAwM2YyODUyNDRkYjk5MDJlYWJh
OTZkNjk3N2UzYjdkMzkxOTdkZTUyLi40ZDE1NmNmNzNkZmNkNTRmZmE4M2RjZDc5OGVkN2VhZDZj
NWJhYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
QEAgLTE0OSw3ICsxNDksNiBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVh
bWluZ0FwaSA9IGZhbHNlOwogICAgIHYoQm9vbCwgdmVyYm9zZUNvbXBpbGF0aW9uLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2ZXJib3NlRlRMQ29tcGlsYXRpb24sIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoQm9vbCwgdXNlUHJvYmVPU1JFeGl0
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBwcmludEVhY2hPU1JFeGl0
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2YWxpZGF0ZUdyYXBoLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB2YWxpZGF0ZUdyYXBoQXRFYWNo
UGhhc2UsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4MWQ5NzhhN2IyYTYyNjZh
YzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2MDVmYmY1MjViZGRmMjMx
OTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp1
bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAgc3RvcmFnZSgpW2kgLSBu
YW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5lcmljQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3Qs
IG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMo
Z2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYyOWVkNGNiMWI0ZTk3MjA0
NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUwODRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaApAQCAtMTQyLDcg
KzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8U2NvcGVk
QXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV90YWJsZS0+
bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5ZDU0ZmRjZDg0NzNkNzIzZmJhZWNhNTEzNDkw
NjFkOTUyMDI0YjkxLi43MDc4MzM0YTU1MmI1YTE2Yzk2OWQzMWFlMWQxMDg5ZDk5OTEzNzhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5FeGVjdXRhYmxlcy5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMTAyOSw2ICsx
MDMwLDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVS
b290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYKIAordm9pZCBWTTo6YWRkQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc3RkOjp1bmlxdWVfcHRyPENo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxvYWQpCit7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jaGVj
a3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdURk1vdmUocGF5bG9hZCkpOworICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gVk06OmZpbmRDaGVja3BvaW50
T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIHNpZGVTdGF0ZSA9IG1fY2hlY2tw
b2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHNpZGVTdGF0ZTsKK30K
Kwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IGU5YTkwZjA5MGFmNWFhOGY4YTNiMTczZjIxNGViZWEyMzZhMzlk
NDAuLmQwMTU0YjVkYzBmZmZjN2E0MmJkYTg1ZTQ0YzEyYTBkMjlmNmNjYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3Ry
eTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsK
IGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZp
ZXJzOwpAQCAtOTQ4LDYgKzk0OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdhdGhlclNjcmF0
Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogCisgICAgdm9pZCBhZGRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqKTsKKyAgICBi
b29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrcG9p
bnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVudHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAK
ICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIg
fTsKQEAgLTExOTgsNiArMTIwMyw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX3NjcmF0Y2hCdWZm
ZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gbV9zY3JhdGNoQnVmZmVyczsKICAg
ICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsKKyAgICBIYXNoTWFwPENh
bGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4+IG1f
Y2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxl
cj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDllMGJlYTNh
ZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMw
ZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8
dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAq
bV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3Rh
bnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFu
dFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29u
c3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFu
dFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChP
cHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1f
Y29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAg
ICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwogICAgIH0K
IAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0
cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAKaW5kZXggYWIxNzQwNmFmYjczNGE3MDhkZjExZGJiNjgwMTUxOGI3NjY1ZmI0Mi4u
ZWUyYjMyN2QyYWY1NDcxOTY4Nzk2OWFjMjUyYTg0Yzc4OGVmNmU5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsNiAr
MjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJ
bnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAgICAvLyBX
ZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNv
ZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNv
bnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDVhOGViYjgxZDJkYmVlMDNhYzY5MzJhY2VmNmZiYjQ3
MjcyZWM4NGIuLmMyNDA2OTA5MzlkMmNlMDE0YTE3M2IyZTM3OWMyZGIxOTkyZDNkNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBAIC03NSw3ICs3
NSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogCiAjZGVmaW5lIFJFQUQo
dmlydHVhbFJlZ2lzdGVyKSBcCiAgICAgKHZpcnR1YWxSZWdpc3Rlci5pc0NvbnN0YW50KCkgXAot
ICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSkpIFwKKyAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9C
TE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIpKSBcCiAgICAgICAgIDogY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlcikpCiAKIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUsIFdhc206OkZ1bmN0aW9uQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXgg
YTQ5NzNlYmJhMDQ2OGE2NWRiOTVjOGJhODMyNjRhZDhmYTg2ZGRkOS4uN2E3MjViMGJjMTViNmU5
YjY1NjYxNWFlNjk3ZTBmYzg3ZjgzZDFmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTIyMCw3ICsyMjAsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlv
bjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogCiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3Vl
KCk7CiAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJh
bWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBqaXQu
c3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjphZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9yZTY0KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsKIAogICAgIGZvciAoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CiAgICAg
ICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKQEAgLTI0Myw3ICsyNDMs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5j
dGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGFu
ZGxlIG1pc21hdGNoZWQgYXJpdHkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk2NTY0CiAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkJlbG93LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgKyAxKSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDEpKSk7
CiAKICAgICBpZiAodXNlVGFnUmVnaXN0ZXJzKCkpCiAgICAgICAgIGppdC5lbWl0TWF0ZXJpYWxp
emVUYWdDaGVja1JlZ2lzdGVycygpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBv
aW50U2xvdygpCiAgICAgLy8gMi4gV2UgbmVlZCB0byBrbm93IHRvIHJlc3RvcmUgdGhlIHByZXZp
b3VzIHdhc20gY29udGV4dC4KICAgICBpZiAoIW1fanNUb1dhc21JQ0NhbGxlZSkKICAgICAgICAg
bV9qc1RvV2FzbUlDQ2FsbGVlLnNldCh2bSwgdGhpcywgSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QoKSwgdGhpcykpOwotICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9qc1RvV2FzbUlDQ2FsbGVlLmdldCgpKSwgQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qc1RvV2FzbUlDQ2FsbGVlLmdldCgpKSwgQ0Nh
bGxIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSk7CiAKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UganVzdCBkbyBh
biBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNoIHRoZSBNb2R1bGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKaW5k
ZXggNGM2ZjVkNDQyNjMyYzNlZmMwMDBiZDE4ZTllMzY5NDUyZmFmMWMxMC4uYjQ2ZGE5ZTg1YWI5
YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Qml0bWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKQEAgLTUxLDYgKzUxLDcgQEAg
cHVibGljOgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAg
IHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBpbnZl
cnQoKTsKICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNpemVfdCBydW5MZW5ndGgpIGNvbnN0
OwogICAgIHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAwKSBjb25zdDsKICAgICBzaXplX3Qg
aXNFbXB0eSgpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3I9KGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYml0bWFw
LT5zZXQobV9pbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBCaXRtYXAqIG1fYml0bWFwOwogICAg
ICAgICBzaXplX3QgbV9pbmRleDsKQEAgLTExMSw2ICsxMTgsOSBAQCBwdWJsaWM6CiAgICAgaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgZmluZEJpdCgwLCB0
cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgYml0bWFwU2l6ZSk7IH0KICAgICAKKyAgICBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCk7
CisgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0OworCiAgICAgdm9p
ZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5kQ2xlYXIoQml0bWFwJik7
CiAgICAgCkBAIC0yMjQsNiArMjM0LDEzIEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQoYml0cy5kYXRhKCksIDAsIHNpemVv
ZihiaXRzKSk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmludmVydCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBiaXRz
W2ldID0gfmJpdHNbaV07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewpAQCAtNDA5LDYgKzQyNiwx
OSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvciE9
KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Citp
bmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgLT4gaXRlcmF0b3IKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAg
IHJldHVybiBpdGVyYXRvcigqdGhpcywgaW5kZXgpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgLT4gY29uc3QgaXRl
cmF0b3IKK3sKKyAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT4qPih0aGlzKSlbaW5kZXhdOworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwg
dHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0
Qml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKaW5kZXggODg1Yjdi
MTczYjExYTYwMWJlMjlhMzMyYWI5ZDJhNDE0ZDU2MjEyMi4uYTM4Yzk2YzM0OTNlOWQxMGQ1NmE4
MGI1YmQ3NWYxZDRhNmNiZjMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZl
Y3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaApAQCAtNDY0LDYgKzQ2
NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIEZhc3RC
aXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhp
cyA9IHZhbHVlIDogKnRoaXM7IH0KKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRvciY9KGJv
b2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgOiAqdGhpcyA9IHZhbHVlOyB9CisKIHBy
aXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29yZCB7IG51bGxwdHIgfTsKICAgICB1aW50MzJfdCBt
X21hc2sgeyAwIH07CkBAIC01MDksNyArNTEyLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBGb3IgdGVtcGxhdGlu
ZyBhcyBWZWN0b3I8Ym9vbD4KKyAgICB2b2lkIGZpbGwoYm9vbCB2YWx1ZSkgeyB2YWx1ZSA/IHNl
dEFsbCgpIDogY2xlYXJBbGwoKTsgfQorICAgIHZvaWQgZ3JvdyhzaXplX3QgbmV3U2l6ZSkgeyBy
ZXNpemUobmV3U2l6ZSk7IH0KKwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyUmFu
Z2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4N2M3MjI1NTQ3MjhiMDQ1MjRmNmI0
MjNmYzAxZDFhNWMwNzAzYmY1Li41ODI4YmIwZWUwZmRkZGNhOWZlMzEzNDlhZWZkYjYyOWFjNTg0
NGY5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRo
ZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmVtb3ZlIHByb2JlIE9TUiBleGl0IG9w
dGlvbiBzaW5jZSB3ZSBhcmUgbm90IHVzaW5nIHRoYXQgYW55bW9yZS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHM6CisKIDIwMTktMTItMTMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IHRoZSBtYWNDYXRhbHlzdCBidWlsZCBh
ZnRlciByMjUzNDg2CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCA1MTQyM2E3NThh
ZjgyMDQyZTk1OGExODhlNjJkNzNmYzcwODM1NWI3Li42NTU3NzQwZjdkYTE3ZTAxZTViZDEyMjQ5
M2NiMDM3YjdmNGVjYjdlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTQ5OCw3
ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIs
ICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMAogQjNPMV9PUFRJT05TID0gWyItLWRl
ZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0gWyItLW1heERGR05vZGVzSW5CYXNp
Y0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRlZmF1bHRCM09wdExldmVsPTAiXQog
RlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQotUFJPQkVfT1NSX0VYSVRfT1BUSU9O
ID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyA9
IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQogCiByZXF1aXJlX3JlbGF0aXZlICJ3ZWJr
aXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3skdGVzdFdyaXRlcn0iCkBAIC03MTMsNyAr
NzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVy
IiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwg
Ii0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09Q
VElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAi
LS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1h
aXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJ
VE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtNzI5
LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxpZGF0aW9uKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMgKyBDT0xM
RUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsgRk9SQ0Vf
TExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBy
dW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09Q
VElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZjYzM3OThmYWQ0MzZjY2IxZDg4M2I1MTlm
YTEuLmQ2NTE2MjU3OGIxMDI5ODQxZmMzNjdmODk5OWU1NTc2YzgyYzA2M2UgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTktMTItMTMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisK
KyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2Yg
YSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRp
b25zLW9jY2FzaW9uYWxseS5qczogQWRkZWQuCisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50KToK
KyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJheS5n
ZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1s
ZW5ndGgtb25jZS5qczogQWRkZWQuCisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAgICAg
ICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQgbGVu
Z3RoKToKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFu
ZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorCisyMDE5LTEyLTEzICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwg
c2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2xvYWQt
dmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanM6CisgICAgICAgIChj
aGVja0VxdWFsKToKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJyYXksIGFuZCB1c2UgSlNJbW11
dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXBwbHkt
b3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5q
cyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2Ut
ZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNmMTVhNmViOGMyN2NjMGFk
MmU5ZjU5NTQxZmZlMmM1MGFjMGEyMwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNz
L2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lv
bmFsbHkuanMKQEAgLTAsMCArMSwzNiBAQAorCitsZXQgY3VycmVudEFyZ0NvdW50OworZnVuY3Rp
b24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKKyAgICByZXR1cm4gY3VycmVudEFyZ0NvdW50OworfQor
bm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7CisKK2Z1bmN0aW9uIGNhbGxlZSgpIHsKKyAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigpOworfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgY2FsbGVlLmFw
cGx5KHVuZGVmaW5lZCwgYXJyYXkpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2xldCBsZW5ndGhD
YWxscyA9IDA7CitjdXJyZW50QXJnQ291bnQgPSAyOworbGV0IGFycmF5ID0geyAwOiAxLCAxOiAy
LCBnZXQgbGVuZ3RoKCkgeworICAgIGlmIChsZW5ndGhDYWxscysrICUgMTAgPT0gMSkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJ0aHJvd2luZyBhbiBleGNlcHRpb24gaW4gbGVuZ3RoIik7Cisg
ICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudAorfSB9Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNjsg
aSsrKSB7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdChhcnJheSk7CisgICAgfSBjYXRjaCB7IH0K
K30KKworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2FsbHMgPSAwOwordGVzdChhcnJh
eSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJvdyBuZXcgRXJyb3IobGVuZ3Ro
Q2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxk
LWdldC1sZW5ndGgtb25jZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3Vs
ZC1nZXQtbGVuZ3RoLW9uY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzBmZGIzYjkzYWEwYTEzNmZlMGZlNGI4
MTFlOTYwOGE5NzQ5YTg3MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5
LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKQEAgLTAsMCArMSwzMCBAQAorCits
ZXQgY3VycmVudEFyZ0NvdW50OworZnVuY3Rpb24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKKyAgICBy
ZXR1cm4gY3VycmVudEFyZ0NvdW50OworfQorbm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7CisK
K2Z1bmN0aW9uIGNhbGxlZSgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3Rl
ZEFyZ0NvdW50KCkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCitmdW5jdGlvbiB0
ZXN0KGFycmF5KSB7CisgICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwgYXJyYXkpOworfQorbm9J
bmxpbmUodGVzdCk7CisKK2xldCBsZW5ndGhDYWxscyA9IDA7CitjdXJyZW50QXJnQ291bnQgPSAy
OworbGV0IGFycmF5ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkgeyBsZW5ndGhDYWxscysr
OyByZXR1cm4gY3VycmVudEFyZ0NvdW50IH0gfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkr
KykKKyAgICB0ZXN0KGFycmF5KTsKKworCitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhD
YWxscyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRo
cm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9s
b2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0
cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5q
cwppbmRleCAzNjE4ZjhjYmIzZDMyMTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMx
OTBjZjQ5ZDg4ZTNmZmU5MTJiMWUxNmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0
cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhp
dC1zdHJpY3QuanMKQEAgLTE4LDggKzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7
CiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1
cyAiICsgYi5hOwogICAgIGlmIChhLmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxl
bmd0aCAhPSBiLmMubGVuZ3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBj
LCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGlmIChh
LmMubGVuZ3RoICE9PSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIu
Yy5sZW5ndGg7CiAgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAgICAgICAg
aWYgKGEuY1tpXSAhPSBiLmNbaV0pCiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiAr
IGIuYzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386022</attachid>
            <date>2019-12-18 15:42:05 -0800</date>
            <delta_ts>2019-12-18 16:02:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218154150.patch</filename>
            <type>text/plain</type>
            <size>656535</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi4xYWE4ZGVlYzE0NTI5YmFh
OGY1MzQ2ODJjMGZlNTM3M2Q2MDc5YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50IGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAo
SlNDOjpGdWxsQnl0ZWNvZGVMaXZlbmVzczo6dmlydHVhbFJlZ2lzdGVySXNMaXZlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJhbmRJc0xpdmUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OklubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6
OklubGluZUNhbGxGcmFtZTo6c2V0VG1wT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bjo6d2Fsa1VwSW5saW5lU3RhY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0
dXApOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFu
ZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0
SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19w
YXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhy
b3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3Qu
aDoKKyAgICAgICAgKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI6OmZpbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6
Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVC
bG9ja1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpkdW1wUmVn
aXN0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmg6CisgICAg
ICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RB
cmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxl
QnV0dGVyZmx5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlU
b0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxs
UmVsZWFzZUxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHA6Cisg
ICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAg
KiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgor
ICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgIChK
U0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSBjb25zdCk6
CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpWTUluc3Bl
Y3Rvcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNs
b3dQYXRocy5jcHA6CisKIDIwMTktMTItMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBqc2NfY29udGV4dF9ldmFsdWF0ZV9pbl9v
YmplY3Qgc2hvdWxkIHRha2UgdGhlIEFQSSBsb2NrIGJlZm9yZSBjYWxsaW5nIHNldEdsb2JhbFNj
b3BlRXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDIxNGJkMDU0YWE0N2IwYjVmZjQzNGUzODBmMmEzNGUxOWU3MzVk
YmUuLjU5YTAwNDM0ODJhYzIzZTAyYjg2YTM5Njk5OGEzYjA1ODUxYjI0MzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5j
b20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRk
bGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6aW52ZXJ0
KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvcik6CisgICAgICAgIChXVEY6Oldv
cmRUeXBlPjo6b3BlcmF0b3IgY29uc3QgY29uc3QpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiB3dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaDogQWRkZWQu
CisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFJl
ZmVyZW5jZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVy
YXRvciY9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6ZmlsbCk6CisgICAgICAgIChX
VEY6OkZhc3RCaXRWZWN0b3I6Omdyb3cpOgorICAgICAgICAqIHd0Zi9VbmFsaWduZWRBY2Nlc3Mu
aDoKKyAgICAgICAgKFdURjo6dW5hbGlnbmVkTG9hZCk6CisgICAgICAgIChXVEY6OnVuYWxpZ25l
ZFN0b3JlKToKKwogMjAxOS0xMi0xNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRT
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFl
YS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAyZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QK
QEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRh
YmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAk
KFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJndW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVy
YXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5y
YgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJh
dG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRiY2U1YmFjZWRjMDVjM2RjMGVhOGIwNDMz
NDZkMTUxZDBkZWY0NDEuLmNiY2U4YWNhYmQ0OTZjZjQ0NTBmYWZmOTJmNTMyYWQ1NjlkZDdhOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNiArOTMxLDcgQEAKIAkJNTMz
M0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJC
OTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJE
QzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAqLzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYx
OEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1
bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQx
RkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9Owog
CQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYx
MkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGlt
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYz
ODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzU5Nyw2ICszNTk4LDcgQEAKIAkJNTMx
ODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8q
IHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIz
MjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAi
c291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8q
IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYxMSw2ICszNjEzLDkgQEAKIAkJ
NTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rv
ci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3
NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUu
anMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclBy
b3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1
RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBl
LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQ
cm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRC
MTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYx
RTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5NDcsNiArNTk1Miw3IEBA
CiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3
Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBDYWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVB
M0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENhbGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4
RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywK
IAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJ
MTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFF
QjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCAqLywKQEAgLTg1NzYsNyAr
ODU4Miw5IEBACiAJCQkJQTUyNzA0ODUxRDAyN0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlv
bnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdBQjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJCQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyog
SW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAw
NTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5
REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAw
NTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0
MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAw
M0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAqLywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRD
MzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMgKi8sCkBAIC04NTg3LDYgKzg1OTUsNyBAQAogCQkJ
CTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAvKiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1
NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBSZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5
MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpz
ICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQwMDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpz
ICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5q
cyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90
b3R5cGUuanMgKi8sCkBAIC05MDg3LDYgKzkwOTYsNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkw
MDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5
RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFC
QkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJB
NzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9v
cFN0YWNrLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVm
ZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMuLjY4ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIy
ZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0gICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8
dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCog
dmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5oCmluZGV4IGNhYjM2OGRjN2NkMGYz
YjRmODViNzY5Yjc4OGQ0MGQ2M2VhNTYzNzcuLjQyMjlhMGQwOTk3YTRiMGY1ODNhY2FlYTNhMGYx
NjU3MjlmNDZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
UHJvYmVGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVG
cmFtZS5oCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZ2V0PFQ+
KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSk7
CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgotICAgIFQgb3BlcmFu
ZChpbnQgb3BlcmFuZCkKKyAgICBUIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAg
ICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
b3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIGdl
dDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgotICAgIFQgb3BlcmFuZChpbnQgb3BlcmFuZCwg
cHRyZGlmZl90IG9mZnNldCkKKyAgICBUIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGdldDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzZXQ8VD4oQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1
ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVyYW5k
KGludCBvcGVyYW5kLCBUIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFs
dWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlciks
IHZhbHVlKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldE9w
ZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQsIFQgdmFsdWUpCisgICAgdm9pZCBz
ZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZh
bHVlKQogICAgIHsKLSAgICAgICAgc2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
b3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0LCB2YWx1ZSk7Cisg
ICAgICAgIHNldDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNl
dCwgdmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDM1ZDAxNzU2ZDUzMmE3MWVjMDdmZTQwM2Vm
N2E1MjUwYjVmYzZmNjEuLjQxYmM5NjFhMTUzMDg1ZmJhODU1MDY1YzM5YjZjNmRhNmZiMmE4MGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTI2MywyMCArMjYzLDIwIEBAIGlubGlu
ZSB2b2lkIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKENvbXBpbGF0aW9uJiBjb21waWxhdGlv
biwgY29uc3QgY2hhciogdGV4CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1zdHJ1Y3Qg
T3BlcmFuZCB7CitzdHJ1Y3QgQjNPcGVyYW5kIHsKICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAg
IFR5cGUgdmFsdWU7CiB9OwogCi10eXBlZGVmIE9wZXJhbmQ8aW50NjRfdD4gSW50NjRPcGVyYW5k
OwotdHlwZWRlZiBPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFu
ZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50OF90PiBJbnQ4T3Bl
cmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKK3R5cGVkZWYg
QjNPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDE2
X3Q+IEludDE2T3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7
CiAKLSNkZWZpbmUgTUFLRV9PUEVSQU5EKHZhbHVlKSBPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4g
eyAjdmFsdWUsIHZhbHVlIH0KKyNkZWZpbmUgTUFLRV9PUEVSQU5EKHZhbHVlKSBCM09wZXJhbmQ8
ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
bG9hdFR5cGU+Ci12b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVy
YW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKK3ZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdW
YWx1ZXMoVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB7CiAgICAgb3Bl
cmFuZHMuYXBwZW5kKHsgIjAuIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLikgfSk7CiAgICAg
b3BlcmFuZHMuYXBwZW5kKHsgIi0wLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTAuKSB9KTsK
QEAgLTMwMiw5ICszMDIsOSBAQCB2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZl
Y3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRmxvYXRUeXBlPgotVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2ludE9w
ZXJhbmRzKCkKK1ZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2ludE9wZXJh
bmRzKCkKIHsKLSAgICBWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKKyAgICBW
ZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IG9wZXJhbmRzOwogICAgIHBvcHVsYXRlV2l0aElu
dGVyZXN0aW5nVmFsdWVzKG9wZXJhbmRzKTsKICAgICByZXR1cm4gb3BlcmFuZHM7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCmluZGV4IDYwMDYy
ZjlkNDgwNmY3OTIzYmQzOTNkM2E3NTkyZWI4YjUwNTg4MzguLmVhYmRjODEwYWI0ZGJkMjYzZjQ4
YjVhZmZiMDQ3NGIyNDU4MDc1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTE1MDgsNyArMTUwOCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgaml0
LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5j
YWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBp
ZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CiAgICAgICAgICAgICBh
dXRvJiBhY2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpOwpAQCAtMTc5
Nyw3ICsxNzk3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFs
KCkuYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkp
OworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0
Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBh
cmFtcy5jcHAKaW5kZXggYTE3NGUyNDczZjc1MzBjYzc3NzE1M2M2M2IxMzEzMzBlZTU4ZjU4OC4u
NDUyYzBlZjFiZTMwYjIxZTYzNDgxZGI3NTAyODhjZDMyYTIwMDg4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJh
bXMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRlLmNhbGxTaXRlSW5k
ZXhGb3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogCiAgICAgICAgIGppdC5tYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5kZXggNjA1OGZiMDYyMDM5NDZjNGNkNTZlZjZhOTgz
ODc5ZDJkNmM4MWZiNi4uODM2NTExNWY0MjE3OTFhNWM2NjQ4M2E1YTc5MDVjYWU1YzBlZTNlMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIu
Y3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0
aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwKIAogdm9pZCBCeXRl
Y29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIG1f
b3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocmVnLm9mZnNldCgpKS5kYXRhKCkpOworICAg
IG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocmVnKS5kYXRhKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04MywxMiArODMsMTIgQEAgdGVtcGxhdGUgdm9pZCBC
eXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShHZW5lcmljQm91bmRMYWJlbDxXYXNtOjpHZW5l
cmF0b3JUcmEKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKIHRlbXBsYXRlPGNsYXNz
IEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZShpbnQg
cikgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoVmly
dHVhbFJlZ2lzdGVyIHIpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KHIpKQorICAgIGlmIChyLmlzQ29uc3RhbnQoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0YW50TmFt
ZShyKTsKIAotICAgIHJldHVybiB0b0NTdHJpbmcoVmlydHVhbFJlZ2lzdGVyKHIpKTsKKyAgICBy
ZXR1cm4gdG9DU3RyaW5nKHIpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmxvY2s+CkBAIC05OCwx
MCArOTgsMTAgQEAgaW50IEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6b3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
QmxvY2s+Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lKGludCBp
bmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUo
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKIHsKLSAgICBhdXRvIHZhbHVlID0gYmxvY2soKS0+
Z2V0Q29uc3RhbnQoaW5kZXgpOwotICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmly
dHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKKyAgICBhdXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0
Q29uc3RhbnQocmVnKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIHJlZywgIiki
KTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBC
eXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygpCiAgICAgfQogfQogCi1DU3RyaW5nIEJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdAorQ1N0cmluZyBCeXRlY29k
ZUR1bXBlcjo6Y29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3QKIHsKICAg
ICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jaygpOwogICAgIGF1dG8gdmFs
dWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0Q29uc3RhbnRUeXBlKGluZGV4KSwgYmxvY2st
PmdldENvbnN0YW50KGluZGV4KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oCmluZGV4IDBkNzE2NzUwMzk0YjE1ZDRlYjVlODdjNWE4ODI1MTA3
NWVmZTAzZWUuLmVkYjExMjkyMWFmNzUzZTYzZDg2MTM3MmZiZGUwZWVmODlmY2ExNTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBWYWx1ZShUIHYpIHsgbV9vdXQucHJp
bnQodik7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUo
aW50KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFs
UmVnaXN0ZXIpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0
KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpIGNvbnN0ID0gMDsKIAogICAgIEJ5dGVjb2RlRHVt
cGVyQmFzZShQcmludFN0cmVhbSYgb3V0KQpAQCAtOTEsMTEgKzkxLDExIEBAIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgZHVtcEJ5dGVjb2RlKGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0
LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCi0gICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIp
IGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rl
cikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAg
IHZpcnR1YWwgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0
dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Q7CiAKICAgICBC
bG9jayogbV9ibG9jazsKIH07CkBAIC0xMzUsNyArMTM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2lu
ZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9uQ29kZUJsb2NrPjo6Qnl0ZWNvZGVEdW1wZXI7
CiAKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKLSAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShp
bnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1
YWxSZWdpc3RlciBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ1N0cmluZyBmb3JtYXRDb25z
dGFudChUeXBlLCB1aW50NjRfdCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKaW5kZXggMTVkNjFiYTkwNDAxYTcxMTdk
YzBmOWYyNmUxOTEzN2ViMmMzMTU5Yi4uYTJjMWY0MTViMTk3ZDQ2YmQ2ODE0YTIwMTExYzg3YzUw
ODcyMjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlSW5kZXguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUluZGV4LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMzIsNiArMzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQg
Qnl0ZWNvZGVJbmRleDo6ZHVtcChXVEY6OlByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
b3V0LnByaW50KCJiYyMiLCBvZmZzZXQoKSk7CisgICAgaWYgKGNoZWNrcG9pbnQoKSkKKyAgICAg
ICAgb3V0LnByaW50KCJjcCMiLCBjaGVja3BvaW50KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUlu
ZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmlu
ZGV4IDUyOTVjMjliMTIyODEzMWY3MmFjMjA3MzFjMWQzYmNlOTM1MTU4ZGYuLjEwZmJhNDQwNThl
YzlkZmVkMjU0ODA5YTZkNzgzMzdkMDExYTRiNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgUHJpbnRTdHJlYW07CkBAIC0zNywyNCAr
MzgsMzMgQEAgY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVJbmRl
eCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUluZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChkZWxldGVkVmFsdWUoKS5hc0JpdHMoKSkKKyAg
ICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCiAgICAgewogICAg
IH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQot
ICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsgfQogCi0gICAgdWludDMy
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICB1aW50MzJfdCBhc0Jp
dHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5k
ZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3QgY2hlY2twb2ludCA9IDApCisgICAg
ICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZzZXQsIGNoZWNrcG9pbnQpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0OworICAgIHN0YXRpY19hc3NlcnQoaGFz
T25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAibnVtYmVyT2ZDaGVja3BvaW50cyBzaG91
bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVj
a3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMgLSAxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobnVt
YmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9CisgICAgdWludDhfdCBjaGVja3Bv
aW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYgY2hlY2twb2ludE1hc2s7IH0KKyAg
ICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHM7IH0KIAotICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9vZmZzZXQpOyB9
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaChtX3BhY2tl
ZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1
cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAK
ICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1aW50MzJfdCBiaXRzKTsKIAogICAg
IC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ICYmIG1fb2Zmc2V0ICE9IGRl
bGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlkT2Zmc2V0ICYmIG1fcGFja2VkQml0
cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgPT0oY29u
c3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIGFzQml0cygpID09IG90aGVy
LmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBCeXRlY29kZUluZGV4JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIApAQCAtNjksMTMgKzc5
LDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBp
bnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCi0g
ICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0IH07CisgICAgc3RhdGljIHVpbnQz
Ml90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KTsKKwor
ICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRPZmZzZXQgfTsKIH07CiAKK2lubGlu
ZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVp
bnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NFUlQoY2hlY2twb2ludCA8IG51bWJlck9mQ2hl
Y2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQp
ID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gYnl0ZWNv
ZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBjaGVja3BvaW50OworfQorCiBpbmxpbmUgQnl0
ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1aW50MzJfdCBiaXRzKQogewogICAg
IEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHM7CisgICAg
cmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggNzFi
ZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3ODdhZmZhNC4uZGYwYmRlYjFjYjBmMDU0MDgw
N2U5YWZhN2UyOTMxNGExNzBjMjdkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3ICs1OSw3IEBAIHR5cGVzIFsKICAgICA6V2F0
Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2ZpbGUsCi0gICAgOlZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciwK
ICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkJpbmFyeUFyaXRoUHJvZmlsZSwKICAgICA6
QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwxMyBAQCBvcCA6Y2FsbF92YXJhcmdzLAogICAg
IG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFy
Z0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRl
dGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAK
IG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgwNSw2ICs4MTIsMTMgQEAgb3AgOnRhaWxfY2Fs
bF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQ
cm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBz
OiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6
IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDog
bmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywKQEAgLTg0NSw2
ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVBy
b2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAor
ICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDog
bmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnJldCwKQEAgLTk5Miw3
ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJvd25WYWx1ZTogVmlydHVhbFJlZ2lz
dGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYnVmZmVyOiBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6dGhyb3csCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBiNmNmZjEwMTE0M2FiNTU0MzNiOGI0M2Y0NDAuLjdk
YTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2ZDNjOTE2Y2U1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB9CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5cGUyPgorY29uc3RleHByIGJvb2wg
ZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEgdjEsIEVudW1UeXBlMiB2MikKK3sK
KyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1U
eXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50VHlwZTIgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlp
bmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOworICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKEludFR5
cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRU
eXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2Mik7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBl
Mj4odjIpOworfQorCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9y
Q2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQoreworICAgIEJpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0Owor
ICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOworCisg
ICAgaWYgKCFjaGVja3BvaW50KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgc3dpdGNo
IChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPm9wY29kZUlEKCkp
IHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBP
cFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwo
T3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wVGFpbENhbGxWYXJhcmdzOjphcmdDb3VudCkpOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFy
YXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1
ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wQ29uc3RydWN0VmFy
YXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxsVmFyYXJn
czo6bWFrZUNhbGwpCisgICAgICAgICAgICByZXN1bHQuc2V0KE9wQ2FsbFZhcmFyZ3M6OmFyZ0Nv
dW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCmluZGV4IDczNzliM2M5YmM3MjMy
NTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzkuLjNlNWVkYzBhNjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQy
N2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtOTcsNiArOTgsOCBA
QCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CiAKK0JpdG1hcDxtYXhO
dW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9j
ayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGlu
dCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZl
KGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3Bl
cmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmluZGV4IDNkMTJlMTk1YzY5OWVmYmY5NjM2YTJiOTc0
ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEwOWI3ODk2N2YxMDU1MDA5ZGEzMGU4OTk4NDgyODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaApAQCAtMzMsMjIgKzMzLDIyIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBv
cGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuICFWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNM
b2NhbCgpOworICAgIHJldHVybiAhcmVnLmlzTG9jYWwoKTsKIH0KIAotaW5saW5lIGJvb2wgb3Bl
cmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBp
bnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xp
dmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwo
KTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJlZy50b0xvY2FsKCk7CiAgICAgaWYgKGxvY2FsID49
IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gb3V0W2xv
Y2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9y
JiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKGNv
bnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiB7Ci0gICAg
cmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFs
d2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVy
SXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xp
dmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0KIAogaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDg2OWY1M2YzZmNkMGQwNzYxMDlhMWZk
YTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1YTFiZDJjMTYzZGI4Y2YxM2IzNWNjNjM2ZWExZWI1
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUg
IkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5l
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGll
cy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNsb25lZFN5bWJvbFRhYmxlLT5tX2xvY2sp
OwogICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5n
KGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmVwbGFjZUNvbnN0YW50KHVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50
UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUpOworICAgICAgICByZXBsYWNlQ29u
c3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSksIGNsb25l
ZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhUeXBlUHJvZmls
ZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aENvbnRyb2xGbG93
UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEsNyArNjQyLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNo
aW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCiAg
ICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fdmFyICE9IFVJTlRfTUFYKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9s
VGFibGUoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5
bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsK
ICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJs
ZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gc3ltYm9sVGFibGUt
PmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwpAQCAtNzA5LDggKzcxMCw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVMb2NhbGx5UmVzb2x2ZWQ6IHsKLSAg
ICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFu
dChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1i
b2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1faWRlbnRpZmllcik7
CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVh
dGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFy
ZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0xMDg2LDYgKzEwODYsMTUgQEAgc3RhdGljIGJvb2wg
c2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
JiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworQnl0ZWNvZGVJbmRleCBD
b2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4KSBj
b25zdAoreworICAgIGlmIChleGl0SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdEluZGV4KTsKKyAgICAg
ICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24ubmV4dCgpLmluZGV4KCk7CisgICAgfQorICAgIHJl
dHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIHZvaWQgQ29k
ZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4MTEsMTAgKzE4MjAsMTAgQEAgdm9pZCBDb2RlQmxv
Y2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3coY29u
c3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhcmFtZXRlcnMoKTsgKytp
KQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkpOworICAgIGF1dG8gcHJvZmlsZXMgPSBt
YWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4obGl2ZU9wZXJh
bmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocHJvZmlsZXMtPm1fc2l6ZSA9PSBsaXZl
T3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvZmlsZXMt
Pm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVy
YW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOworICAgICAgICBwcm9maWxlcy0+bV9idWZm
ZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldOwogCiAgICAgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0yNzEzLDcgKzI3MjIsNyBAQCB2b2lkIENvZGVCbG9j
azo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2ln
bmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkg
ewogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFBy
b2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewog
ICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCmluZGV4IDE0Njc0MmViMDQ4YTFkMTY2ZjAxNzkxZDU2Y2U1ODE1MGY1
MzQyNjYuLjI1MDY3MjYzZTI0NzZkYTFiMmRmNmQ1ZDJmOGU4MDQzMTVmMzAzYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTE2MSw2ICsxNjEsNyBA
QCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
Q2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
VmFyczsgfQorICAgIGludCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
Pmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCiAgICAgaW50KiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQpAQCAtMjI5LDIwICsyMzAs
MjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBj
b25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5l
IGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgpCisgICAgaW5saW5lIGJvb2wgaXNL
bm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgaWYg
KGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYmICFpc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0ZXIoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwo
KTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0
Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5k
ZXgpCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVybiBpbmRleCA+PSBtX251bVZhcnM7Cisg
ICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gbV9udW1WYXJzOwogICAgIH0KIAogICAgIEhh
bmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJl
ZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwpAQCAtNTgxLDEwICs1ODIs
OSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtu
b3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsg
fQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25bcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVu
Y3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTc3NCw2
ICs3NzQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCk7CiAgICAgCisgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4KSBjb25zdDsKICAg
ICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50
ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JFeGl0KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0K
QEAgLTg3NCw3ICs4NzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCi0gICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKKyAgICAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAKICAgICAgICAgRGlyZWN0RXZhbENvZGVDYWNoZSBt
X2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAgfTsKQEAgLTk0MSwxMCArOTQyLDEwIEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1
dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKLSAgICB2b2lkIHJlcGxhY2VDb25zdGFudChp
bnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgp
KTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHJlZy5p
c0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Db25zdGFudEluZGV4KCkp
IDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAg
fQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKaW5kZXgg
MjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1MWM3MzE4ZWJjMDQzMS4uMThhZjI0MjJiMTAwMWYy
NWY5MDk2ODJlNGQ5ZWIwMWE1OWI2NTQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAsNyArMTYwLDkgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJhbWUqIHRlcm1pbmFsID0gbnVsbHB0cikg
Y29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci0gICAgdm9pZCB3YWxr
VXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOworICAgIHZvaWQgd2Fsa1VwSW5saW5lU3Rh
Y2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsKKworICAgIGJvb2wgaW5saW5lU3RhY2tDb250YWlu
c0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBz
dGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5Lgog
ICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OwpAQCAtMjc4LDYgKzI4
MCwxNiBAQCBpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0IENvZGVPcmln
aW4mIG90aGVyKSBjb25zdAogICAgICAgICAmJiBpbmxpbmVDYWxsRnJhbWUoKSA9PSBvdGhlci5p
bmxpbmVDYWxsRnJhbWUoKTsKIH0KIAoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3Rh
Y2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgewor
ICAgICAgICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAg
ICAgICByZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0
cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29k
ZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9yaWdpbiYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1
MDJmM2EuLjQ3YzY1N2M4ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVz
cy5oCkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3
dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVj
b2RlIGxpdmVuZXNzIGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2
ZW5lc3Mgb2YgdGVtcHMuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2tw
b2ludCBhc2sgdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUg
KzUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29u
c3QKKyAgICBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2lu
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJh
bmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVj
b2RlSW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0Fsd2F5c0xpdmUocmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7
CiAgICAgCi0gICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0g
dG8gbWFrZSB0aGVtIGNvbXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3Mg
dmlldyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFz
dEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwog
ICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRl
clVzZVZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVDYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaAppbmRleCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEz
Li5lYjQ4NTZhNWZkOTE1ZTEwMjY1OTQ4ZmRjNDAyYTgyMTVjNjY0OGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyAr
MTc5LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVC
bG9jaz4gYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAK
LSAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90
IGluY2x1ZGUgZml4dXBzLgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IDogMjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQg
OiAxMDsKICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDog
MzsgLy8gcmVhbCB0eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJ
ZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQg
dGhlIERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8g
YmUgcmVjb3ZlcmVkIG1hbnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1
Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdv
dCB0byBpbml0aWFsaXplIGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAg
ICAgOiBzdGFja09mZnNldCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KDApCisgICAgICAgICwgdG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAg
ICAgICAgLCBraW5kKENhbGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7
CkBAIC0yMTksNiArMjIyLDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQp
OwogICAgIH0KIAorICAgIHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7
CisgICAgICAgIHRtcE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBw
dHJkaWZmX3QgY2FsbGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAq
IHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAg
ICBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAq
IHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAt
MjQ5LDcgKzI1OCw3IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3Jp
Z2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAKIC8vIFRoaXMgZnVuY3Rp
b24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0IG5lZWRz
IGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFtZQogdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1Vw
SW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoraW5saW5lIHZvaWQgQ29kZU9y
aWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKSBjb25zdAog
ewogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7
CkBAIC0yNjEsMTEgKzI3MCwyOCBAQCBpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxp
bmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVt
YXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJh
bmQpCiB7CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihyZWcub2Zmc2V0KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAg
ICByZXR1cm4gcmVnOworICAgICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChU
bXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkg
OiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFw
T3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFu
ZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5k
KFRtcE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSAtIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0
KSA6IE9wZXJhbmQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpOworICAgIHJldHVybiBvcGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9w
ZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQoreworICAgIHJldHVybiB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZy
YW1lLCBPcGVyYW5kKHJlZykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmgKaW5kZXggYmZiOTRiMzVmY2Q2MzlhNGExZjFkMDBjOGFiYjE0NWViMWM2NGE1OS4uZTAzZmEz
OTM5NTk1NTUyZWJmMzhmN2I0YWIyZGQ1NzcwYTUwZjVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9j
ay5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAj
aW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTQ5LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgOiBtX2J5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICB7
CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsgbV9vcGVy
YW5kLm9mZnNldCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1f
b3BlcmFuZC52YWx1ZSgpICsgbV9vcGVyYW5kLmtpbmQoKTsKICAgICB9CiAgICAgCiAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpA
QCAtOTAsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNvZGVJ
bmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAg
ICBPcGVyYW5kIG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUtleUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlmMzZjN2Zi
ZGExMDU1Nzg5ZGZmZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEy
YzY5YThiYzA2NzA0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQyLDcg
KzQyLDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVy
YW5kOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAg
ICByZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4
KCk7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCkub2Zm
c2V0KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwg
SlNWYWx1ZVJlZwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJh
bmQ6IHsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQp
KTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQu
Ynl0ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAogICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xv
Y2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05MSw3
ICs5MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUo
SlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFuZDog
ewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5i
eXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkpOwor
ICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRl
Y29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAg
ICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaAppbmRleCA1ZDgxYzRjOTAwYjA4YTRkZWQ4M2E3NGRmYTVhMmRjZjMzNWVjODhkLi4zNmQz
NjlmMGMwMGZiZDQ0Yzg1NWEzODllMDY1MDg0YmM3OGU1ODE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3Qgewog
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1OwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5ZmY5Zjk3
MzZhZWIzNzM0NTk0NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uY2NlMDgwMmY4OWQxNzg4NjgwNDYwOTA3
ZTk4NmE3MDRiYTZlMWQxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNSwxMTEgKzM1LDIxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2lu
ZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQg
bWF4TnVtQ2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25lIHRoYXQg
ZXhpc3RzIGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0
d2VlbiBieXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2Nh
bE9wZXJhbmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAg
T3BlcmFuZCgpID0gZGVmYXVsdDsKKyAgICBPcGVyYW5kKGNvbnN0IE9wZXJhbmQmKSA9IGRlZmF1
bHQ7CisKKyAgICBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICA6IG1f
a2luZChvcGVyYW5kLmlzTG9jYWwoKSA/IExvY2FsT3BlcmFuZCA6IEFyZ3VtZW50T3BlcmFuZCkK
KyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSkKKyAgICB7IH0KKworICAgIE9w
ZXJhbmQoT3BlcmFuZEtpbmQga2luZCwgaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9raW5kKGtp
bmQpCisgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCisgICAgeyAKKyAgICAgICAgQVNTRVJU
KGtpbmQgPT0gVG1wT3BlcmFuZCB8fCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgp
ID09IChraW5kID09IExvY2FsT3BlcmFuZCkpOworICAgIH0KKworICAgIE9wZXJhbmRLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBpbnQgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX29wZXJhbmQ7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgIT0gVG1wT3BlcmFuZCk7CisgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kKTsKKyAgICB9CisgICAgdWludDY0
X3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0
X3QqPih0aGlzKTsgfQorICAgIHN0YXRpYyBPcGVyYW5kIGZyb21CaXRzKHVpbnQ2NF90IHZhbHVl
KTsKKworICAgIGJvb2wgaXNUbXAoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gVG1wT3BlcmFu
ZDsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBBcmd1
bWVudE9wZXJhbmQ7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkg
PT0gTG9jYWxPcGVyYW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKTsgfQorICAgIGJv
b2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gVG1wT3BlcmFuZCAmJiB2aXJ0
dWFsUmVnaXN0ZXIoKS5pc0hlYWRlcigpOyB9CisKKyAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0
IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3Vt
ZW50KCk7IH0KKyAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7IH0KKworICAgIGlubGluZSBib29sIGlz
VmFsaWQoKSBjb25zdDsKKworICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmFu
ZCYpIGNvbnN0OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgT3BlcmFuZEtpbmQgbV9raW5kIHsgQXJndW1lbnRPcGVyYW5kIH07CisgICAgaW50
IG1fb3BlcmFuZCB7IFZpcnR1YWxSZWdpc3Rlcjo6aW52YWxpZFZpcnR1YWxSZWdpc3RlciB9Owor
fTsKKworQUxXQVlTX0lOTElORSBib29sIE9wZXJhbmQ6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmFu
ZCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVl
KCkgPT0gb3RoZXIudmFsdWUoKTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkgPT0gb3Ro
ZXIudmlydHVhbFJlZ2lzdGVyKCk7Cit9CisKK2lubGluZSBib29sIE9wZXJhbmQ6OmlzVmFsaWQo
KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA+PSAw
OworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc1ZhbGlkKCk7Cit9CisKK2lubGluZSBP
cGVyYW5kIE9wZXJhbmQ6OmZyb21CaXRzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIE9wZXJhbmQg
cmVzdWx0ID0gYml0d2lzZV9jYXN0PE9wZXJhbmQ+KHZhbHVlKTsKKyAgICBBU1NFUlQocmVzdWx0
LmlzVmFsaWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljX2Fzc2VydChzaXpl
b2YoT3BlcmFuZCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIk9wZXJhbmQ6OmFzQml0cygpIHJlbGll
cyBvbiB0aGlzLiIpOwogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgotICAgIE9w
ZXJhbmRzKCkKLSAgICAgICAgOiBtX251bUFyZ3VtZW50cygwKSB7IH0KLSAgICAKLSAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzKQorICAg
IHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9v
bD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+Owor
ICAgIHVzaW5nIFJlZlR5cGUgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwg
Ym9vbD4sIEZhc3RCaXRSZWZlcmVuY2UsIFQmPjsKKyAgICB1c2luZyBDb25zdFJlZlR5cGUgPSBz
dGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQm
PjsKKworICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCiAg
ICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9j
YWxzKG51bUxvY2FscykKICAgICB7Ci0gICAgICAgIGlmIChXVEY6OlZlY3RvclRyYWl0czxUPjo6
bmVlZHNJbml0aWFsaXphdGlvbikgewotICAgICAgICAgICAgbV92YWx1ZXMucmVzaXplKG51bUFy
Z3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3Zh
bHVlcy5maWxsKFQoKSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfQorICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7Cisg
ICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CisgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFp
dHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCisgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQo
KSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2FscywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1U
bXBzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVt
QXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAgICB7Ci0gICAg
ICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMp
OworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRt
cHMpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNM
aWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIpCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
T3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRp
YWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFy
Z3VtZW50cygpKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkp
CiAgICAgewotICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG90
aGVyLnNpemUoKSk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9
Ci0gICAgCisKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBt
X251bUFyZ3VtZW50czsgfQotICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKSAtIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgCisgICAgc2l6ZV90
IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KKyAgICBzaXpl
X3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVy
T2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKworICAgIHNpemVfdCB0bXBJbmRl
eChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9m
VG1wcygpKTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpOworICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlkeCA8IG1fbnVtQXJndW1lbnRzKTsKKyAg
ICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4g
aWR4OwogICAgIH0KICAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbnVtQXJndW1lbnRzICsgaWR4OworICAgICAgICBB
U1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFy
Z3VtZW50cygpICsgaWR4OwogICAgIH0KKworICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIHRtcChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAg
IAotICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gbV92
YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXJndW1lbnQo
c2l6ZV90IGlkeCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVu
dEluZGV4KGlkeCldOwotICAgIH0KKyAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUg
YXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRl
eChpZHgpXTsgfQogICAgIAotICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFs
dWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KLSAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgUmVmVHlwZSBs
b2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9Cisg
ICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVy
YW5kS2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAo
b3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRL
aW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1i
ZXJPZlRtcHMoKTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxz
KCk7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIG51bWJl
ck9mTG9jYWxzKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQg
b3BlcmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBlIGF0Rm9y
KHNpemVfdCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1w
T3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1
bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAg
cmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAg
ICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3Bl
cmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29u
c3QKKyAgICBDb25zdFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAo
b3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0
dXJuIHRtcChpZHgpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAg
IHJldHVybiBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAg
ICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkK
KworICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFs
dWUgPSBUKCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUo
KTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAg
ICAgIGlmIChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9m
TG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBz
aXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9s
ZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXpl
KTsKLSAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3Zh
bHVlc1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEg
LSBpKV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJl
ZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRp
b24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxv
Y2FsczsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9j
YWxzICsgaSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBl
bnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lk
IGVuc3VyZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAg
ICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBz
aXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1Np
emUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXpl
KCk7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJl
ck9mTG9jYWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVu
c3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1Np
emU7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0
IFQmIHZhbHVlKQpAQCAtMTY0LDg0ICsyNzIsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
aWR4ID49IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBz
ZXRMb2NhbChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRl
eChpbnQgb3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNp
emVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBl
IGdldEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8T3BlcmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7
Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkp
OwotICAgICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9M
b2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAg
cmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1
cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVf
dCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAg
ICBzaXplX3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gb3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlm
ICghb3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAg
fQogICAgIAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQo
KSk7CisgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0g
ICAgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5
cGUgb3BlcmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1
cm4gdG1wKG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9w
ZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3Bl
cmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0
IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Cisg
ICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQor
ICAgIENvbnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0g
ICAgYm9vbCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2Fs
KCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAg
ICAgICBpZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0g
MCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8
IG51bWJlck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9w
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGlu
dCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBv
cGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3Bl
cmFuZCkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
c2V0T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNv
bnN0IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9
Ci0gICAgVCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAg
ICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotCi0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
aW5kZXggPCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9y
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6
ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAg
IFJlZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQor
CisgICAgT3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRz
KCkpLm9mZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
Rm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4
IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgaW5kZXggLSAobnVtYmVyT2ZM
b2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBz
ZXRPcGVyYW5kRmlyc3RUaW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgc2V0
QXJndW1lbnRGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBzZXRMb2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2
YWx1ZSk7Ci0gICAgfQotICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAtMjU3
LDYgKzM1Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFyZ3Vt
ZW50cygpID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQobnVt
YmVyT2ZMb2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJU
KG51bWJlck9mVG1wcygpID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBtX3ZhbHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUsOSAr
MzY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3Zh
bHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxULCAw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1Bcmd1
bWVudHM7CisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBh
cmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBh
cmUgdG1wcy4KKyAgICBTdG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJndW1l
bnRzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgKaW5kZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1NjZm
ZC4uMGIxY2MxZjJkMTk3YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAsNiAr
MzAsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgb3V0
LnByaW50KCJ0bXAiLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJhbmRz
PFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAogewpAQCAtNDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbElu
ZGV4LCAiOiIsIGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0K
KyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7
ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIs
IGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgpAQCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkp
OwogICAgIH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVy
T2ZUbXBzKCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcElu
ZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAppbmRleCBkNWRkZWU4ZDU2MDc3MDMyM2IxZmQ1ZjFhY2NjY2MwNTAyYzEyNjU0Li43
ZTkzMjYyZGZiMDk1OWRlYzJhOTI0MWZmOGM2MTFmMzNiOTJiNDQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTcy
LDYgKzcyLDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1f
aGFzQ2hlY2twb2ludHMoZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgp
KQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwg
bV9tZXRhZGF0YShVbmxpbmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCBhZDFm
OTBiNzBiZWI5ODE3ZjMyYmI4MGM1NDdhZTRiYWI2NjU1MWE1Li4zMDgyYjBhMjYzYzMwNjU1MjU0
YWQ4NmY5N2ZhMjMyMGRjNTBiNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtMTQxLDYgKzE0MSw5IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5z
aXplKCk7IH0KICAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Np
b25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXNDaGVj
a3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lkIHNl
dEhhc0NoZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAgLy8g
U3BlY2lhbCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAg
dm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1f
c2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OCw5ICsyMDEsOCBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNv
bnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQo
KTsgfQogICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50
aWZpZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29u
c3RhbnRJZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MTksNiArNDIxLDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBtX2Fn
ZSA6IDM7CiAgICAgc3RhdGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsKKyAg
ICBib29sIG1faGFzQ2hlY2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xv
Y2sgbV9sb2NrOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAppbmRleCBiYmI4YTRiMjQ1MzEwNDAzYTdmY2VmMmIyMWUxMTgzM2VmYjkw
MzY3Li5lYjkxNzk0NTMwZGYxYTMyOTJkY2RiZWQzMTY0ZTljNzkwOWE2OWYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjggKzE3
NiwyOCBAQCBpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUlu
ZGV4KFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVByb2Zp
bGUtPm1fYnl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQg
OiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlciB7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
IHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUp
CiAgICAgewogICAgICAgICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZmIHRo
YW4gd2UgbmVlZC4gV2UgY291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAgICAg
ICAgLy8gdG8gYmUgbW9yZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIgPSBN
YWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD46Om1hbGxvYyhtX3NpemUgKiBzaXplb2Yo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCkpOworICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtp
XSkgVmFsdWVQcm9maWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIu
Z2V0KClbaV0pIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAotICAg
IH5WYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKCkKKyAgICB+VmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0aW9uPgpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+IG1fYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5jcHAKaW5kZXggYzVjYTRkZTFlNGIzNjExMjE0YzM1YWIxZWEzMmRjMWNiZjQ1ZjNlOS4uYjEz
OTQ3ZjBlMThkZjA2M2E4OGIzZjIyN2NkY2RiZmVmZmVkYzMwOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMzUsMjIgKzM1LDIy
IEBAIEpTVmFsdWUgVmFsdWVSZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6
Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOwogICAgIGNhc2UgSW50
NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZElu
dDUyKCkpOwogICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
IHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
LnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOwogICAgIGNhc2Ug
RG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5
TmFOKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJs
ZSgpKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkRG91YmxlKCkpKTsKICAgICBjYXNlIENlbGxEaXNwbGFj
ZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkpLnVuYm94ZWRDZWxsKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxh
Y2VkSW5KU1N0YWNrOgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogI2Vsc2UKLSAg
ICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCkpLnVuYm94ZWRCb29sZWFuKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CiAjZW5kaWYKICAg
ICBjYXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm4gY29uc3RhbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCmluZGV4IGQ4ZjE4YzNmZTg1
NTk0ZjMyYTI5M2FmZDg5MDkyMjM2MTM2MmVhNjMuLjVlNDNiYzcyYmJjYzRmZjk3YTY4ZjgzZGE4
MzA5NGU1OGRhM2IzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUmVjb3ZlcnkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmgKaW5kZXggMzYxOTUyOTQyZDJiODZiYWIxMmY2Y2NjN2NjMWJh
MDIxZjVhZDA0OC4uZmQxNzAwNzE3YzNiZmYzYmFmMGMzYjAwMzE3NmZlNjY1OTI0ZGY0YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaApA
QCAtMzEsMTIgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kSXNMb2NhbChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9j
YWwoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPCAwOwogfQogCi1pbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxS
ZWdpc3RlcklzQXJndW1lbnQoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPj0g
MDsKIH0KQEAgLTQ5LDI1ICs0OSwzMiBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW50LCBpbnQpOwogCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsKKwogICAgIFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlcklEKik7
CiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZlB0cjxSZWdpc3RlcklEPik7CiAKICAgICBWaXJ0dWFs
UmVnaXN0ZXIoKQotICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHNfaW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKKyAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihpbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQogICAgIHsgfQogCiAgICAgZXhwbGljaXQgVmlydHVhbFJlZ2lzdGVyKGludCB2aXJ0dWFs
UmVnaXN0ZXIpCiAgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQog
ICAgIHsgfQogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJl
Z2lzdGVyICE9IHNfaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzTG9jYWwo
KSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3Zp
cnR1YWxSZWdpc3Rlcik7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdCBzbG90
KQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHN0YXRpY19jYXN0PGludD4oc2xvdCkpCisg
ICAgeyB9CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVn
aXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBj
b25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcklz
QXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KLSAgICBib29sIGlzQ29uc3RhbnQoKSBjb25z
dCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OyB9CisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgp
IGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KICAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJn
dW1lbnQoKSk7IHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0K
LSAgICBpbnQgdG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsg
cmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyIC0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsg
fQorICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50KCkp
OyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsg
fQogICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsgfQog
ICAgIGludCBvZmZzZXRJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIg
KiBzaXplb2YoUmVnaXN0ZXIpOyB9CiAKQEAgLTEwNiw5ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwotCiAgICAgc3RhdGljIGludCBsb2NhbFRvT3BlcmFu
ZChpbnQgbG9jYWwpIHsgcmV0dXJuIC0xIC0gbG9jYWw7IH0KICAgICBzdGF0aWMgaW50IG9wZXJh
bmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0
aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0g
Q2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBm
ODBhN2M0ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2UzLi44ZDJhN2ZiODI0NzU4ZmQw
NGFiMDNiNzAyMDgyYmRiZjYzMTZiZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTE4Nyw3ICsx
MTg3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFy
YW1ldGVyKCkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAgICAgbV9wYXJhbWV0ZXJzLmdy
b3cobV9wYXJhbWV0ZXJzLnNpemUoKSArIDEpOwogICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lz
dGVyRm9yKHJlZyk7Ci0gICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZy5vZmZzZXQoKSk7CisgICAg
cGFyYW1ldGVyLnNldEluZGV4KHJlZyk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigp
OwogICAgIHJldHVybiAmcGFyYW1ldGVyOwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMoRnVuY3Rpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBibG9jayBrbm93cyBh
Ym91dCBhbGwgb2Ygb3VyIHBhcmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJz
CiAgICAgLy8gbmVlZGluZyBkZXN0cnVjdHVyaW5nIGFyZSBub3RlZC4KLSAgICBtX3RoaXNSZWdp
c3Rlci5zZXRJbmRleChpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsgLy8gdGhp
cworICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KFZpcnR1YWxSZWdpc3Rlcihpbml0aWFsaXpl
TmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKSk7IC8vIHRoaXMKIAogICAgIGJvb2wgbm9uU2ltcGxl
QXJndW1lbnRzID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRl
cnMuc2l6ZSgpOyArK2kpIHsKQEAgLTE2MzcsMTEgKzE2MzcsMTEgQEAgYm9vbCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3BJbXBsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjMSwgUmUKIAogICAgIGlmIChtX2xhc3RJbnN0cnVjdGlvbi0+aXM8T3BUeXBlb2Y+KCkpIHsK
ICAgICAgICAgYXV0byBvcCA9IG1fbGFzdEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKTsKLSAg
ICAgICAgaWYgKHNyYzEtPmluZGV4KCkgPT0gb3AubV9kc3Qub2Zmc2V0KCkKKyAgICAgICAgaWYg
KHNyYzEtPnZpcnR1YWxSZWdpc3RlcigpID09IG9wLm1fZHN0CiAgICAgICAgICAgICAmJiBzcmMx
LT5pc1RlbXBvcmFyeSgpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjMi0+aW5kZXgoKSkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKSktPnRyeUdldFZhbHVlKCk7CisgICAgICAg
ICAgICAmJiBzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkKKyAgICAgICAgICAg
ICYmIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3Rlcigp
KS5nZXQoKS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0g
YXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lz
dGVyKCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAi
dW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgIHJld2luZCgpOwogICAgICAgICAgICAgICAg
IE9wSXNVbmRlZmluZWQ6OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKQEAgLTMyMjksNiAr
MzIyOSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3Mo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jCiAgICAgLy8gRW1pdCBjYWxsLgogICAg
IEFTU0VSVChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKTsKICAgICBWYXJhcmdzT3A6OmVtaXQodGhp
cywgZHN0LCBmdW5jLCB0aGlzUmVnaXN0ZXIsIGFyZ3VtZW50cyA/IGFyZ3VtZW50cyA6IFZpcnR1
YWxSZWdpc3RlcigwKSwgZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAg
ICBpZiAoVmFyYXJnc09wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpCisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAg
cmV0dXJuIGRzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1
ZmZlZjBlZjI2Y2I1MWU2ZjkuLjQyZGI5N2Q2NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTEwMDcsNiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIHNob3VsZEVtaXRDb250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVHZW5lcmF0aW9uTW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6
OkNvbnRyb2xGbG93UHJvZmlsZXIpOyB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAg
ICAgICB2b2lkIHNldFVzZXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNr
cG9pbnRzKCk7IH0KIAogICAgICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAppbmRleCAzNTYyMGEx
MTE2MTFjNWUwYjgxMDFjZDQ1NTRjMDZiYzgwMzAzNzgwLi5mODE5YjEyM2Q0ZDg5YmEwNTk5MDhh
YWFkYzUwZjYyOWRiM2U0OTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaApAQCAtNjksMTIgKzY5LDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEluZGV4KGludCBpbmRleCkK
KyAgICAgICAgdm9pZCBzZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpCiAgICAgICAgIHsK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBtX2RpZFNldEluZGV4ID0gdHJ1ZTsKICNlbmRp
ZgotICAgICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgp
OworICAgICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSBpbmRleDsKICAgICAgICAgfQogCiAg
ICAgICAgIHZvaWQgc2V0VGVtcG9yYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmNwcAppbmRleCBiODNmZWUwZDNjMDlkMTQ5N2FhN2VhMWRlM2UwNDkw
NjJmMjI2YzE0Li5lNjQwNzFiMWFhMGUzNDg5NDQzNDM5ZmYyOGZjYTI1MWI2MmI5NjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCkBAIC00MCw2
ICs0MCwxNCBAQCB2b2lkIEFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQodmFsdWUoKSk7CiB9CiAKK3ZvaWQgQWJzdHJh
Y3RIZWFwOjpQYXlsb2FkOjpkdW1wQXNPcGVyYW5kKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgZWxzZQor
ICAgICAgICBvdXQucHJpbnQoT3BlcmFuZDo6ZnJvbUJpdHModmFsdWUoKSkpOworfQorCiB2b2lk
IEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5w
cmludChraW5kKCkpOwpAQCAtNDksNiArNTcsMTMgQEAgdm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCIoIiwgRE9NSklUOjpI
ZWFwUmFuZ2U6OmZyb21SYXcocGF5bG9hZCgpLnZhbHVlMzIoKSksICIpIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykgeworICAgICAgICBvdXQucHJp
bnQoIigiKTsKKyAgICAgICAgcGF5bG9hZCgpLmR1bXBBc09wZXJhbmQob3V0KTsKKyAgICAgICAg
b3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBvdXQucHJpbnQo
IigiLCBwYXlsb2FkKCksICIpIik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCmluZGV4IGJmOTkzNzc5NzA0NzAyZDhkNWIyMGI2YzJmNmY3Mzk1YWZl
NmI4NjguLjNjNGNlM2Q1ZDAyZGMzYTgxZjNhYTQyNGNmYzNmZDFjNDQ3YzUyOTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaApAQCAtMjgsNiArMjgsNyBA
QAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiRE9NSklUSGVhcFJhbmdlLmgiCisj
aW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
QEAgLTEyMywxMCArMTI0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbV92YWx1ZShiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisKKyAgICAgICAg
UGF5bG9hZChPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCi0g
ICAgICAgICAgICAsIG1fdmFsdWUob3BlcmFuZC5vZmZzZXQoKSkKKyAgICAgICAgICAgICwgbV92
YWx1ZShvcGVyYW5kLmFzQml0cygpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBQ
YXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICAgICAgOiBQYXlsb2FkKE9w
ZXJhbmQob3BlcmFuZCkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4Myw2
ICsxODksNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB2b2lkIGR1bXBBc09wZXJhbmQoUHJpbnRT
dHJlYW0mKSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2lz
VG9wOwpAQCAtMjA0LDYgKzIxMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChr
aW5kICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYga2luZCAhPSBXb3JsZCAmJiBraW5kICE9IEhl
YXAgJiYga2luZCAhPSBTaWRlU3RhdGUpOwogICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKGtpbmQs
IHBheWxvYWQpOworICAgICAgICBBU1NFUlQodGhpcy0+a2luZCgpID09IGtpbmQgJiYgdGhpcy0+
cGF5bG9hZCgpID09IHBheWxvYWQpOwogICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAtMjE5LDYgKzIyNywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChraW5kKCkgIT0gV29ybGQgJiYga2luZCgpICE9IEludmFsaWRBYnN0
cmFjdEhlYXApOwogICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwoKTsKICAgICB9CisgICAgT3Bl
cmFuZCBvcGVyYW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3Rh
Y2sgJiYgIXBheWxvYWQoKS5pc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OmZyb21C
aXRzKHBheWxvYWQoKS52YWx1ZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwIHN1
cGVydHlwZSgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IDY0YWNiNTQwZDQw
YWUxNzk4ZjdjMjIzNmQ4MWRmZTFjODQwOGQ1MzAuLmM0NDEwYjI1OGE2MjA5Zjg1NzY3NmI2NjAz
ODY2MGRhNzBkNDY0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTM4MSw3ICszODEsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDog
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9z
dGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NE
YXRhLT5vcGVyYW5kKCkpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3Vs
ZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IodmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1h
dCgpKSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTM5Miw3ICszOTIsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAg
ICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwot
ICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2Fs
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5v
cGVyYW5kKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFk
eSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlz
VHlwZSh0eXBlRmlsdGVyRm9yKGRhdGEtPmZvcm1hdCkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZh
bHVlKCkpCkBAIC00MDIsMTIgKzQwMiwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBtX3N0YXRlLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9z
dGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0g
ICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaQogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJn
dW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnREZWZpbml0ZWx5L1NldEFyZ3VtZW50TWF5
YmUgbWVhbnMKICAgICAgICAgLy8gdGhhdCBzb21lb25lIHNldCB0aGUgYXJndW1lbnQgdmFsdWVz
IG91dC1vZi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8g
YQogICAgICAgICAvLyBub24tY2xlYXIgdmFsdWUuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIEFTU0VSVCghbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CkBAIC00NTgsNiArNDU4
LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAor
ICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAg
ICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczog
ewogICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFyZ3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBj
b3VudCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9lcywgaXQgc2hvdWxkIHR1cm4KQEAgLTQ3
Niw3ICs0ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgbV9zdGF0ZS5v
cGVyYW5kKGRhdGEtPmNvdW50KS5zZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQgLSAxOyBpLS07KQotICAgICAgICAgICAg
bV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsK
KyAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydCArIGkpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAppbmRleCBkNzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFh
ZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZhMDgwY2VhMzJmZDljNTkxZjMwZjFlN2RkNDZmMWQxMjVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24u
aApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVzW2ldLT5maW5kKCk7Ci0gICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKIAogICAgICAg
ICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcAppbmRleCBhZjJlZGE0YWQ4OGU5Yjk3YWFkNWY0ZjkzOTIzNzYyMTk1MmFlZjg0Li5m
YTI0YzY5ZDBmZWNiN2JhZmM3MDVkODVjM2M1YWQwYzY1MzkxZThlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFz
ZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNl
IE5ld0FycmF5QnVmZmVyOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYm
IChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+Y2hp
bGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5
QnVmZmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSwg
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+
b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNw
cmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5h
cmd1bWVudHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVzY2FwZShub2RlLT5hcmd1bWVudHNDaGlsZCgpLCBub2RlKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00OTMsMTAgKzQ5NiwxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBoZWFwLm9wZXJhbmQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZWdpc3Rl
ciBtYXkgbm90IHBvaW50IHRvIGFuIGFyZ3VtZW50IG9yIGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3
ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghcmVnLmlzSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZChyZWcpID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmFuZC5pc0hlYWRlcigpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xv
YmJlcml6ZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTU2MCwxMiArNTYzLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNs
b2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9jayB8fCBpbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2spIHsK
QEAgLTYyNyw3ICs2MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCBoZWFwKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2sgJiYgIWhlYXAucGF5
bG9hZCgpLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVD
YWxsRnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTg0NSw5ICs4NDgsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBWYXJhcmdzTGVuZ3RoIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhpdE9LLgorICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5l
eGl0T0spOworICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9y
aWdpbi53aXRoRXhpdE9LKHRydWUpOworCisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29u
dmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0
aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgb3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1
ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
ODYyLDEwICs4NzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
c051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJn
c0RhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmFyZ3NEYXRhLT5jb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5v
ZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCksIEVkZ2UoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhp
dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCkBAIC04NzQs
MTQgKzg5MSwxNSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVW
YWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQg
KyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2Fs
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChy
ZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4u
dGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZy5vZmZzZXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+
b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtl
VmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhy
ZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHJlZyksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsK
QEAgLTEwMTksOSArMTAzNyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFy
Z3NEYXRhLT5vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CkBAIC0xMDMwLDcgKzEw
NDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRh
LT5saW1pdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZh
cmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCB2YXJhcmdzRGF0YS0+bGltaXQsIHZhcmFyZ3NE
YXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAppbmRleCA2MjYxMTIzY2JmZWMzZWJhMTk1ZDA5
YjkzMTAyNmYyNmM3MjU4NDc2Li4yMDZkNmZiZGM1NGEzNmNiODQxOGE4YjM4NTQ2ZDg3NTc3OTkw
MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNV
dGlsaXRpZXMuY3BwCkBAIC0zMiwxMSArMzIsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQgb3BlcmFuZCkKIHsKKyAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIChyZWcuaXNB
cmd1bWVudCgpICYmIHJlZy50b0FyZ3VtZW50KCkpIHx8IHJlZy5pc0hlYWRlcigpOwotICAgIAor
CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAogICAgICAgICAmJiByZWcg
PT0gVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUyLDEzICs1NiwxMyBA
QCBib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcgogICAgIHJldHVybiByZWcgPj0gYXJndW1lbnRTdGFy
dCAmJiByZWcgPCBhcmd1bWVudFN0YXJ0ICsgbnVtQXJndW1lbnRzOwogfQogCi1ib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFu
ZCBvcGVyYW5kKQogewotICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpLCByZWcpOworICAgIHJldHVy
biBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSgpLCBvcGVyYW5kKTsKIH0KIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBh
cmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4pCisgICAgSW5z
ZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBhZGRUaGlzKQogewogICAgIEdyYXBoJiBncmFw
aCA9IGluc2VydGlvblNldC5ncmFwaCgpOwogCkBAIC02OSwxMSArNzMsMTQgQEAgTm9kZSogZW1p
dENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICB8fCBhcmd1bWVudHMtPm9w
KCkgPT0gTmV3QXJyYXlCdWZmZXIKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50
b21EaXJlY3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1
bWVudHMKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0IHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIKLSAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQsCisgICAgICAgIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkLAogICAgICAgICBhcmd1bWVudHMtPm9wKCkpOwogCisgICAg
aWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQorICAgICAgICByZXR1cm4gZW1p
dENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgYXJndW1lbnRzLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGVJbmRleCwgb3JpZ2luLCBhZGRUaGlzKTsKKwogICAgIGlmIChh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IDA7CisgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gYWRkVGhpczsKICAgICAgICAgQml0VmVjdG9y
KiBiaXRWZWN0b3IgPSBhcmd1bWVudHMtPmJpdFZlY3RvcigpOwogICAgICAgICBOb2RlKiBjdXJy
ZW50U3VtID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Vt
ZW50cy0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CkBAIC0xMDMsNyArMTEwLDcgQEAgTm9kZSogZW1p
dENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogCiAgICAgaWYgKGFyZ3VtZW50cy0+b3Ao
KSA9PSBOZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
QnVmZmVyKSB7CiAgICAgICAgIHJldHVybiBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0g
ICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3Bl
cmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpKSk7CisgICAgICAgICAgICBu
b2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0
YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpICsgYWRkVGhpcykpOwogICAgIH0KICAgICAKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGFyZ3VtZW50cy0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwpAQCAtMTEzLDcgKzEyMCw3IEBAIE5vZGUqIGVtaXRD
b2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgCiAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewot
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gIWFkZFRoaXM7
CiAgICAgICAgIGlmIChhcmd1bWVudHNTaXplID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQog
ICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAg
ICAgICAgZWxzZQpAQCAtMTI5LDE0ICsxMzYsMTQgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRo
U3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVja2VkKSwKICAgICAgICAgRWRnZShhcmd1
bWVudENvdW50LCBJbnQzMlVzZSksCiAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dEZvclVzZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigxICsgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4
LCBvcmlnaW4sIGpzTnVtYmVyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwICsgIWFkZFRoaXMpLCBJ
bnQzMlVzZSkpOwogCiAgICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CiAgICAgICAg
IC8vIFRoZSBhYm92ZSBzdWJ0cmFjdGlvbiBtYXkgcHJvZHVjZSBhIG5lZ2F0aXZlIG51bWJlciBp
ZiB0aGlzIG51bWJlciBpcyBub24temVyby4gV2UgY29ycmVjdCB0aGF0IGhlcmUuCiAgICAgICAg
IHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjSW50MzJPbmx5LCBBcml0aE1heCwgb3JpZ2luLCAKICAgICAgICAgICAgIEVkZ2UocmVz
dWx0LCBJbnQzMlVzZSksIAotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50
Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigwKSwgSW50MzJVc2UpKTsKKyAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdp
biwganNOdW1iZXIoYWRkVGhpcyksIEludDMyVXNlKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0UmVz
dWx0KE5vZGVSZXN1bHRJbnQzMik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAppbmRleCA5YTc3MThmYmJmNTQ3YjJmNmFl
MTAxZGFmMzc0YTA2YTJjM2RkZjEyLi43NGY5MzllODE2MjJkNDAyNDZlMjM1NWQ1MDk4YTllZDJh
ODUyMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmgKQEAgLTMxLDExICszMSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJh
bWUqLCBWaXJ0dWFsUmVnaXN0ZXIpOwotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5v
ZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyKTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kKTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2
ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQpOwogCiBOb2RlKiBlbWl0Q29kZVRv
R2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1l
bnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4pOworICAgIEluc2VydGlvblNldCYs
IE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBib29sIGFk
ZFRoaXMgPSBmYWxzZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAppbmRleCA5
NmRhYzM5YTQ0NGZmYmQzY2U1NDNmNTdmMzZjZDYxZGVjYzI4YmQ0Li44OTdjNzBkZmZiYTA2NmI2
NDljYWZkY2MxZWYwOTMzNzY4MTA0ZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaApAQCAtMTM5LDggKzEzOSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyB9CiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwu
bnVtYmVyT2ZMb2NhbHMoKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9Ci0g
ICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1
cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KKyAgICBBYnN0cmFj
dFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpbmRleCk7IH0K
ICAgICBBYnN0cmFjdFZhbHVlJiBhcmd1bWVudChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7IH0KICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAppbmRleCA3NzQzZTdkMDFm
MWNhZDc4MWQ4NGFiMDNkM2MwOWM3N2Y4MDI5YmE1Li5jMmI1NWFhNWM0YTUyMjliMWIxYTQ0MzFj
MTg3YWRlZjQ2YzNkYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHlNYXAuY3BwCkBAIC02NSwxMCArNjUsMTAgQEAgdm9pZCBBdmFpbGFiaWxpdHlN
YXA6OnBydW5lSGVhcCgpCiAKIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3Mo
R3JhcGgmIGdyYXBoLCBDb2RlT3JpZ2luIHdoZXJlKQogewotICAgIE9wZXJhbmRzPEF2YWlsYWJp
bGl0eT4gbG9jYWxzQ29weShtX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2xvY2Fscy5u
dW1iZXJPZkxvY2FscygpLCBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkpOworICAgIE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxzQ29weShPcGVyYW5kc0xpa2UsIG1fbG9jYWxzLCBBdmFp
bGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkpOwogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2Rl
KAogICAgICAgICB3aGVyZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Cisg
ICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgIGxvY2Fsc0NvcHkub3BlcmFu
ZChyZWcpID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOwogICAgICAgICB9KTsKICAgICBtX2xvY2Fs
cyA9IFdURk1vdmUobG9jYWxzQ29weSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaAppbmRleCA1MzU1MjU2MDIzZGRjZjI4MGRjNTk1YjMzYTdjN2Zk
ZWM1NGU2NGYwLi44MGMxMmJmMTgwMjVhNTYxMDU5NmRhMjRlMjNjMDI1ZjJhYmU0ZjIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKQEAgLTY2
LDkgKzY2LDkgQEAgc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CiAgICAgfQogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc0Z1bmN0b3IsIHR5cGVuYW1lIEFkZEZ1bmN0b3I+Ci0gICAgdm9p
ZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0IEhhc0Z1
bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQorICAgIHZvaWQgY2xvc2VTdGFydGlu
Z1dpdGhMb2NhbChPcGVyYW5kIG9wLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1
bmN0b3ImIGFkZCkKICAgICB7Ci0gICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBt
X2xvY2Fscy5vcGVyYW5kKHJlZyk7CisgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkg
PSBtX2xvY2Fscy5vcGVyYW5kKG9wKTsKICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuaGFzTm9k
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCmluZGV4IDA1ODQ0OTYzZTYxMGVkMjkzYzU2MGZhYmZk
Mzg5YTlmMzk3ODBhMDcuLmUyMWIyOGI1MjIxZjE1NjE4YjgwNjRhM2E3YjJkNzg2OTEzODQyMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcApAQCAtMzIs
NyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUJhc2ljQmxv
Y2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1B
cmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCitCYXNp
Y0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQg
bnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRtcHMsIGZsb2F0
IGV4ZWN1dGlvbkNvdW50KQogICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAg
ICwgaW5kZXgoTm9CbG9jaykKICAgICAsIGNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZChT
dHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKQEAgLTQ4LDExICs0OCwxMSBAQCBCYXNpY0Jsb2NrOjpCYXNp
Y0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRz
LCB1bnNpZwogICAgICwgaXNMaW5rZWQoZmFsc2UpCiAjZW5kaWYKICAgICAsIGlzUmVhY2hhYmxl
KGZhbHNlKQotICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQot
ICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFs
dWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFsdWVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisg
ICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4
ZWN1dGlvbkNvdW50KQogewogfQpAQCAtNzAsNiArNzAsMTUgQEAgdm9pZCBCYXNpY0Jsb2NrOjpl
bnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQogICAgIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpm
dWxsVG9wKCkpOwogfQogCit2b2lkIEJhc2ljQmxvY2s6OmVuc3VyZVRtcHModW5zaWduZWQgbmV3
TnVtVG1wcykKK3sKKyAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsK
KyAgICB2YXJpYWJsZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YWx1ZXNB
dEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlVG1w
cyhuZXdOdW1UbXBzKTsKKyAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJl
VG1wcyhuZXdOdW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpOworfQorCiB2b2lkIEJh
c2ljQmxvY2s6OnJlcGxhY2VUZXJtaW5hbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CiAg
ICAgTm9kZUFuZEluZGV4IHJlc3VsdCA9IGZpbmRUZXJtaW5hbCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAppbmRleCBiNWFkZjA5MTJkMDk0MmJlOTdlOTg3Y2Rj
ODlmNGFlMzRkMGMwYmM4Li4xZGQzOGM3OTA4ZGM2ZjRkMWIwODViYzhlMDYyNTQ4MGRiNDQ5N2Nm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNDYsMTEg
KzQ2LDEyIEBAIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1
Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2so
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1l
bnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVC
ZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVk
IG51bVRtcHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50KTsKICAgICB+QmFzaWNCbG9j
aygpOwogICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7
CisgICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpOwogICAgIAogICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCmluZGV4IDc1MDhlMjE5ZGM3YzU4
M2RiOWVhOGZjZTY0Njg1ODk5OWUwNDYwZjkuLjAwOGNmNTIyNjk1N2M5YTgzNTg1YzVlNWUyYzEy
NWYyZjhjZTRiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tJbnNlcnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tJbnNlcnRpb25TZXQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25T
ZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNp
Y0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhl
Y3V0aW9uQ291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5l
dyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNpY0Js
b2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1f
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpLCBleGVjdXRpb25Db3VudCkp
OwogICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgYXV0byogcmVzdWx0ID0gYmxv
Y2sucHRyKCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDdlNGE5ZmU2
MjMzYjc0NDllODI4NjYyYzFlNDk5ZGM5ZTg0NDA4YjcuLmQwNjQ3Y2Y1ZDk4NmUwYTlkZTdmYjU0
NGRlY2VhNDIyNTQ2NWIwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMTEsNiArMTExLDcgQEAgcHVibGljOgogICAgICAgICAs
IG1fY29uc3RhbnRPbmUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKDEpKSkKICAgICAgICAgLCBtX251
bUFyZ3VtZW50cyhtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKQogICAgICAgICAsIG1fbnVt
TG9jYWxzKG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bVRt
cHMobV9jb2RlQmxvY2stPm51bVRtcHMoKSkKICAgICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDAp
CiAgICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDApCiAgICAgICAgICwgbV9pbmxpbmVTdGFj
a1RvcCgwKQpAQCAtMTM5LDYgKzE0MCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFw
aC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCisgICAgdm9p
ZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCisgICAgeworICAgICAgICBWRVJCT1NF
X0xPRygiICAgZW5zdXJlVG1wczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVtVG1wcyBmcm9tICIsIG1f
bnVtVG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bVRt
cHMgPD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX251bVRtcHMg
PSBuZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubnVt
QmxvY2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZVRtcHMo
bmV3TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4Lgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVNaW5N
YXgoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBp
bnNlcnRDaGVja3MpOwpAQCAtMjcwLDI1ICsyODIsMzMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxp
bmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRz
KTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJhc2ljQmxvY2sqPiYgdW5saW5rZWRCbG9j
a3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0gICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgdm9pZCBwcm9ncmVzc0NoZWNrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpLCBtX2N1
cnJlbnRJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwg
aXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KKyAgICAgICAgbV9leGl0T0sgPSB0cnVlOworICAg
ICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUo
KTsKKyAgICB9CisKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25z
dGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgIHJldHVybiAmbV9n
cmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CiAgICAgfQogICAgIAogICAgIC8vIEdl
dC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAg
IE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRE
aXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlz
Q29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKIAotICAgICAgICAvLyBJcyB0aGlzIGFu
IGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0QXJn
dW1lbnQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAKLSAgICAgICAgLy8gTXVzdCBiZSBh
IGxvY2FsLgotICAgICAgICByZXR1cm4gZ2V0TG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVy
biBnZXRMb2NhbE9yVG1wKG9wZXJhbmQpOwogICAgIH0KIAogICAgIE5vZGUqIGdldChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKQEAgLTI5OCw4ICszMTgsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlm
IChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhd
KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSAqbV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAg
ICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29k
ZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBv
bGRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fY29uc3RhbnRzLmdyb3coY29uc3RhbnRJ
bmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXpl
OyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCkBAIC0zNTgsOSArMzc4LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIGluaXRpYWxpemluZyBsb2NhbHMgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0
aW9uLgogICAgICAgICBJbW1lZGlhdGVOYWtlZFNldAogICAgIH07Ci0gICAgTm9kZSogc2V0RGly
ZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2Rl
ID0gTm9ybWFsU2V0KQorCisgICAgTm9kZSogc2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgTm9k
ZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7Ci0gICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAKICAgICAg
ICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnltb3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhh
cyBjaGFuZ2VkLgogICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOwpAQCAtMzc0LDcgKzM5NSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZGVsYXllZC5leGVjdXRlKHRoaXMp
OwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7
ICsraSkKQEAgLTM5MiwxOCArNDEzLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KCkgPT0gbV9jdXJyZW50SW5kZXgpOwogICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4
LCBub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5
KG1fY3VycmVudEluZGV4LCBub2RlLT5vcGVyYW5kKCkpOwogICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlv
bihsb2NrZXIsIGtleSk7CiAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0KHByZWRpY3Rpb24pOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICAvLyBV
c2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMg
YSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbE9yVG1wKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0KLSAgICAgICAgTm9k
ZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpOwor
ICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8IG9wZXJhbmQuaXNMb2NhbCgpKTsKKyAg
ICAgICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGhhcyB0d28gZ29hbHM6IDEp
IGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRhdGFzLCBhbmQgMikKICAgICAgICAgLy8g
dHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBHZXRMb2NhbHMuICgxKSBpcyByZXF1aXJl
ZCBmb3IKQEAgLTQyOCwyMCArNDQ4LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5v
ZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZSkpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChsb2NhbCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAg
Tm9kZSogc2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0
KQorICAgIE5vZGUqIHNldExvY2FsT3JUbXAoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmln
aW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKICAgICB7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5p
c0xvY2FsKCkpOwogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2Uo
bV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNp
Z25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHNl
dE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKLSAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRp
b24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJh
bmQpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihvcGVyYW5kLnZhbHVlKCkpID49IG1fbnVtVG1wcykgeworICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigqaW5saW5lQ2FsbEZyYW1l
KCkpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQgb3BlcmFuZDogIiwgb3BlcmFuZCwgIiBi
dXQgY3VycmVudCBudW1iZXIgb2YgdG1wcyBpczogIiwgbV9udW1UbXBzLCAiIGNvZGUgYmxvY2sg
aGFzOiAiLCBtX3Byb2ZpbGVkQmxvY2stPm51bVRtcHMoKSwgIiB0bXBzLiIpOworICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0
ZU5ha2VkU2V0ICYmICFvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgQXJndW1l
bnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9j
YWwocmVnKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAg
ICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwotICAgICAgICAgICAg
ZWxzZSBpZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiBvcGVyYW5kID09IG1fY29k
ZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpCisgICAgICAgICAgICBlbHNlIGlmIChtX2dyYXBoLm5l
ZWRzU2NvcGVSZWdpc3RlcigpICYmIHJlZyA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3Rlcigp
KQogICAgICAgICAgICAgICAgIGZsdXNoKG9wZXJhbmQpOwogICAgICAgICB9CiAKQEAgLTQ1MSw3
ICs0NzcsNyBAQCBwcml2YXRlOgogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlQ2hl
Y2tBcnJheUhvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShzZW1hbnRpY09yaWdpbi5ieXRlY29kZUluZGV4KCksIEJh
ZEluZGV4aW5nVHlwZSkpOwogICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChTZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHZhbHVlKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAgLTQ4MywyMCArNTA5LDIxIEBAIHByaXZhdGU6
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIE5vZGUqIHNldEFy
Z3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICBO
b2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFu
ZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAg
IHsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3JpZ2luQ2hhbmdlKG1fY3VycmVu
dFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnQgPSBvcGVyYW5kLnRvQXJndW1lbnQoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gcmVnLnRvQXJndW1lbnQoKTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1
bWVudHMpOwogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KHJlZyk7CiAKICAgICAgICAgLy8gQWx3YXlzIGZsdXNoIGFyZ3VtZW50cywgZXhjZXB0IGZvciAn
dGhpcycuIElmICd0aGlzJyBpcyBjcmVhdGVkIGJ5IHVzLAogICAgICAgICAvLyB0aGVuIG1ha2Ug
c3VyZSB0aGF0IGl0J3MgbmV2ZXIgdW5ib3hlZC4KICAgICAgICAgaWYgKGFyZ3VtZW50IHx8IG1f
Z3JhcGgubmVlZHNGbHVzaGVkVGhpcygpKSB7CiAgICAgICAgICAgICBpZiAoc2V0TW9kZSAhPSBJ
bW1lZGlhdGVOYWtlZFNldCkKLSAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kKTsK
KyAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChyZWcpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBpZiAoIWFyZ3VtZW50ICYmIG1fY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQo
KSA9PSBDb2RlRm9yQ29uc3RydWN0KQpAQCAtNTMyLDE0ICs1NTksMTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGludCBhcmd1bWVudCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgp
IC0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Bcmd1bWVudCgpOwogICAgICAgICAg
ICAgcmV0dXJuIHN0YWNrLT5tX2FyZ3VtZW50UG9zaXRpb25zW2FyZ3VtZW50XTsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IAotICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9uKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9u
KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yQXJndW1lbnQo
b3BlcmFuZC50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRp
b25Gb3JMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9u
Rm9yTG9jYWwob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQWRkRmx1c2hEaXJlY3RGdW5jPgpAQCAtNTUwLDkgKzU3OSw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpOwog
ICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRo
Rml4dXAuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKLSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJl
bWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZy
YW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAg
ICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCBy
ZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gbV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpLT5udW1QYXJhbWV0ZXJzKCk7CiAK
QEAgLTU3NSw2ICs2MDQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9
IG1fZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAvLyBOb3Rl
OiBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSB0bXBzIGhlcmUgYmVjYXVzZSB0bXBzIGFyZSBub3Qg
cmVxdWlyZWQgdG8gYmUgZmx1c2hlZCB0byB0aGUgc3RhY2suCiAgICAgICAgICAgICAgICAgY29u
c3QgYXV0byYgbGl2ZW5lc3NBdEJ5dGVjb2RlID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJ5
dGVjb2RlSW5kZXgsIG1fZ3JhcGguYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQo
b3JpZ2luLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bG9jYWwgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAg
ICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW2xvY2FsXSkKQEAgLTU4NCwyNyAr
NjE0LDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICB2b2lkIGZs
dXNoKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2goT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFu
ZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0
aW9uKG9wZXJhbmQpKTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZv
aWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVu
dFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4o
b3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Tm9kZVR5
cGUgbm9kZVR5cGU+Ci0gICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZv
aWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRp
b24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXND
b25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52
aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsK
KyAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlOwogICAgICAgICAKQEAgLTYxNCwyNiArNjQ0LDI1IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKG5vZGVUeXBlLCBPcEluZm8odmFyaWFibGUpKTsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
ID0gbm9kZTsKICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1
bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBw
aGFudG9tTG9jYWxEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwaGFu
dG9tTG9jYWxEaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hP
clBoYW50b21Mb2NhbDxQaGFudG9tTG9jYWw+KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9u
KG9wZXJhbmQpKTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoKElubGluZVN0YWNrRW50cnkqIGlu
bGluZVN0YWNrRW50cnkpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZd
IChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJl
Zyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFt
ZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAg
Zmx1c2hJbXBsKGlubGluZVN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERp
cmVjdCk7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaEZvclRlcm1pbmFsKCkKICAgICB7Ci0gICAg
ICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKLSAgICAgICAgYXV0byBhZGRQaGFu
dG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KHJlZyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hE
aXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERp
cmVjdChvcGVyYW5kKTsgfTsKKyAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBb
Jl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBwaGFudG9tTG9jYWxEaXJl
Y3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKGN1cnJlbnRDb2Rl
T3JpZ2luKCksIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwogICAgIH0K
IApAQCAtNzYxLDYgKzc5MCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZShjaGlsZDEp
LCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBo
KHJlc3VsdCk7CiAgICAgfQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wZXJh
bmQgb3BlcmFuZCwgTm9kZSogY2hpbGQxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wID09IE1v
dkhpbnQpOworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChvcCwgT3BJbmZvKG9wZXJhbmQua2lu
ZCgpKSwgT3BJbmZvKG9wZXJhbmQudmFsdWUoKSksIGNoaWxkMSk7CisgICAgfQogICAgIE5vZGUq
IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBFZGdl
IGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAg
IHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKApAQCAtMTA5MSw4ICsx
MTI1LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNz
ZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwotICAgIC8v
IFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4gdGhlIGZ1
bmN0aW9uLgorICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMp
IHVzZWQgYnkgdGhlIGJ5dGVjb2RlIGZvciB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9u
dW1Mb2NhbHM7CisgICAgLy8gVGhlIG1heCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3IgZm9yd2Fy
ZGluZyBkYXRhIHRvIGFuIE9TUiBleGl0IHRvIGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQgbV9u
dW1UbXBzOwogICAgIC8vIFRoZSBudW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihS
ZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0bwogICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1bWVu
dHMgdG8gb3V0Z29pbmcgY2FsbHMgZnJvbSB0aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVtYmVy
IGluY2x1ZGVzIHRoZSBDYWxsRnJhbWUgc2xvdHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0aGUg
Y2FsbGVlCkBAIC0xMTU5LDE0ICsxMTk1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICB+SW5saW5lU3RhY2tFbnRyeSgpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAgT3Bl
cmFuZCByZW1hcE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBv
cGVyYW5kOworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSArIG1faW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQo
IW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIH0KICAgICB9OwogICAgIApAQCAt
MTE3NSwxMyArMTIxNCw4IEBAIHByaXZhdGU6CiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2sgbV9p
Y0NvbnRleHRTdGFjazsKICAgICAKICAgICBzdHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKLSAgICAg
ICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFu
ZDsKLSAgICAgICAgTm9kZSogbV92YWx1ZTsKLSAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7Ci0g
ICAgICAgIAogICAgICAgICBEZWxheWVkU2V0TG9jYWwoKSB7IH0KLSAgICAgICAgRGVsYXllZFNl
dExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChj
b25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNl
dE1vZGUgc2V0TW9kZSkKICAgICAgICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAg
LTExOTQsOCArMTIyOCwxMyBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
bV9vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5z
ZXRBcmd1bWVudChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWwobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92
YWx1ZSwgbV9zZXRNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsT3JU
bXAobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKICAgICAgICAgfQor
CisgICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47CisgICAgICAgIE9wZXJhbmQgbV9vcGVyYW5k
OworICAgICAgICBOb2RlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworICAgICAgICBTZXRNb2RlIG1f
c2V0TW9kZTsKICAgICB9OwogICAgIAogICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1f
c2V0TG9jYWxRdWV1ZTsKQEAgLTEyMDgsNyArMTI0Nyw3IEBAIHByaXZhdGU6CiBCYXNpY0Jsb2Nr
KiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsKLSAgICBSZWY8QmFz
aWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwg
bV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJs
b2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1l
bnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQ
dHIgPSBibG9jay5wdHIoKTsKICAgICAvLyBtX2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdh
eXMgYmUgc29ydGVkIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlm
IChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpKQpAQCAtMTIy
MCw3ICsxMjU5LDcgQEAgQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0
YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIAogQmFzaWNCbG9jayogQnl0
ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCks
IG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJn
dW1lbnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxv
Y2tQdHIgPSBibG9jay5wdHIoKTsKICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxv
Y2spKTsKICAgICByZXR1cm4gYmxvY2tQdHI7CkBAIC0xNDIzLDcgKzE0NjIsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICE9IHN0YXRpY19jYXN0PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUg
dGFyZ2V0IElubGluZUNhbGxGcmFtZSBpcyBWYXJhcmdzLCB3ZSBkbyBub3Qga25vdyBob3cgbWFu
eSBhcmd1bWVudHMgYXJlIGFjdHVhbGx5IGZpbGxlZCBieSBMb2FkVmFyYXJncy4gVmFyYXJncyBJ
bmxpbmVDYWxsRnJhbWUncwotICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSBM
b2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJl
CisgICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51
bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZhcmFyZ3MuIFdl
ICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQogICAgICAgICAgICAg
Ly8gYSBnb29kIHRhcmdldCB0byBqdW1wIGludG8uCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDksNyArMTQ4
OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgIC8vIFdlIG11c3Qgc2V0IHRo
ZSBjYWxsZWUgdG8gdGhlIHJpZ2h0IHZhbHVlCiAgICAgICAgIGlmIChzdGFja0VudHJ5LT5tX2lu
bGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1faW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIHNldERpcmVjdChzdGFja0Vu
dHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgICAgICBzZXREaXJlY3Qo
cmVtYXBPcGVyYW5kKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUpOwogCkBAIC0x
NjE0LDE2ICsxNjUzLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgQVNTRVJUKCEo
bnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90cyAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsK
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwID0gcmVnaXN0ZXJPZmZzZXQgLSBudW1i
ZXJPZlN0YWNrUGFkZGluZ1Nsb3RzOwogICAgIAotICAgIGludCBpbmxpbmVDYWxsRnJhbWVTdGFy
dCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXRBZnRlckZpeHVwKSkub2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVyczsKKyAgICBPcGVyYW5kIGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gVmlydHVhbFJlZ2lz
dGVyKG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzKTsKICAgICAKICAgICBlbnN1cmVMb2NhbHMoCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgpICsgMSArCisgICAgICAgIGlubGluZUNh
bGxGcmFtZVN0YXJ0LnRvTG9jYWwoKSArIDEgKwogICAgICAgICBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyArIGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpOwogICAgIAorICAg
IGVuc3VyZVRtcHMoKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lID8gbV9pbmxp
bmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSArIGNvZGVCbG9jay0+bnVtVG1wcygpKTsK
KwogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQ
b3NpdGlvbnMuc2l6ZSgpOwogCiAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
c3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOworICAgICAgICBy
ZXN1bHQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFsUmVn
aXN0ZXIoKTsKIAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxs
cHRyOwogICAgIGlmIChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xNjM2LDcgKzE2Nzcs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSogY2Fs
bGVyU3RhY2tUb3AgPSBtX2lubGluZVN0YWNrVG9wOwogICAgIElubGluZVN0YWNrRW50cnkgaW5s
aW5lU3RhY2tFbnRyeSh0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgY2FsbGVlLmZ1bmN0aW9u
KCksIHJlc3VsdCwKLSAgICAgICAgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFy
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsK
KyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudmlydHVhbFJlZ2lzdGVyKCksIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBU
aGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgQnl0
ZWNvZGVJbmRleCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OwpAQCAtMTY3MSw5ICsxNzEyLDkg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3ZSBi
ZWdpbiBleGVjdXRpbmcgdGhlIGNhbGxlZSwgd2UgbmVlZCBPU1IgZXhpdCB0byBiZSBhd2FyZSBv
ZiB3aGVyZSBpdCBjYW4gcmVjb3ZlciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZXR0ZXIsIGxvYzkg
YW5kIGxvYzEwLiBUaGUgTW92SGludHMgaW4gdGhlIGlubGluZWQKICAgICAgICAgLy8gY2FsbGVl
IG1ha2UgaXQgc28gdGhhdCBpZiB3ZSBleGl0IGF0IDxIRVJFPiwgd2UgY2FuIHJlY292ZXIgbG9j
OSBhbmQgbG9jMTAuCiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
T3BlcmFuZCBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAg
ICAgIE5vZGUqIHZhbHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVl
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRM
b2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlh
dGVOYWtlZFNldCB9KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTcsMTYgKzE3
NTgsMTYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNl
cywgd2UgZG8gbm90IG5lZWQgdG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9m
ZnNldEFmdGVyRml4dXAgIT0gcmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkg
ewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVy
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwg
cmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQg
PSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3Vy
cmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb1NldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0
IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBhcml0eUZpeHVwQ291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
aW5kZXgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50
VG9TZXQub2Zmc2V0KCkpLCB1bmRlZmluZWQpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVu
dFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQp
OwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBj
dXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5h
a2VkU2V0IH0pOwogICAgICAgICB9CiAKQEAgLTE4OTMsMTIgKzE5MzQsMTIgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBj
YWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGludCByZW1h
cHBlZFJlZ2lzdGVyT2Zmc2V0ID0KLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1
cmVMb2NhbHMoVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwo
KSk7CiAgICAgICAgIAogICAgICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBl
ZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJn
dW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRTdGFydCkpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAK
ICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0
YS5hZGQoKTsKICAgICAgICAgZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRB
cmd1bWVudFN0YXJ0ICsgMSk7CkBAIC0xOTA2LDExICsxOTQ3LDI0IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyCiAgICAgICAgIGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAg
ICAgZGF0YS0+bGltaXQgPSBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAg
ZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmltdW07Ci0gICAgICAgIAotICAg
ICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBh
ZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1
bWVudHNBcmd1bWVudCkpOworCisgICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJk
VmFyYXJncykgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKKyAgICAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9
IGFkZFRvR3JhcGgoR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAg
ZWxzZSBpZiAoaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnQgPSBnZXREaXJlY3QocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgp
LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICBlbHNlIAorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtX2dyYXBoLmZyZWV6ZShqc051bWJlcihpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJn
cywgT3BJbmZvKGRhdGEpLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IGdldChhcmd1bWVudHNBcmd1bWVudCk7CisgICAgICAg
ICAgICBhdXRvIGFyZ0NvdW50VG1wID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKE9w
ZXJhbmQoVG1wT3BlcmFuZCwgT3BDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgICAg
IHNldERpcmVjdChhcmdDb3VudFRtcCwgYWRkVG9HcmFwaChWYXJhcmdzTGVuZ3RoLCBPcEluZm8o
ZGF0YSksIGFyZ3VtZW50cykpOworICAgICAgICAgICAgcHJvZ3Jlc3NDaGVja3BvaW50KCk7CisK
KyAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0TG9j
YWxPclRtcChhcmdDb3VudFRtcCksIGFyZ3VtZW50cyk7CisgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIExvYWRWYXJhcmdzIG1heSBPU1IgZXhpdC4gSGVuY2UsIHdlIG5lZWQgdG8ga2Vl
cCBhbGl2ZSBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50CiAgICAgICAgIC8vIGFuZCBhcmd1
bWVudHNBcmd1bWVudCBmb3IgdGhlIGJhc2VsaW5lIEpJVC4gSG93ZXZlciwgd2Ugb25seSBuZWVk
IGEgUGhhbnRvbSBmb3IKQEAgLTE5MjIsMTQgKzE5NzYsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVn
aXN0ZXIKICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxzbyBoYXZlIG90aGVyIHJl
YXNvbnMgZm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CiAgICAgICAgIC8vIGJlZm9yZSBT
U0EuCiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShkYXRhLT5j
b3VudCk7CiAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1dCBpdCB3aWxsIGZvcmNl
IHRoZSBjb3VudCB0byBiZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBkb2Vzbid0CiAgICAgICAg
IC8vIG1hdHRlciB2ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudERlZmlu
aXRlbHkgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcwogICAgICAgICAvLyBtb3N0
bHkganVzdCBhIGZvcm1hbGl0eS4KICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVj
SW50MzJPbmx5KTsKICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1Vu
Ym94KHRydWUpOwogICAgICAgICBOb2RlKiBzZXRBcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChT
ZXRBcmd1bWVudERlZmluaXRlbHksIE9wSW5mbyhjb3VudFZhcmlhYmxlKSk7Ci0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5s
b2NhbCgpLCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1l
bnRDb3VudCk7CiAgICAgICAgIAogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
U3RhcnQpLCBnZXQodGhpc0FyZ3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICB1
bnNpZ25lZCBudW1TZXRBcmd1bWVudHMgPSAwOwpAQCAtMTk1Myw3ICsyMDA3LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKG51bVNldEFyZ3VtZW50cyA+PSBtYW5k
YXRvcnlNaW5pbXVtID8gU2V0QXJndW1lbnRNYXliZSA6IFNldEFyZ3VtZW50RGVmaW5pdGVseSwg
T3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJs
ZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAgICArK251bVNldEFyZ3VtZW50
czsKICAgICAgICAgfQogICAgIH07CkBAIC0yMDUzLDcgKzIxMDcsNyBAQCBCeXRlQ29kZVBhcnNl
cjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
CiAgICAgLy8geWV0LgogICAgIFZFUkJPU0VfTE9HKCJSZWdpc3RlciBvZmZzZXQ6ICIsIHJlZ2lz
dGVyT2Zmc2V0KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlUmVnKHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICBjYWxsZWVSZWcgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQoY2FsbGVlUmVnKTsKKyAgICBjYWxsZWVSZWcgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2FsbGVlUmVnKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBW
RVJCT1NFX0xPRygiQ2FsbGVlIGlzIGdvaW5nIHRvIGJlICIsIGNhbGxlZVJlZywgIlxuIik7CiAg
ICAgc2V0RGlyZWN0KGNhbGxlZVJlZywgY2FsbFRhcmdldE5vZGUsIEltbWVkaWF0ZVNldFdpdGhG
bHVzaCk7CiAKQEAgLTUxMDIsNyArNTE1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdl
eHA+KCk7CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUubV9yZWdleHAuaXNDb25zdGFudCgp
KTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6
ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNv
ZGUubV9yZWdleHAub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5S
ZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9yZWdleHApKTsKICAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhmcm96ZW5SZWdFeHApLCBq
c0NvbnN0YW50KGpzTnVtYmVyKDApKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3
X3JlZ2V4cCk7CiAgICAgICAgIH0KQEAgLTYxNzgsNyArNjIzMiw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+c2l6ZSgpIHx8IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkg
JiYgbV9jdXJyZW50QmxvY2stPnNpemUoKSA9PSAxICYmIG1fY3VycmVudEJsb2NrLT5hdCgwKS0+
b3AoKSA9PSBDb3VudEV4ZWN1dGlvbikpOwogCi0gICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYnVm
ZmVyOworICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBi
dWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYnVmZmVyOwogCiAgICAgICAg
ICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNo
KTsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4g
YmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KQEAgLTYxOTUsNyArNjI0OSw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAKLSAgICAgICAgICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAg
ICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKQEAgLTYyMjMsMTQg
KzYyNzcsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7IAogCiAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkxvY2FscyA9IDA7Ci0gICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgICAgICBidWZmZXItPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNMb2NhbCgp
KTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGFkZFRvR3JhcGgoRXh0cmFjdENhdGNo
TG9jYWwsIE9wSW5mbyhudW1iZXJPZkxvY2FscyksIE9wSW5mbyhsb2NhbFByZWRpY3Rpb25zW251
bWJlck9mTG9jYWxzXSkpOwogICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZMb2NhbHM7Ci0gICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ocHJvZmlsZS5tX29wZXJhbmQp
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3Bl
cmFuZCksIHZhbHVlKTsKICAgICAgICAgICAgICAgICBsb2NhbHNUb1NldC51bmNoZWNrZWRBcHBl
bmQoc3RkOjptYWtlX3BhaXIob3BlcmFuZCwgdmFsdWUpKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgaWYgKG51bWJlck9mTG9jYWxzKQpAQCAtNjM1OCw3ICs2NDEyLDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9m
ZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGlm
IChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CkBAIC02ODI2LDgg
KzY4ODAsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGlj
YWxFbnZpcm9ubWVudD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3N5bWJvbFRh
YmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
Lm1fc3ltYm9sVGFibGUub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0
aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25n
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5
bWJvbFRhYmxlKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKSk7CiAgICAgICAgICAgICBOb2RlKiBzY29wZSA9
IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9u
bWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwg
T3BJbmZvKGluaXRpYWxWYWx1ZSksIHNjb3BlKTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgbGV4aWNhbEVudmlyb25tZW50KTsKQEAgLTY4NTcsNyArNjkxMSw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBs
b2FkcyBmcm9tIHRoZSBzY29wZSByZWdpc3RlciBsYXRlciwgYXMgdGhhdCB3b3VsZCBwcmV2ZW50
IHRoZSBERkcgZnJvbSB0cmFja2luZyB0aGUKICAgICAgICAgICAgIC8vIGJ5dGVjb2RlLWxldmVs
IGxpdmVuZXNzIG9mIHRoZSBzY29wZSByZWdpc3Rlci4KICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgICAgICAgICBO
b2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
OworICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7
CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCptX3Zt
KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSB3ZWFrSlNDb25zdGFudChmdW5jdGlvbi0+c2Nv
cGUoKSk7CkBAIC03Mjc1LDggKzczMjksMTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIC8vIFRoZSBvd25lciBpcyB0aGUgbWFj
aGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgYmFycmllciBvbiB0aGF0IHdo
ZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCiAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0VG1wT2Zm
c2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2NhbGxlci0+bV9pbmxpbmVDYWxs
RnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9jYWxsZXItPm1fY29kZUJsb2NrLT5udW1UbXBzKCkp
OwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZy
YW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAg
ICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOwogICAgICAgICBpZiAoY2FsbGVlKSB7CiAgICAgICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChjYWxs
ZWUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwgPSBmYWxz
ZTsKQEAgLTc2MzgsNyArNzY5NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFw
aCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1hcHBpbmcub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRm9yY2VPU1JF
eGl0KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03NjU4LDI0ICs3NzE0
LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNl
cnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50ID0gdW5t
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnQuaXNBcmd1bWVudCgpICYmICFhcmd1bWVudC5pc0hlYWRlcigpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPEFyZ3VtZW50UG9zaXRp
b24qPiYgYXJndW1lbnRzID0gbV9pbmxpbmVDYWxsRnJhbWVUb0FyZ3VtZW50UG9zaXRpb25zLmdl
dChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
c1thcmd1bWVudC50b0FyZ3VtZW50KCldLT5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBvcCwgb3JpZ2luLCBPcEluZm8odmFyaWFi
bGUpKTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBh
ZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkRmx1
c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5k
IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2Vy
dmluZ09wKGlubGluZUNhbGxGcmFtZSwgRmx1c2gsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAg
ICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9
IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5k
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChp
bmxpbmVDYWxsRnJhbWUsIFBoYW50b21Mb2NhbCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgIH07CiAgICAgICAgICAgICAgICAgICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKG9yaWdpbi5z
ZW1hbnRpYywgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CkBAIC03NzQw
LDYgKzc3OTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIEFTU0VS
VChibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkgPT0gbV9ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIH0KIAor
ICAgIG1fZ3JhcGgubV90bXBzID0gbV9udW1UbXBzOwogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMg
PSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRl
clNsb3RzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQ
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAppbmRl
eCA4ZTliYjRhY2JlNTUwMmRkYTdiMzc0Nzg0YjVhODVmZmRlNzAzYmZkLi4zZGM3NTY4ZjFlZTJj
Njk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2MjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcApAQCAtMTcwLDIyICsxNzAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpT
VmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1
ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2
YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVj
b2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAg
ICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3Qg
bGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5nICIs
IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5nICIsIG9wZXJhbmQsICIgd2l0
aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0YXJnZXQubWVyZ2VPU1JFbnRyeVZhbHVlKG1fZ3Jh
cGgsIHZhbHVlLnZhbHVlKCksIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLCBub2RlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2JjMTZiNjdkNjAyYmE2NDI2YWYwZjIzODIuLjU3NzBm
MDk4OTQyYzg5NmI3YWNmODIzZmNhYjk0NDRhMjI0Y2NlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcApAQCAtNTYsNiAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWNpYWxDYXNlQXJndW1lbnRzKCk7CiAgICAgICAg
IHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5kPigpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPEFy
Z3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAgcHJvcGFnYXRlUGhpczxUbXBPcGVyYW5kPigpOwog
ICAgICAgICBjb21wdXRlSXNGbHVzaGVkKCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1f
Zm9ybSA9IFRocmVhZGVkQ1BTOwpAQCAtMjExLDEwICsyMTIsMjAgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBj
YW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2
YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2
YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5v
cGVyYW5kKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZh
cmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDogeworICAgICAgICAg
ICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwg
dmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxp
emVHZXRMb2NhbEZvcjxUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJh
bmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGUsIE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYgKzI0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBj
YXNlIEZsdXNoOgogICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEo
KS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMjcwLDE1ICsyODIsMjUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNo
T3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYg
KHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwg
dmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUs
IExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwo
KSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNo
T3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7CisgICAgICAgICAgICBj
YW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIFRtcE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2
b2lkIGNhbm9uaWNhbGl6ZVNldChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgbV9ibG9jay0+
dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgICAg
IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSwgbm9k
ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpCkBA
IC0yODksNiArMzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGNsZWFyVmFyaWFi
bGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKICAgICAgICAgY2xlYXJWYXJpYWJsZXM8TG9jYWxPcGVy
YW5kPigpOworICAgICAgICBjbGVhclZhcmlhYmxlczxUbXBPcGVyYW5kPigpOwogICAgICAgICAK
ICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkgcmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVt
b3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CiAgICAgICAgIC8vIHNob3VsZCBiZSBsaXZl
IGhhdmUgYSBub24temVybyByZWYgY291bnQsIGJ1dCBkb2Vzbid0IGFzc3VtZSB0aGF0IHRoZSBy
ZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJvcGFnYXRlUGhpcygpCiAgICAgewotICAgICAgICBW
ZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sgPSBvcGVyYW5kS2luZCA9PSBBcmd1
bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBtX2xvY2FsUGhpU3RhY2s7CisgICAg
ICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IHBoaVN0YWNrRm9yPG9w
ZXJhbmRLaW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMg
dG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHkuCiAgICAgICAgIG1fYmxvY2sgPSAwOwpAQCAtNDY2
LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRL
aW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFja0ZvcigpCiAgICAg
ewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQotICAgICAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlT
dGFjazsKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDogcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsKKyAgICAgICAgY2FzZSBMb2Nh
bE9wZXJhbmQ6IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIGNhc2UgVG1wT3BlcmFu
ZDogcmV0dXJuIG1fdG1wUGhpU3RhY2s7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21wdXRlSXNGbHVzaGVk
KCkKQEAgLTUyMSw2ICs1NDcsNyBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7
CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAg
IFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKKyAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTI4PiBtX3RtcFBoaVN0YWNrOwogICAgIFZlY3RvcjxOb2RlKiwgMTI4
PiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4IDIzODFjNmI4ZjhmNGJhNzYzNGJiNjZiMTIzOTQ3MWI1
YTYxNjY3Y2UuLjRjY2UxNzQ4ODNlMjA0MTBkNjIyM2E2ZjQxNzJlZGRlNjk4YWFlYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC0xNDcsOCArMTQ3LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKICAg
ICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
OwotICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3Zl
KGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGNsb2JiZXJDb25zZXJ2
YXRpdmVseSkKICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKICAg
ICAgICAgICAgIGVsc2UKQEAgLTE3Miw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgaWYgKCFjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGlmIChwYWlyLmtleS5oZWFwKCkua2luZCgpID09IFN0YWNrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBh
aXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgpICYmIGl0ZXJhdG9yLT52
YWx1ZS0+a2V5ID09IHBhaXIua2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyNiw4ICsyMjUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgQWJzdHJhY3RIZWFwIGFic3RyYWN0SGVhcCA9IGxvY2F0
aW9uLmhlYXAoKTsKICAgICAgICAgICAgIGlmIChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLmlzVG9w
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0
aW9uLCBub2RlKTsKLSAgICAgICAgICAgIEFTU0VSVChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZh
bHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAu
cGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFs
dWUoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsK
ICAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnJlc2V0KG5ldyBJbXB1
cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5vZGUsIDB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTI0OSw4ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNpZGVT
dGF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGNhc2UgU3RhY2s6IHsKLSAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvbi5oZWFwKCkucGF5bG9h
ZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2Nh
dGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJh
dG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2Fk
KCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBT
dGFja01hcC5lbmQoKQogICAgICAgICAgICAgICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09
IGxvY2F0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVl
OwpAQCAtMjk4LDcgKzI5NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhl
IHBhc3QgYW5kIG5vdyBvbmx5IGxpdmUgaW4gbV9mYWxsYmFja1N0YWNrTWFwLgogICAgIC8vCiAg
ICAgLy8gT2J2aW91c2x5LCBUT1AgYWx3YXlzIGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAg
c2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZSB2YWx1ZS4KLSAgICBIYXNoTWFwPGludDMy
X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDMyX3Q+
OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQzMl90Pj4gbV9hYnN0
cmFjdEhlYXBTdGFja01hcDsKKyAgICBIYXNoTWFwPGludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxJ
bXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDY0X3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2NF90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKICAg
ICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOwogCiAgICAgTWFwIG1faGVhcE1hcDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggODliYzY0MWY1MjZiYjUzZmYw
MzdmNzNjZjk1MGJhYzY0NmQ0OTk1NC4uODJmM2NhNjQxODRmOTE5MzY1MDM5YjEzMjIxN2RkOTll
YTk3MTA1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAg
LTExMSw5ICsxMTEsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIC8vIHNjYW4gd291
bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhpcyBkb2VzLgogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5k
aXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNr
LCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7
CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gc3BlY2lmaWNhbGx5IGFjY291bnQgd2hpY2ggbm9kZXMgY2FuIHJlYWQgZnJvbSB0
aGUgc2NvcGUKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAg
ICAgICByZXR1cm47CiAKICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CkBAIC00OTcsNyArNDk3LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoK
LSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKQEAgLTc2NCwxMiArNzY0LDEyIEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJz
dHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgTGF6eU5vZGUobm9kZSkp
OworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywg
QWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU2V0Q2Fs
bGVlOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczogewpAQCAtNzgwLDcgKzc4MCw3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgfQogCiAgICAgY2FzZSBTZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgR2V0UmVzdExlbmd0aDoKQEAgLTc4OCwzNiAr
Nzg4LDQzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJz
dHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJh
bmQoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBTZXRMb2NhbDoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5s
b2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewotICAgICAgICBBYnN0
cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5v
cGVyYW5kKTsKICAgICAgICAgcmVhZChoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihT
dGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVh
cChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJh
Y3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAg
ICAgICAgd3JpdGUoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhl
YXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIHJlYWQo
V29ybGQpOworICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChTdGFjaywgZGF0YS0+Y291bnQpKTsKKyAgICAgICAgcmV0dXJuOyAgCisgICAgfQorCiAgICAg
Y2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUo
SGVhcCk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9m
ZnNldCgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQot
ICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQo
KSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODI2LDkgKzgzMyw5IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoU3RhY2spOwogICAgICAgICAKICAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgd3Jp
dGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7Cisg
ICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGlj
X2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCmluZGV4
IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBkMDljZDJhYzMwZjMuLjE1NzQ2YzA1NGYwZGYz
M2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApAQCAtMzksNyArMzksNyBAQCBzdGF0aWMg
dm9pZCBhZGRCeXRlY29kZUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQXZhaWxhYmlsaXR5TWFwJiBh
dmFpbGFiaWxpdHlNYXAsCiB7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAg
ICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCiAgICAgICAgICAgICAgICAgcmVnLAogICAg
ICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCA3OTg3Yjg3MGZkNTA5ZjkzMDAwN2Uz
NTZhYzA1NWVhNjZiZmU3YWRiLi43ZmZkNGQzNWI2Y2Y1YzlkZTM4MWU3ZGE2MTMzMmZkNTI0OTY1
NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKQEAg
LTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmln
aW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBB
U1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNh
bGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVu
aXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMgKzY0LDEz
IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQo
Y29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRl
SW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6Omxhc3RDYWxsU2l0
ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZU9yaWdpbnMuc2l6ZSgpKTsKLSAg
ICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNvZGVPcmlnaW5zLnNpemUoKSAt
IDEpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbnMuc2l6
ZSgpIC0gMSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZERp
c3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA4NTQxMjMxNDc0MWU2ZjExMjYxZjJlOTdj
NDlmZTY0NGRhZTdiYWY3Li5mMzhjODNmZGQzMGMyZjUzYjNkNTA5M2Y0MGIyYzcwZTk1MzEwNDg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yOTQsNiArMjk0
LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgSW5C
eVZhbDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgor
ICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2Ug
TnVtYmVyVG9TdHJpbmdXaXRoUmFkaXg6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhWYWxp
ZFJhZGl4Q29uc3RhbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKaW5k
ZXggMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIyNzJkNDc5OTk4YjUzOS4uNDVmYmM0MzlkNTNi
YTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcApAQCAtOTAsNyArOTAsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZUltcGwoCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhlIERG
RyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAgLy8gbWFr
ZSBzdXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24gb24g
dGhlIG1haW4gdGhyZWFkLgogICAgIHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcik7
Ci0gICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENU
SVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIHZtLmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhZWUxZjAwNzNiMGY0YmJjYzQ3MzRlYjY0MWU0NjQ4
YzMwNTVhMjQ0Li5jYTMzZGIyMjdkNGI5Mjc3M2ZhODZkNzJlZTNkNGQxYjg1YmY5ODNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTI0MzIsNiAr
MjQzMiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAg
ICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Cisg
ICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
ICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5
IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudERlZmluaXRlbHk6CkBAIC0yNDY0LDggKzI0NzIsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgRm9yd2Fy
ZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBQcm9m
aWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNlIE5l
d1Byb21pc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFs
bEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKaW5k
ZXggMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRjZmRlMjhiOS4uOTMzYTJiZGUyMmUx
NjZjMmFlYjZkNGFjMWJiZTljZTFlNWNlZDU2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtMzIsNiArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2UgRm9yQWxsS2lsbHNJbnRlcm5hbCB7Citjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIC8vIFV0aWxpdGllcyBmb3IgZmluZGlu
ZyB0aGUgbGFzdCBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUgaW4gREZHIFNTQS4gVGhpcyBh
Y2NvdW50cyBmb3IgbGl2ZW5lc3MgZHVlCiAvLyB0byBPU1IgZXhpdC4gVGhpcyBpcyB1c3VhbGx5
IHVzZWQgZm9yIGVudW1lcmF0aW5nIG92ZXIgYWxsIG9mIHRoZSBwcm9ncmFtIHBvaW50cyB3aGVy
ZSBhIG5vZGUgaXMgbGl2ZSwKIC8vIGJ5IGV4cGxvcmluZyBhbGwgYmxvY2tzIHdoZXJlIHRoZSBu
b2RlIGlzIGxpdmUgYXQgdGFpbCBhbmQgdGhlbiBleHBsb3JpbmcgYWxsIHByb2dyYW0gcG9pbnRz
IHdoZXJlIHRoZQpAQCAtNTMsMTMgKzU3LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAg
ICAgCiAgICAgQ29kZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRlci0+b3JpZ2luLmZvckV4aXQ7CiAg
ICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3RlZDsKKyAgICBPcGVyYW5kIGFscmVh
ZHlOb3RlZDsKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0aGluZyB0aGF0IGlzIGxpdmUgYXQg
dGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVlLgogICAgIGlmIChub2RlQWZ0ZXIt
PmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBub2Rl
QWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNv
ZGUocmVnLCBhZnRlcikpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKLSAgICAgICAgICAg
IGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZUFmdGVy
LT51bmxpbmtlZE9wZXJhbmQoKTsKKyAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUo
b3BlcmFuZCwgYWZ0ZXIpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOworICAgICAg
ICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAg
LTcwLDggKzc0LDI0IEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgLy8gb3RoZXIgbG9v
cCwgYmVsb3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5lQ2FsbEZyYW1lID0gYmVmb3JlLmlubGlu
ZUNhbGxGcmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPT0gYWZ0ZXIuaW5s
aW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5l
Q2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoYmVm
b3JlSW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0ZWNvZGVJbmRleCgp
LmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKTsKKwor
ICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpj
b2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgYXV0byBsaXZl
QWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYWZ0ZXIuYnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGludCB0bXBPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxs
RnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAgICAg
ICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZpbHRlcihsaXZl
QWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQoWyZdIChzaXpl
X3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihPcGVyYW5kKFRtcE9wZXJhbmQsIHRt
cCArIHRtcE9mZnNldCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBObyBsb2Nh
bHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBi
ZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAgICAgRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7
CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVCZWZvcmUgPSBmdWxsTGl2ZW5lc3Mu
Z2V0TGl2ZW5lc3MoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBv
aW50OjpCZWZvcmVVc2UpOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQWZ0ZXIg
PSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CkBAIC04MiwxNyArMTAyLDIxIEBAIHZvaWQg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2Rl
KiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFmdGVyLmJ5dGVjb2RlSW5kZXgo
KS5jaGVja3BvaW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9zcyBhIGNoZWNrcG9pbnQgYnV0IGJl
Zm9yZSBhbmQgYWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5lQ2FsbEZyYW1lLiIpOworCiAgICAg
Ly8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRpdmUgd2F5OiBpdCBpcyBraWxsZWQg
aWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVyLgotICAgIEJpdFZlY3RvciBsaXZl
QWZ0ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShhZnRlcik7Ci0gICAgZ3JhcGguZm9y
QWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBo
LmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShhZnRlcik7CisgICAgdW5zaWduZWQgbnVtTG9j
YWxzID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOwor
ICAgIGdyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAgICAgYmVm
b3JlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIGlm
IChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewor
ICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5vdGVkKQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50b0xvY2FsKCkpKQor
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxz
ICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAgICBpZiAo
bGl2ZUFmdGVyLmdldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CiAgICAgICAg
IH0pOwogfQogICAgIApAQCAtMTA1LDcgKzEyOSw4IEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNB
dE5vZGVJbmRleCgKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNlZW5JbkNsb3N1cmVG
bGFnID0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGxlZEZ1bmN0b3JGbGFn
ID0gMjsKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gZmxhZ3M7Ci0gICAgCisKKyAgICBB
U1NFUlQobm9kZUluZGV4KTsKICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CiAgICAgCiAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAtMTIwLDE1ICsxNDUsMTMgQEAgdm9p
ZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAgICAgICB9
KTsKIAotICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7Ci0gICAgaWYgKG5vZGVJbmRleCkKLSAg
ICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAgIE5vZGUqIGJlZm9y
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAgIGZvckFsbEtpbGxlZE9wZXJhbmRz
KAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAotICAgICAgICAgICAgICAg
IHJlZywKKyAgICAgICAgICAgICAgICBvcGVyYW5kLAogICAgICAgICAgICAgICAgIFsmXSAoTm9k
ZSogbm9kZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFncy5nZXQo
bm9kZSkgJiBzZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAgICAgICAgICB9LApAQCAtMTU5LDYg
KzE4Miw3IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIC8vIFN0YXJ0IGF0IHRoZSBz
ZWNvbmQgbm9kZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBleHBlY3RlZCB0byBvbmx5IGluc3Bl
Y3Qgbm9kZXMgZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0aGUgYmxvY2sgdXAgdG8gbm9kZUlu
ZGV4IChleGNsdXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMgemVybyB0aGVuIHRoZSBmdW5jdG9y
IGhhcyBub3RoaW5nIHRvIGRvLgogICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMTsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgZGF0YUxvZ0xu
SWYoRm9yQWxsS2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxvY2FsIGF2YWlsYWJpbGl0eSBhdCBp
bmRleDogIiwgbm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5
KTsKICAgICAgICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIGdy
YXBoLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSwgYmxvY2ssIG5vZGVJbmRleCwK
ICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAppbmRleCBiMzIwZjcwN2M5NWYxMjM5Mzg1MWJjM2IyYjJiNDJiOTU2ZGQwYmY1
Li4wNzFkZTIzOTJiOWM1YzkyODZkZTljNzg3OGZlOWFmMDBjMGI0ZTQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDggKzMwOCw4IEBAIHZvaWQgR3JhcGg6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2Rl
LCBEdW1wQ29udGV4CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykp
IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNz
RGF0YSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2
YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgICAgICBvcGVy
YW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsKICAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJt
YWNoaW5lOiIsIG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAgdm9pZCBHcmFwaDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1
bXBDb250ZXgKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0YWNrQWNjZXNzRGF0YSgpKSB7CiAg
ICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVMb2NhbC5p
c1ZhbGlkKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOiIsIGRhdGEt
Pm1hY2hpbmVMb2NhbCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Zm9ybWF0KTsK
ICAgICB9Ci0gICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgCi0gICAgICAgIG91dC5w
cmludChjb21tYSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICBpZiAobm9kZS0+aGFzVW5s
aW5rZWRPcGVyYW5kKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpOwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JMZW5ndGhIaW50KCkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQgPSAiLCBub2RlLT52ZWN0b3JMZW5n
dGhIaW50KCkpOwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNWYWx1ZSgpKQpAQCAtNTE1LDkgKzUx
NSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAgICAgICBvdXQucHJpbnQocHJlZml4
LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
PnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+
cGhpc1tpXTsKKyAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT5vcCgpID09IFBoaSk7CiAgICAg
ICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2Rl
ID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5sb2Nh
bCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5vcGVyYW5kKCksICIs
IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAgICAgIGlmIChwaGlOb2Rl
LT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNo
aWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkp
IHsKQEAgLTg4NCw3ICs4ODUsNyBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFz
aWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICBi
b29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgp
ID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5v
cGVyYW5kKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpCiAgICAgICAgICAgICAg
ICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC04OTMsOSArODk0LDkgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2lj
QmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAgICAgICAgICAg
IGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBp
bmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAgICAgICAgICAgIE5vZGUqIG9sZFRh
aWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpOwogICAgICAg
ICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAgICAgYmxvY2sudmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dl
dExvY2FsOworICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAg
c2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0xMTMzLDM2ICsxMTM0LDU2IEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpraWxsc0ZvcihJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICByZXR1cm4ga2lsbHNGb3IoYmFzZWxp
bmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9CiAKLWJvb2wgR3JhcGg6OmlzTGl2
ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCBvcGVyYW5kLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ2hlY2tpbmcg
b2Ygb3BlcmFuZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICBib29sIGlzQ2FsbGVy
T3JpZ2luID0gZmFsc2U7CisKICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luUHRyID0gJmNvZGVP
cmlnaW47Ci0gICAgZm9yICg7OykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmly
dHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW5Q
dHItPnN0YWNrT2Zmc2V0KCkpOworICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwg
Y2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKKyAgICAvLyB0aGUg
cmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgorICAgIGZvciAoOyBjb2Rl
T3JpZ2luUHRyOyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2FsbEZyYW1lID8gJmlubGluZUNhbGxG
cmFtZS0+ZGlyZWN0Q2FsbGVyIDogbnVsbHB0cikgeworICAgICAgICBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNUbXAoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgdG1wT2Zmc2V0ID0gaW5saW5lQ2FsbEZy
YW1lID8gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAgICAgICAgICAgdW5zaWdu
ZWQgb3BlcmFuZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUoKSk7
CisKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVlKCkgPj0gMCk7CisgICAgICAgICAg
ICAvLyBUaGlzIHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0byBzb21lb25lIHdlIGlubGluZWQu
CisgICAgICAgICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1wT2Zmc2V0ICsgbWF4TnVtQ2hlY2tw
b2ludFRtcHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVtVG1wcygpIHx8IG9wZXJhbmRJbmRl
eCA8IHRtcE9mZnNldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
YXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9y
aWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiBiaXRNYXAuZ2V0
KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGNvZGVPcmlnaW5QdHIt
PnN0YWNrT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAKLSAgICAgICAgYXV0byogaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIGlm
IChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICBpZiAocmVnLmlz
QXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZy5vZmZzZXQo
KSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKIAogCiAgICAgICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAotICAgICAgICAgICAgICAgICAg
ICAmJiByZWcub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSB7CisgICAgICAgICAg
ICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJM
b29rcyBsaWtlIGEgY2FsbGVlLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQotICAgICAgICAgICAgICAgICAgICAmJiBy
ZWcub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgeworICAgICAgICAg
ICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIkxvb2tzIGxpa2UgdGhlIGFyZ3VtZW50IGNvdW50LlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Niw0MiArMTE5Nyw0MSBAQCBib29sIEdyYXBoOjpp
c0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgZnVsbExpdmVuZXNzID0gbGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgo
KTsKLSAgICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5lc3Mub3BlcmFuZElzTGl2ZShyZWcub2Zm
c2V0KCksIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50
KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5l
c3MudmlydHVhbFJlZ2lzdGVySXNMaXZlKHJlZywgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVM
aXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlz
IHdvdWxkIGJlIHJlZHVuZGFudCBpZiBpdCB3YXNuJ3QgZm9yIG91cgogICAgICAgICAvLyBvcF9j
YWxsX3ZhcmFyZ3MgaW5saW5pbmcuCi0gICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpCisgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgcmVnLmlzQXJndW1lbnQoKQogICAgICAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQXJndW1lbnQgaXMgbGl2ZS5cbiIpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBuZWVkIHRvIGhh
bmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCi0g
ICAgICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCi0g
ICAgICAgIGNvZGVPcmlnaW5QdHIgPSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAg
ICAgICAgIGlzQ2FsbGVyT3JpZ2luID0gdHJ1ZTsKICAgICB9CisKKyAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsgICAgCiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotQml0VmVjdG9yIEdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCitCaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgQml0VmVjdG9yIHJlc3VsdDsKLSAgICByZXN1
bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkp
OwotICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIHVuc2lnbmVkIG51bUxvY2Fs
cyA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKKyAgICByZXN1
bHQuZW5zdXJlU2l6ZShudW1Mb2NhbHMgKyBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mVG1wcygpKTsKKyAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAg
ICAgIGNvZGVPcmlnaW4sCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAg
ICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwotICAgICAgICAgICAgcmVzdWx0LnF1aWNr
U2V0KHJlZy50b0xvY2FsKCkpOworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxzICsg
b3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAgICByZXN1bHQu
cXVpY2tTZXQob2Zmc2V0KTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTE2MzUsOCArMTY1NSw4IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBvcGVyYW5kTm9kZTsgbm9kZTspIHsKICAgICAgICAgaWYgKG5vZGUtPmFjY2Vz
c2VzU3RhY2soKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2Rl
LT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9
IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOworICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBT
U0EgJiYgbm9kZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlu
dCBhcmd1bWVudCA9IG5vZGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICAg
ICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSkt
PnZhbHVlW2FyZ3VtZW50XTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1h
dGNoIFNldEFyZ3VtZW50RGVmaW5pdGVseSBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3
ZWxsOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU4NDEKQEAgLTE2NTYsNyArMTY3Niw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3Vy
cmVuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJs
b2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXko
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKSwgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPm9wZXJhbmQoKSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCmluZGV4IGZhYjljZjAyYTI1OTc2ZWY0N2QxNzkwNWJhZDljZTAzZTM4MmJj
ZTUuLmY3YTFkODIxNGMzMDJkN2Q5NmFjMmE3N2EwMTg2NmE5ZDExOWY1MmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTg0MCwxMyArODQwLDEzIEBAIHB1YmxpYzoKICAg
ICAvLyBRdWlja2x5IHF1ZXJ5IGlmIGEgc2luZ2xlIGxvY2FsIGlzIGxpdmUgYXQgdGhlIGdpdmVu
IHBvaW50LiBUaGlzIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcKICAgICAvLyBmb3JBbGxMaXZlSW5C
eXRlY29kZSgpIGlmIHlvdSB3aWxsIG9ubHkgcXVlcnkgb25lIGxvY2FsLiBCdXQsIGlmIHlvdSB3
YW50IHRvIGtub3cgYWxsIG9mIHRoZQogICAgIC8vIGxvY2FscyBsaXZlLCB0aGVuIGNhbGxpbmcg
dGhpcyBmb3IgZWFjaCBsb2NhbCBpcyBtdWNoIHNsb3dlciB0aGFuIGZvckFsbExpdmVJbkJ5dGVj
b2RlKCkuCi0gICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciwgQ29kZU9y
aWdpbik7CisgICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQsIENvZGVPcmlnaW4pOwog
ICAgIAotICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBs
aXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CisgICAgLy8gUXVp
Y2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGFuZCB0bXBzIGxpdmUgYXQg
dGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKICAgICAvLyBhbnkgYXJndW1l
bnRzIGJlY2F1c2UgdGhvc2UgYXJlIGFsbCBwcmVzdW1lZCBsaXZlLiBZb3UgY2FuIGNhbGwgZm9y
QWxsTGl2ZUluQnl0ZWNvZGUoKSB0bwogICAgIC8vIGFsc28gZ2V0IHRoZSBhcmd1bWVudHMuIFRo
aXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiBjYWxsaW5nIGlzTGl2ZUluQnl0ZWNvZGUoKSBmb3IgZWFj
aCBsb2NhbC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxs
TG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHZvaWQgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAg
ICAgIC8vIFN1cHBvcnQgZm9yIG5vdCByZWR1bmRhbnRseSByZXBvcnRpbmcgYXJndW1lbnRzLiBO
ZWNlc3NhcnkgYmVjYXVzZSBpbiBjYXNlIG9mIGEgdmFyYXJncwogICAgICAgICAvLyBjYWxsLCBv
bmx5IHRoZSBjYWxsZWUga25vd3MgdGhhdCBhcmd1bWVudHMgYXJlIGxpdmUgd2hpbGUgaW4gdGhl
IGNhc2Ugb2YgYSBub24tdmFyYXJncwpAQCAtODgxLDYgKzg4MSwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtyZWxhdGl2ZUxvY2FsXSkKICAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBsaXZlVG1wcyA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBj
b2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVUbXBz
LmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1
bmN0b3IocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChUbXBPcGVyYW5kLCB0
bXApKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxp
dmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKKyAgICAvLyBHZXQgYSBCaXRW
ZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMgYW5kIHRtcHMgbGl2ZSByaWdodCBub3cuIFRoaXMg
aXMgbW9zdGx5IHVzZWZ1bCBpZgogICAgIC8vIHlvdSB3YW50IHRvIGNvbXBhcmUgdHdvIHNldHMg
b2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28gZGlmZmVyZW50IENvZGVPcmlnaW5zLgotICAgIEJpdFZl
Y3RvciBsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsKKyAgICBCaXRWZWN0b3IgbG9j
YWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwogCiAgICAgTGl2ZW5lc3NDYWxj
dWxhdGlvblBvaW50IGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KENvZGVPcmln
aW4gb3JpZ2luLCBib29sIGlzQ2FsbGVyT3JpZ2luKQogICAgIHsKQEAgLTkzOCwxMiArOTQ2LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVm
b3JlVXNlOwogICAgIH0KICAgICAKLSAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBhcmd1bWVu
dHMgYW5kIGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21h
bGwKLSAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoKSwgc2lu
Y2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCisgICAgLy8gVGVsbHMg
eW91IGFsbCBvZiB0aGUgb3BlcmFuZHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhp
cyBpcyBhIHNtYWxsCisgICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExvY2Fsc09yVG1wc0xpdmVJ
bkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZl
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxMaXZlSW5C
eXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgewotICAgICAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5j
dG9yKTsKKyAgICAgICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmln
aW4sIGZ1bmN0b3IpOwogICAgICAgICAKICAgICAgICAgLy8gUmVwb3J0IGFsbCBhcmd1bWVudHMg
YXMgYmVpbmcgbGl2ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspCkBAIC0x
MTE0LDYgKzExMjIsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NG
Rz4gbV9iYWNrd2FyZHNDRkc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRv
cnM+IG1fYmFja3dhcmRzRG9taW5hdG9yczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEVx
dWl2YWxlbmNlQW5hbHlzaXM+IG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM7CisgICAgdW5z
aWduZWQgbV90bXBzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1f
bmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cAppbmRleCA5OWFlZmZjZGMwNWExMWM0NWIwNTc0MTI1MGY0ZDJhZWI0ZTIyOGNkLi4yMDJkMjI1
MDUzZmE5ZGZiZTVjMjNjNjRiY2Y4YmUzODRlM2U3NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcApAQCAtNDUsOCAr
NDUsOCBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogSW5QbGFjZUFi
c3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1f
Z3JhcGgoZ3JhcGgpCiAgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFs
dWVzQ2FjaGUpCi0gICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQotICAgICwgbV9ibG9jaygwKQorICAgICwgbV92
YXJpYWJsZXMoT3BlcmFuZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQor
ICAgICwgbV9ibG9jayhudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKaW5kZXggYmY1ZWFkMThlYzE2NDdl
ZTE2NzY2ODgzNTc0MDFmYTdmZWM3MTI5OS4uMTg2NWU2YTFlZmZjM2RhYWVmZTU4NGNhODYyYzQ5
YmMzNjg1ODUwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuaApAQCAtMTY3LDEzICsxNjcsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXNbaW5kZXhdKTsKICAgICB9CiAKLSAgICBB
YnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIEFic3RyYWN0VmFsdWUmIG9w
ZXJhbmQoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQo
bV92YXJpYWJsZXMub3BlcmFuZEluZGV4KG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgQWJz
dHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gdGhp
cy0+b3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKTsgfQotICAgIAogICAgIEFic3RyYWN0VmFsdWUm
IGxvY2FsKHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1f
dmFyaWFibGVzLmxvY2FsSW5kZXgoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggM2Q4NDNjZTU4ZjIwYjQxMTYzMzlmY2RhOTU4OGFl
YmE2YjdhOGMyZS4uNTNkYjljZDE0Y2FjNmI2ZTY2ODJlZmRmNGJhNzk0ODk3Y2E1ZDVhNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTg1LDgg
Kzg1LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwotICAgIGF1
dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4o
b3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0
Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25J
bmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYg
ZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVKdW1wczsKQEAgLTk3LDEzICs5NSw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAKICAgICAgICAgaml0QXNzZXJ0SGFzVmFs
aWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9z
ckV4aXRJbmRleCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewot
ICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBqdW1wKCk7Ci0gICAgICAgICAgICBhZGRMaW5rVGFz
ayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsodGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJl
bCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbmZvLm1f
cGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKKyAgICAgICAgaW5mby5tX3BhdGNoYWJs
ZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CiAgICAgfQogfQogCkBAIC01OTUsMTEgKzU4NywxMiBA
QCB2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2Nr
LCBKSVRDb21waWxlcjo6TGFiZWwgYmxvYwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5sb2NhbCgpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgeworCisg
ICAgICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5vcGVyYW5kKCkuaXNUbXAoKSk7CisgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSAhPSB2YXJpYWJs
ZS0+bWFjaGluZUxvY2FsKCkpIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9yZXNodWZmbGlu
Z3MuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICBPU1JFbnRyeVJlc2h1ZmZsaW5nKAotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCksIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggNjhjYTk4
ZGY2ZjVjNGI3YjYzNzJjYzE1ODE4ZWMyNTcyODJmODlkOS4uNTBmMWQ4OTNkYTMwMjEwMmI5NWU3
OGFjNjA0MzlkODYyMzZmM2NhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaApAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdFN0
b3JlQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQogICAgIHsKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2UuY3BwCmluZGV4IDQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkzZTA4
YWMyNWNhNjMxMzQuLjQ1ZWNiNDZhYTI0NDNiYTFiOTU1NzE2YmMxZjQyYTcwOGExYTA0ODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEZs
dXNoTG9jYXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFz
aWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4gV2Ug
anVzdCB1c2UgaXQgZm9yIGFzc2VydGlvbnMuIElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywKICAg
ICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2ggdGhh
dCB3ZSBpbnNlcnQuCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBmbHVz
aElzRGVmaW5pdGVseUludmFsaWQgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBp
bmRleCkgewogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBpbmRleDsgaS0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+bG9jYWwo
KSA9PSBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNz
ZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgaGFuZGxlQmxvY2tGb3JUcnlDYXRjaChCYXNpY0Jsb2NrKiBibG9jaywgSW5zZXJ0
aW9uU2V0JiBpbnNlcnRpb25TZXQpCiAgICAgewogICAgICAgICBIYW5kbGVySW5mbyogY3VycmVu
dEV4Y2VwdGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVB
dENhdGNoSGVhZDsKLSAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIE9wZXJhbmRz
PGJvb2w+IGxpdmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mVG1wcygpKTsKIAogICAgICAgICBIYW5kbGVySW5mbyogY2FjaGVkSGFuZGxlclJlc3Vs
dDsKICAgICAgICAgQ29kZU9yaWdpbiBjYWNoZWRDb2RlT3JpZ2luOwpAQCAtMTMzLDExICsxMzIs
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gb3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxs
RnJhbWUpOwogICAgICAgICAgICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVC
bG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOworICAgICAgICAg
ICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGhh
bmRsZXItPnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxz
TGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxG
cmFtZSksIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChPcGVy
YW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5v
cGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7CkBAIC0xNTYsMTIg
KzE1NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3Vs
dDsKICAgICAgICAgfTsKIAotICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBj
dXJyZW50QmxvY2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1
bWVudHMoKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRy
KTsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNj
ZXNzRGF0YShPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG51bGxwdHIpOwog
CiAgICAgICAgIGF1dG8gZmx1c2hFdmVyeXRoaW5nID0gWyZdIChOb2RlT3JpZ2luIG9yaWdpbiwg
dW5zaWduZWQgaW5kZXgpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRFeGNl
cHRpb25IYW5kbGVyKTsKLSAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAm
JiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1l
bnQoKSkgeworICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNo
SGVhZC5vcGVyYW5kKG9wZXJhbmQpKSB7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlz
VmFsaWRGbHVzaExvY2F0aW9uKGJsb2NrLCBpbmRleCwgb3BlcmFuZCkpOwogCkBAIC0xNzgsNiAr
MTc3LDggQEAgcHVibGljOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gMDsg
bG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsKysp
CiAgICAgICAgICAgICAgICAgZmx1c2godmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG1wID0gMDsgdG1wIDwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZlRtcHMoKTsgKyt0bXApCisgICAgICAgICAgICAgICAgZmx1c2goT3Bl
cmFuZChUbXBPcGVyYW5kLCB0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5
Miw5ICsxOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChj
dXJyZW50RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3Vt
ZW50TWF5YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBu
b2RlLT5sb2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYg
bGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKLQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQo
KTsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0
Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlz
VmFsaWRGbHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1
cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nl
c1N0YWNrKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5k
KCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw5ICsyMTYsOSBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQu
aXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAg
ICAgICAKICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFu
ZCk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFs
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBo
YXNlLmNwcAppbmRleCA3M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5m
ZmY5NmJmY2Y2MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1
LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAg
ICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRl
cm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7CisgICAgICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVw
b2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5v
ZGUsICI6IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9j
aCwgIlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2gg
PT0gY3VycmVudEVwb2NoKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1f
c3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2go
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQo
bV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFs
bEtpbGxlZE9wZXJhbmRzKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQo
bm9kZUluZGV4IC0gMSksIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIHJlZykgeworICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9w
cHkgLSBpdCBtaWdodCBjbGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3Qg
YWdhaW5zdCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVy
YW5kKHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQo
b3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJl
bW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50
RXBvY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBv
cGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJlNjU1ZjUyNTFmOTZmNDA0
ZTMzYjQ2Li5iODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0IFN0
YWNrQWNjZXNzRGF0YSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9j
YWwobG9jYWwpCisgICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3Jt
YXQgZm9ybWF0KQorICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQo
Zm9ybWF0KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOwor
ICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwog
ICAgIEZsdXNoRm9ybWF0IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5MDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTIzLDkg
KzkyNCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRP
ZkJvdW5kczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJu
IGNoaWxkMSgpOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0
dXJuIGNoaWxkMigpOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENh
bGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTcz
LDkgKzk3Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxl
QWNjZXNzRGF0YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVy
IGxvY2FsKCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nl
c3NEYXRhKCktPm9wZXJhbmQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1h
Y2hpbmVMb2NhbCgpCkBAIC05ODMsNyArOTg2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBi
b29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRy
eUxvY2FsOgpAQCAtOTk2LDEwICs5OTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5kIHVu
bGlua2VkT3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgp
KTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90Pigp
KTsKKyAgICAgICAgQVNTRVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OmZyb21CaXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3ICsxMzUzLDcgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7Cisg
ICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFy
Z3MgfHwgb3AoKSA9PSBWYXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJn
c0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKaW5kZXggMjRjNzMzZDM4NzAyNzlmNGE1NmI0ZTY4OGJmMGJmMDZhYzI0YzFkNC4uZTNl
OWMzMmY4ZDA4MTNhNmFkYTIyYWFjY2QzNzQ0MmQ0ZWJkOWQzZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAvKiBU
aGVzZSBhcmUgdXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAg
bWFjcm8oUHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ss
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBc
CkBAIC0yMDIsNiArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IG1hY3JvKEdldEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFy
YXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlSGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggMzI4
MGY4N2E2MjY3ZGYwMzRjODRlMzMxODUzMGM3NDE5ZTU1ZTk3ZS4uZDEwYTIwNzA0YjAxOWQ3ZTg3
N2FjYjI5NjMyNmJhODk3MDBjMTNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0z
NSwxMSArMzUsOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQog
CiBjbGFzcyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNl
KGdyYXBoLCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFw
aC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9y
aWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykg
ewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAgICAg
ICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKG9w
ZXJhbmQsICIgIik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4o
IiIpOwogICAgICAgICB9OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBi
bG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2Nr
KTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9h
dmFpbGFiaWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAg
ICAgICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMTIwLDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1
bmVCeUxpdmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29y
LT5hdCgwKS0+b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIkFmdGVyIHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIw
OCwyOCArMjA2LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVj
dXRlTm9kZShOb2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2Ug
UHV0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0
YS0+bG9jYWwpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5mbHVz
aGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxs
U3RhY2s6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51
bmxpbmtlZExvY2FsKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7Cisg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVy
YW5kKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRh
dGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChkYXRhLT5vcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0
Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGlu
dDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkTG9jYWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2YWls
YWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBAIHZv
aWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2Rl
KQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFpbGFi
aWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZhaWxh
YmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3Rh
cnQub2Zmc2V0KCkgKyBpKSkgPQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVk
QXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zm
c2V0KCkgKyBpKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChkYXRhLT5zdGFydCArIGkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hl
ZEF0KEZsdXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNv
cmQgaG93IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFw
TG9jYXRpb24oQXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKTsKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFw
TG9jYXRpb24oQXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9T
a2lwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRQTG9jLCBu
b2RlLCBpKSwgYXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTViMGM3Yzk0Yjg0M2U4
OTBkYzcuLmVlNWY3ZjNkNjhlMmVhMGViMWRkZWYxMzlmZjkzOWI2YWQ4OWQ5MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0zMjIsNyArMzIyLDcgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY28KICAgICAKICAgICAvLyA3KSBGaXggdGhlIGNhbGwgZnJh
bWUgdG8gaGF2ZSB0aGUgcmlnaHQgY29kZSBibG9jay4KICAgICAKLSAgICAqYml0d2lzZV9jYXN0
PENvZGVCbG9jayoqPihwaXZvdCAtIDEgLSBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spID0gY29k
ZUJsb2NrOworICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayArIDEpKSA9IGNvZGVCbG9jazsKICAgICAKICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nRigiICAgIE9TUiByZXR1cm5pbmcgZGF0
YSBidWZmZXIgJXAuXG4iLCBzY3JhdGNoKTsKQEAgLTM4MiwxMCArMzgyLDEwIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRy
eShWTSYgdm0sIENhbGxGCiAKICAgICBhdXRvIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpKTsKICAgICBB
U1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwotICAgIFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1ldGFkYXRh
KGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1ldGFk
YXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRhQnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVudHJ5QnVm
ZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxl
KSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kKS5pc0xv
Y2FsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRhdGFCdWZmZXJbaW5kZXhdID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCmluZGV4IGRjNzZiY2JhZWQ0MWVlZTA2M2RmZGJlYTg0NTA2NjU1M2Qw
Y2I0ZDYuLjYwOTY4NjYzYjY0YzJiNjg1NGU0NjE2MWY5NDk5NDY1N2UxYWVmZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGxvY2Fsc1tsb2NhbF0gPSBuZXdSb290LT5hcHBlbmRO
b2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4
dHJhY3RPU1JFbnRyeUxvY2FsLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlh
YmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxl
LT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5m
byh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSwKICAgICAgICAgICAgICAg
ICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAxOGM2NDE0NzkzNDI0NjliNDFjYThmOThmMzA4YjNh
NGM5MzNiYTk4Li4wNWRlOTU4Y2FlZWYxYjhmMDllMzJkMDk3YThmZTMyZDY3NzQyMDFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVm
LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJD
bG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR01h
eUV4aXQuaCIKQEAgLTQ3LDg5NSArNDgsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLS8vIFByb2JlIGJhc2VkIE9TUiBFeGl0LgotCi11c2luZyBDUFVTdGF0ZSA9IFBy
b2JlOjpDUFVTdGF0ZTsKLXVzaW5nIENvbnRleHQgPSBQcm9iZTo6Q29udGV4dDsKLXVzaW5nIEZy
YW1lID0gUHJvYmU6OkZyYW1lOwotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KFByb2JlOjpDb250ZXh0JiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgY29uc3QgT1NS
RXhpdEJhc2UmKTsKLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChQcm9iZTo6Q29u
dGV4dCYsIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NS
RXhpdCYpOwotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmLCB1aW50MzJfdCBvc3JF
eGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmKTsKLQotc3RhdGljIEpTVmFsdWUganNWYWx1ZUZvcihD
UFVTdGF0ZSYgY3B1LCBKU1ZhbHVlU291cmNlIHNvdXJjZSkKLXsKLSAgICBpZiAoc291cmNlLmlz
QWRkcmVzcygpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAgICAgICBzdGQ6Om1lbWNw
eSgmcmVzdWx0LCBjcHUuZ3ByPHVpbnQ4X3QqPihzb3VyY2UuYmFzZSgpKSArIHNvdXJjZS5vZmZz
ZXQoKSwgc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGNwdS5ncHI8RW5j
b2RlZEpTVmFsdWU+KHNvdXJjZS5ncHIoKSkpOwotI2Vsc2UKLSAgICBpZiAoc291cmNlLmhhc0tu
b3duVGFnKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKHNvdXJjZS50YWcoKSwgY3B1Lmdwcjxp
bnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWUoY3B1Lmdw
cjxpbnQzMl90Pihzb3VyY2UudGFnR1BSKCkpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXls
b2FkR1BSKCkpKTsKLSNlbmRpZgotfQotCi0jaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJ
U1RFUlMgPiAwCi0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQm
IGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEFTU0VSVChjb2RlQmxvY2sp
OwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJs
b2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVn
aXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxl
ZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBVQ1BVUmVnaXN0ZXIqIHBoeXNpY2FsU3RhY2tGcmFtZSA9
IGNvbnRleHQuZnA8VUNQVVJlZ2lzdGVyKj4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkg
PSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFRoZSBj
YWxsZWUgc2F2ZWQgdmFsdWVzIGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgc3RhY2ssIG5vdCB0aGUg
cmVjb3ZlcmVkIHN0YWNrLgotICAgICAgICAvLyBIZW5jZSwgd2UgcmVhZCB0aGUgdmFsdWVzIGRp
cmVjdGx5IGZyb20gdGhlIHBoeXNpY2FsIHN0YWNrIG1lbW9yeSBpbnN0ZWFkIG9mCi0gICAgICAg
IC8vIGdvaW5nIHRocm91Z2ggY29udGV4dC5zdGFjaygpLgotICAgICAgICBBU1NFUlQoIShlbnRy
eS5vZmZzZXQoKSAlIHNpemVvZihVQ1BVUmVnaXN0ZXIpKSk7Ci0gICAgICAgIGNvbnRleHQuZ3By
KGVudHJ5LnJlZygpLmdwcigpKSA9IHBoeXNpY2FsU3RhY2tGcmFtZVtlbnRyeS5vZmZzZXQoKSAv
IHNpemVvZihVQ1BVUmVnaXN0ZXIpXTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2ZUNhbGxl
ZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAg
IGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwot
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2Nr
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3Rl
cnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJT
ZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVz
LT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQo
aSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YWNrLnNldChjb250ZXh0LmZwKCksIGVudHJ5
Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7
Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgcmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxl
ZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lz
dGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lz
dGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVk1FbnRyeVJlY29yZCog
ZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwotICAgIFVDUFVS
ZWdpc3RlciogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNQVVJlZ2lzdGVy
Kj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXIpOwotCi0gICAgLy8gUmVz
dG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENh
bGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChl
bnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc2l6ZV90IHVpbnRw
dHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpOwotICAgICAg
ICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5
LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF07Ci0gICAgICAg
IGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBjb250ZXh0LmZwcihlbnRy
eS5yZWcoKS5mcHIoKSkgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihjYWxsZWVTYXZlQnVmZmVyW3Vp
bnRwdHJPZmZzZXRdKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVn
aXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2Vk
IG9uIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250
ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0KLSAg
ICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlG
cmFtZSk7Ci0gICAgdm9pZCogY2FsbGVlU2F2ZUJ1ZmZlciA9IGVudHJ5UmVjb3JkLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzQnVmZmVyOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAg
IFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7
Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7
Ci0gICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAg
ICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0
LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgICAgIGVsc2Ugewot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZl
ciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZnByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCku
ZnByKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJz
IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZv
aWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIgb2Zmc2V0VmlydHVhbFJlZ2lzdGVyLCBib29sIHdh
c0NhbGxlZFZpYVRhaWxDYWxsKQotewotICAgIEZyYW1lIGZyYW1lKGNvbnRleHQuZnAoKSwgY29u
dGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQo
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwot
ICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAg
UmVnaXN0ZXJTZXQgYmFzZWxpbmVDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0g
Y2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVu
dHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVpbnRwdHJfdCBz
YXZlZFJlZ2lzdGVyVmFsdWU7Ci0KLSAgICAgICAgaWYgKHdhc0NhbGxlZFZpYVRhaWxDYWxsICYm
IGJhc2VsaW5lQ2FsbGVlU2F2ZXMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIHNhdmVk
UmVnaXN0ZXJWYWx1ZSA9IGZyYW1lLmdldDx1aW50cHRyX3Q+KGVudHJ5Lm9mZnNldCgpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gY29udGV4dC5ncHIo
ZW50cnkucmVnKCkuZ3ByKCkpOwotCi0gICAgICAgIGZyYW1lLnNldChvZmZzZXRWaXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zmc2V0KCksIHNhdmVkUmVnaXN0ZXJWYWx1
ZSk7Ci0gICAgfQotfQotI2Vsc2UgLy8gbm90IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNU
RVJTID4gMAotCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENv
ZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBD
b2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0
YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKiwg
VmlydHVhbFJlZ2lzdGVyLCBib29sKSB7IH0KLQotI2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVu
dHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90
IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQot
ICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRD
b3VudCAtIDE7Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKLSAgICBE
aXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAotICAgICAg
ICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJl
KCksIGxlbmd0aCwgY2FwYWNpdHkpOwotCi0gICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNhbGxl
ZSk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChp
bmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAg
RnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5zZXRJbmRleFF1aWNrbHkodm0s
IGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyBKU0NlbGwqIGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYg
dm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJl
ZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICBDbG9uZWRB
cmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCi0gICAgICAg
IHZtLCBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBjYWxsZWUsIGxl
bmd0aCk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSAr
IChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0g
ICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChn
bG9iYWxPYmplY3QsIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDb250ZXh0JiBjb250ZXh0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2RlLCBjb25zdCBPcGVy
YW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4
dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9k
ZSBJRCB0byBvcGVyYW5kLgotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMu
b3BlcmFuZEZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCi0gICAgICAgICAgICAmJiBy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNaW5pZmllZElEIGlkID0gcmVjb3Zl
cnkubm9kZUlEKCk7Ci0gICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVu
dHMuZmluZChpZCk7Ci0gICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVu
dHMuZW5kKCkpIHsKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgZnJhbWUu
b3BlcmFuZChpdGVyLT52YWx1ZSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0gICAgICAgICAg
ICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgpOwotCi0g
ICAgICAgIGludCBzdGFja09mZnNldDsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAg
ICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwotCi0gICAgICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihmcmFtZS5vcGVyYW5kKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KS5hc0NlbGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFz
Q2VsbCgpKTsKLQotICAgICAgICBpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICBhcmd1bWVudENvdW50ID0gZnJhbWUub3BlcmFuZDxpbnQzMl90PihzdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsKLQotICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09iamVjdDsK
LSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERp
cmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2Nr
LCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0g
ICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdF
eGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50
Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50
c09iamVjdCkpOwotCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBv
cGVyYW5kKTsKLSAgICB9Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJh
IGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9z
dCBsaWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkgbmVlZGVk
IChoaWdoZXIgZW51bSB2YWx1ZSkuCi0vLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9uIGluY2x1
ZGVzIHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQotLy8gZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsIHsKLSAgICBOb25lLAotICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0g
ICAgVmFsdWVQcm9maWxlVXBkYXRlLAotICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhl
cgotfTsKLQotdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250
ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRW
TSgpID09ICZ2bSk7Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7Ci0KLSAgICBpZiAodmFs
aWRhdGVERkdEb2VzR0MpIHsKLSAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6
ZWQgY29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKLSAgICAgICAgLy8g
Y29kZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4KLSAgICAgICAgdm0uaGVhcC5zZXRFeHBl
Y3REb2VzR0ModHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7
Ci0gICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAgICBjb250
ZXh0LmZwKCkgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotCi0gICAgLy8g
SXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBB
bnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAotICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgot
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKLQotICAgIHVpbnQzMl90IGV4
aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUg
PSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJ
VENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLQotICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9y
Q2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7Ci0gICAgRVhDRVBUSU9OX0FT
U0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRp
b25IYW5kbGVyKCkpOwotCi0gICAgaWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAg
ICAgICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsKLQotICAgICAgICAvLyBXZSBvbmx5IG5l
ZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRo
ZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JF
eGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4
aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgICAg
ICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChl
eGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgcmVjb3Zlcnkg
PSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07
Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25S
ZWNvdmVyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQg
PT0gR2VuZXJpY1Vud2luZCkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbnVs
bHB0cjsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAg
IGlmIChleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgaWYgKGV4
aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkg
ewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGU7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
Y29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgICAgIGFycmF5UHJv
ZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCi0gICAgICAg
ICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVV
cGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50MzJfdCBhY3Rp
dmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0
aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7Ci0gICAgICAgIGRv
dWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29u
dmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBB
U1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQg
PSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQpOwotCi0gICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
Ym9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAg
ICAgICAgdm9pZCoganVtcFRhcmdldDsKLSAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7Ci0gICAg
ICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZU9mZnNldCkucHRyKCk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAo
KTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2Nh
dGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwot
ICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgotICAgICAgICBPcGVyYW5kczxWYWx1
ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFu
PiB1bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0gICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZl
bnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklU
Q29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRlZmlu
ZWRPcGVyYW5kU3BhbnMpOwotICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0g
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7Ci0KLSAg
ICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNv
ZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9w
ZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9s
ZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhpdFRvTExJ
bnQpKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7Ci0gICAg
ICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24g
PSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwot
Ci0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRp
b24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3Jp
Z2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAotICAgICAg
ICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRh
dGlvbik7Ci0gICAgICAgICAgICBleGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmls
ZXJFeGl0OwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgo
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjpt
YXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90
aGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
ID0gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdp
dGggb3BlcmFuZHMgPSAlc1xuIiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRvQ1N0cmlu
ZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9T
dHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAotICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRz
KSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0
YXRlID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgIE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAg
ICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBl
eGl0U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotCi0gICAgY29udGV4dC5zcCgpID0gY29u
dGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAg
ICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3
ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGRvIHsKLSAgICAg
ICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRp
YWxpemF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOwotCi0g
ICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlv
bkxldmVsOjpOb25lKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0
cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRpb25SZWNvdmVyeQotCi0gICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBhcnJheSBw
cm9maWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZwotICAgICAgICAvLyBtYXkgcmVseSBvbiBhIHZh
bHVlIHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQg
aXMgbGlrZWx5Ci0gICAgICAgIC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xs
IGRlY29yYXRlIGl0IGFzIFVOTElLRUxZLgotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiBy
ZWNvdmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHJlY292
ZXJ5KSkgewotICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zl
cnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5n
cHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0g
ICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1i
ZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBTcGVjdWxhdGl2ZUFkZFNlbGY6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5
LT5kZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0g
ICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1i
ZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVj
b3ZlcnktPmltbWVkaWF0ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAg
ICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgXiBKU1Zh
bHVlOjpWYWx1ZUZhbHNlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBWYWx1ZVBy
b2ZpbGVVcGRhdGUKLSAgICAgICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVlOwotICAgICAgICBpZiAo
ISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpz
VmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkK
LSAgICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJheVByb2Zp
bGVVcGRhdGUKLSAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gZXhpdFN0
YXRlLmFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVT
b3VyY2UpOwotICAgICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4
aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBwcm9maWxl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJv
ZmlsZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICAgICAgYm9vbCBkb1Byb2ZpbGUg
PSAhaW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5tb2RlID09
IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGlmIChkb1Byb2ZpbGUpIHsK
LSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNl
cnZlU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5v
YnNlcnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0aW9uIGxl
dmVsOiBPdGhlcgotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2Nh
dGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAg
ICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2lu
dGVyLgotICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9
PSB2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXhpdFN0
YXRlLnByb2ZpbGVyRXhpdCkKLSAgICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4aXQtPmlu
Y0NvdW50KCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4
aXQoKSkpCi0gICAgICAgICAgICBwcmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhpdEluZGV4
LCBleGl0KTsKLQotICAgIH0gd2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRpYWxpemF0
aW9uLgotCi0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAg
QVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKLQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRf
dD4oR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2sp
OwotI2VuZGlmCi0KLSAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0
b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgotICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8g
cmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVs
b3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29t
ZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0KLSAgICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwotICAgIHNpemVfdCBudW1iZXJPZk9w
ZXJhbmRzID0gb3BlcmFuZHMuc2l6ZSgpOwotICAgIHNpemVfdCBudW1VbmRlZmluZWRPcGVyYW5k
U3BhbnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6ZSgpOwotCi0gICAgc2l6ZV90IG5leHRV
bmRlZmluZWRTcGFuSW5kZXggPSAwOwotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3BlcmFuZElu
ZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5z
KQotICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNw
YW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVu
ZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgZm9yIChzaXplX3Qgc3BhbkluZGV4ID0gMDsg
c3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkgewotICAg
ICAgICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07Ci0gICAg
ICAgIGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zmc2V0OwotICAgICAgICBpbnQgbGFzdE9m
ZnNldCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKLQotICAgICAgICBm
b3IgKGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsgKytvZmZz
ZXQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVkKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5k
czsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZp
cnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoaW5k
ZXggPT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9
IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51bWJlck9m
UmVnaXN0ZXJzIC0gMTsKLSAgICAgICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwg
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRP
cGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRl
eF0uZmlyc3RJbmRleDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0VW5k
ZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9j
YWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycykKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOwotCi0gICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFt
ZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2Ug
SW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNW
YWx1ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAg
ICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJf
dD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LQotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2Vs
bCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFz
YW5VbnNhZmVKU1ZhbHVlKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSkuYXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkpKTsKLSNlbmRpZgotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5
LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQzMkRpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNW
YWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVV
bmJveGVkSW50MzIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkp
ID4+IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVy
eS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3RyaWN0SW50
NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2Fu
VW5zYWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlm
eU5hTihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJp
ZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZl
VW5ib3hlZERvdWJsZSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBD
b25zdGFudDoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVjb3Zlcnku
Y29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERpcmVjdEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNU
aGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZl
IHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoY29udGV4dCwgY29kZUJsb2NrKTsKLSAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwg
YmFzZWxpbmVDb2RlQmxvY2spOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVy
PihKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tS
ZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2Vs
bE1hc2spOwotI2VuZGlmCi0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250
ZXh0KTsKLQotICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJl
ZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCi0g
ICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBC
dXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKLSAgICAvLyByZWZlciB0
byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMg
aGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUuCi0gICAgLy8gTm90ZSB0aGF0IHdlIGFs
c28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVy
aWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0g
YnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0aGF0LgotCi0gICAgREZHOjplbWl0UmVz
dG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsK
LQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2Ug
YXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxzIGludG8g
dGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8g
Y291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQg
YW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xk
IEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8vIE9TUiBleGl0
LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAgICAvLwot
ICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRv
IHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0
aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAgICAgd2FudCB0byBk
byBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgotICAgIC8v
Ci0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBz
dGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVy
IE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAgcGVyZm9y
bSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwot
ICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVk
aWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBP
U1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgIHBhcnRpY3VsYXJseSBl
eHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVu
IHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICBydW5uaW5n
IGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVk
LgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhl
Y3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1V
cCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAoYSkgYW5kIChi
KSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkg
Zm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50
aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyBmcmVxdWVudGx5IGFuZCB0aGUgZnVu
Y3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8g
YmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVk
LiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBp
biB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vIGdvb2Qgam9iIG9mIGVu
c3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCi0g
ICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVj
dXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNw
ZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0
aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlm
Ci0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJl
cy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBz
ZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkuCi0KLSAgICBpZiAoVU5MSUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0Q291bnRl
ckFuZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRp
bWl6ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCi0gICAgICAgIHRyaWdnZXJSZW9wdGltaXphdGlv
bk5vdyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICByZWlmeUlu
bGluZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLSAgICBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2Rl
QmxvY2ssIGV4aXQpOwotfQotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENv
bnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNv
bnN0IE9TUkV4aXRCYXNlJiBleGl0KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1Owot
ICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5n
IGFuIE9TUiBleGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOwotICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICBj
b25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0
Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUo
KTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJT
a2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0g
ICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAg
IENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBw
aW5nVGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQpOwotICAgICAgICB2b2lkKiBjYWxsZXJG
cmFtZSA9IGNwdS5mcCgpOwotCi0gICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOwot
Ci0gICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNh
bGxGcmFtZS0+aXNUYWlsKCkpOwotICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5n
ZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkK
LSAgICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1
LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6
ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJldHVyblBD
LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0clRhZz4o
bmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGlu
ZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0dXJuUEMpOwotICAgICAgICAgICAgY2Fs
bGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVj
b2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5Q
QyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxs
ZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7Ci0KLSAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVy
LT5pbmxpbmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGNwdS5m
cDx1aW50OF90Kj4oKSArIHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpLT5zdGFja09mZnNl
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICAg
ICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRy
eVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZy
YW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZyYW1lLnNldE9wZXJhbmQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgICAgICAv
LyBSZXN0b3JlIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSdzIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4K
LSAgICAgICAgLy8gSWYgdGhpcyBpbmxpbmVkIGZyYW1lIGlzIGEgdGFpbCBjYWxsIHRoYXQgd2ls
bCByZXR1cm4gYmFjayB0byB0aGUgb3JpZ2luYWwgY2FsbGVyLCB3ZSBuZWVkIHRvCi0gICAgICAg
IC8vIGNvcHkgdGhlIHByaW9yIGNvbnRlbnRzIG9mIHRoZSB0YWcgcmVnaXN0ZXJzIGFscmVhZHkg
c2F2ZWQgZm9yIHRoZSBvdXRlciBmcmFtZSB0byB0aGlzIGZyYW1lLgotICAgICAgICBzYXZlT3JD
b3B5Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgIXRydWVDYWxsZXIpOwotCi0gICAg
ICAgIGlmIChjYWxsZXJJc0xMSW50KSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGlu
ZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAg
ICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxl
R1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+
KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50
OjpSZWdpc3RlcnM6OnBiR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Ci0gICAgICAgIEFTU0VSVChjYWxsZXJGcmFtZSk7Ci0g
ICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNl
dCgpLCBjYWxsZXJGcmFtZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkp
LmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNl
dCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVDb25zdGFudCgpKSk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlz
IGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rp
b24pKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFn
T2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90
PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBU
YWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50
KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwg
c28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgfQotCi0gICAgLy8gRG9u
J3QgbmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlu
bGluZSB0YWlsIGNhbGxzCi0gICAgaWYgKGNvZGVPcmlnaW4pIHsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotI2Vsc2UKLSAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSNlbmRpZgotICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBU
YWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYgZXhpdCkKLXsKLSAg
ICBPU1JFeGl0U3RhdGUqIGV4aXRTdGF0ZSA9IGV4aXQuZXhpdFN0YXRlLmdldCgpOwotCi0gICAg
V1RGOjpzdG9yZUxvYWRGZW5jZSgpOyAvLyBUaGUgb3B0aW1pemluZyBjb21waWxlciBleHBlY3Rz
IHRoYXQgdGhlIE9TUiBleGl0IG1lY2hhbmlzbSB3aWxsIGV4ZWN1dGUgdGhpcyBmZW5jZS4KLSAg
ICB2bS5oZWFwLndyaXRlQmFycmllcihiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAvLyBXZSBi
YXJyaWVyIGFsbCBpbmxpbmVkIGZyYW1lcyAtLSBhbmQgbm90IGp1c3QgdGhlIGN1cnJlbnQgaW5s
aW5lIHN0YWNrIC0tCi0gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoaWNoIGlubGluZWQg
ZnVuY3Rpb24gb3ducyB0aGUgdmFsdWUgcHJvZmlsZSB0aGF0Ci0gICAgLy8gd2UnbGwgdXBkYXRl
IHdoZW4gd2UgZXhpdC4gSW4gdGhlIGNhc2Ugb2YgImYoKSB7IGEoKTsgYigpOyB9IiwgaWYgYm90
aAotICAgIC8vIGEgYW5kIGIgYXJlIGlubGluZWQsIHdlIG1pZ2h0IGV4aXQgaW5zaWRlIGIgZHVl
IHRvIGEgYmFkIHZhbHVlIGxvYWRlZAotICAgIC8vIGZyb20gYS4KLSAgICAvLyBGSVhNRTogTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBzaG91bGQgcmVtZW1iZXIgd2hpY2ggQ29kZUJsb2Nr
IG93bnMKLSAgICAvLyB0aGUgdmFsdWUgcHJvZmlsZS4KLSAgICBJbmxpbmVDYWxsRnJhbWVTZXQq
IGlubGluZUNhbGxGcmFtZXMgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlu
bGluZUNhbGxGcmFtZXMuZ2V0KCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAg
ICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJh
bWVzKQotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Ci0gICAgfQotCi0gICAgYXV0byogZXhpdElubGluZUNh
bGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChl
eGl0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb250ZXh0LmZwKCkgPSBjb250ZXh0LmZwPHVp
bnQ4X3QqPigpICsgZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOwotCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGV4aXRTdGF0ZS0+anVtcFRh
cmdldDsKLSAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkgewotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNo
LCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0uY2FsbEZyYW1l
Rm9yQ2F0Y2ggPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgfQotCi0gICAgdm0udG9w
Q2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotCi0gICAgaWYgKGV4aXRTdGF0
ZS0+aXNKdW1wVG9MTEludCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQg
PSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9j
b2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLQotICAgICAgICBjb250
ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIp
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpKTsKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCkub2Zmc2V0KCkpOwotI2Vsc2UKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lz
dGVyczo6cGNHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlv
bik7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAg
ICAgICAgICAgIHZtLnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb247Ci0gICAgfQotCi0gICAgY29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGp1bXBUYXJnZXQpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4
dCYgY29udGV4dCwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0JiBleGl0KQot
ewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBD
b2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEV4
aXRLaW5kIGtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotCi0gICAgZGF0YUxvZygi
U3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIgQCBl
eGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKCIsIGJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2lu
ZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOwotICAgIGlmIChhbHRlcm5hdGl2ZSkgewotICAg
ICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRp
dmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICAgICAiLCByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigp
LAotICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgYWx0ZXJuYXRp
dmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0
YUxvZygibm8gYWx0ZXJuYXRpdmUgY29kZSBibG9jayAoaS5lLiB3ZSd2ZSBiZWVuIGpldHRpc29u
ZWQpIik7Ci0gICAgZGF0YUxvZygiLCBvc3JFeGl0Q291bnRlciA9ICIsIGNvZGVCbG9jay0+b3Ny
RXhpdENvdW50ZXIoKSwgIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEdQUnMgYXQgdGltZSBvZiBl
eGl0OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5ncHJOYW1lKGdwciksICI6IiwgUmF3
UG9pbnRlcihjb250ZXh0Lmdwcjx2b2lkKj4oZ3ByKSkpOwotICAgIH0KLSAgICBkYXRhTG9nKCJc
biIpOwotICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewot
ICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgZGF0
YUxvZygiICIsIGNvbnRleHQuZnByTmFtZShmcHIpLCAiOiIpOwotICAgICAgICB1aW50NjRfdCBi
aXRzID0gY29udGV4dC5mcHI8dWludDY0X3Q+KGZwcik7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9
IGNvbnRleHQuZnByKGZwcik7Ci0gICAgICAgIGRhdGFMb2dGKCIlbGx4OiVsZiIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oYml0cyksIHZhbHVlKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsK
LX0KLQotLy8gSklUIGJhc2VkIE9TUiBFeGl0LgotCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVh
bUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogT1NSRXhpdEJhc2Uoa2luZCwg
aml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljLCBqaXQtPm1fb3Jp
Z2luLndhc0hvaXN0ZWQpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKQEAg
LTk1OCwxNSArNzAsMTggQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JF
eGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCkgY29uc3QKIAogdm9pZCBPU1JFeGl0OjplbWl0
UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCiB7Ci0gICAgSGFzaE1hcDxNaW5pZmllZElELCBp
bnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMg
bm9kZSBJRCB0byBvcGVyYW5kLgorICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgVmlydHVhbFJlZ2lz
dGVyPiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRz
IG5vZGUgSUQgdG8gb3BlcmFuZC4KICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAKICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAogICAgICAgICAgICAg
JiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSBy
ZWNvdmVyeS5ub2RlSUQoKTsKICAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5maW5kKGlkKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5lbmQoKSkgewpAQCAtOTg3LDcgKzEwMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJl
c3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8
VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwKICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBqaXQubW92ZSgKQEAgLTk5Nyw3ICsxMTIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0
b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZh
bAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpIHsKICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTEwMjMsNyArMTM4LDcgQEAgdm9pZCBPU1JFeGl0
OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBP
cGVyYW5kczxWYWwKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0
aW9uUHRyVGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAotICAgICAgICBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CisgICAgICAgIGFscmVhZHlB
bGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAg
ICB9CiB9CiAKQEAgLTE0NjYsMTYgKzU4MSw4NCBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0
KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAg
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCiAgICAgICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2tw
b2ludCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGRuJ3QgdXNlIGEgcHJv
YmUgYnV0IGZpbGxpbmcgYWxsIHRoZSBzaWRlIHN0YXRlIG9iamVjdHMgaXMgdHJpY2t5IG90aGVy
d2lzZS4uLgorICAgICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gdmFsdWVzKG9wZXJhbmRzLm51
bWJlck9mVG1wcygpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kcy5u
dW1iZXJPZlRtcHMoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzW2ldID0gb3BlcmFuZHMudG1w
KGkpOworCisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAgICAgYXV0byogdG1wU2NyYXRj
aCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKKyAgICAgICAgaml0LnByb2JlKFs9
LCB2YWx1ZXMgPSBXVEZNb3ZlKHZhbHVlcyldIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewor
ICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5
dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdU
Rjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAg
ICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvJiByZWNvdmVyeSA9IHZhbHVlc1tpICsgdG1wT2Zmc2V0XTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0IHRoZSBGVEwg
ZG9lcyBhbmQgbWF0ZXJpYWxpemUgYWxsIHRoZSBKU1ZhbHVlcyBpbnRvIHRoZSBzY3JhdGNoIGJ1
ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgICAgICAg
ICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0
YW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
ZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odG1wU2NyYXRjaFtp
ICsgdG1wT2Zmc2V0XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odG1wU2NyYXRjaFtpICsgdG1wT2Zm
c2V0XSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2Vk
SW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0g
PSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9T
UlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1f
Y29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsg
Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lw
cGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0
ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBj
b2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3Rh
dGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihj
YWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQ
VVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNl
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVj
b2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBEbyBhbGwgZGF0YSBm
b3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgog
CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxS
ZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiBy
ZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+
Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3Bl
cmFuZC5pc1RtcCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaW50IG9wZXJh
bmQgPSByZWcub2Zmc2V0KCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVy
YW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkt
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5oCmluZGV4IGE3ZTU4NzhjMDcxNzA4YTFkYTc2YzBiMGViNTRkNTRmMWEwNGViOGUuLjllOWJj
ZWE0ODFjMWQ2ODc3OTcyZjI1OWQ2MmMxYTIzMDBiMmIxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCkBAIC0xNTAsOCArMTUwLDYgQEAgc3RydWN0IE9TUkV4aXQgOiBw
dWJsaWMgT1NSRXhpdEJhc2UgewogCiAgICAgZnJpZW5kIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21waWxlT1NSRXhpdChDYWxsRnJhbWUqKTsKIAotICAgIHN0YXRpYyB2b2lkIGV4ZWN1
dGVPU1JFeGl0KFByb2JlOjpDb250ZXh0Jik7Ci0KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXBMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8T1NSRXhpdFB0clRhZz4gbV9jb2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRCYXNlLmgKaW5kZXggMzEwOTYzZDg0NDM2YzUzMzI3ODRmMGEyOTJhNDlj
YmUxYjgyYTU5Yi4uMDAzYjYxOGNkNDQwZTQwMGFiYWFjZWMwYWZiYzNjMTI0MzVkYjk2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaApAQCAtNzAsNiArNzAs
MTEgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBHZW5l
cmljVW53aW5kOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0V4aXRpbmdUb0No
ZWNrcG9pbnRIYW5kbGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmlu
ZGV4IDJmZjNlYThiNWZiYjZmM2YyNzIxZDUwMjQ0NTYyOThiMDg0ZDUxMTUuLmFjZjUxZDBiNGZh
NWMyZjExMjRjNWFjNzk1OTU1MzllODEwZjkxMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTI5LDEyICsy
OSwxNSBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCisj
aW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5jbHVkZSAi
UHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTQzLDYgKzE0Niw5IEBAIHZvaWQqIGNhbGxl
clJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2Rl
SW5kZXggY2FsbEJ5CiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhp
dFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPigmY2hlY2twb2lu
dF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50KTsKKwogICAgIHZvaWQqIGp1
bXBUYXJnZXQ7CiAKICAgICBpZiAoY2FsbGVySXNMTEludCkgewpAQCAtMjM4LDcgKzI0NCw3IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NS
RXhpdEJhc2UmIGV4aXQpCiAgICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxz
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEK
ICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCktPmppdFR5cGUoKSkpOwotICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcilDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBq
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNv
ZGVCbG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jaykpOwogCiAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKICAgICBmb3Ig
KGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdp
bi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxs
RnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewpAQCAtMzA1LDMzICszMTEs
MzQgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNl
dCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJhc2VsaW5lQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4
Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRzKCk7CisgICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3RvcmU2
NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRo
ZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJG
cmFtZU9mZnNldCgpKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29k
ZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikp
KS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSkpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleCgp
LmJpdHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSkpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogI2VuZGlmIC8vIFVTRShK
U1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMg
dGhlIDMyLWJpdCBwYXJ0CiAgICAgfQogCiAgICAgLy8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRv
cGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNhbGxzCiAgICAg
aWYgKGNvZGVPcmlnaW4pIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSku
Yml0cygpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGpp
dC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCkpKS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCku
YXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5k
ZXggPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoY29kZU9y
aWdpbi0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucyhieXRlY29kZUlu
ZGV4KS5hdCgpLnB0cigpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKS5iaXRzKCk7CiAjZW5k
aWYKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9j
YXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgIH0KIH0KIApAQCAtMzgy
LDExICszODksMTIgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwogCiAgICAgdm9p
ZCoganVtcFRhcmdldDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjaGVj
a3BvaW50UmV0dXJuVGFyZ2V0OwogICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3Jj
ZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bms7CiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAgICAgICAgIGF1
dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tG
b3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6
OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkgPyBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihi
aXR3aXNlX2Nhc3Q8dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQpKSA6IExM
SW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAg
ICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgR1BS
SW5mbzo6cmVnVDIpOwpAQCAtNDAyLDcgKzQxMCwxNCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rh
cmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkK
ICNlbmRpZgogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhp
dFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0Zv
ckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KSk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGluZGV4Rm9yQ2hlY2twb2lu
dFJldHVybiA9IGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRl
eCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlv
biA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGluZGV4Rm9yQ2hlY2twb2lu
dFJldHVybik7CisgICAgICAgIGlmIChleGl0SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAg
ICAgICBjaGVja3BvaW50UmV0dXJuVGFyZ2V0ID0gY29kZUxvY2F0aW9uOworICAgICAgICAgICAg
Y29kZUxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9j
YXN0PHZvaWQqPigmY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KSk7CisgICAgICAgIH0K
KwogICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgICAgICBqdW1wVGFyZ2V0ID0g
Y29kZUxvY2F0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCmluZGV4IDIxNmM1YmFhMTRkOTZiMjliNWRkMzY5
YTczYmZlY2I0YjAzZGMxOTkuLjdkYTZhZmQ1YzIyMWM5N2ZmOTNmNDAwY2IzNDk0NDU0ZDRkNDky
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcApAQCAtMjEwNyw3ICsyMTA3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGlmIChtX2hlYXAuZm9sbG93KGF2YWlsYWJpbGl0eS5tX2xvY2Fs
c1tpXS5ub2RlKCkpICE9IGVzY2FwZWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJ
bmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9y
aWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ob3BlcmFuZCksCiAgICAgICAgICAg
ICAgICAgbWF0ZXJpYWxpemF0aW9uLT5kZWZhdWx0RWRnZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wSW5mby5oCmluZGV4IGYzOWMxNGI5ZjBhNDQ4Nzg5ZDc3MmRjMjdkZjE1ODgxZTUw
ODY4OTUuLjc3ZWZjZmIyNDgwMDJhNGJmNWVhNjBhNmU2NjUyMGZlMDUxNDRiY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaApAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgT3BJ
bmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oSW50ZWdyYWxUeXBlIHZhbHVlKQogICAgICAgICA6
IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSkgeyB9CiAgICAgZXhwbGljaXQg
T3BJbmZvKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKSA6IG1fdmFsdWUoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZSkpKSB7IH0KLQor
ICAgIGV4cGxpY2l0IE9wSW5mbyhPcGVyYW5kIG9wKSA6IG1fdmFsdWUob3AuYXNCaXRzKCkpIHsg
fQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgZXhwbGljaXQgT3BJbmZvKFQqIHB0
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDUw
Y2EwMGIwMGI5NDg4YTEwMzI4NzI2MjhhOWUyZWU4NzNmMmMzNzkuLmNmMDlkODczOTc0YTg1NjMz
YTJlZGI2ODc3NjkyZGIxMDc2ODQwN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcApAQCAtMjk0NiwxNSArMjk0NiwxNiBAQCBpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVEb3VibGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iagogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0
aCwgdWludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmly
c3RFbGVtZW50IHsgZmlyc3RFbGVtZW50RGVzdCB9OwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudHMpOwogICAgIAotICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0
LCBsZW5ndGgpOworICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigmY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCkpLCBhcmd1bWVudHMsIG9mZnNldCwg
bGVuZ3RoIC0gMSk7CiAgICAgCi0gICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFu
ZGF0b3J5TWluaW11bTsgKytpKQotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVz
dCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGggLSAx
OyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50ICsgaSkgPSBqc1VuZGVmaW5lZCgpOwogfQogCiBkb3VibGUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCmluZGV4
IGNiYzJjOGJmYWU0ZTk0ZDA5NWRkYzkxNTdkYjM2YWI1YTBjNmFkYzIuLjJiMTA1YjJjYWRlN2I3
ZDU1ODlmYWRlYWZiMDJiYzA5NjQ1ZTA5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKQEAgLTQzLDExICs0Myw4
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFt
ZXNwYWNlIERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFBoYW50b21JbnNlcnRpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKIHB1YmxpYzoKICAgICBQaGFudG9tSW5zZXJ0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQog
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAicGhhbnRvbSBpbnNlcnRpb24iKQpAQCAtNjIsNyArNTks
NyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFNldExvY2FscyBleGVjdXRlLCB3aGljaCBpcyBpbmFj
Y3VyYXRlLiBUaGF0IGNhdXNlcyB1cyB0byBpbnNlcnQgdG9vIGZldyBQaGFudG9tcy4KICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9
PSBFeGFjdFJlZkNvdW50KTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFBoYW50b20gaW5zZXJ0aW9uOlxuIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtNzIsNyArNjksNyBAQCBw
dWJsaWM6CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpCiAgICAgICAgICAgICBoYW5kbGVCbG9jayhibG9jayk7CiAgICAgICAg
IAotICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFm
dGVyIFBoYW50b20gaW5zZXJ0aW9uOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsK
ICAgICAgICAgfQpAQCAtMTAzLDIyICsxMDAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWdu
ZWQgbGFzdEV4aXRpbmdJbmRleCA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIGlmIChE
RkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG51bGxw
dHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnRNYXliZToKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzNCwzOCArMTMxLDQyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKICAgICAgICAgICAg
ICAgICBub2RlLAogICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJVcGRhdGluZyBlcG9jaCBmb3IgIiwgZWRn
ZSwgIiB0byAiLCBjdXJyZW50RXBvY2gpOwogICAgICAgICAgICAgICAgICAgICBlZGdlLT5zZXRF
cG9jaChjdXJyZW50RXBvY2gpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBub2RlLT5zZXRFcG9jaChjdXJyZW50RXBvY2gpOwogCi0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeUtpbGxlZDsKKyAgICAgICAgICAgIE9wZXJhbmQgYWxyZWFk
eUtpbGxlZDsKIAotICAgICAgICAgICAgYXV0byBwcm9jZXNzS2lsbGVkT3BlcmFuZCA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5z
ZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEtpbGxlZCBvcGVyYW5kOiAiLCByZWcsICJcbiIpOworICAgICAgICAgICAgYXV0byBw
cm9jZXNzS2lsbGVkT3BlcmFuZCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBLaWxsZWQgb3BlcmFuZDogIiwgb3BlcmFu
ZCk7CiAKICAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGhhbmRsZWQgZnJvbSBTZXRMb2NhbC4K
LSAgICAgICAgICAgICAgICBpZiAocmVnID09IGFscmVhZHlLaWxsZWQpCisgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeUtpbGxlZCkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiBhbHJlYWR5IGtp
bGxlZCBieSBzZXQgbG9jYWwiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBraWxs
ZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChyZWcpOwotICAgICAgICAgICAgICAgIGlmICgha2ls
bGVkTm9kZSkKKyAgICAgICAgICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3Bl
cmFuZChvcGVyYW5kKTsgCisgICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVy
YW5kLCAiIHdhcyBub3QgZGVmaW5lZCBpbiB0aGlzIGJsb2NrLiIpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbV92YWx1
ZXMub3BlcmFuZChyZWcpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBXZSBvbmx5IG5lZWQgdG8gaW5zZXJ0IGEgUGhhbnRvbSBpZiB0aGUgbm9kZSBoYXNuJ3Qg
YmVlbiB1c2VkIHNpbmNlIHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgLy8gZXhpdCwgYW5kIHdh
cyBib3JuIGJlZm9yZSB0aGUgbGFzdCBleGl0LgotICAgICAgICAgICAgICAgIGlmIChraWxsZWRO
b2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9jaCkKKyAgICAgICAgICAgICAgICBpZiAoa2lsbGVk
Tm9kZS0+ZXBvY2goKSA9PSBjdXJyZW50RXBvY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgaGFzIGN1cnJlbnQg
ZXBvY2ggIiwgY3VycmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWRO
b2RlLCAiIGFmdGVyICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4
aXRpbmdJbmRleCksICJcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLAorICAgICAgICAgICAgICAgICAg
ICAiICAgIEluc2VydGluZyBQaGFudG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKKyAg
ICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGV4YWN0IHJlZiBjb3VudHMsIHNv
IGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFucyB0aGF0IHdlIGhhdmUgdG8KICAgICAgICAgICAgICAg
ICAvLyBpbmNyZW1lbnQgdGhlIHJlZiBjb3VudC4KICAgICAgICAgICAgICAgICBraWxsZWROb2Rl
LT5wb3N0Zml4UmVmKCk7CkBAIC0xNzksMTQgKzE4MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfTsKIAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOworICAgICAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAg
ICAgICBpZiAobm9kZU1heUV4aXQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIFNl
dExvY2FsIGRvZXMgZXhpdCwgd2UgbmVlZCB0aGUgTW92SGludCBvZiBpdHMgbG9jYWwKICAgICAg
ICAgICAgICAgICAgICAgLy8gdG8gYmUgbGl2ZSB1bnRpbCB0aGUgU2V0TG9jYWwgaXMgZG9uZS4K
LSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQobG9jYWwpOwotICAgICAg
ICAgICAgICAgICAgICBhbHJlYWR5S2lsbGVkID0gbG9jYWw7CisgICAgICAgICAgICAgICAgICAg
IHByb2Nlc3NLaWxsZWRPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBhbHJl
YWR5S2lsbGVkID0gb3BlcmFuZDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZXMub3BlcmFuZChsb2NhbCkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcyhtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9k
ZUluZGV4ICsgMSksIHByb2Nlc3NLaWxsZWRPcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKaW5kZXggYTU4ZTE3
OTY1NjBmYzZkOTRiYjQ2M2QxNDI5ODg2ZTA3OGYwYWZjYy4uZjVmMDk2YzhlYjU2ZDQ1ZmE5ODli
YjQ5MzZmNzJkNDQ4MTk1YTE2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBWaXJ0dWFsUmVnaXN0ZXIoaGVh
cC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZSht
X3JlYWQsIGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgICAgICAvLyBXZSBleHBlY3Qg
c3RhY2sgd3JpdGVzIHRvIGFscmVhZHkgYmUgcHJlY2lzZWx5IGNoYXJhY3Rlcml6ZWQgYnkgREZH
OjpjbG9iYmVyaXplKCkuCiAgICAgICAgIGlmIChoZWFwLmtpbmQoKSA9PSBTdGFjaykgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAg
ICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIFZpcnR1YWxSZWdp
c3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJv
cHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBoZWFwLm9wZXJhbmQoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC04NywxMiArODcsMTIgQEAgcHVibGlj
OgogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRpb24uaGVhcCgpLmtpbmQo
KSA9PSBTdGFjayk7CiAgICAgICAgIAotICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9j
YXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpLCBub2RlKTsKKyAgICAgICAgbV9kZWYo
bG9jYXRpb24uaGVhcCgpLm9wZXJhbmQoKSwgbm9kZSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgY2FsbElmQXBwcm9wcmlh
dGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
dm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG9wZXJhbmQudG9Mb2NhbCgpKSA+PSBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcAppbmRleCA0NDdlMjRlMmExMTYzMzdjODNlM2JhYTMxMjczNTc5MmI5MDQ3Mjlk
Li41YjRmOTkyOTM0MTE3OWMyMDQ5OTUyYmRjMzg2OTY1MjlmMGZjMzExIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhh
bmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5k
Rm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRs
ZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgT3B0aW9uYWw8SlNW
YWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAgICAgICAgIGlmICgh
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAppbmRleCA4MDUwNTE2Y2JmZWNjODRmZTE5NTg0MjhhMGNmODdjZDU0ZWUxMTdiLi4yMjFjNTAx
ZGJkMTRjMDQ1NzJhN2ZlMWQxOWJlNmQzMTk3YzEzZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cApAQCAtMTM2NSw2ICsxMzY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNb3ZIaW50Ogog
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgRXhpdE9LOgorICAgICAgICBj
YXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNh
c2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAK
aW5kZXggODcyNzc2MGM2ZWNiZGIzMmVhZTYwM2JhY2JkMTAwMzc0ZDgxNGZlNy4uZmQ2MTIzZmE5
ZjFkNTI5ZTRjMmVlMmMwZTdlZGY2M2YwN2Y3OGQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKQEAgLTQyLDExICs0
Miw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAot
bmFtZXNwYWNlIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQogY2xhc3MgUHV0U3RhY2tTaW5raW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiBwdWJsaWM6CiAgICAgUHV0U3RhY2tTaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQog
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAiUHV0U3RhY2sgc2lua2luZyIpCkBAIC03Myw3ICs3MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdGhlIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB0byBtZSBp
ZiB0aGlzIGlzIGltcG9ydGFudCBvciBub3QuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUyOTYKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUHV0U3RhY2sgc2lua2lu
ZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDEx
ICs4NSw4IEBAIHB1YmxpYzoKICAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Ym9vbD4+IGxpdmVB
dFRhaWwobV9ncmFwaCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Ci0gICAgICAgICAgICBsaXZlQXRI
ZWFkW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+
KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdLmZpbGwoZmFsc2UpOwotICAgICAgICAgICAgbGl2
ZUF0VGFpbFtibG9ja10uZmlsbChmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2Nr
XSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwg
ZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNlKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgYm9vbCBjaGFuZ2VkOwpAQCAtMTA3LDMzICsxMDEsMzQgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIE9wZXJhbmRzPGJvb2w+IGxpdmUgPSBsaXZlQXRUYWlsW2Js
b2NrXTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgYXQgIiwgbm9k
ZSwgIjogIiwgbGl2ZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCA0PiByZWFkczsKLSAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgND4gd3JpdGVzOwotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxPcGVyYW5kLCA0PiByZWFkczsKKyAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHdyaXRlczsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
Iiwgb3BlcmFuZCwgIiBpcyBsaXZlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZHMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9Owog
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9
IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0U3Rh
Y2sgfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRW
YXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gS2lsbFN0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gb3AgPSBub2RlLT5vcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQob3AgPT0gUHV0U3RhY2sgfHwgb3AgPT0gVmFyYXJnc0xlbmd0aCB8fCBvcCA9PSBM
b2FkVmFyYXJncyB8fCBvcCA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCA9PSBLaWxsU3RhY2spOwog
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVy
aXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxl
ciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVy
YW5kLCBMYXp5Tm9kZSkgeyB9KTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kIDogd3JpdGVzKQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJh
bmQgb3BlcmFuZCA6IHdyaXRlcykKICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFu
ZChvcGVyYW5kKSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kIDogcmVhZHMpCisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBv
cGVyYW5kIDogcmVhZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3Bl
cmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTIz
NCw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3Jt
YXQ+IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdl
dFN0YWNrKSB7CkBAIC0yNjEsNyArMjU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM5OAog
CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzQ29uZmxpY3RpbmcgPQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPmxvY2FsKSA9PSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID09
IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWlzQ29uZmxpY3RpbmcpOwpAQCAt
Mjc1LDE3ICsyNzAsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJv
bS4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
PmxvY2FsOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiU2V0dGluZyBmbHVzaCBmb3JtYXQgZm9yICIsIG5vZGUsICIgYXQg
b3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gc2luayBhIFB1dFN0YWNrIHBhc3QgYSBLaWxsU3RhY2suCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwo
KSkgPSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJLaWxsaW5nIHN0YWNr
IGZvciAiLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IENvbmZsaWN0aW5n
Rmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXV0byBl
c2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFu
ZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwgIiBlc2NhcGluZyAi
LCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
SGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjkzLDE2
ICsyOTEsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFvcGVy
YW5kLmlzVG1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFk
ZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiV3JpdGluZyBkZWFkIGZsdXNoIGZv
ciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5v
ZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBkZWZlcnJl
ZEF0VGFpbFtibG9ja10pCkBAIC0zMTMsMTMgKzMxMywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBk
ZWZlcnJlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIFZpcnR1YWxSZWdpc3RlcihkZWZlcnJl
ZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+Iiwg
cG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVy
cmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQ29uc2lkZXJpbmcgIiwgZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkpLCAiIGF0ICIsIHBv
aW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVm
ZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2Vz
IHRvICIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNz
b3JdW2ldID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShkZWZlcnJlZEF0SGVh
ZFtzdWNjZXNzb3JdW2ldLCBkZWZlcnJlZFtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3Jd
W2ldLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAg
LTM1MiwxMCArMzUyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIE9wZXJhbmRzPFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFibGUoCiAgICAgICAgICAgICBP
cGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAg
IFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGluZGV4VG9PcGVyYW5kOworICAgICAgICBWZWN0b3I8
T3BlcmFuZD4gaW5kZXhUb09wZXJhbmQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZEZvckluZGV4KGkpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRl
eChpKTsKKwogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0g
c3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFi
bGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4
VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CkBAIC0zNzAsMTIgKzM3MCwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAg
ICAgICAgICAgcHV0U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAgICAg
c3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9W
YXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9y
Lm5ld0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJh
bmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9w
ZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzg2LDcgKzM4
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNzYUNhbGN1bGF0b3IuY29tcHV0ZVBo
aXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwg
QmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5k
ZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFk
W2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTM5Nyw3ICszOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFp
c0NvbmNyZXRlKGZvcm1hdCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkFkZGluZyBQaGkgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAo
YmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlKiBw
aGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIGJsb2NrLT5hdCgwKS0+
b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpKTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtYXBwaW5nLmZpbGwobnVsbHB0cik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsK
KyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgo
aSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBzc2FDYWxjdWxhdG9yLnJl
YWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CkBAIC00MjEsMTUgKzQyMSwxNSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gZGVmLT52
YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmcgYXQgdG9wIG9mICIsIHBv
aW50ZXJEdW1wKGJsb2NrKSwgIjogIiwgbWFwcGluZywgIlxuIik7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9y
LnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52
YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBwaGlEZWYtPnZhbHVlKCks
ICJcbiIpOwogICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURl
Zi0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTQzNywxNSArNDM3LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwg
IlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazogewogICAgICAgICAgICAgICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBkYXRhLT5sb2NhbDsK
KyAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZGF0YS0+b3BlcmFuZDsKICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IGRhdGEtPmZvcm1h
dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ1MywxNiArNDUzLDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewog
ICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVm
ZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9y
bWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5v
ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5s
b2NhbCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3Bl
cmFuZCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gZGVmZXJyYWwuIE5vIGRlZmVycmFsIG1lYW5zIHRoYXQg
dGhlIG1vc3QKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dGhvcml0YXRpdmUgdmFsdWUg
Zm9yIHRoaXMgc3RhY2sgc2xvdCBpcyB3aGF0IGlzIHN0b3JlZCBpbiB0aGUgc3RhY2suIFNvLAog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGUgR2V0U3RhY2suCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gbm9kZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKSA9IG5vZGU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKQEAgLTQ3MiwyMCArNDcyLDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgLy8gaGF2ZSBzdG9yZWQgYW5kIGdldCByaWQgb2YgdGhlIEdldFN0YWNr
LgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGZvcm1hdCA9
PSBkYXRhLT5mb3JtYXQsIGZvcm1hdCwgZGF0YS0+Zm9ybWF0KTsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5k
KGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBw
aW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpID0gaW5jb21pbmctPmRlZmF1bHRFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNrOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9
IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVI
YW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwgIiBlc2NhcGluZyAiLCBvcGVy
YW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFk
ZXIoKSkKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290
dGEgaW5zZXJ0IGEgUHV0U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIklu
c2VydGluZyBhIFB1dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIG5vZGUsICJcbiIpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAg
ICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0g
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRv
IHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCBG
b3J3YXJkVmFyYXJncyBhcmUgdW5jb25kaXRpb25hbCB3cml0ZXMgdG8gdGhlIHN0YWNrCkBAIC01
MjEsMTMgKzUyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2Nh
dGlvbnMgdGhleSB3cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9zZSBzdGFjayBsb2NhdGlvbnMgZGVh
ZCByaWdodCAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhIExvYWRWYXJhcmdz
L0ZvcndhcmRWYXJhcmdzLiBUaGlzIG1lYW5zIHdlIHNob3VsZCBuZXZlciBzaW5rCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBQdXRTdGFja3MgcmlnaHQgdG8gdGhpcyBwb2ludC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFy
Z3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+
b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1
c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUs
IGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgfQpAQCAtNTM5LDggKzUzOSw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+
dmFyaWFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgVXBzaWxvbiBmb3IgIiwgb3BlcmFuZCwgIiBhdCAi
LCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvckJsb2NrKSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVk
QXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGlzQ29uY3JldGUoZm9ybWF0KSwgZm9y
bWF0KTsKQEAgLTU4NSw3ICs1ODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9n
KCJHcmFwaCBhZnRlciBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCmluZGV4IDQzNmU1ZDM5MTRiMzIzNWEwMjQ3ZmM0MTg0
NzE2MzExZDY3Njg2NTAuLjA0ZjJjMGNkMzk5OGIxODFiOWU5OGJiYTQyNzA0ODgzYjQwZDJkOGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9u
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLAotICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRk
KHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJp
YWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50R2V0dGVycy5hZGQoY2hpbGROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgbV9h
cmd1bWVudE1hcHBpbmcuYWRkKG5vZGUsIGNoaWxkTm9kZSk7CkBAIC0xNzgsNyArMTc4LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIC8vIFBydW5lIGJ5IGxpdmVuZXNzLiBUaGlzIGRvZXNuJ3Qg
YnV5IHVzIG11Y2ggb3RoZXIgdGhhbiBjb21waWxlIHRpbWVzLgotICAgICAgICAgICAgICAgIE5v
ZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWhlYWROb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAt
MzAwLDcgKzMwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bm9kZS0+cmVwbGFjZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJN
YXBwaW5nOiAiLCBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRl
eChpKSksICIgLT4gIiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJNYXBwaW5nOiAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpLCAiIC0+
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmRbaV0g
PSBub2RlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMxMywxMSArMzEz
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoaURlZi0+dmFsdWUo
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3Bl
cmFuZCgpKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBwaGlJ
bnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIE1vdkhpbnQsIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndp
dGhJbnZhbGlkRXhpdCgpLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxv
Y2FsKCkub2Zmc2V0KCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOworICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKSksIHBoaURlZi0+dmFsdWUo
KS0+ZGVmYXVsdEVkZ2UoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChibG9j
ay0+YXQoMCktPm9yaWdpbi5leGl0T0spCkBAIC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNhc2UgTW92SGludDogewogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBT
cGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obm9kZS0+dW5saW5rZWRMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8obm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJl
cnMgZXhpdC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzQ5LDE5ICszNDksMTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoISEo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNoZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9QdXRTdGFjaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxl
LT5mbHVzaEZvcm1hdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBjaGls
ZCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiTWFwcGluZzogIiwgdmFyaWFibGUtPm9wZXJhbmQoKSwgIiAtPiAiLCBjaGlsZCwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRT
dGFjazogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9hcmd1bWVudEdldHRlcnMuY29u
dGFpbnMobm9kZSkpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gbm9kZTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9w
ZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM3MSw4ICszNzEsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9n
cmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIlxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBs
YWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRS
ZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0zODUsNyArMzg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSktPmRlZmF1bHRFZGdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9w
ZXJhbmQoKSktPmRlZmF1bHRFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92
ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQpAQCAtNDI1LDEyICs0MjUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBp
cyBub3QgZXhpdE9LLgogICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1bmNo
ZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+bG9jYWwoKSwg
IiBwcm9wYWdhdGluZyAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSksICIgdG8gIiwgcGhpTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPm9wZXJhbmQoKSwgIiBw
cm9wYWdhdGluZyAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSwgIiB0byAiLCBwaGlOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2lu
LAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBFZGdlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAxNWJlNDJhYzNiNjlhZjRk
YzU4MzhhMThkZjM5ZDA3OGNhMzE2OTE5Li45YTMyZDY3YTU4NzQyOTU4NWIzN2Q5YWUxYTZjZWJj
NWZjOTYyY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaApAQCAtMzIyLDYgKzMyMiw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2Fz
ZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJk
VmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNh
c2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGI1YTEx
YzUxZWYxMGNmN2E2YjIzMTcyZDJkOGJmOGY2NzVlMDUyYmQuLjQxZTljNGI5YWNkNDk3OWM0MjAx
YzZmZGExMDFmZWU4ZDkxYjk5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTW92SGludChOb2RlKiBub2RlKQogICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgIG5vdGljZU9TUkJpcnRoKGNoaWxkKTsKICAgICAKLSAg
ICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJ
RChjaGlsZCksIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgIG1fc3RyZWFtLT5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFpbChBYm9ydFJl
YXNvbiByZWFzb24pCkBAIC0xODI1LDcgKzE4MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3VycmVudEJsb2NrKCkKICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2Jsb2Nr
KTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNp
emUoKTsgaS0tOykgewotICAgICAgICBpbnQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CiAgICAgICAgIGlmICghbm9kZSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3Mu
CkBAIC0xODM1LDExICsxODM1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJl
bnRCbG9jaygpCiAgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCiAgICAgICAgIGZv
cm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpOwotICAgICAgICBt
X3N0cmVhbS0+YXBwZW5kQW5kTG9nKAotICAgICAgICAgICAgVmFyaWFibGVFdmVudDo6c2V0TG9j
YWwoCi0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLAotICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwKLSAgICAgICAgICAgICAgICBmb3JtYXQp
KTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhb3BlcmFuZC5pc0Fy
Z3VtZW50KCkgfHwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7
CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwo
b3BlcmFuZCwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpKTsKICAgICB9CiAKICAg
ICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKQEAgLTE5MTksNyArMTkxNiw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiAgICAgICAgIGlmIChmb3JtYXQgPT0g
Rmx1c2hlZEpTVmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgQVNTRVJU
KHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpOwogCiAgICAgICAgIEpTVmFsdWVTb3VyY2Ug
dmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlcikpOwogICAgICAgICAKQEAgLTczNDEsNTQgKzczMzksNTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKiBub2RlKQogICAgIG5vUmVz
dWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3Mo
Tm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5v
ZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7CiAKICAgICBKU1ZhbHVlUmVncyBhcmd1bWVudHNSZWdzOwotICAgIHsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KSk7CisgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOworICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmd1bWVudHNSZWdzLCBkYXRh
LT5vZmZzZXQpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBsb2NrKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKLSAgICB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3Vt
ZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1
bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICB9Cisg
ICAgR1BSVGVtcG9yYXJ5IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyh0aGlzKTsKKyAgICBHUFJSZWcg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0gYXJnQ291bnRJbmNsdWRpbmdUaGlzLmdwcigpOwog
ICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKLSAgICAvLyBGSVhNRTogVGhl
cmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9w
ZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0
aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21w
bGlhbmNlCi0gICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25l
IHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAg
Ly8gcGFzdCB0aGUgc2l6aW5nLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDE0NDgKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwogCi0gICAgR1BS
UmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9Ci0gICAgICAgIEpJVENvbXBpbGVyOjpzZWxl
Y3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNSZWdzKTsKKyAg
ICBpbnQzMlJlc3VsdChhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIG5vZGUpOyAgCit9CiAKLSAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBh
cmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
YWRWYXJhcmdzKE5vZGUqIG5vZGUpCit7CisgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
YXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7ICAgIAorICAgIEpTVmFsdWVPcGVy
YW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBHUFJSZWcg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEpT
VmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKIAogICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJj
ZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLAotICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgICAg
ICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpKTsKKyAgICAgICAgVmFyYXJnc092ZXJmbG93LCBK
U1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVmFyYXJnc092ZXJmbG93
LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNH
UFIsCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKICAgICAgICAgICAg
IFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKIAotICAgIG1faml0LnN0b3JlMzIoYXJnQ291
bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5l
Q291bnQpKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgbV9qaXQuc3RvcmUzMihhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFj
aGluZUNvdW50KSk7CiAKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBh
cmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBkYXRh
LT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJh
cmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNl
dCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogCiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC03Mzk4LDE3ICs3Mzk3LDE5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKiBub2RlKQogewogICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgIGlmIChub2RlLT5jaGlsZDEoKSkKLSAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUoKTsKKyAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGVsc2UKICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCisgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKLSAgICBHUFJSZWcgbGVuZ3RoR1BSID0gbGVuZ3RoLmdwcigpOworICAg
IEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7
CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CiAgICAgSlNWYWx1
ZVJlZ3MgdGVtcFJlZ3MgPSB0ZW1wLnJlZ3MoKTsKLSAgICAgICAgCi0gICAgZW1pdEdldExlbmd0
aChpbmxpbmVDYWxsRnJhbWUsIGxlbmd0aEdQUiwgLyogaW5jbHVkZVRoaXMgPSAqLyB0cnVlKTsK
KyAgICAKKyAgICBtX2ppdC5tb3ZlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBsZW5ndGhH
UFIpOwogICAgIGlmIChkYXRhLT5vZmZzZXQpCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJ
bW0zMihkYXRhLT5vZmZzZXQpLCBsZW5ndGhHUFIpOwogICAgICAgICAKQEAgLTEyNDQ3LDcgKzEy
NDQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKE5vZGUqIG5vZGUpCiAgICAgaWYgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gbm9kZS0+YXJndW1lbnRzSW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
OwogICAgIGVsc2UKLSAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICBhcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50OwogICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHQu
Z3ByKCkpOwogICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggYzY0Zjk3OGFk
Zjg1ZmJmMjc3YmJhNzkyMTYwNjRmNDI4MWI4ZDVhOS4uMDNkNDgzNWJmNGI3YThkZTA5MzllZmNm
YTM3MDIyYjQ2MjY5MDk0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaApAQCAtMTM5Myw2ICsxMzkzLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29t
cGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAgdm9pZCBj
b21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3Mo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjY5LDE1ICsxNjcw
LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQ
UlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1h
dCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBt
YWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VSVCghYnl0
ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3RlcigpLnRv
QXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAg
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50Tm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5s
b2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAgIHJlY29y
ZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwg
Zm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9t
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApp
bmRleCA2N2IwZTBiMzcwNGNhNTlhODkwYWM1OWM4NmRiZDBkMmEwNTZkYjgxLi4wYWYzZjE3MTgx
NTQxMGQ5YmVmNjRhMjBmZDA5MDVkZGMwM2U2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4MjgsNyArMTgy
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAg
IC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhh
dCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhl
biBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+
dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAg
ICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmly
dHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MjQsNiArMzgyNCwxMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwog
ICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjb21w
aWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2Fz
ZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKaW5kZXggM2U2MzhjOWI5NDllYjVlYTI2YTMxMDVkZGI4YWZlNzY2MjE2MzM0
NC4uN2IxZTI1N2Q2MGQ0Njg0NWYxYTk0MGZmNmRmZGM5M2FjODZjN2M1MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xOTM2
LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZv
dW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWdu
ZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVu
dE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFk
KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5k
KCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDY0LDYgKzQ0NjQsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAg
ICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUp
OwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IGJlZWM4NmFjN2E3ZDMzM2UzOTY3OWUyNjc1NTkwNzRl
NDY0YzliODIuLmQ3NjI4ZTVhMTE3Y2UzM2RlMWQxNjE1ZjYwNDI3NTIyMDQ3N2EyMmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcApA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFibGUgYXMg
YmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExvY2FsLCBH
ZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAgIAotICAg
ICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gdXNlZE9w
ZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxzZSk7CiAg
ICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2Vk
IGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CkBA
IC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgp
KQorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
dXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAg
ICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0
eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRz
LgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5z
dGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0
YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFy
dC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxz
ZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhh
dE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTIsOSAr
OTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxvY2FsLnRv
TG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHN0
YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0
ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVy
KAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICB1
c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhG
aXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5z
ZXQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKLSAgICAgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24o
dXNlZExvY2Fscy5zaXplKCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24o
dXNlZE9wZXJhbmRzLnNpemUoKSk7CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2Fs
ID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExvY2Fscy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCF1c2VkTG9jYWxzLmdldChpKSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdXNlZE9wZXJhbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoIXVzZWRPcGVyYW5kcy5nZXRGb3JPcGVyYW5kSW5kZXgoaSkpIHsKICAgICAgICAgICAgICAg
ICBhbGxvY2F0aW9uW2ldID0gVUlOVF9NQVg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CkBAIC0xMzUsNDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5s
b2NhbCgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUt
Pm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGxvY2FsID0g
dmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYgKGxvY2FsID49IGFs
bG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUt
Pm9wZXJhbmQoKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVy
YW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gYWxsb2NhdGlvbi5z
aXplKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIGlmIChh
bGxvY2F0aW9uW2luZGV4XSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNz
aWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIHZhcmlh
YmxlLT5vcGVyYW5kKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpIHsKLSAgICAgICAg
ICAgIGlmICghZGF0YS0+bG9jYWwuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+
bWFjaGluZUxvY2FsID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFu
ZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBk
YXRhLT5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8c2l6ZV90PihkYXRhLT5sb2NhbC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0
YS0+bG9jYWwudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2NhbCgpKSA+
PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCldID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKGFsbG9j
YXRpb24sIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFz
c2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkpCiAg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lz
dGVyKGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7Cisg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNlZE9wZXJh
bmRzLCBhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7
IGktLTspIHsKICAgICAgICAgICAgIElubGluZVZhcmlhYmxlRGF0YSBkYXRhID0gbV9ncmFwaC5t
X2lubGluZVZhcmlhYmxlRGF0YVtpXTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCi0gICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpOworCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewogICAg
ICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5tX2FyZ3Vt
ZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9zaXRpb25T
dGFydCArIGFyZ3VtZW50XTsKQEAgLTIxNSw4ICsyMTUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0
aW9uLCBkYXRhLT5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
Q291bnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24odXNlZE9w
ZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
CkBAIC0yMzEsMTcgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZp
cnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IE9w
ZXJhbmRzPGJvb2w+JiB1c2VkT3BlcmFuZHMsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9j
YXRpb24sIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBzcmM7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2FsKCldOwot
ICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
OworCisgICAgICAgIHNpemVfdCBvcGVyYW5kSW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZElu
ZGV4KG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9u
W29wZXJhbmRJbmRleF07CisgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisg
ICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwogICAgIH0KIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwCmluZGV4IGViM2RkYmQ3MTg0M2Q0OWY2NWIzMmNlOTYxZmY5YTA3MTJhMWEwNTEuLmI0OGM2
ZjdmMTkwOTc3NWQ3Mjc5Nzk5MWYzZmI5ODNkZTYzOGE3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApAQCAt
Mjg1LDE3ICsyODUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRyOwotICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsID0gbV9ub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gbV9ub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPm9wZXJhbmQoKSA9PSBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsID0gbm9kZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYg
KGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIGxvY2Fs
KSkpCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIG9wZXJhbmQpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcApp
bmRleCA2YWNhZmJmM2JmNTM1Yzk2OTZiZTY0OGEyMDcwYjZlZTZmNGY4YmY5Li5mMWIxZmY2NGRk
YTUzY2Y0NTk2NzA0ZWViODMxNWYxNmJmYmU5MDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCkBAIC00MCwxNCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Ny
RXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxw
dHIpOwotICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwgJnZtKTsKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQg
dGh1bmsiKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKaW5kZXggMDVh
NTBhNTRiMjVkNTFkYmNiMTg1OGZlN2FhZGNhNDg2ODIwNWQ5ZS4uOGI1YzNmMDFhNDg1MjBiN2Fh
YWFhZWJhZmY5M2MzYjI2Y2NkOTg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3Io
Vk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVy
YXRpb25UaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4
IDYwZmJmODk5NWZkYWQ3ODI1NmEwNjdiODljNGVjNWY1NzEzZjFkN2UuLjc5NjY1ZjhhYjg1ZmMx
MTE2ZDYzOWZiM2Q4YjU1ZjZlZDkwMjY4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTQ2LDcgKzE0
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3Ry
dWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNoZWNrT3AgPSBDaGVja1N0
cnVjdHVyZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcGVjQ2VsbENoZWNrICYgU3Bl
Y0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsb2Nh
bCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkp
ID09IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhlIGNhbGwgZW50
cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCkBAIC0xNjgsOCArMTY4LDggQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9PSBu
b2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gZ2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2NhbCgqYmxvY2ss
IGluZGV4SW5CbG9jaywgdmFyaWFibGUsIGdldExvY2FsKTsKICAgICAgICAgICAgICAgICAgICAg
CkBAIC00NDYsNyArNDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRs
ZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA5ZWU1ZTAwNzQwOWRmNTI5NGJmY2Y1MWI3
NzZlYjhjZmNmNDdjNTBlLi5hMmQ2Y2ZjMjQ5MzRlM2RjM2M0NmMwZTI0ZDRkYTFjZTFiMGNmNWI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtNDgzLDcg
KzQ4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5w
aGlzW2ldOwogICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMo
bm9kZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQ
aGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxk
cmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGlu
IExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgogICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQpAQCAtNTE5
LDEwICs1MTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBrID0gMDsgayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJsb2NrLT5wcmVkZWNlc3Nv
cnNba107CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRlY2Vz
c29yc1trXSksIHByZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2
Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxs
IHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQg
bG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2Fs
LCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29y
c1trXSksIHByZXZOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJldk5v
ZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAtNTMzLDExICs1MzMsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBi
bG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJs
b2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZp
bml0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0g
U2V0QXJndW1lbnRNYXliZQpAQCAtNTQ3LDE5ICs1NDcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGlu
dG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwg
YmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2so
ZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5k
LCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9j
ayhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAg
ICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgICAgICAg
ICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKAotICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICAgICAg
T3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBv
c2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+dmFyaWFi
bGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQo
aSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwpAQCAtNjY4LDI0ICs2NjQsMjQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291bnRzLmdldChub2RlKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9j
YWwoKSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9PSBu
b3RTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwg
ISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgYmxvY2spLCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkg
fHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNv
cmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpICE9IG5v
dFNldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5s
b2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBzZWNvbmQg
R2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKICAgICAgICAgICAgICAgICAgICAgLy8g
YmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGZvciB0aGF0IGxvY2FsLgot
ICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gbm90U2V0OwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBnZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CisgICAgICAgICAg
ICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5v
dFNldDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudE1heWJlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk2OCwyNiAr
OTY0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBlZGdlKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlv
bkNvbnRleHQoT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAg
ICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gbnVsbCBC
bG9jayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBudWxsIEJsb2NrICIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxvZyhsb2Nh
bCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4g
QmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9u
Q29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3Vy
Y2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgT3BlcmFuZCBv
cGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25C
bG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJj
ZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVy
YW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9j
ayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUq
IHByZXZOb2RlKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJs
b2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIg
Zm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAgIGRhdGFM
b2cocHJldk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2Nr
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBu
b2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDI2ZjAzMjlkNTQzMDQx
NTcyMDVlNzgxNDk4YzY0ZTBiZTk5MzIxMTAuLjk1Y2RjOTJlMmMyNDEwYTM1YzAxMzEzMWZkYzNi
N2NjYzI4MjllZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJs
aWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYsNyArNTQsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgu
bV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAg
ICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5nOlxuIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODYsNyBAQCBw
cml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1bmN0aW9uIHRv
IGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBtYW5uZXIuCiAg
ICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2FuZGlkYXRlTm9k
ZUluZGV4KTsKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJIYW5k
bGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8v
IFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1bWVudHMgaWYg
dGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJpdmF0ZToKIAogICAg
ICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkuaXNUbXAo
KSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0byBhbiBhcmd1
bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5k
ZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51
bmxpbmtlZExvY2FsKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBl
bmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50
TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3Rlcigp
KSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgpAQCAtMTQw
LDEzICsxMzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNhd0VzY2Fw
ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGlmIChz
YXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkp
CiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0xNTcs
NyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgog
ICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hpbGQyKCkg
PT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBu
b2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xvYWRlZEZyb20o
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjYs
NyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRHZXRCeU9mZnNldCkg
ewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlkYXRlQnV0dGVy
ZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBidXR0
ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJ1dHRlcmZs
eSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBwcml2YXRl
OgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2UgYXJlIGlu
dGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKKyAgICAgICAg
ICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIs
IG9wZXJhbmQsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZh
bnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fscy5sYXN0KCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVtb3ZlTGFzdCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7
CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RVc2VySW5kZXgs
ICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAgIAogICAgICAg
ICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdlZW4gdGhlIGNh
bmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2MywxNiArMjYzLDE2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52
b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPm9wZXJhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2Rl
LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
QEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5sb2NhbCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRl
cmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52
b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFuZCgpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExLDcgKzMxMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtlIHRoaXMgd29y
ay4KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgV2lsbCBk
byBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIApA
QCAtMzQxLDggKzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0
IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbm9kZS0+Y29u
dmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0
aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBhZGRUaGlzID0g
Ki8gdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0No
aWxkKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2MmFlZDRj
MzQzMmVhNWE4MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNjODhhODdjN2QxNzlkOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgOiBtX2xv
Y2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptaW4oKSkpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX3ByZWRpY3Rp
b24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQog
ICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQpAQCAtNDUs
MTAgKzQ0LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKICAg
ICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NE
YXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwobG9jYWwpCi0gICAgLCBt
X3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNz
RGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAg
LCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2Up
CiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBAIC04Nyw3ICs4
Niw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2Nv
cmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNpbGl0eSBm
b3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZvciBhcmd1
bWVudHMuCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCku
aXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIC8vIElm
IHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0aGlzIGRvZXNu
J3QKQEAgLTEyMSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rl
c0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgpKTsKICAg
ICAgICAgCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3go
KQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQog
ICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgpKQogICAg
ICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9ybWF0U3Rh
dGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3ICsxNzUsNyBAQCBib29s
IFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBhcmd1bWVudHMu
Ci0gICAgaWYgKG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlIGFyZ3VtZW50
LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5saW5lZCBvciBt
YWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhLmgKaW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRhMjg0ZS4u
YmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC00OCwxMiAr
NDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJp
YWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJsZUFjY2Vz
c0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgIFZhcmlhYmxl
QWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZhcmlhYmxlQWNjZXNzRGF0
YShPcGVyYW5kKTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJh
bmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1f
bG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmFu
ZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7CiAgICAg
fQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAgLTIwOCwxMCAr
MjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0
aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1c2FnZSBmb3Ig
dmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCi0gICAgVmlydHVhbFJl
Z2lzdGVyIG1fbG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAg
IFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlwZSBtX2FyZ3Vt
ZW50QXdhcmVQcmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgIFZpcnR1YWxS
ZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsKIAogICAgIGJv
b2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudC5jcHAKaW5kZXggMjhlNDM3ZmQ1MWZlYTQ5NjllYjQ4ZWNmMGMwNTA4ZjBh
MzdkZjgzNS4uNWIyYzFlZTkwOWI1NDhmMzk4MjcwYzQzYmQzNmVkNzJlM2Y5Y2ZiYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkBAIC01OSwx
MSArNTksMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgiTW92SGludCgi
LCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7CisgICAgICAgIG91dC5wcmlu
dCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAg
ICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6
IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6Iiwg
bWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAogICAgICAgICAg
ICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudC5oCmluZGV4IDIwNjBkNGEyZmQyNzIyM2RkNmY2OTljNmRiYWQ2ZDIyNDY3Yzk4
MzQuLmMxZjU0YmE0ZmJkY2FhYTVhMWQ5YTVlZGMxYWM0ODEzOGQzNGUzZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC02OCw2ICs2OCwxMCBA
QCBlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIDogdWludDhfdCB7CiB9OwogCiB1bmlvbiBWYXJpYWJs
ZVJlcHJlc2VudGF0aW9uIHsKKyAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uKCkgCisgICAgICAg
IDogb3BlcmFuZCgpIAorICAgIHsgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Z3ByOwogICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCkBAIC03Niw3ICs4MCw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24g
ewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgIH0g
cGFpcjsKICNlbmRpZgotICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5kIG9wZXJh
bmQ7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Miw3ICsxNjYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRz
KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAg
ICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7
CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAg
ICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZv
cm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTgxLDEz
ICsxODUsMTMgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFibGVFdmVu
dCBzZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFs
UmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQg
Ynl0ZWNvZGVPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBm
b3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGlj
aFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVnLm9mZnNl
dCgpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAg
ICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7Cisg
ICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAgICAgICAg
IGV2ZW50Lm1fa2luZCA9IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1h
dCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAt
MTk1LDEzICsxOTksMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQog
ICAgIAotICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgVmly
dHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhp
bnQoTWluaWZpZWRJRCBpZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAgICAgIFZh
cmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hp
Y2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVz
ZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJl
Zy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlUmVn
OwogICAgICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1f
d2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRhdGlvbiA9
IFdURk1vdmUocmVwcmVzZW50YXRpb24pOwpAQCAtMjY1LDEzICsyNjksMTMgQEAgcHVibGljOgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7Ci0gICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFs
UmVnKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2Rl
UmVnaXN0ZXIoKSBjb25zdAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0gTW92SGlu
dEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9u
LmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQo
KS5vcGVyYW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZ2lz
dGVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudFN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwCmluZGV4IDQ1MjZkMzliYjA5NGM0Yjg2NmU2N2VkM2UyZWUxYjQ4
OTZhYmI3MjYuLjhjZjcwODA0MDNhOGVmZmQ5YjIyMWEzNWFmOGQyMWRlMzJiNWRkYTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmNwcApAQCAtNDIsNyArNDIsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OmxvZ0V2ZW50
KGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQogewogICAgIGRhdGFMb2dGKCJzZXEjJXU6Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUoKSkpOwogICAgIGV2ZW50LmR1bXAoV1RGOjpkYXRh
RmlsZSgpKTsKLSAgICBkYXRhTG9nRigiICIpOworICAgIGRhdGFMb2dMbigiICIpOwogfQogCiBu
YW1lc3BhY2UgewpAQCAtMTE5LDEwICsxMTksMTIgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0
cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCiAgICAgdW5zaWduZWQgaW5kZXgsIE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMsIFZlY3RvcjxVbmRlZmluZWRP
cGVyYW5kU3Bhbj4qIHVuZGVmaW5lZE9wZXJhbmRTcGFucykgY29uc3QKIHsKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJs
ZXM7CisgICAgdW5zaWduZWQgbnVtVG1wczsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGludmFsaWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAg
ICB1bnNpZ25lZCBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICBib29sIGZpcnN0
VW5kZWZpbmVkSXNBcmd1bWVudCA9IGZhbHNlOwpAQCAtMTMwLDM3ICsxMzIsNDIgQEAgdW5zaWdu
ZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgYXV0byBmbHVzaFVuZGVm
aW5lZE9wZXJhbmRTcGFuID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIGlmIChmaXJzdFVu
ZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlu
dCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChm
aXJzdFVuZGVmaW5lZCkub2Zmc2V0KCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gdmFsdWVS
ZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkgLSAxKS5vZmZzZXQoKTsKKyAgICAg
ICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChmaXJz
dFVuZGVmaW5lZCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CisgICAgICAgIGludCBsYXN0
T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpIC0gMSkudmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIGludCBtaW5PZmZzZXQgPSBzdGQ6Om1pbihmaXJz
dE9mZnNldCwgbGFzdE9mZnNldCk7CiAgICAgICAgIHVuZGVmaW5lZE9wZXJhbmRTcGFucy0+YXBw
ZW5kKHsgZmlyc3RVbmRlZmluZWQsIG1pbk9mZnNldCwgaSAtIGZpcnN0VW5kZWZpbmVkIH0pOwog
ICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICB9OwogICAgIGF1dG8g
cmVjb3JkVW5kZWZpbmVkT3BlcmFuZCA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICAvLyBX
ZSB3YW50IHRvIHNlcGFyYXRlIHRoZSBzcGFuIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSBzcGFuIG9m
IGxvY2FscyBldmVuIGlmIHRoZXkgaGF2ZSBhZGphY2VudCBvcGVyYW5kcyBpbmRleGVzLgotICAg
ICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVk
SXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKSkKKyAgICAgICAgaWYg
KGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1l
bnQgIT0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCkpCiAg
ICAgICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKGkpOwogCiAgICAgICAgIGlmIChm
aXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpIHsKICAgICAgICAgICAgIGZpcnN0VW5kZWZp
bmVkID0gaTsKLSAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVj
b3Zlcmllcy5pc0FyZ3VtZW50KGkpOworICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3Vt
ZW50ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCk7CiAg
ICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBu
dW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVD
YWxsRnJhbWUpLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwotICAgIGVsc2UKKyAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgbnVt
VmFyaWFibGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOworICAgICAgICBu
dW1UbXBzID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNl
dDsKKyAgICB9IGVsc2UgewogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCk7CisgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+bnVtVG1wcygpOworICAgIH0KICAgICAKICAgICAvLyBDcmF6eSBzcGVjaWFsIGNhc2U6IGlm
IHdlJ3JlIGF0IGluZGV4ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1lbnQgY2hlY2sK
ICAgICAvLyBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJlIGFscmVhZHkg
c2V0IHVwLiBUaGUgcmVjb3ZlcmllcyBzaG91bGQKICAgICAvLyByZWZsZWN0IHRoaXMuCiAgICAg
aWYgKCFpbmRleCkgewotICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJl
Y292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0bXBzIGhlcmUgYmVjYXVzZSB0aGV5IGNhbid0IGJlIHVz
ZWQgeWV0LgorICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCAwKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
SlNTdGFjaygKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVSZWNvdmVyaWVz
Lm9wZXJhbmRGb3JJbmRleChpKSksIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgdmFs
dWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVtVmFyaWFibGVzOwogICAgIH0K
QEAgLTE3MSwxMiArMTc4LDEzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29u
c3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07CiAgICAgCiAgICAgLy8gU3RlcCAyOiBDcmVh
dGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgot
ICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3Bl
cmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcywgbnVt
VG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07
KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7
CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0
aW9uSW5mb3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGluZGV4OyAr
K2kpIHsKICAgICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZXZlbnQgIiwgZXZlbnQpOwogICAg
ICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgewogICAgICAgICBjYXNlIFJlc2V0OgogICAgICAg
ICAgICAgLy8gbm90aGluZyB0byBkby4KQEAgLTE5OCwyMSArMjA2LDIzIEBAIHVuc2lnbmVkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFu
ZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3Rlcigp
LCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJj
ZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRT
b3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgotICAg
ICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdp
c3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50
LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFj
aGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAgaWYgKG9w
ZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAg
ICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2U6
OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQo
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCBzb3VyY2VzOiAi
LCBvcGVyYW5kU291cmNlcyk7CiAgICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJl
Y292ZXJpZXMhCi0gICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4o
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNv
dmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291
cmNlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tp
XTsKICAgICAgICAgaWYgKHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTIz
MCw2ICsyNDAsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgK
ICAgICAgICAgTWluaWZpZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlkKCkpOwogICAg
ICAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5mb3MuZ2V0KHNv
dXJjZS5pZCgpKTsKICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvcklu
ZGV4KGkpLCAiIGlzIGRlYWQuIik7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGlmIChz
dHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgICAgICAgICAg
cmVjb3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAgLTIzNyw2ICsyNDgsNyBAQCB1bnNpZ25lZCBW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBub2RlKSkgewor
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVSZWNvdmVy
aWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBpcyBjb25zdGFudC4iKTsKICAgICAgICAgICAgIGlm
IChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpIHsKICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBub2RlLT5jb25zdGFudCgpID09IGpzVW5k
ZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQoaSk7
CkBAIC0yNjYsNyArMjc4LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25z
dHJ1Y3QoCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9
Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihpbmZvLnUudmlydHVhbFJlZyksIGluZm8uZm9ybWF0KTsKKyAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhpbmZvLnUub3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKSwgaW5mby5mb3JtYXQpOwogICAgIH0KICAgICBpZiAoc3R5bGUg
PT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICBmbHVzaFVuZGVmaW5l
ZE9wZXJhbmRTcGFuKG9wZXJhbmRTb3VyY2VzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCmluZGV4IDAxNTczMDA3ZWRk
ZGQ3MGYzMWQxN2FjMGQ5OWY3OGViZjVlYTZlYmMuLmU5ZTQzYWJmZWM0ODVmZWM3ZTY2MzE1MWMx
YzIyZWM1MTg5NzQxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5oCkBAIC00Miw5ICs0MiwxMiBAQCBzdHJ1Y3QgVW5kZWZpbmVk
T3BlcmFuZFNwYW4gewogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6IHB1YmxpYyBW
ZWN0b3I8VmFyaWFibGVFdmVudD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3QgVmFyaWFibGVF
dmVudCYgZXZlbnQpCiAgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGxv
Z0V2ZW50KGV2ZW50KTsKICAgICAgICAgYXBwZW5kKGV2ZW50KTsKICAgICB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggNzgxYjcx
ZTY5MjQzODI4NjQ4OTdlZmY3ZjlkZTY4ZTRlZTRlYmYxZC4uMzJjYmMxMDc2ZGU1OWRhYTRhNzI3
ZGFjN2Q3NWZiZGNhNjA3ZGU3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcApAQCAtMTkxLDYgKzE5MSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
czoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNh
c2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBCcmFu
Y2g6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHAKaW5kZXggMzA4MGRjMzQ1MDljNzMzMzI0YjgxNDNkMmE5NTRmMDhlZGFmMTNmYi4u
YzAwNGZhY2NjMWFkMDVkMzZjZWRiZWRmOTY3ODJhYWI3ZGNiOTgzMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcApAQCAtMzEs
OCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBGb3JPU1JFbnRy
eUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCi0gICAgOiBtX2J5dGVjb2RlSW5kZXgoVUlO
VF9NQVgpCi0gICAgLCBtX2VudHJ5RmFpbHVyZUNvdW50KDApCisgICAgOiBtX2VudHJ5RmFpbHVy
ZUNvdW50KDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAppbmRleCA5NDU2NTc3NTVhMGVjYjc4MWNmYjg5YjExYzM5Zjk4ZjdhOWFiYTNk
Li5kMzU5MTM1NGYxNWEwMmVmYjE3Zjc4OWY5N2U5ODU5YzE2YjliZjg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMDgsNyArMjA4LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNsZWFyU3RhY2tGcmFtZShH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgR1BSSW5mbzo6cmVnVDAsIGNvZGUuZnJhbWVTaXplKCkpOwogCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2Rl
QmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlw
b2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CkBAIC0yNzQsNyArMjc0LDcg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgQ29kZUJs
b2NrIHRvIGhhdmUgYSB3ZWFrIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UKICAgICAgICAgLy8g
dGhhdCB3b3VsZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KLSAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2Rl
QmxvY2soKSkpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgICAg
ICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jaykpKTsKIAogICAgICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVjay4KICAgICAg
ICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50
Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07
KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQo
aSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRK
U1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwpAQCAtMTI4MSw2ICsxMjgx
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDYWxsRXZhbDoKICAgICAgICAgICAgIGNvbXBp
bGVDYWxsRXZhbCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDoKKyAgICAgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgIGNvbXBpbGVMb2Fk
VmFyYXJncygpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTUzLDcgKzE5NTYsNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oCiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZv
ck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIHNldEpT
VmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5r
ZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFs
UmVnaXN0ZXIoKS50b0xvY2FsKCkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRXh0cmFj
dENhdGNoTG9jYWwoKQpAQCAtMTk3Miw3ICsxOTc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBpbGVHZXRTdGFjaygpCiAgICAgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBt
X25vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9ybWF0KSwgZGF0
YS0+Zm9ybWF0KTsKICAgICAgICAgCkBAIC03OTI2LDEzICs3OTI5LDEzIEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2FsbGVlKCkKICAgICB7Ci0gICAgICAgIHNldEpTVmFs
dWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlU2V0
Q2FsbGVlKCkKICAgICB7CiAgICAgICAgIGF1dG8gY2FsbGVlID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAt
Nzk0Nyw3ICs3OTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQu
Y29uc3RJbnQzMihtX25vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9vdXQuc3RvcmUz
MihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSks
IHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKCkKQEAgLTk1NDIsNTEg
Kzk1NDUsNTEgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHZvaWQgY29tcGls
ZVZhcmFyZ3NMZW5ndGgoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKLSAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgCisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1D
YWxsKAogICAgICAgICAgICAgSW50MzIsIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIHdlYWtQb2lu
dGVyKGdsb2JhbE9iamVjdCksIGpzQXJndW1lbnRzLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5vZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBp
cyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5
IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0
aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21w
bGlhbmNlCi0gICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJl
IG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAot
ICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKLSAgICAgICAgCisKICAgICAgICAgTFZhbHVl
IGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7
CiAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1Zh
bHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGgsIGxlbmd0aElu
Y2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgc2V0SW50MzIobGVuZ3RoSW5jbHVkaW5nVGhpcyk7Cisg
ICAgfQogCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9u
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93
SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgICAgICBMVmFsdWUgbGVuZ3Ro
SW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKICAg
ICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCks
IG51bGxwdHIsCi0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBt
X291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwotICAgICAgICAKKyAgICAgICAgICAgIG1f
b3V0LmJpdE9yKG1fb3V0LmlzWmVybzMyKGxlbmd0aEluY2x1ZGluZ1RoaXMpLCBtX291dC5hYm92
ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpKTsg
CisKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
Y29tcHV0YXRpb24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0
IHRvb2sgYSBwb2ludGVyIGluc3RlYWQKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRp
b24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25Mb2FkVmFyYXJncyBqdXN0IHRvb2sgYSBw
b2ludGVyIGluc3RlYWQKICAgICAgICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxk
bid0IGhhdmUgdG8gZG8gdGhpcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTY2MAogICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9v
dXQubFNocigKLSAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVT
dGFydC5vZmZzZXQoKSkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAorICAgICAgICAgICAgbV9vdXQu
c3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpLCBtX2NhbGxGcmFtZSks
CiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigzKSk7CiAgICAgICAgIAogICAgICAgICB2
bUNhbGwoCiAgICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJncywgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVT
dGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCi0gICAg
ICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkp
OworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRh
LT5tYW5kYXRvcnlNaW5pbXVtKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUZvcndh
cmRWYXJhcmdzKCkKICAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKSB7Ci0gICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkgeworICAgICAgICAgICAgTm9kZSogYXJn
dW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgICAgIGlm
IChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tU3ByZWFkKSB7CiAgICAgICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0
aFNwcmVhZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1OTUsNTAgKzk1OTgsMjcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZTsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUgPSBtX25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAg
ICAgICAgTFZhbHVlIGxlbmd0aCA9IG51bGxwdHI7IAotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5j
bHVkaW5nVGhpcyA9IG51bGxwdHI7Ci0gICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVudHNM
ZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYg
KGFyZ3VtZW50c0xlbmd0aC5pc0tub3duKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxl
bmd0aCA9IGFyZ3VtZW50c0xlbmd0aC5rbm93bjsKLSAgICAgICAgICAgIGlmIChrbm93bkxlbmd0
aCA+PSBkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxl
bmd0aCAtIGRhdGEtPm9mZnNldDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBr
bm93bkxlbmd0aCA9IDA7Ci0gICAgICAgICAgICBsZW5ndGggPSBtX291dC5jb25zdEludDMyKGtu
b3duTGVuZ3RoKTsKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25z
dEludDMyKGtub3duTGVuZ3RoICsgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNv
ZGUgYWJvdmUsIGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KLSAgICAgICAgICAgIGlm
ICghZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0
aC52YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgICAgICAgICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNv
bnN0SW50MzIoZGF0YS0+b2Zmc2V0KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51
YXRpb24pKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1l
bnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKLSAgICAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICBs
ZW5ndGggPSBtX291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJn
ZXJMZW5ndGhSZXN1bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuZ3RoSW5jbHVk
aW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOwotICAgICAg
ICB9Ci0KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5v
ZmZzZXQ7CisgICAgICAgIExWYWx1ZSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlz
OyAKKyAgICAgICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CisgICAgICAgICAgICBM
VmFsdWUgZml4ZWRMZW5ndGggPSBtX291dC5zdWIoY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhpcywg
bV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOworICAgICAgICAgICAg
bGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1
YWwoZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQz
Mlplcm8sIFNlbGVjdFByZWRpY3RhYmlsaXR5OjpQcmVkaWN0YWJsZSk7CisgICAgICAgIH0gZWxz
ZSAKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRp
bmdUaGlzOworCisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVk
aW5nVGhpcywgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAg
ICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0
LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQp
KSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMs
IHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZh
bHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJl
c3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05Njk3LDY1ICs5Njc3LDIw
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dp
Y2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVy
YXRpb25zLgogICAgICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KElOVDMyX01JTikpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3
QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTFZhbHVlIGZpeGVkTGVuZ3RoID0gbV9vdXQuc3ViKGFyZ3VtZW50c0xl
bmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwog
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0
SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOwotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBs
YXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0
aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpKTsKLSAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMy
LCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5n
dGgsIG1fb3V0LmludDMyWmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVj
dFByZWRpY3RhYmlsaXR5OjpQcmVkaWN0YWJsZSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxl
Rm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5l
Q2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpI
YXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3By
ZWFkTGVuZ3RoczsKLQotICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGls
ZCgpLm5vZGUoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBo
YW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdB
cnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8
TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50
Q291bnQgPSByZWN1cnNhYmxlTGFtYmRhKFsmXShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4g
dm9pZCB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsK
LSAgICAgICAgICAgICAgICBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQt
Pm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICAgICAgICAgIEJp
dFZlY3RvciogYml0VmVjdG9yID0gdGFyZ2V0LT5iaXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZihtX2dyYXBoLnZhckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKytudW1i
ZXJPZlN0YXRpY0FyZ3VtZW50czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09
IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewotICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGlj
QXJndW1lbnRzICs9IHRhcmdldC0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigp
LT5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEFTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwot
ICAgICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1
cmUoaW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LT5nZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApOwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29sbGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsK
LSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEg
KyBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyk7Ci0gICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6
IHNwcmVhZExlbmd0aHMpCi0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQu
YWRkKGxlbmd0aEluY2x1ZGluZ1RoaXMsIGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAg
c3BlY3VsYXRlKApAQCAtOTc2Niw3ICs5NzAxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFs
dWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsK
IAotICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAm
Y2FjaGVkU3ByZWFkTGVuZ3RocywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdl
dCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNw
cmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBO
b2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUgewogICAgICAgICAgICAg
aWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQogICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpLCBzdG9yZUluZGV4KTsKIApAQCAtOTc5OCw4
ICs5NzMzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+
b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSgpOwogCi0gICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVu
dHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihj
YWNoZWRTcHJlYWRMZW5ndGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1
dG8gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCk7CisgICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVu
dHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAg
ICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExl
bmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkpOwogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3Qmxv
Y2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Js
b2NrKCk7CkBAIC0xMjI1NCw4ICsxMjE5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBz
Y29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9jYWxsRnJhbWUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFt
ZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSks
IHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAg
ICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7
CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoMCkpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxl
ckZyYW1lKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFw
cy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihz
Y29wZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9
CiAgICAgCkBAIC0xMjM0Niw3ICsxMjI4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+
Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgZ2V0QXJn
dW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9m
ZnNldCA9IDApCkBAIC0xNzYxMSw3ICsxNzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENv
ZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRh
Z0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgIVVT
RShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFt
ZSkpOwogI2VuZGlmCkBAIC0xNzcxOSw3ICsxNzY1NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAg
ICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAg
dm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMTc4MjQsMTUgKzE3NzYxLDE1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlu
dCBvcGVyYW5kID0gZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
KyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygp
CiAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVu
dHJ5TW9kZSkgewogCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAm
JiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0
T3JpZ2luKSkKLSAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
dG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAi
LCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJp
bGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShv
cGVyYW5kLCBleGl0T3JpZ2luKSkKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6
IG9wZXJhbmQgPSAiLCBvcGVyYW5kLCAiLCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHks
ICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFy
Z3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5o
YXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKQEAgLTE4MTMyLDM5ICsxODA2OSwzOSBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRl
cihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50
ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQg
PSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9w
ZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCldLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2lu
dGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAg
IH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAg
ICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwog
ICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90
IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlw
ZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zm
c2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zm
c2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVk
LCBvcGVyYW5kLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFt
ZSwgb3BlcmFuZCwgb2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3Io
aW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9h
ZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisg
ICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0
YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRl
ciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAppbmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1
MzEzYTEzMjE5MDQ0OTE5Li4wOTFlN2YzYzliNDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyAr
NzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1
ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxuIik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1l
bnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAg
SlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpT
VmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAg
ICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZhbHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0
cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFyZ3VtZW50KQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRm
OWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYxOGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThl
MTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVz
Y3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IoCiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZv
cm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWdu
ZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZv
cm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVz
KG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJl
ck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2FscywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0x
MTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0
Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXggZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJm
NTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMxZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3Ry
dWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4
aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1w
cyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUg
YSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0
aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQz
Yjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4ODE3NmVlNzIuLmEzNzg0MTBkYTliODAxNTcyNGE5
ZGMxNmMzZmUxYWVjMDgwNTVkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZU
TEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwxMSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1
MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklU
Q29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVh
bFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlu
bGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgYXV0byogdG1w
U2NyYXRjaCA9IHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5kZXgo
MCk7CisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAgICAgaml0LnByb2JlKFs9XSAoUHJv
YmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0g
WyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXgg
PSBpbmRleDsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNo
ZWNrcG9pbnRUbXBzOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tp
XSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+
YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47
CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFt
ZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9y
aWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxp
bmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgp
LT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAg
ICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJl
dF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNl
dCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxs
RnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29k
ZU9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShj
YWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAv
LyBOb3cgZ2V0IHN0YXRlIG91dCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJh
Y2sgaW50byB0aGUgc3RhY2suIFRoZSB2YWx1ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVk
IHNvIHdlIGp1c3QgbW92ZSB0aGVtLgogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1f
ZGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnZpcnR1YWxSZWdpc3Rl
ckZvckluZGV4KGluZGV4KTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2Ny
aXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChyZWcu
aXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmly
dHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2Nh
bCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1
YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KHJlZykpOworICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICB9CiAgICAg
CiAgICAgaGFuZGxlRXhpdENvdW50cyh2bSwgaml0LCBleGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCmluZGV4IDdmN2NkMzgzMjQ5NjFhOGZmNGU0NzI1
OWE4ODRkZTg2ZDU2NGIxMTcuLjEwMmMxZTZhMWJkOWViM2I0NzEzMzc0NGY4NDNlYzY0ZDYzYTE4
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApAQCAt
NTA1LDcgKzUwNSw3IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICAvLyBX
ZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0
aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAg
ICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJy
YXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2Nr
LCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVC
bG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3Bw
CmluZGV4IDc0OTMzZGM2MDUxNWM1ZGEwMGVhMThmYzdkNWRiM2FkOWNlNWU5Y2YuLmQ1N2ZiMWVl
YTgwNDRhMzRiNzkxNzY4YTkwOTc2OTg5OThhYzMzOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsMTUgKzY1NSwzNyBAQCBMVmFsdWUgT3V0cHV0Ojpu
b3RaZXJvNjQoTFZhbHVlIHZhbHVlKQogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8p
OwogfQogCi1MVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4s
IExWYWx1ZSBub3RUYWtlbikKK0xWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFsdWUsIExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFNlbGVjdFByZWRpY3RhYmlsaXR5IHByZWRpY3RhYmls
aXR5KQogewogICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkgewogICAgICAgICBpZiAodmFsdWUt
PmFzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB0YWtlbjsKKyAgICAgICAgICAgIHJldHVy
biBsZWZ0OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbm90VGFrZW47CisgICAg
ICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgfQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgdGFrZW4s
IG5vdFRha2VuKTsKKworICAgIGlmIChwcmVkaWN0YWJpbGl0eSA9PSBTZWxlY3RQcmVkaWN0YWJp
bGl0eTo6Tm90UHJlZGljdGFibGUpCisgICAgICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgbGVmdCwgcmln
aHQpOworCisgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbmV3QmxvY2soKTsKKyAgICBM
QmFzaWNCbG9jayBsZWZ0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgTEJhc2ljQmxvY2sg
cmlnaHRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsKKworICAgIG1fYmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZSgKKyAgICAgICAgbV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgdmFsdWUs
CisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhsZWZ0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkg
IT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OlJpZ2h0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5v
cm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHJp
Z2h0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Okxl
ZnRMaWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUp
KTsKKworICAgIExWYWx1ZSBwaGkgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6OlBoaSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4oKSk7CisKKyAgICBsZWZ0VGFr
ZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGxl
ZnQsIHBoaSk7CisgICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3By
b2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24p
KTsKKworICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHJpZ2h0LCBwaGkpOworICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRl
ZEJsb2NrKGNvbnRpbnVhdGlvbikpOworCisgICAgbV9ibG9jayA9IGNvbnRpbnVhdGlvbjsKKyAg
ICByZXR1cm4gcGhpOwogfQogCiBMVmFsdWUgT3V0cHV0OjphdG9taWNYY2hnQWRkKExWYWx1ZSBv
cGVyYW5kLCBUeXBlZFBvaW50ZXIgcG9pbnRlciwgV2lkdGggd2lkdGgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAppbmRleCBjNTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAz
YWE1NzBjYTJlLi40YzAyYjM0MDg1MTQ2ZjdkZjAyNTYyN2Q1ZmYzMWM3ODEwZDhmYjc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oIgogI2luY2x1ZGUgIkZUTENvbW1vblZhbHVlcy5oIgorI2luY2x1ZGUgIkZUTFNl
bGVjdFByZWRpY3RhYmlsaXR5LmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJG
VExTd2l0Y2hDYXNlLmgiCiAjaW5jbHVkZSAiRlRMVHlwZWRQb2ludGVyLmgiCkBAIC0zNjUsNyAr
MzY2LDcgQEAgcHVibGljOgogICAgIExWYWx1ZSB0ZXN0SXNaZXJvUHRyKExWYWx1ZSB2YWx1ZSwg
TFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzTnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAg
IExWYWx1ZSB0ZXN0Tm9uWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVy
biBub3ROdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAKLSAgICBMVmFsdWUgc2VsZWN0KExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pOworICAgIExWYWx1ZSBz
ZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbiwgU2VsZWN0
UHJlZGljdGFiaWxpdHkgPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpOwog
ICAgIAogICAgIC8vIFRoZXNlIGFyZSByZWxheGVkIGF0b21pY3MgYnkgZGVmYXVsdC4gVXNlIEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VkQWNjZXNzKCkgd2l0aCBhCiAgICAg
Ly8gbm9uLW51bGwgaGVhcCB0byBtYWtlIHRoZW0gc2VxX2NzdCBmZW5jZWQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTE4NTNiYTk4NTIyYWFhYzYxYjg0OTk1NTI3OTRhNTA5MzBjN2Q2YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxp
dHkuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVz
cGFjZSBKU0M6OkZUTCB7CisKK2VudW0gY2xhc3MgU2VsZWN0UHJlZGljdGFiaWxpdHkgOiB1aW50
OF90IHsKKyAgICBOb3RQcmVkaWN0YWJsZSwKKyAgICBQcmVkaWN0YWJsZSwKKyAgICBMZWZ0TGlr
ZWx5LAorICAgIFJpZ2h0TGlrZWx5LAorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsLmgKaW5kZXggNjkzNGMzZjBkMzc5MWY2NGJhNDI5NjNlMDU1NjNkYmJjN2Rk
YTVhNC4uYzcyNmFkMjdjODE1YWM2N2E2NzBkMjU4MDRhYThjYWUyMmIzYTBkYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCkBAIC0xMDAsNyArMTAwLDcg
QEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsK
ICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMs
IGppdCwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3Bv
aW50cy5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTZhNWY1Mjc3ZGQ2MzFhY2Q0Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2lu
dHMucmIKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworY2xhc3MgQ2hlY2twb2ludAorICAgIGF0dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9y
ZWFkZXIgOmRlZnMKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRl
eAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgaW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1l
ID0gbmFtZQorICAgICAgICBAaW5kZXggPSBpbmRleAorICAgICAgICBAdXNlcyA9IHRtcHMuZmls
dGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0
bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5k
CisKKyAgICBkZWYgbGl2ZW5lc3MobmFtZXNwYWNlKQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNl
ICN7bmFtZXNwYWNlfTo6I3tuYW1lfToKK0VPRgorICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNr
cG9pbnRzCisgICAgZGVmIGluaXRpYWxpemUob3Bjb2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAg
ICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNo
ZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwX3dpdGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBp
bmRleHwgQ2hlY2twb2ludC5uZXcobmFtZSwgaW5kZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAg
IGRlZiBsaXZlbmVzcworICAgICAgICBAY2hlY2twb2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwK
KworICAgICAgICBlbmQKKyAgICAgICAgRU9GPC0tCitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2
ZW5lc3NGb3Ije0BvcGNvZGUuY2FwaXRhbGl6ZWRfbmFtZX0odWludDhfdCBjaGVja3BvaW50KQor
eworICAgIHN3aXRjaCAoY2hlY2twb2ludCkgeworCisgICAgfQorfQorRU9GCisgICAgZW5kCitl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5kZXggZGFiODY4
NmNhMzNhMTAyYzliZmExZGYxODAzZWJiNGYwYWIyNDQ4NS4uY2ZkOWRmMTUxMTQ3YTg2ZGE0YmM3
NWJlNDZhNjc4MjVlMjUzNzVmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9P
cGNvZGUucmIKQEAgLTMwLDYgKzMwLDcgQEAgY2xhc3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIg
OmFyZ3MKICAgICBhdHRyX3JlYWRlciA6bWV0YWRhdGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFz
CisgICAgYXR0cl9yZWFkZXIgOmNoZWNrcG9pbnRzCiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAg
ICBOYXJyb3cgPSAiT3Bjb2RlU2l6ZTo6TmFycm93IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNz
IE9wY29kZQogICAgICAgICB0aWQKICAgICBlbmQKIAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rp
b24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykK
KyAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRh
LCBtZXRhZGF0YV9pbml0aWFsaXplcnMsIHRtcHMsIGNoZWNrcG9pbnRzKQogICAgICAgICBAc2Vj
dGlvbiA9IHNlY3Rpb24KICAgICAgICAgQG5hbWUgPSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBl
eHRyYXMgfHwge30KICAgICAgICAgQG1ldGFkYXRhID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBt
ZXRhZGF0YV9pbml0aWFsaXplcnMKICAgICAgICAgQGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4
IHsgfChhcmdfbmFtZSwgdHlwZSksIGluZGV4fCBBcmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUs
IGluZGV4ICsgMSB9IHVubGVzcyBhcmdzLm5pbD8KKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAg
ICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcCB7IHwoY2hlY2twb2ludCwgXyl8IGNo
ZWNrcG9pbnQgfSB1bmxlc3MgY2hlY2twb2ludHMubmlsPwogICAgIGVuZAogCiAgICAgZGVmIGNy
ZWF0ZV9pZCEKQEAgLTExOCw2ICsxMjEsOCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgPDwtRU9G
CiBzdHJ1Y3QgI3tjYXBpdGFsaXplZF9uYW1lfSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7CiAgICAg
I3tvcGNvZGVJRH0KKyAgICAje3RlbXBzfQorICAgICN7Y2hlY2twb2ludFZhbHVlc30KIAogI3tl
bWl0dGVyfQogI3tkdW1wZXJ9CkBAIC0xMzIsNiArMTM3LDE4IEBAIEVPRgogICAgICAgICAic3Rh
dGljIGNvbnN0ZXhwciAje29wY29kZUlEVHlwZX0gb3Bjb2RlSUQgPSAje25hbWV9OyIKICAgICBl
bmQKIAorICAgIGRlZiBjaGVja3BvaW50VmFsdWVzCisgICAgICAgIHJldHVybiBpZiBAY2hlY2tw
b2ludHMubmlsPworCisgICAgICAgIFsiZW51bSBDaGVja3BvaW50cyA6IHVpbnQ4X3QgeyJdLmNv
bmNhdChjaGVja3BvaW50cy5tYXB7IHxjaGVja3BvaW50fCAiICAgICAgICAje2NoZWNrcG9pbnR9
LCIgfSkuY29uY2F0KFsiICAgICAgICBudW1iZXJPZkNoZWNrcG9pbnRzLCIsICIgICAgfTsiXSku
am9pbigiXG4iKQorICAgIGVuZAorCisgICAgZGVmIHRlbXBzCisgICAgICAgIHJldHVybiBpZiBA
dG1wcy5uaWw/CisKKyAgICAgICAgWyJlbnVtIFRtcHMgOiB1aW50OF90IHsiXS5jb25jYXQoQHRt
cHMubWFwIHt8KHRtcCwgdHlwZSl8ICIgICAgICAgICN7dG1wfSwifSkucHVzaCgiICAgIH07Iiku
am9pbigiXG4iKQorICAgIGVuZAorCiAgICAgZGVmIGVtaXR0ZXIKICAgICAgICAgb3Bfd2lkZTE2
ID0gQXJndW1lbnQubmV3KHdpZGUxNiwgb3Bjb2RlSURUeXBlLCAwKQogICAgICAgICBvcF93aWRl
MzIgPSBBcmd1bWVudC5uZXcod2lkZTMyLCBvcGNvZGVJRFR5cGUsIDApCkBAIC0yMDAsNiArMjE3
LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxPcGNvZGVTaXplIF9fc2l6ZSwgYm9vbCByZWNv
cmRPcGNvZGUsIHR5cGVuYW1lIEJ5dGVjb2RlR2VuZXJhdG9yPgogICAgIHN0YXRpYyBib29sIGVt
aXRJbXBsKEJ5dGVjb2RlR2VuZXJhdG9yKiBnZW4je3R5cGVkX2FyZ3N9I3ttZXRhZGF0YV9wYXJh
bX0pCiAgICAgeworICAgICAgICAjeyFAY2hlY2twb2ludHMubmlsPyA/ICJnZW4tPnNldFVzZXND
aGVja3BvaW50cygpOyIgOiAiIn0KICAgICAgICAgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpX
aWRlMTYpCiAgICAgICAgICAgICBnZW4tPmFsaWduV2lkZU9wY29kZTE2KCk7CiAgICAgICAgIGVs
c2UgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMzIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKaW5kZXggMjA0YWM3NTllMTNlZmYxNTFmOGNkMTc3ZjNi
ZjFiNzBlMDc3OWNhYS4uNjY4NTViYTY1MDA4MGU0YzIzY2MwZWJlYzEwZTc5NDljZGU3NjhiOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtNDMsNyAr
NDMsNyBAQCBjbGFzcyBTZWN0aW9uCiAgIGVuZAogCiAgIGRlZiBjcmVhdGVfb3Bjb2RlKG5hbWUs
IGNvbmZpZykKLSAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmlnWzpleHRyYXNdLCBj
b25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRhZGF0YV9pbml0aWFs
aXplcnNdKQorICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNv
bmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxp
emVyc10sIGNvbmZpZ1s6dG1wc10sIGNvbmZpZ1s6Y2hlY2twb2ludHNdKQogICBlbmQKIAogICBk
ZWYgYWRkX29wY29kZV9ncm91cChuYW1lLCBvcGNvZGVzLCBjb25maWcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCmluZGV4IGY2Mzk0YWM3MTA3
MTI1YjdjYWIyMWFkMmI5MTEzYzA3OTUzNmE2MDAuLmVmN2Y2Yzk0ZjQxNjhiNGEyODQ2MDUzYTVk
MDEzYmUxMTIyMGRlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVw
cmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxs
CiAgICAgQVNTRVJUKGdsb2JhbEV4ZWMtPmlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2Vy
KCkpOwogfQogCi1ib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQo
KSBjb25zdAorYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBj
b25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2so
KS0+aml0VHlwZSgpKSB7CkBAIC05MCwxMiArOTAsMTIgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxT
aXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6
Y2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGlu
dD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnRhZygpOwogfQogCiBTVVBQUkVTU19B
U0FOIHVuc2lnbmVkIENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAog
ewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnVuc2FmZVRh
ZygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCldLnVuc2FmZVRhZygpOwogfQogCiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6
Y2FsbFNpdGVJbmRleCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDcgQEAgQ2FsbFNpdGVJbmRleCBD
YWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdAogCiBTVVBQUkVTU19BU0FOIENhbGxTaXRl
SW5kZXggQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkp
KTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVuc2FmZUNhbGxTaXRl
QXNSYXdCaXRzKCkgJiAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpID4+IEJ5
dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCkpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCkBAIC0xMTcsMzMgKzExNywzNCBAQCBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpj
dXJyZW50VlBDKCkgY29uc3QKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IElu
c3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShCeXRlY29kZUlu
ZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odnBjKSkpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAgdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50YWcoKSA9IGNhbGxT
aXRlLmJpdHMoKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVj
b2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VS
VChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCktPmJ5dGVjb2Rl
T2Zmc2V0KGN1cnJlbnRWUEMoKSk7ICAgICAKIH0KIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82
NCkKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogewot
ICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQo
Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCkt
Pmluc3RydWN0aW9ucygpLmF0KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkucHRyKCk7
CiB9CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2
cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShjb2RlQmxvY2soKS0+Ynl0ZWNvZGVJ
bmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygp
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0cygpKTsKKyAgICB0aGlzW3N0YXRp
Y19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnRhZygpID0gY2FsbFNp
dGUuYml0cygpOworICAgIEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWdu
ZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29k
ZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsK
ICAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKIH0KIApAQCAtMTY1LDggKzE2Niw4
IEBAIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1lOjpieXRlY29kZUluZGV4KCkKICAgICAgICAgcmV0
dXJuIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIH0KICNlbmRpZgotICAgIEFTU0VS
VChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKLSAgICByZXR1cm4gQnl0ZWNvZGVJ
bmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOworICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0
ZWNvZGVJbmRleCgpOwogfQogCiBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCkBA
IC0xODAsNyArMTgxLDcgQEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAg
ICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNvZGVPcmlnaW4oaW5kZXgpOwogICAgIH0KICNlbmRp
ZgotICAgIHJldHVybiBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRl
Y29kZU9mZnNldCgpKSk7CisgICAgcmV0dXJuIENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCgpLmJ5
dGVjb2RlSW5kZXgoKSk7CiB9CiAKIFJlZ2lzdGVyKiBDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRl
cm5hbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgK
aW5kZXggY2ZiNzcxODU2MDM5OTMzOTEwMDRmYzEzMjExODM4NDIzYzVkYzZhOS4uNjQ0OTBlN2E3
MDdlZWIwMWJhMDdhY2EzMzI2MjNhZGUxM2UwYzk0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29y
ZC5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oPgogCiBuYW1l
c3BhY2UgSlNDICB7CiAKQEAgLTQ2LDE4ICs0NywyNCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAogICAgICAgICBleHBsaWNp
dCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAg
IDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHsgfQorICAgICAgICAg
ICAgOiBtX2JpdHMoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkKKyAgICAgICAgeyAKKyAgICAgICAg
ICAgIEFTU0VSVCghYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworICAgICAgICB9CiAKLSAg
ICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29k
ZUluZGV4OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJ
bmRleDsgfQorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2JpdHM7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAg
ICAgdWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMo
KTsgfQorICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAK
LSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlY29kZUluZGV4OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoYml0cygpKTsgfQogCisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCisgICAgICAgICAgICA6IG1fYml0
cyhiaXRzKQorICAgICAgICB7IH0KICAgICBwcml2YXRlOgotICAgICAgICBCeXRlY29kZUluZGV4
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0ZWNvZGVJbmRl
eCgpLm9mZnNldCgpIH07CiAgICAgfTsKIAogICAgIGNsYXNzIERpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4IDogcHVibGljIENhbGxTaXRlSW5kZXggewpAQCAtNjUsNyArNzIsNyBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAgICAgICAgIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogCiAg
ICAgICAgIGV4cGxpY2l0IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCi0g
ICAgICAgICAgICA6IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cykp
CisgICAgICAgICAgICA6IENhbGxTaXRlSW5kZXgoYml0cykKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTc4LDI0ICs4NSwyNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgLy8gYXJtNjRfMzIg
ZXhwZWN0cyBjYWxsZXIgZnJhbWUgYW5kIHJldHVybiBwYyB0byB1c2UgOCBieXRlcyAKICAgICBz
dHJ1Y3QgQ2FsbGVyRnJhbWVBbmRQQyB7CiAgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIENh
bGxGcmFtZSogY2FsbGVyRnJhbWU7Ci0gICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIGNvbnN0
IEluc3RydWN0aW9uKiByZXR1cm5QQzsKKyAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikgdm9p
ZCogcmV0dXJuUEM7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNpemVJblJlZ2lzdGVy
cyA9IDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9Owog
ICAgIHN0YXRpY19hc3NlcnQoQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzID09IHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3RlciksICJDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnMgaXMgaW5jb3JyZWN0LiIpOwogCi0gICAgc3RydWN0IENhbGxG
cmFtZVNsb3QgewotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBjb2RlQmxvY2sgPSBDYWxs
ZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGNhbGxlZSA9IGNvZGVCbG9jayArIDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IGFyZ3VtZW50Q291bnQgPSBjYWxsZWUgKyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50ICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgZmlyc3RBcmd1bWVudCA9IHRoaXNBcmd1bWVudCArIDE7CisgICAgZW51bSBjbGFz
cyBDYWxsRnJhbWVTbG90IDogaW50IHsKKyAgICAgICAgY29kZUJsb2NrID0gQ2FsbGVyRnJhbWVB
bmRQQzo6c2l6ZUluUmVnaXN0ZXJzLAorICAgICAgICBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxLAor
ICAgICAgICBhcmd1bWVudENvdW50ID0gY2FsbGVlICsgMSwKKyAgICAgICAgdGhpc0FyZ3VtZW50
ID0gYXJndW1lbnRDb3VudCArIDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1l
bnQgKyAxLAogICAgIH07CiAKKyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9D
TEFTU19XSVRIX0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FEX1JFTEFUSU9O
QUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3Qp
CisKICAgICAvLyBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRp
b24uCiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9u
cy4KICAgICBjbGFzcyBDYWxsRnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyAxOworICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBoZWFkZXJTaXplSW5SZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpICsgMTsKIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBpbiB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMKICAgICAgICAg
Ly8gd2hlbiB5b3UndmUgZ3VhcmFudGVlZCB0aGUgY2FsbGVlIGNhbid0IGJlIGEgV2FzbSBjYWxs
ZWUsIGFuZCBjYW4KQEAgLTEwNiwxMCArMTE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgLy8gdG8gc2VlIGlmIGl0J3MgYSBjZWxsLCBhbmQgaWYgaXQncyBub3QsIHdlIHRocm93IGFu
IGV4Y2VwdGlvbi4KICAgICAgICAgaW5saW5lIEpTVmFsdWUgZ3VhcmFudGVlZEpTVmFsdWVDYWxs
ZWUoKSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTT2JqZWN0KiBqc0NhbGxlZSgpIGNvbnN0Owot
ICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhp
c1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KLSAgICAgICAgU1VQUFJFU1Nf
QVNBTiBDYWxsZWVCaXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHMo
dGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CisgICAg
ICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0
YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ucG9pbnRlcigpKTsgfQorICAg
ICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1
cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KV0uYXNhblVuc2FmZVBvaW50ZXIoKSk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2so
KSBjb25zdDsKLSAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKTsgfQorICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOyB9CiAgICAgICAgIGlubGluZSBTVVBQ
UkVTU19BU0FOIENvZGVCbG9jayogdW5zYWZlQ29kZUJsb2NrKCkgY29uc3Q7CiAgICAgICAgIGlu
bGluZSBKU1Njb3BlKiBzY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCkgY29uc3Q7CiAKQEAg
LTE0Niw3ICsxNTYsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgcmV0dXJuUENPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVB
bmRQQywgcmV0dXJuUEMpOyB9CiAgICAgICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhW
TSYgdm0pIHsgcmV0dXJuIEFic3RyYWN0UEModm0sIHRoaXMpOyB9CiAKLSAgICAgICAgYm9vbCBj
YWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0OworICAgICAgICBib29sIGNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdDsKICAgICAgICAgYm9vbCBjYWxsU2l0ZUJp
dHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdDsKIAogICAgICAgICB1bnNpZ25lZCBjYWxsU2l0
ZUFzUmF3Qml0cygpIGNvbnN0OwpAQCAtMTgyLDE1ICsxOTIsMTMgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICBzdGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2Vy
KENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAg
ICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJv
bSB0aGUgQ29kZUJsb2NrKS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVn
aXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZv
ciBhIG5vbi1jb25zdGFudAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAg
ICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAg
IFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNj
ZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5
IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9
Ci0gICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0
dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpOyB9CisgICAg
ICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRo
aXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5bG9h
ZCgpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoaW50IGFyZ3VtZW50KSB7
IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCArIGFyZ3VtZW50KTsgfQogICAg
ICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhpbnQgYXJndW1lbnQp
IHsgcmV0dXJuIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudCk7IH0KIApA
QCAtMjM5LDcgKzI0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBKU1ZhbHVlIGFy
Z3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCk7CiAKLSAgICAgICAgc3RhdGljIGlu
dCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAt
IDE7IH0KKyAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSB7IHJldHVybiBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KIAogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1l
KiBub0NhbGxlcigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAgICAgYm9vbCBpc0RlcHJlY2F0
ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpIGNvbnN0CkBAIC0yNTEsMTAgKzI1OSwxMCBAQCBuYW1l
c3BhY2UgSlNDICB7CiAgICAgICAgIGJvb2wgaXNTdGFja092ZXJmbG93RnJhbWUoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc1dhc21GcmFtZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVy
Kj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpID0gY291bnQ7
IH0KKyAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQp
IHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS5wYXlsb2FkKCkgPSBjb3VudDsgfQogICAgICAgICBpbmxp
bmUgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqKTsKICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q29k
ZUJsb2NrKENvZGVCbG9jayopOwotICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVl
KSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
SW5zdHJ1Y3Rpb24qPih2YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2
YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSB2YWx1ZTsgfQogCiAgICAgICAg
IFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAppbmRleCBhOTdkZWNhNTNi
Y2UxNzkyODliMGMzODBkMDRlOGYyYTg2MDQ3N2QxLi5lZTdlYzJhYjEwNGE3YTM0ZDk4YjBmNDM4
ZjY0NGMyZGNhMWM1MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMyLDUwICszMiwzOSBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoaW50IGluZGV4KQotewot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKGNv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCiBpbmxpbmUgUmVnaXN0ZXIm
IENhbGxGcmFtZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiByKHJlZy5v
ZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKGlu
dCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07CisgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpCisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZ0aGlz
LT5jb2RlQmxvY2soKS0+Y29uc3RhbnRSZWdpc3RlcihyZWcpKTsKKyAgICByZXR1cm4gdGhpc1ty
ZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2Vk
UihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZz
ZXQoKSk7CisgICAgQVNTRVJUKCFyZWcuaXNDb25zdGFudCgpKTsKKyAgICByZXR1cm4gdGhpc1ty
ZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBDYWxsRnJhbWU6Omd1YXJhbnRlZWRK
U1ZhbHVlQ2FsbGVlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsK
LSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsKKyAgICBy
ZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLmpzVmFs
dWUoKTsKIH0KIAogaW5saW5lIEpTT2JqZWN0KiBDYWxsRnJhbWU6OmpzQ2FsbGVlKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4gdGhpc1tDYWxs
RnJhbWVTbG90OjpjYWxsZWVdLm9iamVjdCgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ub2JqZWN0KCk7CiB9CiAKIGlubGluZSBDb2Rl
QmxvY2sqIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsKKyAgICByZXR1
cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lz
dGVyOjpjb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiBD
YWxsRnJhbWU6OnVuc2FmZUNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOwor
ICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KV0uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIEpTR2xvYmFs
T2JqZWN0KiBDYWxsRnJhbWU6OmxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKSBjb25zdApAQCAt
MTAyLDEyICs5MSwxMiBAQCBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OmlzV2FzbUZyYW1lKCkgY29u
c3QKIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSkK
IHsKLSAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNhbGxl
ZV0gPSBjYWxsZWU7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gY2FsbGVlOwogfQogCiBpbmxpbmUgdm9p
ZCBDYWxsRnJhbWU6OnNldENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10gPSBj
b2RlQmxvY2s7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxp
bnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldID0gY29kZUJsb2NrOwogfQogCiBpbmxpbmUg
dm9pZCBDYWxsRnJhbWU6OnNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3Bl
KiBzY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMzYTFi
ZTRmNThkYWVhODA3ZTNiYWZlZjBkNGJhMDJmZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5o
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBUIGdldFRtcChzaXplX3Qgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50NjRfdCkpCisgICAgICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFQ+KHRtcHNbb2Zmc2V0XSk7CisgICAgICAgIGVsc2UgaWYgY29uc3Rl
eHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOworICAg
ICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MTZfdCkpCisg
ICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih0
bXBzW29mZnNldF0pKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihUKSA9PSBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50OF90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICB2b2lkKiBu
ZXh0SW5zdHJ1Y3Rpb25KdW1wVGFyZ2V0OworICAgIHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hlY2tw
b2ludFRtcHNdOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZGFhOTRjODlmOTAwNWE5OTcyZmMwZTNiMDJlYjg5
M2QyMTFjZGQ5Ny4uMWQ5ZGRjM2I1MzRlOTA5MmU4ZTExNzhiM2ExNjgxNWRmNjk5NjU5OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcg
KzEyNCw3IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9
IGNhbGxlckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2Nv
cGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVS
ZWdpc3RlcigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxs
ZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5z
Y29wZVJlZ2lzdGVyKCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2Nr
KiBjYWxsZXJVbmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlu
a2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9j
ay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVk
IHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1
bWVudHMsIHVpbnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OwogICAgIAorICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+
PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0
OwogICAgIGVsc2UKQEAgLTI0OSw3ICsyNTMsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJh
cmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAog
ICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJz
dEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJf
dCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBv
ZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5p
c0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUsMzEg
QEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewog
ICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgp
OworICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50
cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlU
b0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zm
c2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBl
OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1
dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1t
dXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZp
cnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBk
ZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYg
KGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAg
ICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFs
T2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsg
KytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpXSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAg
ICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
b2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnRE
ZXN0W2ldID0gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAt
Mjk3LDggKzMwMSw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZh
cmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAg
ICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAg
ICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNl
dCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBv
ZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsKQEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGljOgog
ICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1f
aGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5n
IGluIGNoZWNrcG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1f
cmV0dXJuUEMgPT0gJmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlw
b2ludCkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9T
UlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rl
cm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhh
bmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7
CiAgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAgLTU2MSw2ICs1NjksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6RG9uZTsKIAorICAgICAgICBtX3JldHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBD
KCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAg
fQogCkBAIC01OTcsNiArNjA2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlv
bjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFu
ZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZvaWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9
OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZt
LCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY2LDcg
Kzg3Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2Nv
cGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlz
U2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vy
c2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKQogICAgICAgICByZXR1cm4g
Y2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUpKTsKIAogICAgIGlmIChpc0pTQ2FsbCkgewpAQCAtOTM1LDcgKzk0NSw3IEBAIEpTT2Jq
ZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNPCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUo
dm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VT
b2Z0KCkpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwg
YXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmgKaW5kZXggODZjMzI0NjkyMDRlOWFlNTkxMWZlY2VhOTAyYWU5N2NhYjU1ZDNhMC4uZmYx
YjRlODYxMDRjOTYyNTk3NzllMjUyNzkyMmFmMzM0N2NmMjk0NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFyZ3Vt
ZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51
bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWdu
ZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1
ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgp
OwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVl
LCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBkNzFhNTk3MWRkYzhmMGY1ZWE2NzhkNWZjZTQ4
ZTM5NmUyMmE4NzU0Li44MThmNGRiMmI2N2RlMzkzYTE3OTg0ZGQ1MDY4YTg0MmQyMWZiMDUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZy
YW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAgICAg
IG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxp
bmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2ZyYW1l
Lm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAg
ICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1l
LT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIo
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
ICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVD
b2RlQmxvY2suZ2V0KCk7CkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZy
YW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwgV1RGOjpGdW5jdGlv
bjwKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiAhaXNJbmxpbmVkKSB7CiAgICAgICAgICAgICBp
bmRlbnQrKzsKIAotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJlQnl0
ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRz
QXJlQnl0ZWNvZGVJbmRleCgpKSB7CiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KGluZGVudCwgYnl0ZWNvZGVJbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyMjAwOWM1ZmQyYmEyMjdk
NDdjZmU4NTQ5MzlmNTJkZWYyZDcxYmMyLi5lMDZjYjQ5YjI5NWRlNWVjN2MxOWRiMjRlNzMzODli
YTM1NWVkZWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTY0NywyOCArNjQ3LDI4IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQ
UlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywg
R1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCB0byk7CiAgICAgfQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoVmlydHVhbFJl
Z2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNp
emVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoaW50IGVudHJ5LCBH
UFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAg
dm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KFZpcnR1YWxSZWdpc3RlciBlbnRyeSwg
R1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAg
IHsKLSAgICAgICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgdG8pOworICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0g
ICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSUmVnIGZyb20sIGludCBlbnRyeSkK
KyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
ICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCisgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwog
ICAgIH0KIAogICAgIHZvaWQgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0
cihSZWdpc3RlcklEIHRvKQpAQCAtNjk2LDE5ICs2OTYsMTkgQEAgcHVibGljOgogICAgIC8vIGNh
bGxlcidzIGZyYW1lIHBvaW50ZXIuIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVlIGlzIHJl
c3BvbnNpYmxlIGZvciBwdXNoaW5nIHRoZQogICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBjb250YWlu
aW5nIHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xv
Z3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQog
ICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJv
bG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkp
OwogICAgIH0KICNlbHNlCi0gICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVy
QmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRQ
YXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBz
dG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQo
KSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0
YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxs
RnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCisg
ICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVk
SW1tMzIgdGFnLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0
cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEo
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OworICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTE0
OCw5ICsxMTQ4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5p
c1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAg
fQotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGlj
IEFkZHJlc3MgYWRkcmVzc0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVz
cyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIp
CkBAIC0xMTYzLDkgKzExNjQsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJl
Z2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVy
YW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICByZXR1cm4gdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFu
ZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiB0
YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFk
ZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcg
YmFzZUdQUikKQEAgLTExNzgsMzAgKzExODAsMzEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
dmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBh
eWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlz
VG1wKCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpKTsKICAgICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJh
bWUuCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KGludCBzbG90KQorICAgIHN0
YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChzbG90ID49IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cyk7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yo
UmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpKTsK
KyAgICAgICAgQVNTRVJUKHNsb3Qub2Zmc2V0KCkgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycykub2Zmc2V0KCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2Fs
bGVlIENhbGxGcmFtZS4KICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50
IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOworICAgICAgICByZXR1cm4g
Y2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQor
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xv
dCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNl
dChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5
bG9hZFNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2Fk
U2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVG
cmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CkBAIC0xMjE4
LDcgKzEyMjEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZUNh
bGxlckZyYW1lKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoMCkud2l0
aE9mZnNldChDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOworICAgICAgICByZXR1cm4g
Y2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlcigwKSkud2l0aE9mZnNldChDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0
U2NyYXRjaEdQUihSZWdpc3RlclNldCBwcmVzZXJ2ZWQpCkBAIC0xNTI3LDcgKzE1MzAsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpOworICAgICAgICAgICAgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7
CiAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5jcHAKaW5kZXggOTY5MGUwOWM4YjU3MjcwZGVmN2Y4N2E0NmNjMmI1N2U0Zjc2MjAzZS4uMzk1
ZDkxMzNiY2Q5NDA3NTNmODg4MGI5ODM3YjVjNjRkNGM1NjQyMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAg
Q2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBDYWxsRnJhbWVTaHVmZmxlRGEKICNlbmRpZgogCiAgICAgQVNTRVJUKCFkYXRhLmNhbGxl
ZS5pc0luSlNTdGFjaygpIHx8IGRhdGEuY2FsbGVlLnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwo
KSk7Ci0gICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBk
YXRhLmNhbGxlZSk7CisgICAgYWRkTmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgZGF0YS5jYWxs
ZWUpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgQVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRhLmFy
Z3NbaV0udmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAppbmRleCA2MjQzOWJkZjM0NDNiODdiZTk5OTYw
MmZkOWMzZWJjOTZhZjZhOWY1Li40YzZhYTMyZjRmNTg3NjM4MzEwOTM4ZjAwZjkyYzA5OThkNjZm
OTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5o
CkBAIC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVW5k
ZWNpZGVkKCkpOwogICAgICAgICBBU1NFUlQoIWdldE5ldyhqc1ZhbHVlUmVncykpOwotICAgICAg
ICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpIH07CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNo
ZWRSZWNvdmVyeSB7IGdldE5ldyhDYWxsRnJhbWVTbG90OjpjYWxsZWUpIH07CiAgICAgICAgIEFT
U0VSVChjYWNoZWRSZWNvdmVyeSk7CiAgICAgICAgIGFkZE5ldyhqc1ZhbHVlUmVncywgY2FjaGVk
UmVjb3ZlcnktPnJlY292ZXJ5KCkpOwogICAgIH0KQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhc3N1bWVDYWxsZWVJc0NlbGwoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0
TmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5ldyhDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOwogICAgICAgICBzd2l0Y2ggKGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBJblBhaXI6CiAgICAgICAgICAgICB1cGRh
dGVSZWNvdmVyeSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDI4MDMyYTIxYWFjYjlhMmQ5
MzIyODVmZTFmOTY1YWRlM2UyN2E4MGEuLjg3MzE1ZWY4NDc3YWMxMmE3M2M1NzBhZWY5MTI1MGM1
NjlhNGYxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMzMxLDE2ICszMzEsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFz
cyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07CiAgICAgICAgIHZvaWQgY29tcGlsZU9wRXFK
dW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBl
LCBpbnQganVtcFRhcmdldCk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
aW50IHNyYyk7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoaW50IGluZGV4
LCBGUFJlZ2lzdGVySUQgdmFsdWUpOwotICAgICAgICB2b2lkIGVtaXRMb2FkSW50MzJUb0RvdWJs
ZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lk
IGVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSk7CiAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJy
aWVyIGlzIHVzZWQgYmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBt
YXkgc2FmZWx5IGJlIHRoZSBzYW1lIGFzIGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMu
Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
SlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOworICAgICAg
ICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOwogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKQEAgLTQwNCwzMiArNDA0LDMyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVG
aW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKKyAgICAgICAgdm9pZCBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7
CisgICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBKU1ZhbHVlUmVncyBzcmMpOwogCi0gICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50
SW50KGludCBzcmMpOwotICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGlu
dCBzcmMpOworICAgICAgICBpbnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKTsKKyAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgc3JjKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGJvb2wg
Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3Qm
IGNvbnN0YW50KTsKKyAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3Rh
bnQpOwogCi0gICAgICAgIHZvaWQgZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRh
Zyk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHBheWxvYWQpOwogCiAgICAgICAgIHZvaWQgZW1pdExvYWQoY29uc3QgSlNW
YWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIHZv
aWQgZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwg
aW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3Rl
cklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lz
dGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3Rl
cklEIHBheWxvYWQyKTsKIAotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1Zh
bHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJv
b2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGlu
dCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2Up
OwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQm9v
bChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNl
KTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQg
dmFsdWUpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBK
U1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBh
eWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9y
ZUludDMyKFZpcnR1YWxSZWdpc3RlciwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJ
c0ludDMyID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCi0gICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7Ci0g
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAg
ICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7CiAKQEAgLTQz
OCwxNyArNDM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRCaW5hcnlE
b3VibGVPcChjb25zdCBJbnN0cnVjdGlvbiAqLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJ
bnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0
cnVlLCBib29sIG9wMklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAogI2Vsc2UgLy8gVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJl
Z2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0
ZXJJRCBkc3QyKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVn
aXN0ZXJJRCBkc3QyKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBk
c3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsK
LSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKGludCBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVn
aXN0ZXJJRCBwYXlsb2FkKQorICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVl
MzJfNjQgKi8gPSBmYWxzZSkKICAgICAgICAgewogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHBheWxvYWQpOwogICAgICAgICB9CkBAIC00NTYsMjkgKzQ0OSwyOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmSlNDZWxsKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCwgaW50IFZSZWcpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBK
dW1wIGVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKTsKICAgICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50
KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdp
c3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0
ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQs
IFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKLSAgICAgICAgdm9pZCBjb21waWxl
R2V0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CisgICAgICAg
IHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKFZpcnR1YWxSZWdpc3RlciBiYXNlUmVnLCBjb25z
dCBJZGVudGlmaWVyKik7CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJ
bXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRp
dGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQg
b3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKQEAgLTY4NSw4ICs2NzgsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2
b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwor
ICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJh
bmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
SlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC02OTQsMjAgKzY4NywyMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1Zh
bHVlKiogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwogICAgICAgICB2b2lk
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJS
ZWcgcGF5bG9hZCk7CiAjZW5kaWYKLSAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXROb3Rp
ZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Ci0g
ICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKLSAgICAgICAgdm9pZCBl
bWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNW
YWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Cisg
ICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKKyAg
ICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAot
ICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CisgICAgICAgIHZvaWQgZW1p
dEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dElu
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAg
dm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogCi0gICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMp
OwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpOwotICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKTsKKyAgICAgICAgSlNWYWx1ZSBnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVFVu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rp
b24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwpAQCAtNzM0LDcgKzcyNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwogICAgICAgICAg
ICAgKytpdGVyOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGludCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCk7CisgICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgbGlu
a0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsCiAgICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7CiAKQEAgLTc1NCwxMyArNzQ3LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4pOwogI2VuZGlmCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAg
c3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0
LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBB
cmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJh
dGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTgwNCw3
ICs3OTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAg
ICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1
bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVu
dHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODY0LDcgKzg1Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJh
bmRUeXBlcyhpbnQgc3JjMSwgaW50IHNyYzIpOworICAgICAgICB2b2lkIHByaW50Qnl0ZWNvZGVP
cGVyYW5kVHlwZXMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggMzQ1ODc0NGZiY2RkNTNhY2Y5YTQzMzI4
YmM0OTRiMGZlZGNiODkzZi4uM2EzMmMzMjYxODlmYWIxOTdkN2NmOWY5MWQ1ZjZiNGIzMTAyMDJj
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC0x
NTgsOCArMTU4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamJlbG93ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCk7CkBAIC0xNzIsMTMgKzE3MiwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICAv
LyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUg
ZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCkBAIC0yMzAsMTMgKzIzMCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CkBAIC0yNTYsMTMgKzI1NiwxMyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGRzdCwgb3AxLCBv
cDIsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwo
aW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CkBAIC0yODQsMTMg
KzI4NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9m
ZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRp
b24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3Jj
RHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+
KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKQEAgLTQxNSw5ICs0MTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3Ig
eDg2IElESVYgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6
OmVheCk7CkBAIC00OTEsOSArNDkxLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNuaXBwZXRHZW5lcmF0b3I+CiB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHByb2Zp
bGluZ1BvbGljeSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01Mzgs
OCArNTM4LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGkKIHZvaWQgSklUOjplbWl0X29wX2Jp
dG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIGludCBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKQEAgLTU5OSw5ICs1OTksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNoaWZ0VHlwZSBzbmlwcGV0U2hp
ZnRUeXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTY3NCw4ICs2
NzQsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Q
cm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0
aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KQEAgLTcyNCw5ICs3MjQsOSBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5j
dGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKQEAgLTc5OSw3ICs3OTksNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHNy
Y1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC04NDUsOSArODQ1LDkgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKgogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTkwNiw5ICs5
MDYsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRl
eCBiZjIzMDZiY2U0ZDU2ZjEwOWEwMzYxOGIzNDA3MmZjNTdjMGU1YWMzLi5hZjllZWI2Mjc5Y2Nl
NGQxMWI5MzRhZTFmMWI1YzZlNGQ2NzIyZjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CkBAIC02Niw3ICs2Niw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qKQogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNf
Y2FzdDxpbnQ+KGJ5dGVjb2RlLm1fYXJndik7CiAKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9w
X2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVk
aW5nVGhpcygwKSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNs
dWRpbmdUaGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDApOwogICAgICAgICBzdG9yZTMyKHJlZ1QwLCBtZXRhZGF0YS5t
X2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlE
KCkpOwpAQCAtODUsOSArODUsOSBAQCBzdGQ6OmVuYWJsZV9pZl90PAogLCB2b2lkPgogSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykK
IHsKLSAgICBpbnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7Ci0g
ICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOwotICAgIGlu
dCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CisgICAgaW50
IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7IC8vIEZJ
WE1FOiBXaHkgaXMgdGhpcyBhIHZpcnR1YWwgcmVnaXN0ZXIgaWYgd2UgbmV2ZXIgdXNlIGl0IGFz
IG9uZS4uLgogICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJB
cmc7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDEpOwpAQCAt
MjA2LDcgKzIwNiw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiB7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogCiAgICAg
LyogQ2FsbGVyIGFsd2F5czoKICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRv
IGNhbGxlZSBjYWxsRnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcAppbmRleCBiN2QwY2EyMzU4YmU1MjUwMThhM2Y0ZTk2MTZkOWNiODQ4ZmZmNTIxLi5l
MDdhODMzZDRjODUzYjljN2EwMmRlOGI3NDYwMWRmMzA2NmJhZTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBn
ZW5lcmljVW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKE9wdGlv
bnM6OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdG9w
SlNDYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1l
ICIsIFJhd1BvaW50ZXIodG9wSlNDYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsIGNvZGVC
bG9jaywgIlxuIik7Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFdURkJyZWFrcG9pbnRUcmFw
KCk7CiAgICAgfQogICAgIAogICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93
Q2hpY2tlbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCAyMjE0
OWM5YmQxYjhlYzExODEyY2JlMGI4NTQxYmVlOTNiMTBhYjM0Li5jNjZjMWIxMTkwMzY4NTFjMjcy
ZDBkOGEyNGViZTM5ZTMxMTc2NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaApAQCAtNDgsMTkgKzQ4LDIwIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IEpJVDo6ZW1pdExvYWRGb3JBcnJheU1vZGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3Rh
bnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYykKK0FMV0FZU19J
TkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3Jj
KSk7CisgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwogICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogeworICAgIEFTU0VSVChlbnRyeS5pc0hlYWRl
cigpKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGVudHJ5KSk7CiAgICAgc3RvcmUzMihmcm9tLCBwYXls
b2FkRm9yKGVudHJ5KSk7CkBAIC0xNDMsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGkKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTE1NSw3ICsxNTYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CkBAIC0xNjcs
OSArMTY4LDkgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bk5vdEltbWVkaWF0ZShyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9
CiAKQEAgLTI4NCw5ICsyODUsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVDb2Rl
QmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAjZW5kaWYKICNlbmRpZgogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYykKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFz
U3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsK
IH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlKQpAQCAtMzYzLDI2ICszNjQsMjYgQEAgaW5saW5lIEpJVEFycmF5TW9k
ZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiAgICAgcmV0dXJu
IEpJVENvbnRpZ3VvdXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBkb3VibGUg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgZG91
YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7
CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwog
fQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRh
ZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRh
ZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXND
b25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4
KS50YWcoKSksIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTAsOSArMzkxLDkg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFn
KQogICAgIGxvYWQzMih0YWdGb3IoaW5kZXgpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
cGF5bG9hZCkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTQwNiwxMzYgKzQwNywxMzMgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkKQogICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3Mg
ZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
LCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRz
dC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFs
dWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5w
YXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGludCBpbmRleCwg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRh
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQodGFnICE9IHBheWxvYWQpOwogCiAgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0
ZXIpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAg
ZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcoaW5k
ZXgsIHRhZyk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChyZWcsIHBheWxvYWQpOworICAgICAg
ICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKICAgICBpZiAocGF5bG9hZCA9PSBiYXNl
KSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQs
IGJhc2UpLCB0YWcpOwotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBw
YXlsb2FkKTsKKyAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQp
OwotICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKKyAgICBsb2FkMzIocGF5
bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFz
ZSksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKGludCBpbmRleDEsIFJl
Z2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJ
RCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIo
VmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2Fk
MSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXls
b2FkMikKIHsKLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAgICBlbWl0
TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKKyAgICBlbWl0TG9hZChyZWcyLCB0YWcyLCBw
YXlsb2FkMik7CisgICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVl
KQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBG
UFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGlu
Q29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAg
ICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOwor
ICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdp
c3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5k
ZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihy
ZWcpOwogICAgICAgICBjaGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KCZpbkNvbnN0YW50UG9vbCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRl
QWRkcmVzcyhieXRlUG9pbnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocGF5bG9hZEZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocGF5bG9hZEZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0
b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0
ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQog
ewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9y
KHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJh
c2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBi
b29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsK
LSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwg
VHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1tMzIgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlm
ICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXND
ZWxsKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKLSAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQs
IGJvb2wgaW5kZXhJc0Jvb2wpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQogewot
ICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNCb29sKQotICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdG
b3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKGludCBpbmRl
eCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIHN0b3JlRG91
YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7CisgICAgc3RvcmVEb3VibGUodmFsdWUsIGFk
ZHJlc3NGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRl
eCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFu
dCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRl
eCB9OwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcih0
YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9y
KHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwg
cGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygp
KSwgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewog
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVy
SW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7CiAg
ICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2
aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRhZykpOwogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAg
ICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0lu
dDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudElu
dChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBjb25zdGFudCA9IGdl
dENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTsKQEAgLTU1NSwxMSArNTUzLDExIEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQg
b3AyLCBpbnQmIG9wLCBpbnQzMl90CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBn
ZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cg
cmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgZHN0KTsKQEAgLTU3MSw0NyArNTY5LDMyIEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgbG9hZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCksIGRzdCk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGlu
dCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJ
RCBkc3QyKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJl
Z2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLm9mZnNldCgpLCBkc3QxLCBzcmMyLm9m
ZnNldCgpLCBkc3QyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
SW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdp
c3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3Qs
IEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3Qub2Zmc2V0KCksIGZyb20pOwotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVn
aXN0ZXJJRCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC02MjksMjgg
KzYxMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
ZykpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0
ZXIgdlJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZS
ZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBp
bkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAg
ICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsK
KyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5l
IHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQg
dmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgQVNTRVJUKGlzT3BlcmFu
ZENvbnN0YW50SW50KGluZGV4KSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChy
ZWcpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKHJlZykuYXNJbnQzMigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAogQUxXQVlTX0lOTElO
RSBKSVQ6OlBhdGNoYWJsZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lz
dGVySUQgcmVnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXgg
N2NmYTA5NWYwMGQxN2UxNDExYmU5Y2ZiODBmODA4MDZmNzg4ZjZjMS4uNjI2MzJkYTg0YWZlZjk3
ODIxMTkwM2M0ODZkMjE5YTFlOWE3ZTVhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVj
b2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAg
ICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRy
ZXNzRm9yKGRzdCkpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChy
ZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CiAgICAgcmV0KCk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1
cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0
cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKQEAgLTEyOSw5ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hh
c0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1f
Y29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0
ZWNvZGUubV9wcm90b3R5cGU7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwg
cHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdl
IHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZp
cnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2LDcgKzE4
Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0
YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlZ1QwKTsKQEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19l
bXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVm
aW5lZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKQEAgLTI0Niw4
ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAK
QEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CkBA
IC0yNzQsOCArMjc0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAg
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHRlc3Q2NChO
b25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4ICsyODYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAg
aW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAg
LTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXgu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fc3JjOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
ICAgICAKQEAgLTM2MCwxNSArMzYwLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRG
dW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3Qg
SlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhl
biBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzkwLDE0ICszOTAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwg
dmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgaW50
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBKU1ZhbHVlIHNw
ZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIub2Zmc2V0KCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OworICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgp
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCkBAIC00ODUsMTggKzQ4NSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MTAsMjYg
KzUxMCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwg
cmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VS
VChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFu
ZGxlcih2bSgpKTsKIH0KQEAgLTU0OCw5ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9y
aHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVn
VDEpOwogICAgIApAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
aW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAg
IGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNy
YzIsIHJlZ1QxKTsKIApAQCAtNjUwLDggKzY1MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvTnVtYmVyPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihyZWdUMCkpOwpAQCAtNjY0LDggKzY2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1l
cmljPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKQEAgLTY4NCwyMCArNjg0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0g
ICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkp
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9P
YmplY3Q+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CkBAIC03MjgsMTAgKzcyOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zm
c2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uKTsKIAogICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlLm9mZnNl
dCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUp
OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBj
YWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCkBAIC03Mzks
NyArNzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlP
U1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVs
c2UKQEAgLTc0OSw3ICs3NDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwog
ICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBw
cm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAg
ICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUm
Pihwcm9maWxlKSk7CkBAIC03NjYsMTAgKzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50
U2NvcGU+KCk7Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwot
ICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBl
bWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBi
eXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAg
IHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3ICs3OTQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU3dpdGNoQ2hhcj4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFi
bGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0
cmluZz4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsK
ICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0
aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAg
ICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMx
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtODY3LDggKzg2
Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihj
b25zdCBJbnN0cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
CiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdElu
aXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7CisgICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCiAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1
cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVn
VDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIApAQCAtOTM3
LDcgKzkzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUu
bV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9
ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJl
Z1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2NSwxMyArOTY1
LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVj
dHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAgLTk4NSw3ICs5
ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zm
c2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNl
VmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTA0LDggKzEx
MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNv
ZGUubV9yZWdleHAub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQpAQCAtMTExNSwxMiArMTExNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxh
enlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vs
c2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9u
RGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNjEsMTEgKzExNjEsMTEgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKQEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlc0luZGV4ID0gYnl0ZWNvZGUu
bV9hcmd2Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAg
ICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2
YWx1ZXNJbmRleCAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjE5LDggKzEyMTksOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjM2LDkgKzEyMzYsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0
eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjgyLDkgKzEyODIsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5Pigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAt
MTM0OSwxMCArMTM0OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CkBAIC0xMzkwLDkgKzEzOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGly
ZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRh
ZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUwOSw3
ICsxNTA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFS
ZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIu
CiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCBy
ZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
Myk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTUyMyw4ICsxNTIzLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBU
aGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gy
UmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQ
YWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJl
Z1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkp
OwogfQogCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDApOwogICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpT
VmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwpAQCAtMTU1Niw3
ICsxNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xl
bmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5
dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwpAQCAtMTU4Niw3ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEFyZ3VtZW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDApOwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVn
VDIpOwogICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSwgcmVzdWx0UmVncyk7Cisg
ICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBhZTViNmFkNTRjYTgxMzZl
Y2FjMWI2NDExYzk1NzM0MzBlNWMxZjdhLi5jNDYzNzlhOWY5ZWNjYWU3NDRhOGU3YWM4MDg1NTFm
ZWJmMmZhNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCkBAIC05MzMsNyArOTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlm
IChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNC
aXRzKCkpOwogICAgIGVsc2UKQEAgLTk0Myw3ICs5NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsK
ICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMSwgcmVnVDApOwog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVn
cyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVl
UHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDNiNDg1MGZhYjhkNmZhZTkzMGU5ZTg2OTNjNDRiYmY0YTFlNDM5M2Qu
LjhjYjU1ZmI1YjdlZjg1ZjBhYzExOWYyMmVlMmFkMTkxYWMxOTA0NGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMTY1NCwxOCArMTY1NCwxOCBA
QCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShWTSog
dm1Qb2ludGVyLCB1aW50MzJfdCBieXRlYwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSkKICAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVk
IGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwogCi0gICAgICAgIHVuc2lnbmVk
IG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyA9
IDA7CiAgICAgICAgIGlmIChieXRlY29kZUluZGV4KQogICAgICAgICAgICAgbnVtVmFyc1dpdGhW
YWx1ZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Ci0gICAgICAgIE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBu
dW1WYXJzV2l0aFZhbHVlcyk7CisKKyAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+
IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRo
VmFsdWVzLCAwKTsKICAgICAgICAgaW50IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcyA9IHN0YXRp
Y19jYXN0PGludD4oQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5k
bGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBpZiAob3BlcmFuZElz
TG9jYWwob3BlcmFuZCkgJiYgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSA8IGxv
Y2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworCisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVl
U2F2ZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtdXN0SGFuZGxl
VmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAg
ICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAg
Q29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKTsKQEAgLTE3ODMsNyArMTc4Myw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKFZNKiB2bVBvaW50ZXIsIHVpCiAgICAg
Y29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1l
dGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgp
KTsKICAgICB9KTsKIApAQCAtMTkwNyw4ICsxOTA3LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qgc2Nv
cGUKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogCi0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVS
ZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJl
ZykgPSBzY29wZS0+bmV4dCgpOworICAgIGF1dG8mIHNjb3BlU2xvdCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoc2NvcGVSZWcpKTsKKyAgICBzY29wZVNsb3QgPSBzY29w
ZVNsb3QuUmVnaXN0ZXI6OnNjb3BlKCktPm5leHQoKTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU09iamVjdCogY29uc3RydWN0b3IsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5jZSkKQEAgLTI0MTYsNyArMjQxNiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RnJvbVNjb3BlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KSkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBH
ZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2dl
dFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgaXMgYWx3YXlzIGNvbnZlcnRlZCB0byBDbG9z
dXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KQEAgLTI0NTksOCArMjQ1OSw4IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IEluc3RyCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxK
U09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgp
KS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2Fz
dDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1Zh
bHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1
ZSkuanNWYWx1ZSgpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dl
dFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgZG9lcyBub3Qga2VlcCB0aGUgc2NvcGUgcmVn
aXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZHLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBhYjk5ZmQ5ODdiMDYxZjJlNzZhMTdjMjhiZThj
NGU3MjY1YTJkODE1Li5lNzI5ZmMwNThlYzY4ZWMxMWYzMmQ1NzA3ODliNzdhMDk3NWQyNmYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApA
QCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHsKICAgICBpZiAo
aGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCkBAIC0xMTcsOCArMTE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAK
QEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yMDgs
NyArMjA4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5
VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWQKICAgICB9CiAgICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMjM1LDcgKzIz
NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKQEAgLTI0OSw3ICsyNDksNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogICAgIExhYmVs
IHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmll
cihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlz
KTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5
VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogICAgIC8vIHBy
b3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCiAKLSAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGVtaXRCeVZhbElkZW50
aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCByZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2Fz
ZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQ
dXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
Ym9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKLSAgICBpbnQgYmFzZTsKLSAgICBpbnQgcHJvcGVydHk7Ci0gICAgaW50
IHZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAKICAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Ci0g
ICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICAgICAgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKQEAgLTMzNywzNiArMzM3LDM2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZ2V0dGVyLm9mZnNldCgpLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NldHRlci5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwpAQCAtMzc1LDE4ICszNzUsMTggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIocHJvcGVydHkpLmltcGwoKSk7CkBAIC0zOTUsOSArMzk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKQEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ0NSw4ICs0NDUsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
LSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CkBAIC00ODUsOCArNDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MTMsOSArNTEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAg
LTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKQEAgLTU3MSw4ICs1NzEsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGludCBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgYm9vbCBkaXJlY3QgPSAhIShieXRlY29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGly
ZWN0KTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3Ry
dWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLApAQCAt
NjE1LDggKzYxNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4Kytd
OwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQordm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNjcwLDggKzY3
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0
YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApAQCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90KQogewogICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJl
ZyByZWcpCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xv
c3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQordm9pZCBKSVQ6OmVtaXRHZXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCiB7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKQEAgLTgwMCw4ICs4MDAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9w
ZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVy
YW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSog
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXROb3RpZnlX
cml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKIH0KLXZvaWQgSklUOjpl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQordm9pZCBK
SVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNo
cG9pbnRTZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7CkBAIC05MzgsNyArOTM4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFcKICAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4ICs5NTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsxMDg2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IK
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwpAQCAtMTA5OSw5ICsxMDk5LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBpbnQgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAtMTExMCw3ICsxMTEwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUpIHsKQEAgLTExMzMsNyArMTEzMyw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
CiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwpAQCAt
MTE1MCw4ICsxMTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7CkBAIC0xMTY0LDggKzExNjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CkBAIC0xMTc2LDcgKzExNzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50
ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2Vs
c2UgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWdu
ZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxs
OwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTk5LDcgKzExOTksNyBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1
bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CkBA
IC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZQogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNJ
bnQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CkBAIC0xNTAxLDcg
KzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeQogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCAyY2Y5MTk4ZjQwZWRhYWY1M2E2MWRiZjMz
OTBhNmM3ZGIyODZhNWMxLi5mYTVkMGFhYjRhNWQ4MTJkZTAxMWIzNmQ1NGMzM2MwODBkN2Q5ZDVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC00NSwx
OCArNDUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZElu
dDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCk7Ci0gICAg
ICAgIGlubGluZSBKdW1wIGVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOworICAgICAgICBpbmxp
bmUgSnVtcCBlbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9h
ZCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEIGRzdCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0Nl
bGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICBpbmxpbmUgSnVtcCBl
bWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAjZW5kaWYKIAotICAgICAgICB2
b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0
bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkp
OwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9t
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZv
aWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwogCiAgICAgICAgIFZNKiB2bSgpIGNv
bnN0IHsgcmV0dXJuIG1fdm07IH0KIApAQCAtNjQsMzYgKzY0LDM2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIH07CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlubGluZSBKU0ludGVyZmFj
ZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVh
bFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICBpbmxpbmUgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCkKICAgICB7Ci0gICAgICAgIGxv
YWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHBheWxvYWQpOwotICAgICAg
ICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBwYXlsb2FkKTsKKyAgICAg
ICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAK
LSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1w
SWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgaW5saW5lIEpT
SW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1
YWxSZWdpc3RlckluZGV4KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICB9CiAgICAgCi0gICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwg
dGFnRm9yKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIg
PCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1
YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJl
Z2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNl
SklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAg
ICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGxvYWRQdHIodGFnRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFs
UmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIo
dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIGlzRG91Ymxl
ID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9h
ZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKHBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAg
ICAgICAgaXNEb3VibGUubGluayh0aGlzKTsKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAg
ICAgICAgcmV0dXJuIG5vdEludDsKICAgICB9CkBAIC0xMDEsMjMgKzEwMSwyMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpbmxpbmUgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkNjQo
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICByZXR1cm4gYnJhbmNo
SWZOb3RDZWxsKGRzdCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6
SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1w
IEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBKdW1wIG5vdEludDMyID0gYnJhbmNoSWZO
b3RJbnQzMihkc3QpOwogICAgICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihkc3QsIGRzdCk7CiAgICAg
ICAgIHJldHVybiBub3RJbnQzMjsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6
Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdp
c3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgSnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5v
dE51bWJlcihzY3JhdGNoKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMy
KHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwpA
QCAtMTI5LDI2ICsxMjksMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklE
IGZyb20pCiAgICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9y
ZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIHBh
eWxvYWRGb3IoZW50cnkpOwogI2Vsc2UKICAgICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9y
KGVudHJ5KSk7CiAjZW5kaWYKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5
KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogICAg
ICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkpOwog
ICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCB0YWdGb3IoZW50cnkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
ZXR1cFZhcmFyZ3NGcmFtZS5jcHAKaW5kZXggMzg4NzMwNTJkMTI4NTJmYzZiYjkxNDJkNDU2MDdh
ZThlMTlhNjcwYS4uMGJhNzNlZjhjMTM0ZWJiYmQxZDA0YTRiMTcyMTRmNGZhNzM1MTgzYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKQEAg
LTEyOCw3ICsxMjgsNyBAQCB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKFZNJiB2
bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdAogICAgICAgICAgICAgZmly
c3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcigwKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBhcmd1bWVudENvdW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3Rh
Y2soCi0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCksIERhdGFGb3JtYXRJbnQzMik7CisgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50LCBEYXRhRm9ybWF0SW50MzIpOwogICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0g
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpOwogICAgIH0KICAg
ICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSh2bSwgaml0LCBudW1Vc2VkU2xvdHNHUFIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNv
dmVyeSwgZmlyc3RBcmd1bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKaW5kZXgg
NGY1NjdkMDZhZWE1NDRhYjI2NzE1NWMxM2RmMzZhNzI0OWI2YzM0My4uOTMzY2E5YmUxMDJlMGVk
Zjk0YmI0ZWFlODI4MjE0ODIyOWM4MjZmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKQEAgLTU1LDEzICs1NSwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZERvdWJsZUFyZ3VtZW50KGludCBhcmd1
bWVudCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0
TG9hZERvdWJsZShzcmMsIGRzdCwgc2NyYXRjaCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIGxvYWRDZWxsQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCkK
ICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJl
cy5hcHBlbmQoZW1pdExvYWRKU0NlbGwoc3JjLCBkc3QpKTsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGxvYWRJbnQzMkFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZh
aWxUYXJnZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAg
IGZhaWxUYXJnZXQgPSBlbWl0TG9hZEludDMyKHNyYywgZHN0KTsKICAgICAgICAgfQogICAgICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRl
eCA1MjQxZTVmN2NjMzMyYTY0ZTBkZTZkYjQ0YmRhZjllOGU4MGYyMmFhLi5jMzc2ZGJlMmNkN2Q2
ZGQzZmE1NDg3YjU3YjU4OTQ3ZjZkZmJhMzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC0xMDMyLDggKzEwMzIsOCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFic1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKICAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7Ci0gICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDApOworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKICAgICBhdXRvIG5vdEludGVnZXIgPSBq
aXQuYnJhbmNoSWZOb3RJbnQzMihHUFJJbmZvOjpyZWdUMCk7CiAKICAgICAvLyBBYnMgSW50MzIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRl
eCAzNTdhNDZlOGU1Nzg5N2YyNzg1Y2QzMzlmY2JlMmJjMGM5MGNlZGIyLi5mNjIxMzFjNzM3MWQ2
MzQ1MWFkOWVhOTgwMmZjMjZlY2I2Zjg4MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJB
cnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5o
IgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC05OCw4ICs5OSw4IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgTExJbnQgewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOyAgICAg
ICAgICAgICAgICAgICAgXAogICAgIExMSU5UX1NFVF9QQ19GT1JfU1RVQlMoKQogCi1pbmxpbmUg
SlNWYWx1ZSBnZXROb25Db25zdGFudE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0
IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQotaW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFu
ZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7
IHJldHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Citpbmxp
bmUgSlNWYWx1ZSBnZXROb25Db25zdGFudE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3Bl
cmFuZCkuanNWYWx1ZSgpOyB9CitpbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5y
KG9wZXJhbmQpLmpzVmFsdWUoKTsgfQogCiAjZGVmaW5lIExMSU5UX1JFVFVSTl9UV08oZmlyc3Qs
IHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZmlyc3Qs
IHNlY29uZCk7ICAgICAgICBcCkBAIC0xNTcxLDcgKzE1NzIsNyBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGdlbmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZQogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsRnJhbWUgLSBieXRlY29k
ZS5tX2FyZ3Y7CiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVl
QXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKICAg
ICAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CkBA
IC0xNjg5LDcgKzE2OTAsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1
cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgICAgIHNldHVw
Rm9yd2FyZEFyZ3VtZW50c0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
Y2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSks
IHZtLnZhcmFyZ3NMZW5ndGgpOwogCiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNh
bGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBj
YWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOwpA
QCAtMTcyNSw3ICsxNzI2LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxs
RXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24KICAgICAKICAgICBj
YWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdj
KTsKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxs
ZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1
ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRSZXR1
cm5QQyhyZXR1cm5Qb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBjYWxsZWVGcmFtZS0+
c2V0Q29kZUJsb2NrKG51bGxwdHIpOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7
CkBAIC0xOTMwLDcgKzE5MzEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJv
ZmlsZV9jYXRjaCkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYXRjaD4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0
YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNb
MF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVy
YW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTYxLDExICsxOTYyLDEyNCBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfb3V0X29mX2xpbmVfanVtcF90YXJnZXQpCiAgICAg
TExJTlRfRU5EX0lNUEwoKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlPgorc3RhdGlj
IHZvaWQgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgT3Bjb2RlJiBieXRlY29kZSwg
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUmIHNpZGVTdGF0ZSkKK3sKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBzaWRlU3RhdGUuZ2V0VG1wPEpTVmFsdWU+KE9wY29kZTo6YXJnQ291bnQp
LmFzVUludDMyKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3Mu
ZmlsbChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEsIFsmXSAoSlNWYWx1ZSogYnVmZmVy
KSB7CisgICAgICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYnVmZmVyLCBjYWxsRnJhbWUt
PnIoYnl0ZWNvZGUubV9hcmd1bWVudHMpLmpzVmFsdWUoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxKTsKKyAgICB9KTsKKyAgICBpZiAoYXJncy5oYXNPdmVyZmxvd2VkKCkpIHsK
KyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgIEpTVmFsdWUgcmVzdWx0OworICAgIGlmIChPcGNvZGU6Om9wY29k
ZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzKQorICAgICAgICByZXN1bHQgPSBjYWxsKGdsb2Jh
bE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3Bl
cmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOworICAgIGVs
c2UKKyAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChj
YWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOworCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKKyAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9kc3Qp
ID0gcmVzdWx0OworfQorCitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRpc3BhdGNoTmV4dElu
c3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmIHBj
KQoreworICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKSB7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCku
cHRyKCk7CisgICAgICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNF
bnRyeVB0clRhZz4oKnBjLm5leHQoKS5wdHIoKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQobmV4dFBDLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisj
aWYgRU5BQkxFKEpJVCkKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOworICAgIEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBw
Yy5uZXh0KCkuaW5kZXgoKTsKKyAgICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0
Q29kZU1hcCgpLmZpbmQobmV4dEJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1
bHQobnVsbHB0ciwgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0
aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2Nh
bGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSk7CitleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVl
IHJlc3VsdCkKK3sKKyAgICAvLyBTaW5jZSBhbGwgb3VyIGNhbGxpbmcgY2hlY2twb2ludHMgZG8g
cmlnaHQgbm93IGlzIG1vdmUgcmVzdWx0IGludG8gb3VyIGRlc3Qgd2UgY2FuIGp1c3QgZG8gdGhh
dCBoZXJlIGFuZCByZXR1cm4uCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0
aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBj
LT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENhbGxWYXJh
cmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKS5tX2RzdCkgPSBKU1Zh
bHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHNob3VsZCBuZXZlciByZXR1cm4gaWYgdGhlIHRoaW5nIGl0IHdhcyBj
YWxsaW5nIHdhcyBpbmxpbmVkLgorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBkaXNw
YXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKworZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNr
cG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9j
ay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0g
dm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgQVNTRVJU
KGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKKworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBw
Yy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92
YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBn
bG9iYWxPYmplY3QsIHBjLT5hczxPcENhbGxWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAg
aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+
YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShwYy5uZXh0KCktPm9wY29kZUlEKCkgPT0gb3BfcmV0LCAiV2Ugc3Ryb25nbHkgYXNz
dW1lIGFsbCB0YWlsIGNhbGxzIGFyZSBmb2xsb3dlZCBieSBhbiBvcF9yZXQuIik7CisgICAgICAg
IGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMt
PmFzPE9wVGFpbENhbGxWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7
CisKKyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9
CisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJm
bG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvRnJhbWUpCiB7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbEZyYW1lKQogICAgICAgICBnbG9iYWxPYmplY3Qg
PSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKnZtKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50VGh1bmtzLmgKaW5kZXggZmNhZjgwZGExY2I1YzQ2YzUwZWU3ZjdmNTgw
NTMzZjdmNTNjZTA0MS4uY2Q0NWFmMTBiMzEzYTkxNmIwZDNlZWMwYmRiYTE2ZWNmOGZkOGFiNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKQEAgLTM2LDYgKzM2
LDggQEAgdHlwZWRlZiBpbnQ2NF90IEVuY29kZWRKU1ZhbHVlOwogZXh0ZXJuICJDIiB7CiAgICAg
RW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvSmF2YVNjcmlwdCh2b2lkKiwgVk0qLCBQcm90b0NhbGxG
cmFtZSopOwogICAgIEVuY29kZWRKU1ZhbHVlIHZtRW50cnlUb05hdGl2ZSh2b2lkKiwgVk0qLCBQ
cm90b0NhbGxGcmFtZSopOworICAgIHZvaWQgY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50
KCk7CisgICAgdm9pZCBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5
cG9pbnQoKTsKIH0KIAogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHZtRW50cnlUb1dhc20odm9pZCog
Y29kZSwgVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggZTE3MzRkY2Y2
MWI0Y2ZjNTUxMmZhMjg1NjAxYmNhYjMwYzg4ZjJlNC4uMmI2MGVmNzMzNjJjMDU0OTY0ZmE3MTk1
YmY2YjFjNmQ3MGY0OGNkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0
dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wTmFtZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JF
eGl0UmV0dXJuTGFiZWwob3BOYW1lLCBzaXplKQogCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFm
dGVyQ2FsbCgpCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwor
ICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVByb2Zp
bGUob2Zmc2V0LCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4
MzksMTMgKzE4MzksMTcgQEAgZW5kKQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFj
cm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNo
LCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRo
KGZyYW1lU2xvd1BhdGgpCittYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQp
CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3Zt
W3QzXSwgdDMKICAgICBidHB6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgotICAg
IGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0aW9u
OgorICAgIGptcCBleGNlcHRpb25UYXJnZXQKKy5ub0V4Y2VwdGlvbjogICAgCitlbmQKKworbWFj
cm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNo
LCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQYXRo
KGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21f
c2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQogICAgIGlmIEpT
VkFMVUU2NAogICAgICAgICBtb3ZlIHIxLCBzcApAQCAtMTk5OSw2ICsyMDAzLDIyIEBAIG9wKGxs
aW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogICAg
IGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShJbnRlcm5hbEZ1bmN0aW9uOjptX2Z1bmN0
aW9uRm9yQ29uc3RydWN0KQogZW5kKQogCitpZiBub3QgQ19MT09QIGFuZCBub3QgQ19MT09QX1dJ
TgorICAgIGdsb2JhbCBfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRy
eXBvaW50CisgICAgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlw
b2ludDoKKyAgICAgICAgbW92ZSByMCwgYTIKKyAgICAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3Bh
dGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCkKKyAgICAgICAgYnJhbmNo
SWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAg
ICAgIGptcCByMQorCisgICAgZ2xvYmFsIF9jaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQK
KyAgICBfY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50OgorICAgICAgICAjIEZJWE1FOiBX
ZSBjYW4gcHJvYmFibHkgZGlzcGF0Y2ggdG8gdGhlIGNoZWNrcG9pbnQgaGFuZGxlciBkaXJlY3Rs
eSBidXQgdGhpcyB3YXMgZWFzaWVyIAorICAgICAgICAjIGFuZCBwcm9iYWJseSBkb2Vzbid0IG1h
dHRlciBmb3IgcGVyZm9ybWFuY2UuCisgICAgICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2No
ZWNrcG9pbnRfb3NyX2V4aXQpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJv
d19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEKK2VuZAogCiAjIExh
c3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3Vw
cG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hl
biB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggM2Rk
MmViNDhjYmJhNmVmNWNkOTg4NjM5Yzc5MTFlMjJhNzEzMzE0OC4uNDExZGYyYzY3NTIzMzBiMzdi
OTZhYmNlZDg3YTg0NDZhODc1Njk5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTQyLDYgKzQyLDE0IEBAIG1h
Y3JvIG5leHRJbnN0cnVjdGlvbldpZGUzMigpCiAgICAgam1wIFt0MSwgdDAsIFB0clNpemVdLCBC
eXRlY29kZVB0clRhZwogZW5kCiAKK21hY3JvIHN0b3JlUEMoKQorICAgIHN0b3JlaSBQQywgTExJ
bnRSZXR1cm5QQ1tjZnJdCitlbmQKKworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTEludFJl
dHVyblBDW2Nmcl0sIFBDCitlbmQKKwogbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3Bjb2RlU3Ry
dWN0LCBmaWVsZE5hbWUsIGRzdCkKICAgICBsb2FkYiBjb25zdGV4cHIgJW9wY29kZVN0cnVjdCVf
JWZpZWxkTmFtZSVfaW5kZXhbUEIsIFBDLCAxXSwgZHN0CiBlbmQKQEAgLTkyLDcgKzEwMCw3IEBA
IGVuZAogCiAjIEFmdGVyIGNhbGxpbmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5w
dXQgcmVnaXN0ZXJzIGFyZSBub3QgdXNlZC4KIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKHNpemUs
IG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gpCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09m
ZnNldFtjZnJdLCBQQworICAgIGxvYWRQQygpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBC
CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgog
ICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fZHN0LCB0MSkKQEAgLTM5MCw3ICszOTgsNyBA
QCBlbmQKIAogIyBDYWxsIGEgc2xvdyBwYXRoIGZvciBjYWxsIG9wY29kZXMuCiBtYWNybyBjYWxs
Q2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENv
dW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JD
Q2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTM5OSwyMCArNDA3
LDIwIEBAIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBt
YWNybyBjYWxsVHJhcEhhbmRsZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRl
Rm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCiAgICAgY0NhbGwy
KF9sbGludF9zbG93X3BhdGhfaGFuZGxlX3RyYXBzKQogICAgIGJ0cG56IHIwLCB0aHJvd0hhbmRs
ZXIKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9h
ZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRG
b3JMb29wKCkKICAgICBjaGVja1N3aXRjaFRvSklUKAogICAgICAgICAxLAogICAgICAgICBtYWNy
bygpCi0gICAgICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2Zy
XQorICAgICAgICAgICAgc3RvcmVQQygpCiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2Fs
bCgpCiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBA
IC00MjEsNyArNDI5LDcgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAg
ICAgICAgbW92ZSByMSwgc3AKICAgICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAg
ICAgICAucmVjb3ZlcjoKLSAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZz
ZXRbY2ZyXSwgUEMKKyAgICAgICAgICAgIGxvYWRQQygpCiAgICAgICAgIGVuZCkKIGVuZAogCkBA
IC0xNzY4LDYgKzE3NzYsOCBAQCBtYWNybyBwdXRCeVZhbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgb3NyRXhpdFBvaW50KQogICAgIGVuZCkKIGVuZAogCisKKwogcHV0QnlWYWxPcChwdXRf
YnlfdmFsLCBPcFB1dEJ5VmFsLCBtYWNybyAoc2l6ZSwgZGlzcGF0Y2gpCiAub3NyUmV0dXJuUG9p
bnQ6CiAgICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX3B1dF9ieV92YWwsIHNp
emUpCkBAIC0yMDU3LDcgKzIwNjcsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwg
c2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBh
ZGRwIGNmciwgdDMKICAgICAgICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgICAgIGdldHUo
c2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIHQyKQotICAgICAgICBzdG9yZWkgUEMsIEFyZ3Vt
ZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3Rv
cmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgbW92ZSB0
Mywgc3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0
clRhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCA4NDBmODli
ODhkNDIwY2MzYjc1YzgzZDZjNTc4MjQxNTQwMmYzMzY2Li44ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1
MDBmZGZiZTY5OTk4MDdjZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlz
dC5oCkBAIC0xMzMsNiArMTMzLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3ZlcmZsb3dDaGVj
a05vdE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50LCBjb25zdCBG
dW5jdG9yJiBmdW5jKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAgICAgICBl
bnN1cmVDYXBhY2l0eShjb3VudCk7CisgICAgICAgIGlmIChCYXNlOjpoYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc2l6ZSA9IGNvdW50OworICAgICAgICBm
dW5jKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7CisgICAgfQorCiBw
cml2YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4cGFuZENhcGFj
aXR5KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5jcHAKaW5kZXggZjhkOTc5OTU4NzQ1MjI2YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNl
ODdhMS4uZmZiNzQ1OWE2YWRjY2JhYjE2ZGE4YTRlZjhiMTcxMWQ4NzJhMWFmOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMTc4OCw2ICsx
Nzg4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgZXZhbENvbnRl
eHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25l
ZCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxDYWxsczsgfQorICAgIHVu
c2lnbmVkIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsg
fQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9
CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0K
IApAQCAtMTgyMCw2ICsxODIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2V2YWxDb250
ZXh0VHlwZSA6IDI7CiAgICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOwogICAgIHVuc2ln
bmVkIG1fY29kZVR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1faGFzQ2hlY2twb2ludHMgOiAxOwog
CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtMjAxOCw2ICsyMDIwLDcgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVC
bG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKgogCiAg
ICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkK
ICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hhc0NoZWNrcG9pbnRzKGNhY2hlZENvZGVCbG9jay5o
YXNDaGVja3BvaW50cygpKQogCiAgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0
dXJlcygpKQogICAgICwgbV9wYXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQpA
QCAtMjIwNiw2ICsyMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxD
b2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAgICBtX3BhcnNl
TW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKICAgICBtX2NvZGVHZW5lcmF0aW9uTW9kZSA9
IGNvZGVCbG9jay5tX2NvZGVHZW5lcmF0aW9uTW9kZTsKICAgICBtX2NvZGVUeXBlID0gY29kZUJs
b2NrLm1fY29kZVR5cGU7CisgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0No
ZWNrcG9pbnRzOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1f
bWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9j
ay5tX3JhcmVEYXRhLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IGYzNThkNDhhNTBkZTczZWFiMzg1Njk5YjNhNmY1
MTEzYmJiZTliYmEuLmUyN2ZlM2NhOTc4YjM5NDQ4MjYxNjdkNGEwNjFhMmVhZDRmOTI2MTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cApAQCAtOTgsOCArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBCRUdJTl9OT19TRVRfUEMo
KTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBTRVRfUENfRk9SX1NUVUJTKCkKIAotI2RlZmlu
ZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKSkK
LSNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKSkK
KyNkZWZpbmUgR0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkpCisj
ZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZCkpCiAKICNkZWZpbmUg
UkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTExMzksOCArMTEzOSw3IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKIHsK
ICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVMZXhpY2Fs
RW52aXJvbm1lbnQ+KCk7Ci0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
c2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUo
KTsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihH
RVRfQyhieXRlY29kZS5tX3N5bWJvbFRhYmxlKS5qc1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgaW5p
dGlhbFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKICAg
ICBBU1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09
IGpzVERaVmFsdWUoKSk7CkBAIC0xMTU1LDggKzExNTQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHVzaF93aXRoX3Njb3BlKQogICAgIEpTT2JqZWN0KiBuZXdTY29wZSA9IEdFVF9DKGJ5
dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAg
IENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9jdXJy
ZW50U2NvcGUub2Zmc2V0KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBj
dXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9jdXJyZW50U2Nv
cGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIApAQCAtMTE2NSw3
ICsxMTYzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVfZm9yX2hv
aXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNT
Y29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVn
aXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVz
b2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBp
ZGVudCk7CiAKICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTExNzksNyArMTE3Nyw3IEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihi
eXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU09iamVjdCogcmVzb2x2
ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwog
ICAgIC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJlLCBlLmcuIFByb3h5IGluIHdpdGgg
c3RhdGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTQy
NCw3ICsxNDIyLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIp
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlC
dWZmZXI+KCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
Ynl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpKTsKKyAgICBBU1NFUlQoYnl0
ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkuaXNDb25zdGFudCgpKTsKICAgICBKU0ltbXV0YWJs
ZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gYml0d2lzZV9jYXN0PEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oR0VUX0MoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7CiAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jaykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlOwogCkBAIC0xNDQzLDcgKzE0NDEsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAgLy8gV2Ug
YWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhy
ZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAv
LyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
LSAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxl
QnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5
KTsKKyAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRh
YmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAKQEAgLTE0ODgsNCArMTQ4Niwx
NiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3ByZWFkKQogICAgIFJFVFVSTihKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6Y3JlYXRlRnJvbUFycmF5KGdsb2JhbE9iamVjdCwgdm0sIGFycmF5KSk7
CiB9CiAKK2V4dGVybiAiQyIgdm9pZCBkdW1wUmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKTsK
K2V4dGVybiAiQyIgdm9pZCBkdW1wUmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKQoreworICAg
IGRhdGFMb2dMbihSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpKSk7Cit9CisK
Ky8vIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIFNMT1dfUEFUSCBjaGVja1BDKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMpOworLy8gZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uKiBwYywgKQorLy8geworCisvLyB9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0
RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNw
cAppbmRleCA0YmQxOTJhNmM3N2VmYzAyNmU3YTk1YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0
MThjYTg4ZWZkMWI3OGU2MzExYjY3NWQxZWZhNWE1ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2Jh
bE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJv
ck1lc3NhZ2UpOworfQorCitKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBj
b25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTQ2LDEwICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVj
dFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rv
ck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7
ICAKIH0KIAotCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJn
cywgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4
IGQwYWUwMGJhMTFkN2NlZTI0ZGZmYWU5MTkxMTk2N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzlj
NDkxZjlmOTNiYWViNmNhYzEyNjIxZjNiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdHJ1Y3REYXRhLmgKQEAgLTYwLDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVj
dERhdGEgewogCiAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRl
YWwgd2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNl
IHRoZW0uCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIq
IGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQs
IGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRf
UFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25z
dHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xp
c3QmLCBKU1ZhbHVlIG5ld1RhcmdldCk7CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0
cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2Jq
ZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEw
MjJhYzJkZDlhZWZhZmQ0M2EwMWE1Yzg1Li40YjM0NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNj
NTc1MDlmMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAKQEAgLTEzNywyMCArMTM3LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRz
Ojp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1
bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJl
Y3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBpZiAoIW1fbWFwcGVkQXJndW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3Rk
OjptaW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7
CiAgICAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
IGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAg
ICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3Rh
cnQgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50
RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAg
R2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6
Om1hcHBlZEFyZ3VtZW50c1NpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuaAppbmRleCAwYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJj
ZmNlNzcyZTBhLi44ZDk2NDJhMmM5NDA0MDgwYjkxM2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAt
MTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8
RGlyZWN0QXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9s
ZW5ndGgpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBh
YmQwMGNlZWFmNWViYjdlZTFkNDY3ZGE0ODg3MGQ1MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAw
NGJkYWIzZGFlZWIyNzJjYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oCkBAIC01OSw3ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVu
c2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRB
cmd1bWVudHNQdHIgPSBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47
CiAgICAgTW9kaWZpZWRBcmd1bWVudHNQdHIgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaAppbmRleCAyMTgyYTYyYjEzMDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4
MWZmLi5lMGFhYmY1ZjJlZTE4NWI3ZDEzMzE2MDM3ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46Omlz
TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC0zMDUsOSArMzA1LDkgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBU
eXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+
aXNNYXBwZWRBcmd1bWVudChpICsgb2Zmc2V0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihm
aXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9m
ZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0
SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2Jq
ZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCmluZGV4IDQ0YzdlNTIwZjFjMGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2
NjAuLjZkMDc1OTE3MTFlZWRiYzI4ZTBlNGRhNzg0OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2
b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1h
cmtlZEFyZ3VtZW50QnVmZmVyJiBhcgogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2Jq
ZWN0LCBpKSk7CiB9CiAKLXZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lk
IEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0Fy
cmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUKICAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKCkuYXQodGhpcywgaSk7CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERl
c3QgKyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwor
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTEyOTQsMTEgKzEyOTQsMTEgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpIC0gb2Zmc2V0KSA9IHYuZ2V0KCk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9m
ZnNldF0gPSB2LmdldCgpOwogICAgIH0KICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkg
PSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zm
c2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAppbmRleCAzMTc5NDljNTcyYTExYjc1YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4z
MTE2NWI1ZmY0OTI1NGNjMWE2YzQ3OTAyYjc5MTBhYzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmpl
Y3QqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29s
RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5
NTAzM2RhYTk5YTU5MzZkZWExOWExYzQ5YzAuLmU0OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4
ZDEyYzE5MTFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1t
dXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250
aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBK
U0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwg
cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVz
dCArIGkpID0gZ2V0KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
XSA9IGdldChpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2ldID0ganNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmlu
ZGV4IGFjYjY4NDgxOTFhMTkwMzUyMmI5YjNlNGQwMGY5NjllNDBiNzgxNWEuLjA3ZTFhOGExMGMz
Y2RjNzExN2FjYTNkYzU0M2VkN2RkYjBkNDFmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4K
ICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdk
Mjc3OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZhYTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJj
NjhmYjZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0y
MDQsNiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAg
UmVmUHRyPFZNPiB2bSA9IG1fdm07CiAgICAgaWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX1dJVEhfTUVTU0FHRSghdm0tPmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVh
c2luZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hlY2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWls
YWJsZSIpOwogICAgICAgICB2bS0+ZHJhaW5NaWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2
bS0+dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZi
MTMyYmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkx
NmM2NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1i
b2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3Qt
PnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUu
c2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4o
dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFs
T2JqZWN0LT52bSgpKSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEw
NTBjZGU4NmNiMjUyMWU1NDExNi4uOTFlZDczOWUyNWY0OTM4ZWY1MDI3MjdkZjUxNjgwZDg2Y2Ey
MDg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUw
OSwxMSArNTA5LDkgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAg
ICAgaWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZl
ZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6
c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1p
bmltdW1SZXNlcnZlZFpvbmVTaXplOwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBG
SVhNRTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3b3JrIG9uIDMyLWJpdDoKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNl
UHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3Bw
CmluZGV4IDA4MWQ5NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4
ZjYyNDFiMDI2MDVmYmY1MjViZGRmMjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBA
IHZvaWQgU2NvcGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkK
ICAgICAgICAgc3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBT
Y29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
KiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
LSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThj
YTdjMzcwNGYyOWVkNGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBi
NTFhYmMwZGUwODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVz
Y3JpcHRvcihpbmRleCwgbV90YWJsZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xB
UkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA2NGRk
ZmNiMWEyNTYwZTZmZTFiNDU0ZTRmZWUxNDg5MmFkYzA4YTlmLi44ZjZlNTY1ZTI0N2U1YTIzMTkz
MzE5ODgyODY3MmUyMTA0ODgxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUg
IkJ1aWx0aW5FeGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUg
IkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
ZGVDYWNoZS5oIgpAQCAtMTAyNyw2ICsxMDI4LDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hC
dWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5k
aWYKIAordm9pZCBWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxv
YWQpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdU
Rk1vdmUocGF5bG9hZCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZT4gVk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1l
KQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBh
dXRvIHNpZGVTdGF0ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7Cisg
ICAgcmV0dXJuIHNpZGVTdGF0ZTsKK30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkK
IHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxs
RnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDI4MDg2YzRlZDkxNjA2
YzI4MWIxYTFkNWI3YTFkYWIwNjA4ODA3MGEuLjI1YzRhNTE0YTE4YzY3MGU2NTQzMWFiOTY4Nzg4
MzM4MWQ3MWVjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEw
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3Mg
Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNo
ZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtOTQ5LDYgKzk1MCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYp
OwogCisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6
dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVu
dHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hl
Y2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMDAsNiArMTIwNSw3IEBAIHByaXZhdGU6
CiAgICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVy
Kj4gbV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZl
ciB7IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVX
YXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggODFjOWYxZjY3NDcw
NzllZDgzMTI2NjJjMDgzMDBjNmNjMzYyOGUzNy4uZTE0ODQwMGQ0ODdkZmM2NGU0NDA1NGRkYWRi
MDg1ODk3MmUzOWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVy
cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAgY29u
c3QgUmVnaXN0ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwot
ICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgLSAxOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgZW5k
ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
LSAxKTsKICAgICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpz
VmFsdWUoKTsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVh
NTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAt
NzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25z
dGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoaW50IGluZGV4
KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2Vu
ZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fY29u
c3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwogICAgIH0KIAogICAgIHZvaWQgc2V0
SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXgg
YWIxNzQwNmFmYjczNGE3MDhkZjExZGJiNjgwMTUxOGI3NjY1ZmI0Mi4uZWUyYjMyN2QyYWY1NDcx
OTY4Nzk2OWFjMjUyYTg0Yzc4OGVmNmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsNiArMjQyLDkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBw
YXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMgZm9y
IGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgorICAgIHZvaWQg
c2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsg
fQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9u
cy5jcHAKaW5kZXggZTJhNGM0MjUzM2EyZjQ0N2RkMzIwMjA1Yjc3N2I3OGIwMzljMGI2OC4uMjA2
OWFkOGIyNGI3MzY5ZGNkOWQ1ZjBjN2Y1OGVlYzkyYjM1Yzc2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNzQzLDcgKzc0Myw3IEBAIHZv
aWQqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBj
YWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcK
ICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3Vs
ZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihj
YWxsRnJhbWUpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KGluc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZy
YW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2xvd1BhdGhzLmNwcAppbmRleCA5MjdhNjk4NGEzYmUwMTRjZjNlYTdkNjdmMDM0NTg0ZWViZWI2
MGNlLi41NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5MGQ1ZjMzM2NlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzYsNyArNzYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1
YWxSZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAg
ICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0so
KS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlz
dGljcyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayog
Y29kZUJsb2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9CaXRtYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0
MjYzMmMzZWZjMDAwYmQxOGU5ZTM2OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5
MmUzNjZhNzUwNTRkY2M2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAg
ICBzaXplX3QgbmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFy
KHNpemVfdCk7CiAgICAgdm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAg
aW50NjRfdCBmaW5kUnVuT2ZaZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXpl
X3QgY291bnQoc2l6ZV90IHN0YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBj
b25zdDsKQEAgLTEwMiw2ICsxMDMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
PShib29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5k
ZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90
IG1faW5kZXg7CkBAIC0xMTEsNiArMTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNp
emUpOyB9CiAgICAgCisgICAgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0
IGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRD
bGVhcihCaXRtYXAmKTsKICAgICB2b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAt
MjI0LDYgKzIzNCwxMyBAQCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjpjbGVhckFsbCgpCiAgICAgbWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwog
fQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Citpbmxp
bmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRz
W2ldOworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
CiBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJs
eVVuc2V0KHNpemVfdCBzdGFydCkgY29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5l
IGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRt
YXAmIG90aGVyKSBjb25zdAogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVt
cGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8g
Qml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+
IGl0ZXJhdG9yCit7CisgICAgQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIGluZGV4KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5
cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7Cisg
ICAgcmV0dXJuICgqY29uc3RfY2FzdDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhp
cykpW2luZGV4XTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgogaW5saW5lIHVuc2lnbmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhh
c2goKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBkYWU0YTcxYjI4ZDEzMDQyNGMw
YmQ3MzFiZTQxNjQzZjA1MmIzZWE5Li4yYTMyNjJjOWI4YjZkNTZkZTNjYTRkYTAxNTY5NmQ3NTI3
YWE0YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX1BV
QkxJQ19IRUFERVJTCiAgICAgRHVtYlB0clRyYWl0cy5oCiAgICAgRHVtYlZhbHVlVHJhaXRzLmgK
ICAgICBFbnVtVHJhaXRzLmgKKyAgICBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCiAgICAg
RXhwZWN0ZWQuaAogICAgIEV4cG9ydE1hY3Jvcy5oCiAgICAgRmFzdEJpdFZlY3Rvci5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oIGIvU291
cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmRl
NzNmNWIyZDdkNTc0NGEzZDA4NTc3Y2M3MjQ4NzFlOTNlNjE5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaApAQCAtMCwwICsxLDYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKKyNkZWZpbmUgT1ZFUkxPQURfT1BF
UkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgb3AsIGVuYWJsZUV4cHJlc3Npb24p
IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0
b3Igb3AoZW51bU5hbWUgZW51bUVudHJ5LCBUIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PChl
bmFibGVFeHByZXNzaW9uKSwgVD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oZW51bUVudHJ5KSBvcCB2YWx1ZTsgXAorICAgIH0gXAorICAgICAgXAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBjb25zdGV4cHIgYXV0byBvcGVyYXRvciBvcChUIHZhbHVl
LCBlbnVtTmFtZSBlbnVtRW50cnkpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Np
b24pLCBUPiBcCisgICAgeyBcCisgICAgICAgIHJldHVybiB2YWx1ZSBvcCBzdGF0aWNfY2FzdDxU
PihlbnVtRW50cnkpOyBcCisgICAgfSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRP
UlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICssIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCAtLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgKiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC8sIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCAlLCBlbmFibGVFeHByZXNzaW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFU
SF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJM
T0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNf
aW50ZWdyYWxfdjxUPikKKworI2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19G
T1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZF
UkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPT0sIGVuYWJsZUV4
cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVu
dW1OYW1lLCAhPSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIDwsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8PSwgZW5hYmxl
RXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4o
ZW51bU5hbWUsID4sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9G
T1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA+PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisj
ZGVmaW5lIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhf
SU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5V
TV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RC
aXRWZWN0b3IuaAppbmRleCA4ODViN2IxNzNiMTFhNjAxYmUyOWEzMzJhYjlkMmE0MTRkNTYyMTIy
Li45MjA4OTVmYzQ5ZTcxYmY5NjY5MjIxYzEzMWExNzQyZmI3NThmZmQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvRmFzdEJp
dFZlY3Rvci5oCkBAIC00NTAsNyArNDUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICBvcGVyYXRvciBib29sKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISgqbV93b3JkICYgbV9tYXNrKTsKICAgICB9CkBA
IC00NjQsNiArNDY0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQog
CisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3J8PShib29sIHZhbHVlKSB7IHJldHVybiB2
YWx1ZSA/ICp0aGlzID0gdmFsdWUgOiAqdGhpczsgfQorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9w
ZXJhdG9yJj0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA6ICp0aGlzID0gdmFs
dWU7IH0KKwogcHJpdmF0ZToKICAgICB1aW50MzJfdCogbV93b3JkIHsgbnVsbHB0ciB9OwogICAg
IHVpbnQzMl90IG1fbWFzayB7IDAgfTsKQEAgLTUwOSw3ICs1MTIsMTEgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KLSAgICAKKworICAgIC8vIEZv
ciB0ZW1wbGF0aW5nIGFzIFZlY3Rvcjxib29sPgorICAgIHZvaWQgZmlsbChib29sIHZhbHVlKSB7
IHZhbHVlID8gc2V0QWxsKCkgOiBjbGVhckFsbCgpOyB9CisgICAgdm9pZCBncm93KHNpemVfdCBu
ZXdTaXplKSB7IHJlc2l6ZShuZXdTaXplKTsgfQorCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgpAQCAtNTg5
LDQgKzU5Niw1IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6
RmFzdEJpdFJlZmVyZW5jZTsKIHVzaW5nIFdURjo6RmFzdEJpdFZlY3RvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oIGIvU291cmNlL1dURi93dGYvVW5hbGln
bmVkQWNjZXNzLmgKaW5kZXggNWE0ZTllZjQ0OTRlZjQ2Y2E5ZTRlZWY3N2ZkY2MwZDYwZmFhNGEx
MS4uM2EzNWIzOGY0YzAyMzY3OWFjN2NmYzljNDY1NjA4NGEzOTE0ODNiMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKKysrIGIvU291cmNlL1dURi93dGYvVW5h
bGlnbmVkQWNjZXNzLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lkKiBw
b2ludGVyKQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1
ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlw
ZT46OnZhbHVlLCAiIik7CiAgICAgVHlwZSByZXN1bHQgeyB9OwogICAgIG1lbWNweSgmcmVzdWx0
LCBwb2ludGVyLCBzaXplb2YoVHlwZSkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00Myw3ICs0
Myw3IEBAIGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgdm9pZCB1bmFsaWduZWRTdG9yZSh2b2lkKiBw
b2ludGVyLCBUeXBlIHZhbHVlKQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
PFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
Y29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgbWVtY3B5KHBvaW50ZXIsICZ2YWx1ZSwg
c2l6ZW9mKFR5cGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGEwZDhlNzVkN2VlZTJkNmFjNThlMDY4ZWUxODI2NGQ0OGRhZjZkMTMu
LmM5ODlkMDRiOTI4NTVkNTk2ZjljNzA0MTkwMTU0OTVjMjYxYmVjYzIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAx
OS0xMi0xOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUy
MzIKKworICAgICAgICBSZW1vdmUgcHJvYmUgT1NSIGV4aXQgb3B0aW9uIHNpbmNlIHdlIGFyZSBu
b3QgdXNpbmcgdGhhdCBhbnltb3JlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0x
Mi0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBHVEsgZ2FyZGVuaW5nLiBNYXJrIFdlYktpdC5Gb2N1c2VkRnJhbWVBZnRl
ckNyYXNoIGFzIHRpbWVvdXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGNkYmY5
YzBkYmY5MzJlMjhjNmQ1YTgyMDhhMGE5OGNjZWU2YWVkOWYuLjVmYmMyMDllZGU0ZDM0NWE0NjA1
YjAwZDI3MTcyMDQ1ZDA0OTJjZTYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAt
NDk4LDcgKzQ5OCw2IEBAIE5PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZh
bHNlIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAwCiBCM08xX09QVElPTlMgPSBb
Ii0tZGVmYXVsdEIzT3B0TGV2ZWw9MSJdCiBCM08wX09QVElPTlMgPSBbIi0tbWF4REZHTm9kZXNJ
bkJhc2ljQmxvY2tGb3JQcmVjaXNlQW5hbHlzaXM9MTAwIiwgIi0tZGVmYXVsdEIzT3B0TGV2ZWw9
MCJdCiBGVExfT1BUSU9OUyA9IFsiLS11c2VGVExKSVQ9dHJ1ZSJdCi1QUk9CRV9PU1JfRVhJVF9P
UFRJT04gPSBbIi0tdXNlUHJvYmVPU1JFeGl0PXRydWUiXQogRk9SQ0VfTExJTlRfRVhJVF9PUFRJ
T05TID0gWyItLWZvcmNlT1NSRXhpdFRvTExJbnQ9dHJ1ZSJdCiAKIHJlcXVpcmVfcmVsYXRpdmUg
IndlYmtpdHJ1YnkvanNjLXN0cmVzcy10ZXN0LXdyaXRlci0jeyR0ZXN0V3JpdGVyfSIKQEAgLTcx
Myw3ICs3MTIsNyBAQCBkZWYgcnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJv
ZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRy
dWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NK
SVRfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09QVElPTiArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxl
ciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIs
ICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRM
Tm9DSklUTm9QdXRTdGFja1ZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBA
IC03MjksNyArNzI4LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24oKm9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuREZHRWFnZXIoKm9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyAr
IENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBG
T1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQor
ICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VT
TFlfT1BUSU9OUyArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2M1YWY0NGJiM2M0ZmNjMzc5OGZhZDQzNmNjYjFkODgz
YjUxOWZhMS4uMWMxMDAwYjI5NjM4Yzk1NGM5ODJhMDU4YTNjZDgzMjMyZjNiNmMxMSAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAxOS0xMi0xOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRs
ZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4
Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291
bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFy
cmF5LmdldCBsZW5ndGgpOgorICAgICAgICAqIHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQt
Z2V0LWxlbmd0aC1vbmNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgor
ICAgICAgICAoY2FsbGVlKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5Lmdl
dCBsZW5ndGgpOgorICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNh
bGwtYW5kLWV4aXQtc3RyaWN0LmpzOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICog
c3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQu
anM6CisKIDIwMTktMTItMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSlNDXSBSZW1vdmUgSlNGaXhlZEFycmF5LCBhbmQgdXNlIEpTSW1tdXRhYmxlQnV0
dGVyZmx5IGluc3RlYWQKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0
LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rl
c3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlv
bnMtb2NjYXNpb25hbGx5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0
MWZmZTJjNTBhYzBhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1v
c3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5Lmpz
CkBAIC0wLDAgKzEsMzYgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVj
dGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5l
KGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRl
ZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAw
OworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxl
bmd0aCgpIHsKKyAgICBpZiAobGVuZ3RoQ2FsbHMrKyAlIDEwID09IDEpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigidGhyb3dpbmcgYW4gZXhjZXB0aW9uIGluIGxlbmd0aCIpOworICAgIHJldHVy
biBjdXJyZW50QXJnQ291bnQKK30gfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTY7IGkrKykgewor
ICAgIHRyeSB7CisgICAgICAgIHRlc3QoYXJyYXkpOworICAgIH0gY2F0Y2ggeyB9Cit9CisKK2N1
cnJlbnRBcmdDb3VudCA9IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitp
ZiAobGVuZ3RoQ2FsbHMgIT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVu
Z3RoLW9uY2UuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxl
bmd0aC1vbmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiZWU0NWNlMWM3MjgzNjUzODI3MDVkOTlkMzAxYWU2
YmNiOGQ4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhp
dC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKworbGV0IGN1cnJl
bnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1
cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlv
biBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3Vu
dCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJh
eSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRl
c3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBh
cnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsgbGVuZ3RoQ2FsbHMrKzsgcmV0dXJu
IGN1cnJlbnRBcmdDb3VudCB9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAg
dGVzdChhcnJheSk7CisKKwordGVzdChhcnJheSk7CitjdXJyZW50QXJnQ291bnQgPSAxMDA7Cits
ZW5ndGhDYWxscyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQor
ICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIv
SlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0
cmljdC5qcwppbmRleCAzNjE4ZjhjYmIzZDMyMTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5h
YTczMjMxOTBjZjQ5ZDg4ZTNmZmU5MTJiMWUxNmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0
LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1h
bmQtZXhpdC1zdHJpY3QuanMKQEAgLTE4LDggKzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChh
LCBiKSB7CiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAi
IHZlcnN1cyAiICsgYi5hOwogICAgIGlmIChhLmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAo
YS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAg
IGlmIChhLmMubGVuZ3RoICE9PSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMg
IiArIGIuYy5sZW5ndGg7CiAgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAg
ICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJz
dXMgIiArIGIuYzsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNh
bGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1
cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCmluZGV4IDA0
N2ZiMDFmODgzMTQ1Y2M3NTU0ZjVjZjcwMWE3MDc0ZjI2N2RlZWUuLjUzZDc1MmRlY2Q3ZDBmMzFi
YzJmMWQ3ODk5MWM2OTEwMWYwOGJmZjMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vy
c2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1j
b3VudC5qcwpAQCAtMTgsOCArMTgsOCBAQCBub0lubGluZShiYXIpOwogZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyg0MCwgMik7CiAgICAgaWYg
KHJlc3VsdCAhPT0gNDIpCi0gICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhw
ZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0OworICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVz
dWx0IGZvciBmb28sIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CiAgICAgcmVzdWx0ID0g
YmFyKDQwLCAyKTsKICAgICBpZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25n
IHJlc3VsdCBmb3IgYmFyLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRo
cm93IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVz
dWx0KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386025</attachid>
            <date>2019-12-18 16:03:01 -0800</date>
            <delta_ts>2019-12-18 16:10:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218160245.patch</filename>
            <type>text/plain</type>
            <size>639585</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi4xYWE4ZGVlYzE0NTI5YmFh
OGY1MzQ2ODJjMGZlNTM3M2Q2MDc5YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50IGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAo
SlNDOjpGdWxsQnl0ZWNvZGVMaXZlbmVzczo6dmlydHVhbFJlZ2lzdGVySXNMaXZlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJhbmRJc0xpdmUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OklubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6
OklubGluZUNhbGxGcmFtZTo6c2V0VG1wT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bjo6d2Fsa1VwSW5saW5lU3RhY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0
dXApOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFu
ZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0
SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19w
YXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhy
b3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3Qu
aDoKKyAgICAgICAgKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI6OmZpbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6
Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVC
bG9ja1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpkdW1wUmVn
aXN0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmg6CisgICAg
ICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RB
cmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxl
QnV0dGVyZmx5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlU
b0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxs
UmVsZWFzZUxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHA6Cisg
ICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAg
KiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgor
ICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgIChK
U0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSBjb25zdCk6
CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpWTUluc3Bl
Y3Rvcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNs
b3dQYXRocy5jcHA6CisKIDIwMTktMTItMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBqc2NfY29udGV4dF9ldmFsdWF0ZV9pbl9v
YmplY3Qgc2hvdWxkIHRha2UgdGhlIEFQSSBsb2NrIGJlZm9yZSBjYWxsaW5nIHNldEdsb2JhbFNj
b3BlRXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IGY4YzFiNGFlNTU2YjUzNGMyYWIxMDFhYzM5MGJh
NzExYjQ1Y2JhZWEuLjllYWQ2NTNmYWFhYjE4OTNlYjkyZGQwMmU5NzU3OTY2ZGZhOTlhYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2Zp
bGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CkBAIC02NCw2ICs2NCw3IEBAICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91
ZGlzODYvb3B0YWJsZS54bWwKICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRf
aXRhYi5weQogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCiAkKFBST0pFQ1Rf
RElSKS9nZW5lcmF0b3IvQXNzZXJ0aW9uLnJiCiskKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQ2hl
Y2twb2ludHMucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9EU0wucmIKICQoUFJPSkVDVF9E
SVIpL2dlbmVyYXRvci9GaXRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvR2VuZXJhdGVk
RmlsZS5yYgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkYmNlNWJhY2VkYzA1YzNk
YzBlYThiMDQzMzQ2ZDE1MWQwZGVmNDQxLi5jYmNlOGFjYWJkNDk2Y2Y0NDUwZmFmZjkyZjUzMmFk
NTY5ZGQ3YTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTMxLDYgKzkzMSw3
IEBACiAJCTUzMzNCQkRCMjExMEY3RDIwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgw
RjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsK
IAkJNTMzM0JCREMyMTEwRjdEOTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMyMTMyOERG
ODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi87IH07CiAJCTUzMzNCQkREMjEx
MEY3RTEwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAv
KiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLzsgfTsKKwkJNTMzOEUyQTcyMzk2RUZGQjAwQzYx
QkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLzsgfTsKIAkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyog
UHJvbWlzZVRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1OTcsNiArMzU5OCw3
IEBACiAJCTUzMTgwNDVEMjJFQUFGMEYwMDRBNzM0MiAvKiBCM0V4dHJhY3RWYWx1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0V4dHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0V4dHJhY3RW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMUQ0RTE5MUY1OUNERDIw
MEVDODM2QyAvKiB0ZXN0YXBpLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhcGkuY3BwOyBw
YXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzI2MzFCMzIxODc3N0E1MDA3QjgxOTEgLyogSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gInNvdXJjZWNvZGUubW9kdWxlLW1hcCI7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5t
b2R1bGVtYXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFMkE2MjM5NkVGRUMw
MEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3Vu
ZHNDaGVja1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3
RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTEsNiArMzYx
Myw5IEBACiAJCTUzNEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0
b3IuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBUeXBlZEFycmF5
Q29uc3RydWN0b3IuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdCMUJD
NzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBK
U1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9y
UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0
SXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5
QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJdGVyYXRvckhlbHBlcnMuanM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRv
clByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1h
cEl0ZXJhdG9yUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRF
MDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzNEUwMzRGMUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTQ3LDYg
KzU5NTIsNyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAq
LywKIAkJCQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICov
LAogCQkJCUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8s
CisJCQkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3Bw
ICovLAogCQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJ
CQkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBA
IC04NTc2LDcgKzg1ODIsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9i
YWxPcGVyYXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAw
NDEzODU2IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5
MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIx
QjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZB
MjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1
NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3
MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAy
N0M4ODAwMzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk1
LDcgQEAKIAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAq
LywKIAkJCQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICov
LAogCQkJCTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclBy
b3RvdHlwZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0
b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFBy
b3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29u
c3RydWN0b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk2LDcgQEAKIAkJCQlGRTFCRDAy
MTFFNzIwMjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
QzE2MDMyMjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xv
bmVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0
NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4
YTA3ZGJmY2RlZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNj
ZDY2ODI3NjRiMmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRk
cmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50
YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAg
ICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNv
bnN0IHZvaWQqIHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIz
NjhkYzdjZDBmM2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgz
YWNhZWEzYTBmMTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1Byb2JlRnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGdldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihS
ZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAg
ICBUIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAg
IHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAg
IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxU
PihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
c2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lz
dGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQg
c2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlciksIHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
dm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQor
ICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9m
ZnNldCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwg
dmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0g
SlNWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFl
YzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZk
YTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2Mywy
MCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYg
Y29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
Pgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciog
bmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IElu
dDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBl
ZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhf
dD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7
Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3Bl
cmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IElu
dDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlw
ZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkg
QjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhW
ZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aElu
dGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQog
ewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4p
IH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+
KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGlu
Z1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0
aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5n
UG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFu
ZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApp
bmRleCA2MDA2MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFi
NGRiZDI2M2Y0OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAg
ICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJp
dHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAK
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAg
ICAgICAgICAgYXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4o
KTsKQEAgLTE3OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
T3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZVNuaXBwZXRQYXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMw
ZWU1OGY1ODguLjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBh
cmFtcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0
LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5j
YWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBq
aXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRj
ZDU2ZWY2YTk4Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2Fl
NWMwZWUzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6
cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAK
IHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0
YSgpKTsKKyAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBs
YXRlIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8
V2FzbTo6R2VuZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1w
bGF0ZTxjbGFzcyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rl
ck5hbWUoaW50IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0
ZXJOYW1lKFZpcnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBj
b25zdGFudE5hbWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3Rlcihy
KSk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2Nr
PgpAQCAtOTgsMTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGlu
ZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBs
YXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50
TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29u
c3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9
IGJsb2NrKCktPmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVl
LCAiKCIsIFZpcnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJs
b2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigi
LCByZWcsICIpIik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3
IEBAIHZvaWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0
cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJp
bmcgQnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNv
bnN0CiB7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAg
ICBhdXRvIHZhbHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRl
eCksIGJsb2NrLT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3
YzVhODgyNTEwNzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNh
MTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1w
ZXIuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7
IG1fb3V0LnByaW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVn
aXN0ZXJOYW1lKGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5h
bWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5l
SnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBC
eXRlY29kZUR1bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBw
cm90ZWN0ZWQ6CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVh
bTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJO
YW1lKGludCByKSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0
dWFsUmVnaXN0ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0
KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7
CisgICAgdmlydHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0
OwogCiAgICAgQmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6
CiAgICAgdXNpbmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVj
b2RlRHVtcGVyOwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25z
dGFudE5hbWUoaW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50
TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcg
Zm9ybWF0Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5
MDQwMWE3MTE3ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEy
MDExMWM4N2M1MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiB2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50
KCkpCisgICAgICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW5kZXguaAppbmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4x
MGZiYTQ0MDU4ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpA
QCAtMzcsMjQgKzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5
dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNC
aXRzKCkpCisgICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQog
ICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29k
ZU9mZnNldCkKLSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAot
ICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWlu
dDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBC
eXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQg
PSAwKQorICAgICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3Bv
aW50KSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNf
YXNzZXJ0KGhhc09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2tw
b2ludHMgc2hvdWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3QgY2hlY2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29u
c3RleHByKG51bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4
X3QgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRN
YXNrOyB9CisgICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
OyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1f
b2Zmc2V0KTsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhh
c2gobV9wYWNrZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1
ZSgpIHsgcmV0dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFs
dWUoKTsgfQogCiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0
cyk7CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29m
ZnNldCAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBt
X3BhY2tlZEJpdHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJh
dG9yID09KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMo
KSA9PSBvdGhlci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNv
ZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAg
LTY5LDEzICs3OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDMyX3QgaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKTsKIAotICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0
YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2tw
b2ludCk7CisKKyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9
OwogCitpbmxpbmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29k
ZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBu
dW1iZXJPZkNoZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2tw
b2ludFNoaWZ0KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0
dXJuIGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwog
aW5saW5lIEJ5dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0
cykKIHsKICAgICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBi
aXRzOworICAgIHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
CmluZGV4IDcxYmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLmRmMGJkZWIx
Y2IwZjA1NDA4MDdlOWFmYTdlMjkzMTRhMTcwYzI3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBb
CiAgICAgOldhdGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIsCiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2Zp
bGUsCiAgICAgOkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFy
YXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogewor
ICAgICAgICBhcmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogewor
ICAgICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWws
CiAgICAgfQogCiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9w
IDp0YWlsX2NhbGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2Zp
bGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0s
CisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNo
ZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAg
bWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMs
CkBAIC04NDUsNiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0
YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDog
dW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5n
QXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQs
CkBAIC05OTIsNyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZp
cnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjog
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhi
NDNmNDQwLi43ZGEyMmMyZDJjYzdiZmMxMWQxZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0
ZXhwciBib29sIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlw
ZTIgdjIpCit7CisgICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdf
dHlwZTxFbnVtVHlwZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3Rk
Ojp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNp
emVvZihJbnRUeXBlMSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW50VHlwZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nh
c3Q8SW50VHlwZTI+KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBM
aXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+
IHJlc3VsdDsKKyAgICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKTsKKworICAgIGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwor
ICAgIHN3aXRjaCAoY29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5v
cGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWls
X2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjpt
YWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxB
c0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJn
Q291bnQpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFs
KE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAm
JiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENv
bnN0cnVjdFZhcmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9w
Q2FsbFZhcmFyZ3M6Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJh
cmdzOjphcmdDb3VudCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5
YjNjOWJjNzIzMjU5MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUx
NWNkYmZkNGI0MjdlZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVH
cmFwaC5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
ICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3
LDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitC
aXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25z
dCBDb2RlQmxvY2smLCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3
YXlzTGl2ZShpbnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGlu
ZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFu
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJm
OTYzNmEyYjk3NGU3OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBl
ODk5ODQ4MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICsz
MywyMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlz
TGl2ZShpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLmlzTG9jYWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCwgaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNO
b3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lz
dGVyIHJlZykKIHsKLSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS50b0xvY2FsKCk7CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlm
IChsb2NhbCA+PSBvdXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIG91dFtsb2NhbF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFz
dEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3Rl
cklzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQogewotICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNO
b3RBbHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBk
MDc2MTA5YTFmZGE1Zjk0N2Y1MjBmZTUxNGRkLi42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVj
YzYzNmVhMWViNWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIK
KyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdD
YXBhYmlsaXRpZXMuaCIKQEAgLTQwNyw3ICs0MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
awogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJs
ZS0+bV9sb2NrKTsKICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlw
ZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFi
bGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAg
cmVwbGFjZUNvbnN0YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0
KCkpLCBjbG9uZWRTeW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRo
VHlwZVByb2ZpbGVyT3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhD
b250cm9sRmxvd1Byb2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25s
eSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5v
bnltb3VzLgogICAgICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkg
ewotICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8
U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURl
cHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29k
ZS5tX3Zhcik7CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5
bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29s
dmVkOiB7Ci0gICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5t
X3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAg
ICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4o
Z2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVj
b2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lk
ZW50aWZpZXIpOwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3lt
Ym9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29w
ZSB3YXMgY3JlYXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBo
YXZlIHByZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0
YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNl
VHJhbnNpdGlvbiYgdHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVj
b2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4
aXRJbmRleCkgY29uc3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAg
ICAgICBjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRl
eCk7CisgICAgICAgIGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAg
IH0KKyAgICByZXR1cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
CiB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZv
aWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KGNvbnN0IE9wQ2F0Y2gmCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0
ZXJzKCk7ICsraSkKICAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpKSk7CiAKLSAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHBy
b2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+
KGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3Np
emUgPT0gbGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHByb2ZpbGVzLT5tX3NpemU7ICsraSkKLSAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgp
W2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmls
ZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAg
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZl
bmVzcyh1bnNpZ25lZCYgbnVtYmUKIAogICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURh
dGEuZ2V0KCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEt
Pm1fY2F0Y2hQcm9maWxlcykgewotICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2Zp
bGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1
NmNlNTgxNTBmNTM0MjY2Li4yNTA2NzI2M2UyNDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2Mz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEs
NiArMTYxLDcgQEAgcHVibGljOgogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJl
dHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogCiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJl
dHVybiBtX251bVZhcnM7IH0KKyAgICBpbnQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAog
ICAgIGludCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRl
cnM7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIy
OSwyMCArMjMwLDIwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFr
cG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAot
ICAgIGlubGluZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGlu
ZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA9PSB0aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RN
b2RlKCkpCisgICAgICAgIGlmIChyZWcgPT0gdGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9k
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRl
eCkuaXNDZWxsKCk7CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAg
cmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5k
ZXgoaW50IGluZGV4KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9u
dW1WYXJzOworICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9
CiAKICAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRl
eCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4
MSwxMCArNTgyLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnM7IH0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIo
aW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb25baW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC03NzQsNiArNzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25U
aHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAg
IAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkg
Y29uc3Q7CiAgICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29z
ckV4aXRDb3VudGVyOyB9CiAKICAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291
bnRlcisrOyB9CkBAIC04NzQsNyArODc1LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2lt
cGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmls
ZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxD
b2RlQ2FjaGUgbV9kaXJlY3RFdmFsQ29kZUNhY2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0Miwx
MCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBT
Y3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNl
Q29uc3RhbnQoaW50IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0
YW50KFZpcnR1YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBB
U1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVf
dD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0
ZXJzLnNpemUoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFT
U0VSVChyZWcuaXNDb25zdGFudCgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3Rh
bnRJbmRleCgpKSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFs
dWUpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCmluZGV4IDIxMDY4MTNmMGExZWFhNTEzNGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5
YTI4NmY4YWFiZjRkMzMyZmZmMWU3MWVhM2M4M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhhc2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9
IG51bGxwdHIpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBp
bmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8v
IEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3Ig
ZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJm
M2EuLjQ3YzY1N2M4ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
CkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYv
RmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2Rl
IGxpdmVuZXNzIGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5l
c3Mgb2YgdGVtcHMuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2lu
dCBhc2sgdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUx
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QK
KyAgICBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQp
IHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2Rl
SW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0Fsd2F5c0xpdmUocmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNM
aXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAg
ICAgCi0gICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8g
bWFrZSB0aGVtIGNvbXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3Mgdmll
dyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJp
dFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAg
IFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVz
ZVZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxs
RnJhbWUuaAppbmRleCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5h
MGFhN2MwOTI0NGY5OTU2YmVmMWZiOTgzOGI1NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5
LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9j
az4gYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAg
ICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGlu
Y2x1ZGUgZml4dXBzLgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDog
MjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAx
MDsKICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsg
Ly8gcmVhbCB0eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBm
YWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhl
IERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUg
cmVjb3ZlcmVkIG1hbnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxs
RnJhbWUgewogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3Rv
ciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0
byBpbml0aWFsaXplIGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAg
OiBzdGFja09mZnNldCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDAp
CisgICAgICAgICwgdG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAg
ICAgLCBraW5kKENhbGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBA
IC0yMTksNiArMjIyLDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwog
ICAgIH0KIAorICAgIHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIHRtcE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJk
aWZmX3QgY2FsbGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBw
dHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3
LDkgKzI1Niw5IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2lu
QW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90
IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxl
ciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKKy8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQg
aGVyZSBhbmQgbm90IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhl
IGRpcmVjdENhbGxlciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KLWlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElu
bGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSAqdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsy
NzAsMzggQEAgaW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3Qg
RnVuY3Rpb24mIGZ1bmN0aW9uKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVn
aXN0ZXIgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAg
ICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBy
ZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19J
TkxJTkUgT3BlcmFuZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQgb3BlcmFuZCkKK3sKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZh
bHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFu
ZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4g
cmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlT
X0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQu
aXNUbXAoKSA/IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0g
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisK
K0FMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3Bl
cmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1
ZWIxYzY0YTU5Li5lMDNmYTM5Mzk1OTU1NTJlYmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb25jdXJyZW50SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJW
YWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQogICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRl
eC5oYXNoKCkgKyBtX29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2Rl
SW5kZXguaGFzaCgpICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAg
IH0KICAgICAKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgs
NyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAg
fQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3Bl
cmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJl
dHVybiBtX29wZXJhbmQ7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRl
OiAKICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlP
cGVyYW5kVmFsdWVQcm9maWxlS2V5SGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAK
aW5kZXggMmI2OWYzNmM3ZmJkYTEwNTU3ODlkZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5
Yjk1NmY3OTc4NmVjODdhYTJjNjlhOGJjMDY3MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcApAQCAtNDIsNyArNDIsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQu
bV9raW5kID0gTGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2Nr
ID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0g
a2V5LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0g
a2V5Lm9wZXJhbmQoKS5vZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5k
ID0ga2V5Lm9wZXJhbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3
IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKEND
YWxsSGVscGVycyYgaml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6
eU9wZXJhbmQub3BlcmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBr
ZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsK
ICAgICAgICAgCiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFu
ZC5jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBw
cm9maWxlID0KQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlOjpyZXBvcnRWYWx1ZShKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBj
YXNlIExhenlPcGVyYW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtl
eSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3Bl
cmFuZC5vcGVyYW5kKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1
LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oCmluZGV4IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEy
ZGNmMzM1ZWM4OGQuLjM2ZDM2OWYwYzAwZmJkNDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3Bl
cmFuZDsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFu
ZDsKICAgICB9IHU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMu
aAppbmRleCBmMjlmZjlmOTczNmFlYjM3MzQ1OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li5jY2UwODAy
Zjg5ZDE3ODg2ODA0NjA5MDdlOTg2YTcwNGJhNmUxZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExMSArMzUsMjE5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwog
Ci1lbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3Bl
cmFuZCBpcyBvbmUgdGhhdCBleGlzdHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBk
b2VzIG5vdCBleGlzdCBiZXR3ZWVuIGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1
bWVudE9wZXJhbmQsIExvY2FsT3BlcmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5k
IHsKK3B1YmxpYzoKKyAgICBPcGVyYW5kKCkgPSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3Qg
T3BlcmFuZCYpID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDog
QXJndW1lbnRPcGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQor
ICAgIHsgfQorCisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAg
ICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7
IAorICAgICAgICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKS5pc0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisg
ICAgT3BlcmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBU
bXBPcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOwor
ICAgIH0KKyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJp
dHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSA9PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNM
b2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBU
bXBPcGVyYW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0
b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisg
ICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBBcmd1bWVudE9w
ZXJhbmQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmly
dHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0
b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90
aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1RtcCgpKQorICAg
ICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wg
T3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQo
KTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUp
Cit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOwor
ICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFu
ZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsg
T3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7
CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsg
fQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVf
dCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6
OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxz
dGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5n
IENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29s
PiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBl
eHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBz
aXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisg
ICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBtX3Zh
bHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMp
OwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9j
YWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYg
KCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAgICAgICAgICAg
IG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXpl
X3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUp
CisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxv
Y2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBt
X251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9j
YWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3Vt
ZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsg
bnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVl
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBP
cGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBl
eHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhl
ciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRz
KG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIu
bnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhl
ci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9j
YWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0K
LSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxv
Y2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisg
ICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVu
dEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9u
dW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7
CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4
KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMg
KyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0
bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcElu
ZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0KLSAgICBj
b25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1l
bnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQor
ICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlk
eCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxv
Y2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2Fs
SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRl
PE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAg
IHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAg
ICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFu
ZDoKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1
cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1w
bGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQor
ICAgIFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
S2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsK
KyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOwor
ICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVu
dChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9w
ZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQogICAgIH0K
ICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZv
cihzaXplX3QgaWR4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkK
KyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6
CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVy
YW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBs
b2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVy
biBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9j
YWxzKHNpemVfdCBzaXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNv
bnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1l
bnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYg
KHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSAr
IHNpemU7CisgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3Zh
bHVlcy5ncm93KG5ld1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+Ojpu
ZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6
ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ld
ID0gVCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkK
KyAgICAgICAgICAgIG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRl
eChvbGROdW1UbXBzIC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7Cisg
ICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6
bmVlZHNJbml0aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplIC0gb2xkTnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9j
YWxJbmRleChvbGROdW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJl
ZFZhbHVlKQorICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJl
ZFZhbHVlID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5z
aXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwot
ICAgICAgICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1i
ZXJPZlRtcHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IG1fdmFsdWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdy
b3cobmV3U2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsK
KworICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8
VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBv
bGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0g
ZW5zdXJlZFZhbHVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwo
c2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3Miw3NiBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09
IFQoKSk7CiAgICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBz
aXplX3Qgb3BlcmFuZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRG
b3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0K
KyAgICBDb25zdFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgo
aW5kZXgpOyB9CisKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQp
KQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQo
KSk7CisgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAgICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyKSBjb25zdAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
bmRJbmRleChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChv
cC52YWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAg
ICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnQoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJl
dHVybiBsb2NhbChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2Nh
bCgpKTsKICAgICB9CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCisgICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9w
LmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgIHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3Qg
VCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBU
Jj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAg
IGNvbnN0IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFu
ZChvcGVyYW5kKSk7IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVy
YW5kKG9wZXJhbmQpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5k
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3Bl
cmFuZCk7IH0KICAgICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0Cisg
ICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3Bl
cmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwo
KSkgPCBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29s
IGhhc09wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJh
bmQoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJl
Zy5vZmZzZXQoKSk7CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NF
UlQob3AudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG9wLnZhbHVlKCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGhhc09wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0
T3BlcmFuZChPcGVyYW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAg
dGhpcy0+b3BlcmFuZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUp
Ci0gICAgewotICAgICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFs
dWUpOwotICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpOyB9Ci0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tpbmRleF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFs
dWVzW2luZGV4XTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
eyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xv
Y2FsKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0g
ICAgaW50IG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZU
eXBlIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Cisg
ICAgUmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQor
ICAgIENvbnN0UmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5k
ZXgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygp
KQotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5v
ZmZzZXQoKTsKLSAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAg
ICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51
bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBp
bmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7
Ci0gICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCkudG9Bcmd1bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKS50b0xvY2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCkBAIC0yNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNT
RVJUKG51bWJlck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAg
ICAgICAgIEFTU0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwog
ICAgIH0KQEAgLTI2NSw5ICszNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVt
QXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMu
Ci0gICAgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1
bnNpZ25lZCBtX251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMg
b2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2Fs
cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5z
aWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAw
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2
M2RiZGViODE2YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDll
ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5s
aW5lcy5oCkBAIC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZv
aWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1Rt
cCgpKQorICAgICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBj
b250ZXh0KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRl
eCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1w
IiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAg
ICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9w
ZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBs
b2NhbChsb2NhbEluZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsg
dG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRt
cCh0bXBJbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFj
Y2NjYzA1MDJjMTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAg
ICwgbV9jb2RlVHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9k
aWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBt
X2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2Rl
KGluZm8ucGFyc2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJh
dGlvbk1vZGUpCiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRl
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCmluZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMw
ODJiMGEyNjNjMzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiAr
MTQxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBt
X2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAK
KyAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50
czsgfQorICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0
cnVlOyB9CisKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlz
UmVnaXN0ZXI7IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4
LDkgKzIwMSw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNvbnN0YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQx
OSw2ICs0MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwog
ICAgIHVuc2lnbmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAx
KSA+PSBtYXhBZ2UpOworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAg
ICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2Zj
ZWYyYjIxZTExODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5
YTY5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgKQEAgLTE3NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNl
UHJvZmlsZUJ5dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0
dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJh
bmQ7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVl
UHJvZmlsZSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBW
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
IAotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAg
ICAgOiBtX3NpemUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUg
aGFzIG1vcmUgc3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1
ZSBwcm9maWxlcwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAg
ICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9j
KG1fc2l6ZSAqIHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVm
ZmVyID0gTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyht
X3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAo
Jm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAg
ICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgfQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5W
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIu
Z2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVy
LmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1f
c2l6ZTsKLSAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7Cisg
ICAgTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMy
ZGMxY2JmNDVmM2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3Bw
CkBAIC0zNSwyMiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxG
cmFtZSogY2FsbEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAg
ICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1
cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIo
KSk7CiAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZElu
dDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdp
c3RlcigpKS51bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4g
anNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50
NTIoKSk7CiAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVy
biBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5h
TihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAg
IGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0
dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBj
YXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1
ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1Zh
bHVlKCk7CiAjZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVh
bigpKTsKICNlbmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgK
aW5kZXggZDhmMThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJi
YmNjNGZmOTdhNjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4
NmJhYjEyZjZjY2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2
ZmU2NjU5MjRkZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmlydHVhbFJlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zp
cnR1YWxSZWdpc3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWlubGluZSBib29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8
IDA7CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5s
aW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICBy
ZXR1cm4gb3BlcmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBm
cmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGlu
dCk7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0g
MHgzZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lz
dGVyKFJlZ2lzdGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+
KTsKIAogICAgIFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIo
c19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGlu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVn
aXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQot
ICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVh
bFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJh
bmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nh
c3Q8aW50PihzbG90KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAg
IGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92
aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29s
IGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3Zp
cnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wg
aXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQog
ICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJh
bmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29u
c3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmly
dHVhbFJlZ2lzdGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VS
VChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNT
RVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBt
X3ZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVy
ID0gMHgzZmZmZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMg
aW50IGxvY2FsVG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAg
IHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3Bl
cmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsg
cmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCmluZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMu
LjhkMmE3ZmI4MjQ3NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCkBAIC0xMTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAg
ICBtX3BhcmFtZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYg
cGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVn
Lm9mZnNldCgpKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9j
ay0+YWRkUGFyYW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcg
KzExOTYsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhG
dW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBj
b2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3Vy
ZSB0aGF0IHBhcmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVk
LgotICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCkt
PmluZGV4KCkpOyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJl
Z2lzdGVyKGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAg
ICAgYm9vbCBub25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBA
QCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5p
czxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZz
ZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAg
ICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAg
JiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNT
dHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0
VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3Rh
bnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+
dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihz
cmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7
CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFs
dWUpOwpAQCAtMzIyOSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAv
LyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZh
cmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8g
YXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RW
YXJBcmdPZmZzZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVj
a3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNm
NmRhODE5ZTMxZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBj
ZTQ2YWQzYzZmZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmls
ZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENv
ZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAg
ICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpOyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVC
bG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBw
YXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAg
ICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1Jl
Z2lzdGVySUQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJ
RC5oCmluZGV4IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTli
MTIzZDRkODliYTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0
SW5kZXgoaW50IGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBp
bmRleCkKICAgICAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5k
ZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1
YWxSZWdpc3RlcihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4
OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQx
NDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNh
MjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsK
IH0KIAordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJU
T1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1
ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFi
c3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJp
bnQoIigiLCBET01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwg
IikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7
CisgICAgICAgIG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFu
ZChvdXQpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIG91dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1
YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0
NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01K
SVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAg
ICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsK
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKworICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDog
bV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQor
ICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
ICAgICA6IFBheWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgICAgIApAQCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVt
cEFzT3BlcmFuZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICBib29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdv
cmxkICYmIGtpbmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFs
dWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkg
PT0ga2luZCAmJiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAg
IEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiAr
MjI3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5k
KCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgp
OwogICAgIH0KKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1
cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAg
ICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
aW5kZXggNjRhY2I1NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uYzQ0MTBiMjU4
YTYyMDlmODU3Njc2YjY2MDM4NjYwZGE3MGQ0NjQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAt
MzgxLDcgKzM4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAg
ICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0
VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
Lm9mZnNldCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBp
biB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vz
c0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAt
MzkyLDcgKzM5Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNh
c2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0
ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxv
Y2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAg
ICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcg
KzQyOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0
IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRl
bHkvU2V0QXJndW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRo
ZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMg
bWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAg
QVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAg
ICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6
IHsKQEAgLTQ1OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91
bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBz
aG91bGQgdHVybgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwog
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGkt
LTspCi0gICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0
ICsgaSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCmluZGV4IGQ3MzI0N2I5
M2M1ZGM3ODZiNjE3YWE1YWFkYzJiMGY2MTUyODZiNWYuLjg5YzA4ZmEwODBjZWEzMmZkOWM1OTFm
MzBmMWU3ZGQ0NmYxZDEyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRQb3NpdGlvbi5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZXNb
aV0tPmZpbmQoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFi
bGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3Bl
cmFuZCgpOwogCiAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
RWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGFmMmVkYTRhZDg4ZTliOTdhYWQ1ZjRmOTM5
MjM3NjIxOTUyYWVmODQuLmZhMjRjNjlkMGZlY2I3YmFmYzcwNWQ4NWMzYzVhZDBjNjUzOTFlOGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWlu
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtMzU4LDkgKzM1OCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNw
cmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBl
KG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkg
PT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0g
U3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIp
KQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCks
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTQ5MywxMCArNDk2LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBh
eWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IGhlYXAub3BlcmFuZCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIHJlZ2lzdGVyIG1heSBub3QgcG9pbnQgdG8gYW4gYXJndW1lbnQgb3IgbG9jYWws
IGZvciBleGFtcGxlIGlmIHdlIGFyZSBsb29raW5nIGF0IFNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNIZWFkZXIoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKHJl
ZykgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVyYW5kLmlzSGVhZGVy
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3Bl
cmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
ICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgfQpAQCAtNTYwLDEyICs1
NjMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2Ji
ZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJs
b2NrIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxv
Y2sub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xv
YmJlcmVkQnlCbG9jaykgewpAQCAtNjI3LDcgKzYzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoQWJzdHJhY3RIZWFwIGhlYXApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFwLmtpbmQoKSA9PSBT
dGFjayAmJiAhaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgaGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRl
ciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNB
cnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8q
IGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGls
ZCgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0
aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50KSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVk
SW50MzIpKSwKQEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJ
bmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZh
cmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocmVnLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
S2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJl
ZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRo
RXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSwgRWRnZSh2YWx1ZSkpOwpAQCAtMTAxOSw5ICsxMDM3LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5k
aWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNl
dDsKQEAgLTEwMzAsNyArMTA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRh
LT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIHZhcmFyZ3NEYXRh
LT5saW1pdCwgdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCmluZGV4IDYyNjEx
MjNjYmZlYzNlYmExOTVkMDliOTMxMDI2ZjI2YzcyNTg0NzYuLjIwNmQ2ZmJkYzU0YTM2Y2I4NDE4
YThiMzg1NDZkODc1Nzc5OTAxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogeworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm4gKHJlZy5pc0FyZ3VtZW50KCkgJiYgcmVnLnRvQXJndW1lbnQoKSkgfHwgcmVnLmlz
SGVhZGVyKCk7Ci0gICAgCisKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
CiAgICAgICAgICYmIHJlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTIsMTMgKzU2LDEzIEBAIGJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgcmV0dXJuIHJl
ZyA+PSBhcmd1bWVudFN0YXJ0ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7
CiB9CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZp
cnR1YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSog
Y2FuZGlkYXRlLCBPcGVyYW5kIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCks
IHJlZyk7CisgICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBl
bWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNl
cnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2lu
IG9yaWdpbikKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRz
LCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7
CiAgICAgR3JhcGgmIGdyYXBoID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3
MywxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAg
IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbUNsb25lZEFyZ3VtZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhh
bnRvbUNyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZl
cgotICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZCwKKyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50
cy0+b3AoKSk7CiAKKyAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisg
ICAgICAgIHJldHVybiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9u
U2V0LCBhcmd1bWVudHMtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRo
aXMpOworCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkKSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwog
ICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAg
ICAgICAgIE5vZGUqIGN1cnJlbnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJndW1lbnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsx
MTAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBp
ZiAoYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5p
bnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihh
cmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkp
KTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNh
c3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7
CiAgICAgfQogICAgIAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJn
dW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIw
LDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWdu
ZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAhYWRkVGhpczsKICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOwogICAgICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBl
bWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y0ludDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAog
ICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4s
IGpzTnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAg
ICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgKyAhYWRkVGhpcyksIEludDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApIHsKICAgICAgICAgLy8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEg
bmVnYXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRo
YXQgaGVyZS4KICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAg
ICAgICAgICAgRWRnZShyZXN1bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJ
bnQzMlVzZSkpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNl
KG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhZGRUaGlzKSwgSW50MzJVc2UpKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCmluZGV4IDlh
NzcxOGZiYmY1NDdiMmY2YWUxMDFkYWYzNzRhMDZhMmMzZGRmMTIuLjc0ZjkzOWU4MTYyMmQ0MDI0
NmUyMzU1ZDUwOThhOWVkMmE4NTIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaApAQCAtMzEsMTEgKzMxLDExIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rlcik7Ci1ib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBh
cmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQpOworYm9v
bCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCk7CiAK
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25T
ZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbik7Cisg
ICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5v
ZGVPcmlnaW4sIGJvb2wgYWRkVGhpcyA9IGZhbHNlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oCmluZGV4IDk2ZGFjMzlhNDQ0ZmZiZDNjZTU0M2Y1N2YzNmNkNjFkZWNjMjhiZDQu
Ljg5N2M3MGRmZmJhMDY2YjY0OWNhZmRjYzFlZjA5MzM3NjgxMDRkMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCkBAIC0xMzks
OCArMTM5LDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYg
b3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJh
bmQob3BlcmFuZCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQogICAgIEFic3RyYWN0
VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
LmxvY2FsKGluZGV4KTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsgfQogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
CmluZGV4IDc3NDNlN2QwMWYxY2FkNzgxZDg0YWIwM2QzYzA5Yzc3ZjgwMjliYTUuLmMyYjU1YWE1
YzRhNTIyOWIxYjFhNDQzMWMxODdhZGVmNDZjM2RiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCB2
b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVIZWFwKCkKIAogdm9pZCBBdmFpbGFiaWxpdHlNYXA6
OnBydW5lQnlMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4gd2hlcmUpCiB7Ci0gICAg
T3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KG1fbG9jYWxzLm51bWJlck9mQXJndW1l
bnRzKCksIG1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCksIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFi
bGUoKSk7CisgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KE9wZXJhbmRzTGlr
ZSwgbV9sb2NhbHMsIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CiAgICAgZ3JhcGguZm9y
QWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIHdoZXJlLAotICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAg
bG9jYWxzQ29weS5vcGVyYW5kKHJlZykgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAgICAgICAg
IH0pOwogICAgIG1fbG9jYWxzID0gV1RGTW92ZShsb2NhbHNDb3B5KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCmluZGV4IDUzNTUyNTYwMjNkZGNm
MjgwZGM1OTViMzNhN2M3ZmRlYzU0ZTY0ZjAuLjgwYzEyYmYxODAyNWE1NjEwNTk2ZGEyNGUyM2Mw
MjVmMmFiZTRmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHlNYXAuaApAQCAtNjYsOSArNjYsOSBAQCBzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKICAg
ICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzRnVuY3RvciwgdHlwZW5hbWUgQWRk
RnVuY3Rvcj4KLSAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVy
IHJlZywgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCisgICAg
dm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1bmN0b3Im
IGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQogICAgIHsKLSAgICAgICAgQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgQXZhaWxhYmls
aXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQob3ApOwogICAgICAgICBpZiAoIWF2
YWlsYWJpbGl0eS5oYXNOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXggMDU4NDQ5NjNl
NjEwZWQyOTNjNTYwZmFiZmQzODlhOWYzOTc4MGEwNy4uZTIxYjI4YjUyMjFmMTU2MThiODA2NGEz
YTdiMmQ3ODY5MTM4NDIxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVj
dXRpb25Db3VudCkKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWdu
ZWQgbnVtVG1wcywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiAgICAgOiBieXRlY29kZUJlZ2luKGJ5
dGVjb2RlQmVnaW4pCiAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICwgY2ZhU3RydWN0dXJlQ2xv
YmJlclN0YXRlQXRIZWFkKFN0cnVjdHVyZXNBcmVXYXRjaGVkKQpAQCAtNDgsMTEgKzQ4LDExIEBA
IEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNp
Z25lZCBudW1Bcmd1bWVudHMsIHVuc2lnCiAgICAgLCBpc0xpbmtlZChmYWxzZSkKICNlbmRpZgog
ICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCi0gICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMpCi0gICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rp
b25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIEFic3RyYWN0VmFs
dWU6OmZ1bGxUb3AoKSkKKyAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcykKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwg
ZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkBAIC03MCw2ICs3MCwxNSBAQCB2
b2lkIEJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAg
aW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMs
IEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJl
VG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVU
bXBzKG5ld051bVRtcHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRt
cHMpOworICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVl
c0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3Ao
KSk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKIHsKICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IGI1YWRmMDkx
MmQwOTQyYmU5N2U5ODdjZGM4OWY0YWUzNGQwYzBiYzguLjFkZDM4Yzc5MDhkYzZmNGQxYjA4NWJj
OGUwNjI1NDgwZGI0NDk3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCkBAIC00NiwxMSArNDYsMTIgQEAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2Nr
Tm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7
CiAgICAgQmFzaWNCbG9jaygKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1
bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywKKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywKICAgICAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQp
OwogICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAgCiAgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWdu
ZWQgbmV3TnVtTG9jYWxzKTsKKyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1w
cyk7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUo
KTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5k
ZXggNzUwOGUyMTlkYzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOS4uMDA4Y2Y1MjI2OTU3
YzlhODM1ODVjNWU1ZTJjMTI1ZjJmOGNlNGIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9p
ZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+
JiYgYmxvY2spCiAKIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90
IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxv
Y2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7
CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5
dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCks
IGV4ZWN1dGlvbkNvdW50KSk7CiAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKICAgICBh
dXRvKiByZXN1bHQgPSBibG9jay5wdHIoKTsKICAgICBpbnNlcnQoaW5kZXgsIFdURk1vdmUoYmxv
Y2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKaW5kZXggN2U0YTlmZTYyMzNiNzQ0OWU4Mjg2NjJjMWU0OTlkYzllODQ0MDhiNy4uZDA2NDdj
ZjVkOTg2ZTBhOWRlN2ZiNTQ0ZGVjZWE0MjI1NDY1YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkp
KQogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQor
ICAgICAgICAsIG1fbnVtVG1wcyhtX2NvZGVCbG9jay0+bnVtVG1wcygpKQogICAgICAgICAsIG1f
cGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAg
ICAgLCBtX2lubGluZVN0YWNrVG9wKDApCkBAIC0xMzksNiArMTQwLDE3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsK
ICAgICB9CiAKKyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKKyAgICB7
CisgICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9u
dW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOworICAg
ICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9j
ayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8vIEhlbHBlciBm
b3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAg
ICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2RlVHlwZSBvcCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0
IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzAsMjUgKzI4MiwzMyBAQCBwcml2
YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+
JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9j
ayo+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRz
KTsKICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2twb2ludCgpCisg
ICAgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCksIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAv
LyBBdCB0aGlzIHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4
aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9j
ZXNzU2V0TG9jYWxRdWV1ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgp
IHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAog
ICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAg
ICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9
CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUg
aW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIE5vZGUqIGdldERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNU
bXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAg
ICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAg
ICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKIAotICAg
ICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBnZXRMb2NhbChvcGVyYW5k
KTsKKyAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAgfQogCiAgICAg
Tm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAtMjk4LDggKzMxOCw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgp
OwogICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFu
dHNbY29uc3RhbnRJbmRleF0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNv
ZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
b3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVC
bG9jay5nZXRDb25zdGFudChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChj
b25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFu
dHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM1OCw5
ICszNzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0
aGUgdG9wIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsK
LSAgICBOb2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVl
LCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXREaXJlY3QoT3Bl
cmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQog
ICAgIHsKLSAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQo
KSksIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCks
IHZhbHVlKTsKIAogICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIg
T1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CkBA
IC0zNzQsNyArMzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBkZWxh
eWVkLmV4ZWN1dGUodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9j
YWxRdWV1ZSgpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRM
b2NhbFF1ZXVlLnNpemUoKTsgKytpKQpAQCAtMzkyLDE4ICs0MTMsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7CiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBr
ZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CiAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlP
cGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwog
ICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVy
ZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwo
KTsKLQotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChsb2NhbCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFu
ZC5pc0xvY2FsKCkpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMg
aGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFu
ZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fs
cy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtNDI4LDIwICs0NDgsMjYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRp
Y09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNl
dE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2RlT3Jp
Z2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNU
bXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmln
aW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4p
OwogCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewotICAgICAgICAg
ICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0
aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7CisgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCppbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5k
OiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251bVRt
cHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAiIHRt
cHMuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNl
dE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3Vt
ZW50UG9zaXRpb25Gb3JMb2NhbChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRp
b24pCiAgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlv
bik7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYm
IG9wZXJhbmQgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVs
c2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAg
ICAgIH0KIApAQCAtNDUxLDcgKzQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bWVyZ2VDaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKSwgQmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBh
ZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5v
ZGU7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1
MDksMjEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9
Ci0gICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4s
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0g
Tm9ybWFsU2V0KQorICAgIE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFu
dGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUg
PSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmln
aW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAg
ICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
dW5zaWduZWQgYXJndW1lbnQgPSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJn
dW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEocmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1l
bnRzLCBleGNlcHQgZm9yICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAg
ICAgIC8vIHRoZW4gbWFrZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBp
ZiAoYXJndW1lbnQgfHwgbV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAg
IGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNo
RGlyZWN0KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OSwx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQub2Zmc2V0KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3Vt
ZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJn
dW1lbnRdOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9z
aXRpb24oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmlu
ZEFyZ3VtZW50UG9zaXRpb24oT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9z
aXRpb25Gb3JBcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBm
aW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmlu
ZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NTAs
OSArNTc5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1
Z2dlckVuYWJsZWQoKSk7CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlu
bGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERp
cmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpCi0gICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1l
LCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChp
bmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1
bWVudHMgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51
bVBhcmFtZXRlcnMoKTsKIApAQCAtNTc1LDYgKzYwNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgZnVsbExpdmVuZXNzID0gbV9ncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNh
dXNlIHRtcHMgYXJlIG5vdCByZXF1aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5l
c3MuZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNz
Q2FsY3VsYXRpb25Qb2ludChvcmlnaW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxv
Y2FsLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9j
YWxdKQpAQCAtNTg0LDI3ICs2MTQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAg
IH0KIAotICAgIHZvaWQgZmx1c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBm
bHVzaChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJl
Y3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwg
ZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hE
aXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50
UG9zaXRpb24pCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50
UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhh
bnRvbUxvY2FsPEZsdXNoPihvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9t
TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50
UG9zaXRpb24pCisgICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFu
ZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1Rt
cCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAg
IAotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIApAQCAtNjE0LDI2ICs2NDQsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9w
SW5mbyh2YXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikK
ICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAg
ICB9CiAKLSAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewog
ICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmlu
ZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5s
aW5lU3RhY2tFbnRyeSogaW5saW5lU3RhY2tFbnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRk
Rmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcp
IHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJh
bmQpOyB9OwogICAgICAgICBmbHVzaEltcGwoaW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxs
RnJhbWUsIGFkZEZsdXNoRGlyZWN0KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWlu
YWwoKQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OwotICAg
ICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwg
VmlydHVhbFJlZ2lzdGVyIHJlZykgeyBwaGFudG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKKyAgICAg
ICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBv
cGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50
b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7
IHBoYW50b21Mb2NhbERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5h
bEltcGwoY3VycmVudENvZGVPcmlnaW4oKSwgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2Nh
bERpcmVjdCk7CiAgICAgfQogCkBAIC03NjEsNiArNzkwLDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAg
cmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9CisgICAgTm9kZSogYWRkVG9HcmFwaChO
b2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEpCisgICAgeworICAgICAg
ICBBU1NFUlQob3AgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBP
cEluZm8ob3BlcmFuZC5raW5kKCkpLCBPcEluZm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsK
KyAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBP
cEluZm8gaW5mbzIsIEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGls
ZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5v
ZGUoCkBAIC0xMDkxLDggKzExMjUsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIg
b2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHM7Ci0gICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jhcmll
cykgdXNlZCBpbiB0aGUgZnVuY3Rpb24uCisgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZh
cnMgKyB0ZW1wb3JhcmllcykgdXNlZCBieSB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4K
ICAgICB1bnNpZ25lZCBtX251bUxvY2FsczsKKyAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1w
cyB1c2VkIGZvciBmb3J3YXJkaW5nIGRhdGEgdG8gYW4gT1NSIGV4aXQgdG8gY2hlY2twb2ludC4K
KyAgICB1bnNpZ25lZCBtX251bVRtcHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4g
dW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxs
b2NhdGUgZm9yIGFyZ3VtZW50cyB0byBvdXRnb2luZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRo
aXMKICAgICAvLyBudW1iZXIgaW5jbHVkZXMgdGhlIENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGlu
aXRpYWxpemUgZm9yIHRoZSBjYWxsZWUKQEAgLTExNTksMTQgKzExOTUsMTcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCk7CiAgICAgICAgIAotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBj
b25zdAorICAgICAgICBPcGVyYW5kIHJlbWFwT3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1w
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52
YWx1ZSgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNT
RVJUKCFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQog
ICAgIH07CiAgICAgCkBAIC0xMTc1LDEzICsxMjE0LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1
c0NvbnRleHRTdGFjayBtX2ljQ29udGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVk
U2V0TG9jYWwgewotICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOwotICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRN
b2RlIG1fc2V0TW9kZTsKLSAgICAgICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQot
ICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAg
RGVsYXllZFNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5k
LCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihv
cmlnaW4pCiAgICAgICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQpAQCAtMTE5NCw4ICsxMjI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZXItPnNldEFyZ3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUs
IG1fc2V0TW9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdp
biwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBh
cnNlci0+c2V0TG9jYWxPclRtcChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1v
ZGUpOwogICAgICAgICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAg
T3BlcmFuZCBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07Cisg
ICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5
ZWRTZXRMb2NhbCwgMj4gbV9zZXRMb2NhbFF1ZXVlOwpAQCAtMTIwOCw3ICsxMjQ3LDcgQEAgcHJp
dmF0ZToKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9j
ayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5k
ZXgpOwotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9j
ayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBS
ZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJ
bmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBC
YXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5n
VGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRl
Y29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0
cy5zaXplKCkpCkBAIC0xMjIwLDcgKzEyNTksNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNl
cjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQog
CiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygp
CiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2Nr
KEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAg
UmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2Rl
SW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAg
ICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5k
QmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTE0MjMsNyAr
MTQ2Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIC8vIElmIHRoZSB0YXJnZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZhcmFyZ3MsIHdlIGRv
IG5vdCBrbm93IGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgZmlsbGVkIGJ5IExvYWRW
YXJhcmdzLiBWYXJhcmdzIElubGluZUNhbGxGcmFtZSdzCi0gICAgICAgICAgICAvLyBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxs
ZWQgYXJndW1lbnRzIGJ5IExvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBm
cmFtZSB3aGljaCBtYXkgYmUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkg
eGtMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5
IGJlCiAgICAgICAgICAgICAvLyBhIGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50by4KICAgICAgICAg
ICAgIGlmIChjYWxsRnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMTQ0OSw3ICsxNDg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJz
aXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAg
Ly8gV2UgbXVzdCBzZXQgdGhlIGNhbGxlZSB0byB0aGUgcmlnaHQgdmFsdWUKICAgICAgICAgaWYg
KHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoc3RhY2tF
bnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAg
c2V0RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOworICAgICAgICAg
ICAgICAgIHNldERpcmVjdChyZW1hcE9wZXJhbmQoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJh
bWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFy
Z2V0Tm9kZSk7CiAKQEAgLTE2MTQsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
Q2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgPSByZWdp
c3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAgaW50IGlu
bGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2FsbEZyYW1lU3Rh
cnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxvY2FscygKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsK
KyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAgICAgICAgIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVD
YWxsRnJhbWUgPyBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0
IDogMCkgKyBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpICsgY29kZUJs
b2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1f
Z3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0LmlzVmFs
aWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJl
c3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChy
ZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxs
ZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsK
QEAgLTE2MzYsNyArMTY3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAgICBJbmxp
bmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgSW5s
aW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2Nr
LCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlu
bGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29u
dGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC52aXJ0dWFsUmVn
aXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJs
b2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkg
aGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBA
IC0xNjcxLDkgKzE3MTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBI
b3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBl
eGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8g
dGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5saW5lZAog
ICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3
ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9m
ZnNldCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dl
dCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0
Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcElu
Zm8oYXJndW1lbnRUb0dldCksIHZhbHVlKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5h
cHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dl
dCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwpAQCAtMTcxNywxNiArMTc1OCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAg
ICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4KICAgICAg
ICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkgewogICAg
ICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwg
dmFsdWUpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkp
OworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9T
ZXQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxh
eWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwg
SW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAg
ICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBp
bmRleCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRU
b1NldCksIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERl
bGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHVuZGVm
aW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KIApAQCAtMTg5MywxMiArMTkz
NCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVj
a3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAgICAgICAK
ICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zm
c2V0KCk7CisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAg
ICAgCiAgICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rl
ck9mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0
ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAg
ICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworICAgICAg
ICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBo
Lm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxS
ZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKQEAgLTE5MDYsMTEgKzE5NDcsMjQg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1l
bnRzT2Zmc2V0OwogICAgICAgICBkYXRhLT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOwogICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11
bTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJn
cykKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5m
byhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisKKyAgICAgICAgaWYgKGNhbGxPcCA9
PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENv
dW50OworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyk7CisgICAgICAgICAgICBlbHNlIGlmIChpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkp
CisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGdldERpcmVjdChyZW1hcE9wZXJhbmQo
aW5saW5lQ2FsbEZyYW1lKCksIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAg
ICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFt
ZSgpLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0Fy
Z3VtZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQoT3BlcmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3Vu
dCkpOworICAgICAgICAgICAgc2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFy
Z3NMZW5ndGgsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVz
c0NoZWNrcG9pbnQoKTsKKworICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJ
bmZvKGRhdGEpLCBnZXRMb2NhbE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5j
ZSwgd2UgbmVlZCB0byBrZWVwIGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAg
ICAgICAgLy8gYW5kIGFyZ3VtZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dl
dmVyLCB3ZSBvbmx5IG5lZWQgYSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NiwxNCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBh
bHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAg
ICAgICAgLy8gYmVmb3JlIFNTQS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIo
cmVtYXBwZWRSZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsK
KyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKGRhdGEtPmNvdW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwg
YnV0IGl0IHdpbGwgZm9yY2UgdGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlz
IGRvZXNuJ3QKICAgICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBh
IFNldEFyZ3VtZW50RGVmaW5pdGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlz
CiAgICAgICAgIC8vIG1vc3RseSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlh
YmxlLT5wcmVkaWN0KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJn
ZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291
bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFi
bGUpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3Bl
cmFuZCgpLCBzZXRBcmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtl
ZFNldCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcg
KzIwMDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0
QXJndW1lbnRzID49IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJn
dW1lbnREZWZpbml0ZWx5LCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0
QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
ZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAg
ICsrbnVtU2V0QXJndW1lbnRzOwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNyw3
IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZygKICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVy
IG9mZnNldDogIiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVS
ZWcocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJl
ZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxl
ZVJlZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2Fs
bGVlUmVnLCAiXG4iKTsKICAgICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwg
SW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKIApAQCAtNTEwMiw3ICs1MTU2LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9u
ZXdfcmVnZXhwOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3Jl
Z2V4cC5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4
cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJv
emVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZv
KGZyb3plblJlZ0V4cCksIGpzQ29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9uZXdfcmVnZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMyLDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSAmJiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJy
ZW50QmxvY2stPmF0KDApLT5vcCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAg
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9i
dWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90
ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3
ICs2MjQ5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAg
ICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2Nh
bCgpKQpAQCAtNjIyMywxNCArNjI3NywxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHBy
b2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQo
b3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9H
cmFwaChFeHRyYWN0Q2F0Y2hMb2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxv
Y2FsUHJlZGljdGlvbnNbbnVtYmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1i
ZXJPZkxvY2FsczsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhw
cm9maWxlLm1fb3BlcmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1v
dkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1Rv
U2V0LnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcg
KzY0MTIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1f
c3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUp
OwogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1w
ZWQpIHsKQEAgLTY4MjYsOCArNjg4MCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJv
bm1lbnQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5
dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZh
bHVlLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1
ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBp
bml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAg
ICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9k
ZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcElu
Zm8oc3ltYm9sVGFibGUpLCBPcEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2
OTExLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAgICAgICAgIC8vIGxvYWRzIGZyb20gdGhlIHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0
aGF0IHdvdWxkIHByZXZlbnQgdGhlIERGRyBmcm9tIHRyYWNraW5nIHRoZQogICAgICAgICAgICAg
Ly8gYnl0ZWNvZGUtbGV2ZWwgbGl2ZW5lc3Mgb2YgdGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4o
KTsKLSAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAg
IGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxK
U0Z1bmN0aW9uKj4oKm1fdm0pKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0
YW50KGZ1bmN0aW9uLT5zY29wZSgpKTsKQEAgLTcyNzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhl
IG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBi
YXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgICAgIG1faW5saW5lQ2Fs
bEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2Fs
bGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2Rl
QmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09m
ZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAg
ICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzYzOCw3ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTc2NTgsMjQgKzc3MTQsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVj
ZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5n
T3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwg
T3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJh
bmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3Vt
ZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVudHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJn
dW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRvQXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZh
cmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmln
aW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhh
bnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQ
aGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydExpdmVu
ZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJt
aW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2Fs
RGlyZWN0KTsKQEAgLTc3NDAsNiArNzc5Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
KCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVu
dHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9n
cmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJT
bG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCmluZGV4IDhlOWJiNGFjYmU1NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNi
ZmQuLjNkYzc1NjhmMWVlMmM2OTc3MjI2OGNjOTZkZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBw
cml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgY29uc3QgT3Bl
cmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3Bs
YW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIE9w
dGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAg
IGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
Tm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGlmICghbm9k
ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIp
OworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwg
IlxuIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFs
dWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcg
Iiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFk
Lm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9T
UkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFsdWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHAKaW5kZXggZDk4ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0
MjZhZjBmMjM4Mi4uNTc3MGYwOTg5NDJjODk2YjdhY2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1
bWVudHMoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAg
IHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlz
PFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIGNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBA
QCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAg
ICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQo
KSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3
aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVu
dE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50
T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVy
YW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxl
LCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2Rl
VHlwZSwgT3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgQVNTRVJUKG90
aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBv
dGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0yNzAsMTUgKzI4MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAg
ICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1l
bnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUt
PmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgp
LmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogeworICAgICAgICAgICAg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVy
YW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6
IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5
cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9M
b2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1w
T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZv
cjxub2RlVHlwZSwgVG1wT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5k
KCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgp
LCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9k
ZS0+b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVM
b2NhbHNJbkJsb2NrKCkKQEAgLTI4OSw2ICszMTEsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgY2xlYXJWYXJpYWJsZXM8QXJndW1lbnRPcGVyYW5kPigpOwogICAgICAgICBjbGVhclZh
cmlhYmxlczxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJh
bmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVu
Y2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAg
Ly8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3Qg
YXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcgKzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkK
ICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9j
YWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNr
ID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1
cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9i
bG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bl
cmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBo
aVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9w
ZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOwotICAgICAgICBy
ZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOwor
ICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDogcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAg
ICAgY2FzZSBUbXBPcGVyYW5kOiByZXR1cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXB1dGVJc0ZsdXNoZWQoKQpAQCAtNTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3Vt
ZW50UGhpU3RhY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0
YWNrOworICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAg
VmVjdG9yPE5vZGUqLCAxMjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3
NjM0YmI2NmIxMjM5NDcxYjVhNjE2NjdjZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVk
ZGU2OThhYWViZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAK
QEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBTdGFjazogewogICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5
bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJl
bW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhl
YXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBp
ZiAoY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFj
a01hcC5jbGVhcigpOwogICAgICAgICAgICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5r
aW5kKCkgPT0gU3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVl
MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5k
KCkgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjI2LDggKzIyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJz
dHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJh
Y2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0
SGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIo
KSk7Ci0gICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
YWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RI
ZWFwLnBheWxvYWQoKS52YWx1ZSgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUucmVzZXQobmV3IEltcHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgU2lkZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0
aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgp
LnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBT
dGFja01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRp
b24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAh
PSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0
b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZS0+dmFsdWU7CkBAIC0yOTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBh
IGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3Rh
Y2tNYXAuCiAgICAgLy8KICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1f
ZmFsbGJhY2tTdGFja01hcCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgot
ICAgIEhhc2hNYXA8aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVm
YXVsdEhhc2g8aW50MzJfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PGludDMyX3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwg
c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhh
c2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwOwogICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9o
ZWFwTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA4
OWJjNjQxZjUyNmJiNTNmZjAzN2Y3M2NmOTUwYmFjNjQ2ZDQ5OTU0Li44MmYzY2E2NDE4NGY5MTkz
NjUwMzliMTMyMjE3ZGQ5OWVhOTcxMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgLy8gc2NhbiB3b3VsZCByZWFkLiBUaGF0J3Mgd2hhdCB0aGlzIGRvZXMuCiAgICAgZm9y
IChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBp
bmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
Ci0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQog
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2Rl
cyBjYW4gcmVhZCBmcm9tIHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBj
b25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwor
ICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5
Nyw3ICs0OTcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAK
ICAgICBjYXNlIEZsdXNoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+
bG9jYWwoKSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFu
ZCgpKSk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAt
NzY0LDEyICs3NjQsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2FzZSBTZXRDYWxsZWU6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7
CkBAIC03ODAsNyArNzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAg
ICBjYXNlIFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVu
Z3RoOgpAQCAtNzg4LDM2ICs3ODgsNDMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5v
ZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFu
ZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFj
a0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNr
OiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICByZWFkKGhlYXApOwogICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
OworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPm9wZXJhbmQpOwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
IHsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOworICAgICAgICByZXR1cm47
ICAKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQp
OwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4o
aSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MjYsOSArODMzLDkg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAg
IAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQo
KSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19j
YXN0PGludD4oaSkpKTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0
YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21i
aW5lZExpdmVuZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRM
aXZlbmVzcy5jcHAKaW5kZXggOTU4NjZhN2Y5MWE3MTQ0MmRhMWM0ZjdlNDcwMGQwOWNkMmFjMzBm
My4uMTU3NDZjMDU0ZjBkZjMzYmEzMmQzOWZhZmUwMmRiYmQ3ZDI5MTRjYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCkBAIC0zOSw3
ICszOSw3IEBAIHN0YXRpYyB2b2lkIGFkZEJ5dGVjb2RlTGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBB
dmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCwKIHsKICAgICBncmFwaC5mb3JBbGxMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKICAgICAgICAg
ICAgICAgICByZWcsCiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IDc5ODdi
ODcwZmQ1MDlmOTMwMDA3ZTM1NmFjMDU1ZWE2NmJmZTdhZGIuLjdmZmQ0ZDM1YjZjZjVjOWRlMzgx
ZTdkYTYxMzMyZmQ1MjQ5NjU1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcApAQCAtNTYsNyArNTYsNyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6
OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICBjb2RlT3JpZ2lu
cy5hcHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5z
aXplKCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7
Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJl
dHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXgg
Q29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CkBAIC02NCwxMyArNjQsMTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVD
YWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBl
bmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkg
LSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAg
cmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9u
RGF0YTo6bGFzdENhbGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3Jp
Z2lucy5zaXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29k
ZU9yaWdpbnMuc2l6ZSgpIC0gMSkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRl
eChjb2RlT3JpZ2lucy5zaXplKCkgLSAxKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgg
Q29tbW9uRGF0YTo6YWRkRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDg1NDEyMzE0
NzQxZTZmMTEyNjFmMmU5N2M0OWZlNjQ0ZGFlN2JhZjcuLmYzOGM4M2ZkZDMwYzJmNTNiM2Q1MDkz
ZjQwYjJjNzBlOTUzMTA0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKQEAgLTI5NCw2ICsyOTQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIElu
c3RhbmNlT2ZDdXN0b206CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAgICBjYXNlIE51bWJl
clRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAppbmRleCAxN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThi
NTM5Li40NWZiYzQzOWQ1M2JhOTUwZTdhOGQ4OWFjOWVjMTk3MmJhMDkzOWI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw3ICs5MCw2IEBAIHN0YXRpYyBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkg
c3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdh
bnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2Vz
IGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0
eUZpeHVwR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRv
cik7CiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsK
ICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFlZTFmMDA3M2IwZjRi
YmNjNDczNGViNjQxZTQ2NDhjMzA1NWEyNDQuLmNhMzNkYjIyN2Q0YjkyNzczZmE4NmQ3MmVlM2Q0
ZDFiODViZjk4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcApAQCAtMjQzMiw2ICsyNDMyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisKICNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBl
bnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVz
LgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKQEAgLTI0NjQsOCArMjQ3Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAg
ICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgog
ICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6
CiAgICAgICAgIGNhc2UgTmV3UHJvbWlzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaAppbmRleCAwYmYxYzNmYmJhYzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUy
OGI5Li45MzNhMmJkZTIyZTE2NmMyYWViNmQ0YWMxYmJlOWNlMWU1Y2VkNTZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC0zMiw2ICszMiwxMCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFjZSBGb3JBbGxLaWxs
c0ludGVybmFsIHsKK2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKwogLy8gVXRp
bGl0aWVzIGZvciBmaW5kaW5nIHRoZSBsYXN0IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSBp
biBERkcgU1NBLiBUaGlzIGFjY291bnRzIGZvciBsaXZlbmVzcyBkdWUKIC8vIHRvIE9TUiBleGl0
LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgZW51bWVyYXRpbmcgb3ZlciBhbGwgb2YgdGhlIHBy
b2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlLAogLy8gYnkgZXhwbG9yaW5nIGFsbCBi
bG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMgbGl2ZSBhdCB0YWlsIGFuZCB0aGVuIGV4cGxvcmluZyBh
bGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUgdGhlCkBAIC01MywxMyArNTcsMTMgQEAgdm9pZCBmb3JB
bGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5v
ZGVBZnRlciwgY29uc3QKICAgICAKICAgICBDb2RlT3JpZ2luIGFmdGVyID0gbm9kZUFmdGVyLT5v
cmlnaW4uZm9yRXhpdDsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOwor
ICAgIE9wZXJhbmQgYWxyZWFkeU5vdGVkOwogICAgIC8vIElmIHdlIE1vdkhpbnQgc29tZXRoaW5n
IHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxsIHRoZSBvbGQgdmFsdWUuCiAg
ICAgaWYgKG5vZGVBZnRlci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3Jh
cGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3Rvcihy
ZWcpOwotICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gcmVnOworICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBub2RlQWZ0ZXItPnVubGlua2VkT3BlcmFuZCgpOworICAgICAgICBpZiAoZ3JhcGgu
aXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBhZnRlcikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Io
b3BlcmFuZCk7CisgICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSBvcGVyYW5kOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtNzAsOCArNzQsMjQgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5k
cyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QK
ICAgICAvLyBvdGhlciBsb29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJh
bWUgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxG
cmFtZSA9PSBhZnRlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZz
ZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0IDogMDsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGlu
ZUNvZGVCbG9ja0ZvcihiZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIu
Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9y
ZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpOworCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVz
c0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAg
ICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJs
b2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgaW50IHRtcE9mZnNldCA9
IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0
IDogMDsKKyAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAgICAgICAgIGxpdmVC
ZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CisKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFj
aFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKE9wZXJh
bmQoVG1wT3BlcmFuZCwgdG1wICsgdG1wT2Zmc2V0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIC8vIE5vIGxvY2FscyBjYW4gZGllIGF0IGEgY2hlY2twb2ludC4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlu
bGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwog
ICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5l
c3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9y
ZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRW
ZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29k
ZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKQEAgLTgyLDE3
ICsxMDIsMjEgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAgICAgICAgIH0pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0
ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEg
Y2hlY2twb2ludCBidXQgYmVmb3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxs
RnJhbWUuIik7CisKICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3
YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0g
ICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVy
KTsKLSAgICBncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3Ig
bGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAg
ICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKAogICAgICAgICBiZWZvcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykg
ewotICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQo
cmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlz
VG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsK
KyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgZnVuY3Rvcihv
cGVyYW5kKTsKICAgICAgICAgfSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI5LDggQEAgdm9pZCBm
b3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgc2VlbkluQ2xvc3VyZUZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Y2FsbGVkRnVuY3RvckZsYWcgPSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFn
czsKLSAgICAKKworICAgIEFTU0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAs
MTUgKzE0NSwxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBp
ZiAobm9kZUluZGV4KQotICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7
CisgICAgTm9kZSogYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwo
Ci0gICAgICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAg
ICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZsYWdzLmdldChub2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAg
ICAgIH0sCkBAIC0xNTksNiArMTgyLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAg
Ly8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVj
dGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBi
bG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJv
IHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAxOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewor
ICAgICAgICBkYXRhTG9nTG5JZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwg
YXZhaWxhYmlsaXR5IGF0IGluZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxp
dHkubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4
KAogICAgICAgICAgICAgZ3JhcGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBi
bG9jaywgbm9kZUluZGV4LAogICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGIzMjBmNzA3Yzk1ZjEyMzkzODUxYmMz
YjJiMmI0MmI5NTZkZDBiZjUuLjA3MWRlMjM5MmI5YzVjOTI4NmRlOWM3ODc4ZmU5YWYwMGMwYjRl
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4
LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBp
ZiAodmFyaWFibGVBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwg
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsK
ICAgICAgICAgICAgIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgp
OwogICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0
ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tB
Y2Nlc3NEYXRhKCkpIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOwor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0
YS0+bWFjaGluZUxvY2FsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
Im1hY2hpbmU6IiwgZGF0YS0+bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBkYXRhLT5mb3JtYXQpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgp
KSAKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAg
IGlmIChub2RlLT5oYXNVbmxpbmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0
aEhpbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIs
IG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVl
KCkpCkBAIC01MTUsOSArNTE1LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAg
IG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9w
KCkgPT0gUGhpKTsKICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAm
JiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAi
PCIsIHBoaU5vZGUtPmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5v
ZGUtPm9wZXJhbmQoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAg
ICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0
aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxv
Y2ssIFZhCiAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
aWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQo
KSkKICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0
dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2Nr
LCBWYQogICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlh
YmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1
YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAg
ICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5v
ZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9w
ZXJhbmQoKSk7CiAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAg
ICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9j
YWw7CiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3Jh
cGg6OmtpbGxzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVy
biBraWxsc0ZvcihiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAot
Ym9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5k
IG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBk
YXRhTG9nKCJDaGVja2luZyBvZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwog
ICAgIGJvb2wgaXNDYWxsZXJPcmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVP
cmlnaW5QdHIgPSAmY29kZU9yaWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNl
dCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2Fs
bEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVl
ZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRv
IHRoZQorICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwu
CisgICAgZm9yICg7IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJh
bWUgPyAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAg
ICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZz
ZXQgPSBpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
b3BlcmFuZC52YWx1ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+
PSAwKTsKKyAgICAgICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNv
bWVvbmUgd2UgaW5saW5lZC4KKyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZz
ZXQgKyBtYXhOdW1DaGVja3BvaW50VG1wcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBz
KCkgfHwgb3BlcmFuZEluZGV4IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgq
Y29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAg
cmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQor
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
IC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAg
ICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJh
bWUoKTsKLSAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFj
a09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAg
aWYgKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5z
dGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAg
ICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmVnLm9mZnNldCgpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwog
CiAKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0g
ICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkxvb2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAg
ICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSB7CisgICAgICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc2LDQyICsxMTk3LDQx
IEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2sp
OwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpblB0
ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy5vcGVy
YW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0
dXJuaW5nIHRydWUuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIGZ1bGxMaXZlbmVzcy52aXJ0dWFsUmVnaXN0ZXJJc0xpdmUocmVnLCBieXRlY29kZUlu
ZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwg
aXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUg
YWx3YXlzIGxpdmUuIFRoaXMgd291bGQgYmUgcmVkdW5kYW50IGlmIGl0IHdhc24ndCBmb3Igb3Vy
CiAgICAgICAgIC8vIG9wX2NhbGxfdmFyYXJncyBpbmxpbmluZy4KLSAgICAgICAgaWYgKHJlZy5p
c0FyZ3VtZW50KCkKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiByZWcuaXNBcmd1bWVu
dCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpKSB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBpcyBs
aXZlLlxuIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUg
dG8gZXhpdCB0byB0aGUKLSAgICAgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcg
dGhlIHRhaWwgY2FsbC4KLSAgICAgICAgY29kZU9yaWdpblB0ciA9ICZpbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlcjsKICAgICAgICAgaXNDYWxsZXJPcmlnaW4gPSB0cnVlOwogICAgIH0KKwor
ICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcg
dHJ1ZS5cbiIpOworICAgIHJldHVybiB0cnVlOyAgICAKICAgICAKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCi1CaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBCaXRWZWN0b3Ig
cmVzdWx0OwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAg
dW5zaWduZWQgbnVtTG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCkpOworICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgY29kZU9yaWdpbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7Ci0gICAgICAg
ICAgICByZXN1bHQucXVpY2tTZXQocmVnLnRvTG9jYWwoKSk7CisgICAgICAgIFsmXSAoT3BlcmFu
ZCBvcGVyYW5kKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1w
KCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5xdWlja1NldChvZmZzZXQpOwogICAgICAgICB9KTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpAQCAtMTYzNSw4ICsxNjU1LDggQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJy
ZW4KIAogICAgIGZvciAoTm9kZSogbm9kZSA9IG9wZXJhbmROb2RlOyBub2RlOykgewogICAgICAg
ICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKLSAgICAgICAgICAgIGlmIChtX2Zv
cm0gIT0gU1NBICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAg
ICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQo
KTsKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX3Jvb3RUb0FyZ3VtZW50
cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVy
IGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQpAQCAtMTY1Niw3ICsxNjc2LDcgQEAgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwg
bm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZmFiOWNmMDJhMjU5NzZlZjQ3ZDE3
OTA1YmFkOWNlMDNlMzgyYmNlNS4uZjdhMWQ4MjE0YzMwMmQ3ZDk2YWMyYTc3YTAxODY2YTlkMTE5
ZjUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtODQwLDEzICs4NDAs
MTMgQEAgcHVibGljOgogICAgIC8vIFF1aWNrbHkgcXVlcnkgaWYgYSBzaW5nbGUgbG9jYWwgaXMg
bGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZwogICAg
IC8vIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgaWYgeW91IHdpbGwgb25seSBxdWVyeSBvbmUgbG9j
YWwuIEJ1dCwgaWYgeW91IHdhbnQgdG8ga25vdyBhbGwgb2YgdGhlCiAgICAgLy8gbG9jYWxzIGxp
dmUsIHRoZW4gY2FsbGluZyB0aGlzIGZvciBlYWNoIGxvY2FsIGlzIG11Y2ggc2xvd2VyIHRoYW4g
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoKS4KLSAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVh
bFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFu
ZCwgQ29kZU9yaWdpbik7CiAgICAgCi0gICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24t
YXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2
ZSB5b3UKKyAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMg
YW5kIHRtcHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQog
ICAgIC8vIGFueSBhcmd1bWVudHMgYmVjYXVzZSB0aG9zZSBhcmUgYWxsIHByZXN1bWVkIGxpdmUu
IFlvdSBjYW4gY2FsbCBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIHRvCiAgICAgLy8gYWxzbyBnZXQg
dGhlIGFyZ3VtZW50cy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNhbGxpbmcgaXNMaXZlSW5C
eXRlY29kZSgpIGZvciBlYWNoIGxvY2FsLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxMb2NhbHNBbmRUbXBz
TGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogICAgIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3Igbm90IHJlZHVuZGFudGx5IHJlcG9y
dGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGluIGNhc2Ugb2YgYSB2YXJhcmdzCiAg
ICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93cyB0aGF0IGFyZ3VtZW50cyBhcmUg
bGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJhcmdzCkBAIC04ODEsNiArODgxLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW3JlbGF0
aXZlTG9jYWxdKQogICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hl
Y2twb2ludCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygp
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5lc3NGb3JDaGVja3Bv
aW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVy
YW5kKFRtcE9wZXJhbmQsIHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC05MDQsOSArOTEyLDkgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIG5vbi1h
cmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgor
ICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIGxvY2FscyBhbmQgdG1wcyBsaXZl
IHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCiAgICAgLy8geW91IHdhbnQgdG8g
Y29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxvY2FscyBmcm9tIHR3byBkaWZmZXJlbnQgQ29kZU9y
aWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwor
ICAgIEJpdFZlY3RvciBsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CiAK
ICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0
aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNDYWxsZXJPcmlnaW4pCiAgICAgewpA
QCAtOTM4LDEyICs5NDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTGl2ZW5lc3NDYWxj
dWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAgICAgfQogICAgIAotICAgIC8vIFRlbGxzIHlvdSBh
bGwgb2YgdGhlIGFyZ3VtZW50cyBhbmQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmln
aW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2
ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVyYW5kcyBsaXZlIGF0IHRoZSBnaXZl
biBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKKyAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxs
TG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3
YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2
b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAgICAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAgICAgIAogICAgICAgICAvLyBSZXBv
cnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBsaXZlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBh
cmd1bWVudC0tOykKQEAgLTExMTQsNiArMTEyMiw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VB
bmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7
CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTExYzQ1YjA1NzQxMjUwZjRkMmFl
YjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhiZTM4NGUzZTc2NTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUoR3JhcGgm
IGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdy
YXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9j
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCi0gICAgLCBtX2Js
b2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIpCiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAppbmRl
eCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcxMjk5Li4xODY1ZTZhMWVmZmMz
ZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBAIC0xNjcsMTMgKzE2NywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0p
OwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAg
QWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBy
ZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5kZXgob3BlcmFuZCkpOwogICAg
IH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpOyB9Ci0gICAgCiAg
ICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRleChpbmRleCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAzZDg0M2NlNThmMjBi
NDExNjMzOWZjZGE5NTg4YWViYTZiN2E4YzJlLi41M2RiOWNkMTRjYWM2YjZlNjY4MmVmZGY0YmE3
OTQ4OTdjYTVkNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMo
KQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dl
bmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9T
UkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAg
ICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAt
OTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKIAogICAgICAg
ICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVBy
b2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdldCA9IGp1bXAoKTsKLSAgICAg
ICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0YXJnZXQs
IG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgICAg
ICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAgICB9CiB9CiAKQEAg
LTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2lj
QmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkgIT0gdmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm9wZXJhbmQoKS5p
c1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAgICAgICAgICAgICAgIGVu
dHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIE9TUkVudHJ5
UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAppbmRleCA2OGNhOThkZjZmNWM0YjdiNjM3MmNjMTU4MThlYzI1NzI4MmY4OWQ5Li41MGYx
ZDg5M2RhMzAyMTAyYjk1ZTc4YWM2MDQzOWQ4NjIzNmYzY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGUp
CiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkp
LCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgIH0KIAogICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3
OGExMTcxY2VhZDBmOTNlMDhhYzI1Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFm
NDJhNzA4YTFhMDQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBA
IC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1
bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlk
Rmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwg
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFu
dCB0byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxp
dmVuZXNzIHdyb25nLAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxz
ZSBmb3IgYSBGbHVzaCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgog
ICAgICAgICBhdXRvIGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayog
YmxvY2ssIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxz
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxv
Y2stPmF0KGkpLT5sb2NhbCgpID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFu
ZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsx
MTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxv
Y2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhh
bmRsZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZh
c3RCaXRWZWN0b3IgbGl2ZUF0Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVz
aXplKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsK
KyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBj
YWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47
CkBAIC0xMzMsMTEgKzEzMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAg
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZv
KiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFy
QWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsK
IAogICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJ
bmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgp
XSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxs
RnJhbWUpLCBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFu
ZGxlcjsKQEAgLTE1NiwxMiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBj
YWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlh
YmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
TG9jYWxzKCksIG51bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEq
PiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbCwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5v
ZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9w
ZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8
IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5k
KSk7CiAKQEAgLTE3OCw2ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKTsgbG9jYWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChsb2NhbCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAg
PCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAg
ICAgICAgICBmbHVzaChPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1
c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAg
ICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09
IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVy
YW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBv
cGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3Bl
cmFuZCkpOwogCiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpA
QCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVu
dEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkg
KzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFu
ZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAg
ICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlz
Q29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLmxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2
YTBmZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcApAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZp
bGwoRXBvY2goKSk7CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAg
ICAgICAgICBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcp
IHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewotICAgICAgICAgICAg
ICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKTsKKyAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGlu
dFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9j
YWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBv
Y2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBF
cG9jaCgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSkgPSBFcG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwx
NSArMTE2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAo
T3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVu
IGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdl
IG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoISFtX3N0YXRlLm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
IW1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUs
ICI6ICIsIHJlZywgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJh
bmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJy
ZW50RXBvY2g7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2Fh
MmU2NTVmNTI1MWY5NmY0MDRlMzNiNDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0
NzBjNzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1
MCwxMyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAg
IFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1h
dCkKLSAgICAgICAgOiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBv
cGVyYW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQog
ICAgICAgICAsIGZvcm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBtYWNoaW5lTG9jYWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYg
KzkwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9m
Qm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CkBAIC05MjMsOSArOTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgp
KSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6Cisg
ICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7
CisgICAgICAgICAgICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CkBAIC05NzMsOSArOTc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9v
cEluZm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewot
ICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJl
dHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxp
bmtlZE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBAIC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwo
KQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCho
YXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJ
bmZvLmFzPGludDMyX3Q+KCkpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkp
OworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+
KCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUw
LDcgKzEzNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBG
b3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3Ao
KSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAg
IAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYw
YmYwNmFjMjRjMWQ0Li5lM2U5YzMyZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBc
CiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0
byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNr
LCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAog
ICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9y
d2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVj
dCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmNwcAppbmRleCAzMjgwZjg3YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi5k
MTBhMjA3MDRiMDE5ZDdlODc3YWNiMjk2MzI2YmE4OTcwMGMxM2ZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgp
CiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAg
LTc1LDggKzczLDggQEAgcHVibGljOgogICAgICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAg
IGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIp
OworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAgICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hh
bmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBB
dmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWls
ID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewog
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBi
bG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2Nr
KTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1
Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5p
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nv
cik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChz
dWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0
eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOwor
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNl
dEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZs
aWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1
c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFp
bGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRh
dGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZI
aW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNl
dE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQy
LDE1ICsyNDAsMTggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1
dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
ICAgICAKKworICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9
CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0g
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNo
aW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5jb3VudCkgPSBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFj
aGluZUNvdW50KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07
KSB7Ci0gICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEt
Pm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCAr
IGkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3Mywy
MCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9k
ZSogbm9kZSkKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAg
ICAgICAgICAgIC8vIFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJn
dW1lbnQgY291bnQuCiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0g
ICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAg
ICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFw
LnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3Vt
ZW50Q291bnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0g
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFw
LnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2Fs
bGVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1l
bnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkp
KTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlv
bihBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1
NzFhNWIwYzdjOTRiODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZh
ZDg5ZDkzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAg
LTMyMiw3ICszMjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcp
IEZpeCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAot
ICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jaykgPSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4o
cGl2b3QgLSAoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAg
IAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAg
T1NSIHJldHVybmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICsz
ODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHBy
ZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24g
PSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAg
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpT
VmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24t
PmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXgg
PSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHBy
b2ZpbGUpIHsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmls
ZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0
YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQp
LmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYz
ZGZkYmVhODQ1MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3
ZTFhZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91
c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAg
ICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9j
YWwoKS5vZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhp
bnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkp
LAogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2
OWI0MWNhOGY5OGYzMDhiM2E0YzkzM2JhOTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZl
MzJkNjc3NDIwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVz
aW5nIENQVVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpD
b250ZXh0OwotdXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4
dCYsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNW
YWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewot
ICAgIGlmIChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0g
ICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNl
KCkpICsgc291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAg
IGlmIChzb3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNl
LnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50
MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0Zf
Q0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJz
OjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAg
QVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2Fs
bGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3Rl
clNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFj
a1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdp
c3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5
c2ljYWxTdGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRS
ZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5h
bCBzdGFjaywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSBy
ZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGlu
c3RlYWQgb2YKLSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAg
ICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAg
ICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1l
W2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0
aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCi17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVl
U2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNl
dCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9
IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChl
bnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNv
bnRleHQuZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50
cnkucmVnKCkuZ3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVy
czo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCku
Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8
Vk0qPigpOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0
IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0g
ICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAg
ICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlG
cmFtZSk7Ci0gICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRf
Y2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZl
cik7Ci0KLSAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3Rv
cmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBzaXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVS
ZWdpc3Rlcik7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAg
Y29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRy
T2Zmc2V0XTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
IGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNh
bGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBm
bG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAg
IH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRl
eHQuc3RhY2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJl
Y29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50
cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0
ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxs
Q2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENh
bGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygp
LmlzR1BSKCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnku
b2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsK
LSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNl
dChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lz
dGVyPihlbnRyeS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGlu
ZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0K
LQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29u
dGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFs
UmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUo
Y29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwot
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2Nr
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3Rl
cnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJT
ZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVz
LT5zaXplKCk7Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVy
QXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2
ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgdWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2Fs
bGVkVmlhVGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQot
ICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50
cnkub2Zmc2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFs
dWUgPSBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0
KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwg
c2F2ZWRSZWdpc3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NB
TExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZl
c0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2
ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0
YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Q29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRl
eHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8g
TlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNy
ZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4
dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6
bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpIC0gMSkpOwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRz
OjpjcmVhdGUoCi0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RB
cmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNl
dENhbGxlZSh2bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8
UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNl
dEluZGV4UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhp
dChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENv
dW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQo
dm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAg
ICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQg
LSAxOwotICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVh
dGVFbXB0eSgKLSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0
dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQu
ZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2so
KSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENv
bnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJ
VENvZGUsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBG
cmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFw
PE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFu
dG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9w
ZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQK
LSAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1Ro
YXRXZXJlTm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlm
aWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0KLSAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5l
Q2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7
Ci0KLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxs
ZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292
ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3Vu
dDsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMy
X3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9m
ZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCog
YXJndW1lbnRzT2JqZWN0OwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
Ci0gICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAg
ICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChj
b250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRX
ZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25l
ZEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUs
IGNhbGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoYXJndW1lbnRzT2JqZWN0KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBp
cyBhIGxpc3Qgb2YgZXh0cmEgaW5pdGlhbGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGlu
IG9yZGVyCi0vLyBvZiBtb3N0IGxpa2VseSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxl
YXN0IGxpa2VseSBuZWVkZWQgKGhpZ2hlciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5p
dGlhbGl6YXRpb24gaW5jbHVkZXMgdGhlIHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1
c2Ugb2YgdGhlCi0vLyBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51
bSBjbGFzcyBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3Vs
YXRpb25SZWNvdmVyeSwKLSAgICBWYWx1ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxl
VXBkYXRlLAotICAgIE90aGVyCi19OwotCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxG
cmFtZS0+ZGVwcmVjYXRlZFZNKCkgPT0gJnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNw
dTsKLQotICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91
dCB0byBleGl0IG9wdGltaXplZCBjb2RlLiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGlt
aXplZAotICAgICAgICAvLyBjb2RlIHJ1bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAg
ICB2bS5oZWFwLnNldEV4cGVjdERvZXNHQyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2Fs
bEZyYW1lRm9yQ2F0Y2gpIHsKLSAgICAgICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0
Y2g7Ci0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7Ci0KLSAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdD
IHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5
IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwot
Ci0gICAgdWludDMyX3QgZXhpdEluZGV4ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklU
Q29kZSogZGZnSklUQ29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JF
eGl0JiBleGl0ID0gZGZnSklUQ29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJU
KCF2bS5jYWxsRnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsK
LSAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8
fCAhZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQu
ZXhpdFN0YXRlKSkgewotICAgICAgICBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAg
ICAgIC8vIFdlIG9ubHkgbmVlZCB0byBleGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBP
U1JFeGl0IHJlY29yZC4gVGhlIGNvbXB1dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBj
YWNoZWQgaW4gdGhlIE9TUkV4aXRTdGF0ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0
aGUKLSAgICAgICAgLy8gZXhpdCByYW1wIGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5
cGUoKSkpOwotCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0
cjsKLSAgICAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAg
ICAgICAgICByZWNvdmVyeSA9ICZkZmdKSVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQu
bV9yZWNvdmVyeUluZGV4XTsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9
IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJ
S0VMWShleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBh
cnJheVByb2ZpbGUgPSBudWxscHRyOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJj
ZSkgewotICAgICAgICAgICAgaWYgKGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAg
ICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0g
QmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmls
ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5
UHJvZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0g
c3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2
ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbnQzMl90IGFjdGl2ZVRocmVzaG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3Rl
ZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1V
cCgpKTsKLSAgICAgICAgZG91YmxlIGFkanVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2Fn
ZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9JbnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVC
bG9jayk7Ci0gICAgICAgIEFTU0VSVChhZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBh
ZGp1c3RlZFRocmVzaG9sZCA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0
VG9MTEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rOwotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhp
dFRvTExJbnQpIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRy
PEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9y
RXhpdC0+aml0Q29kZU1hcCgpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAg
ICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5k
ZWZpbmVkT3BlcmFuZFNwYW4+IHVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklU
Q29kZS0+dmFyaWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9j
b2RlT3JpZ2luLCBkZmdKSVRDb2RlLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBv
cGVyYW5kcywgJnVuZGVmaW5lZE9wZXJhbmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFj
a1BvaW50ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9m
KFJlZ2lzdGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JF
eGl0U3RhdGUoZXhpdCwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdU
Rk1vdmUodW5kZWZpbmVkT3BlcmFuZFNwYW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNl
dCwgYWN0aXZlVGhyZXNob2xkLCBhZGp1c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQ
cm9maWxlLCBleGl0VG9MTEludCkpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21w
aWxhdGlvbikpIHsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAq
dm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyOwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29t
cGlsYXRpb24uZ2V0KCk7Ci0KLSAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxl
ckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5k
ZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29k
ZU9yaWdpbiksCi0gICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9m
aWxlckV4aXQgPSBwcm9maWxlckV4aXQ7Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6T3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPSBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZH
T1NSRXhpdCgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVz
LCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4
aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAg
ICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2Nr
KS5kYXRhKCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1w
Q29udGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NS
RXhpdFN0YXRlJiBleGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5
cGUoKSkpOwotCi0gICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0
YXRlLm9wZXJhbmRzOwotICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5l
ZE9wZXJhbmRTcGFucyA9IGV4aXRTdGF0ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBj
b250ZXh0LnNwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9p
bnRlck9mZnNldDsKLQotICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3
aGlsZSBsb29wIGlzIHNvIHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUu
Ci0gICAgZG8gewotICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRp
Y19jYXN0PEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCk7Ci0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292
ZXJ5Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJz
dCBiZWNhdXNlIGFycmF5IHByb2ZpbGluZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8v
IG1heSByZWx5IG9uIGEgdmFsdWUgdGhhdCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vz
bid0IG1lYW4gdGhhdCBpdCBpcyBsaWtlbHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5
IHZhbHVlLiBTbywgd2UnbGwgZGVjb3JhdGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1
bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBp
ZiAoVU5MSUtFTFkocmVjb3ZlcnkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50
eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAg
ICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5
LT5kZXN0KCkpIC0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRl
c3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
IHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBj
cHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8
aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRl
c3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
IHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAg
ICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3Zl
cnktPmRlc3QoKSkgLSByZWNvdmVyeS0+aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAz
MikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1
ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVy
eS0+ZGVzdCgpKSBeIEpTVmFsdWU6OlZhbHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRp
b24gbGV2ZWw6IFZhbHVlUHJvZmlsZVVwZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFs
dWU7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBw
cm9maWxlZFZhbHVlID0ganNWYWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAg
ICAgICAgICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0
Lm1fdmFsdWVQcm9maWxlKQotICAgICAgICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJv
ZmlsZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24g
bGV2ZWw6IEFycmF5UHJvZmlsZVVwZGF0ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpbGUgPSBleGl0U3RhdGUuYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
ISFleGl0Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQg
PT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUs
IGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IHByb2ZpbGVkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAg
ICBib29sIGRvUHJvZmlsZSA9ICFpbnN0cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkubWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9k
ZU1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAg
aWYgKGRvUHJvZmlsZSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
cHJvZmlsZWRWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBh
cnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAg
ICBhcnJheVByb2ZpbGUtPm9ic2VydmVBcnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUo
c3RydWN0dXJlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJv
ZmlsZVVwZGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJh
IGluaXRpbGl6YXRpb24gbGV2ZWw6IE90aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1f
a2luZCA9PSBHZW5lcmljVW53aW5kKSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBh
cyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNV
bndpbmQoKS4KLSAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJh
bWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NF
UlQoY29udGV4dC5mcCgpID09IHZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChleGl0U3RhdGUucHJvZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRl
LnByb2ZpbGVyRXhpdC0+aW5jQ291bnQoKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6cHJpbnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0
LCB2bS5vc3JFeGl0SW5kZXgsIGV4aXQpOwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQg
ZXh0cmEgaW5pdGlhbGl6YXRpb24uCi0KLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4
dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoIShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4Nykp
OwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NF
UlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1Zh
bHVlOjpOb3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBj
b252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8g
Tm90ZTogd2UgbmVlZCB0byByZWNvdmVyIHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBz
YXZlIHJlZ2lzdGVycyBiZWxvdwotICAgIC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5
IG9uIHZhbHVlcyBpbiBzb21lIG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBj
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2Vs
aW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAg
c2l6ZV90IG51bWJlck9mT3BlcmFuZHMgPSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51
bVVuZGVmaW5lZE9wZXJhbmRTcGFucyA9IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0K
LSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRV
bmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRl
ZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1
bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsK
LQotICAgIEpTVmFsdWUgdW5kZWZpbmVkID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVf
dCBzcGFuSW5kZXggPSAwOyBzcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsr
c3BhbkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNb
c3BhbkluZGV4XTsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0g
ICAgICAgIGludCBsYXN0T2Zmc2V0ID0gZmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0
ZXJzOwotCi0gICAgICAgIGZvciAoaW50IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBs
YXN0T2Zmc2V0OyArK29mZnNldCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0
LCB1bmRlZmluZWQpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBudW1iZXJPZk9wZXJhbmRzOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAg
IGlmIChVTkxJS0VMWShpbmRleCA9PSBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAg
ICAgICAgICAgaW5kZXggKz0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFu
SW5kZXgrK10ubnVtYmVyT2ZSZWdpc3RlcnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRl
ZmluZWRTcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAg
ICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0
VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9j
YWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zm
c2V0KCk7Ci0KLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAg
ICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4o
cmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwgY3B1LmdwcjxKU1ZhbHVlPihyZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0jZWxzZQotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigp
KSwgY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+
KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBD
ZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNh
blVuc2FmZVVuYm94ZWRDZWxsKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNv
dmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2Fz
ZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8
aW50MzJfdD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90
PihyZWNvdmVyeS5ncHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIo
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQ
UjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3By
PGludDY0X3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0g
ICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIHB1cmlmeU5hTihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkRG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCByZWNvdmVyeS5jb25zdGFudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNl
IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0
IGRvIHRoaXMsIHlldC4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNh
dmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJl
c3RvcmVDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVT
YXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGNwdS5ncHIoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8
SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJ
bmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVy
PihKU1ZhbHVlOjpOb3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0
aW9uSGFuZGxlcigpKQotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBz
dGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUg
dGhhdCBhcmd1bWVudHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVy
IHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25s
eQotICAgIC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdl
IG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAv
LyBOb3RlIHRoYXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWln
aHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNh
bGwgZnJhbWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0K
LSAgICBERkc6OmVtaXRSZXN0b3JlQXJndW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklU
Q29kZSwgb3BlcmFuZHMpOwotCi0gICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBj
b3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFs
bCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhl
IGV4ZWN1dGUKLSAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBl
cmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwg
ZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdz
Ci0gICAgLy8gT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgotICAgIC8vCi0gICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0
IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVu
dHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAg
IC8vICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChj
KSBiZWxvdykuCi0gICAgLy8KLSAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2Fs
bCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBj
b2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwot
ICAgIC8vICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUg
ZXhpdGVkLgotICAgIC8vCi0gICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0
IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5j
ZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAg
ICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBP
U1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0g
ICAgLy8gICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24g
Z2V0dGluZyB0cmlnZ2VyZWQuCi0gICAgLy8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxp
a2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgot
ICAgIC8vIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5
IHRoZSBvcHBvcnR1bml0eSBmb3IKLSAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0g
T1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1
ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdp
bGwgbmV2ZXIKLSAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBu
ZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYg
YSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAg
Ly8gZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFr
ZSBjYXJlIG9mIChkKSwKLSAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291
bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlm
IHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAg
IC8vIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNj
ZXNzIHJhdGUpLCBhbmQgaWYKLSAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2gg
bnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8g
MDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KLQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVw
ZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9
PSBDb2RlQmxvY2s6Ok9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJp
Z2dlclJlb3B0aW1pemF0aW9uTm93KGJhc2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0
KTsKLQotICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxv
Y2ssIGV4aXQpOwotICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJs
b2NrLCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNl
bGluZUNvZGVCbG9jaywgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1
ID0gY29udGV4dC5jcHU7Ci0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2so
KSk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFj
ayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NSIGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxp
bmVkIHRhaWwgY2FsbHMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzUxMQotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1v
c3RCYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxD
b2RlQmxvY2sqPihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrKTsKLQotICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChj
b2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4t
PmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJD
YWxsS2luZDsKLSAgICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFt
ZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAg
ICAgIHZvaWQqIGNhbGxlckZyYW1lID0gY3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJ
c0xMSW50ID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiBy
ZXR1cm5QQyA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsK
LSNpZiBDUFUoQVJNNjRFKQotICAgICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1
aW50OF90Kj4oKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQq
IG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVy
blBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRh
Z0NvZGVQdHIocmV0dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1l
LnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7
Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0g
dHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdl
dCA9IGNhbGxlclJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNv
ZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAg
ICAgaWYgKHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNh
bGxlckZyYW1lID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZy
YW1lKCktPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShB
Uk02NEUpCi0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigp
ICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSB0YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2Fz
dDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZv
aWQqPihpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxv
Y2spOwotCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVl
IHNhdmUgcmVnaXN0ZXJzLgotICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0
YWlsIGNhbGwgdGhhdCB3aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdl
IG5lZWQgdG8KLSAgICAgICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyBy
ZWdpc3RlcnMgYWxyZWFkeSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUu
Ci0gICAgICAgIHNhdmVPckNvcHlDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVC
bG9jaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1
ZUNhbGxlcik7Ci0KLSAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGlu
ZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNh
dmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3Rl
cnM6Om1ldGFkYXRhVGFibGVHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
Pm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1l
LnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJU
KGNhbGxlckZyYW1lKTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlckZyYW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQz
Ml90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1
ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZB
TFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVp
bnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8
dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIFRhZ09mZnNldCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6
OkNlbGxUYWcpKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlQ29uc3RhbnQoKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5n
IHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAg
ICB9Ci0KLSAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4g
aWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5w
dHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwot
I2VuZGlmCi0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JF
eGl0JiBleGl0KQotewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3Rh
dGUuZ2V0KCk7Ci0KLSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5n
IGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0
ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2Nr
KTsKLQotICAgIC8vIFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVz
dCB0aGUgY3VycmVudCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtu
b3cgd2hpY2ggaW5saW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAg
ICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgp
OyBiKCk7IH0iLCBpZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQg
ZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgot
ICAgIC8vIEZJWE1FOiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJl
ciB3aGljaCBDb2RlQmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElu
bGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lcykgewotICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
IDogKmlubGluZUNhbGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihp
bmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBh
dXRvKiBleGl0SW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKCk7Ci0gICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAo
KSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0g
ZXhpdFN0YXRlLT5qdW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1
bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAg
ICAgICB2bS5jYWxsRnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAg
ICB9Ci0KLSAgICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0K
LSAgICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0g
KmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigp
OwotCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVH
UFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFU
YWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6
UmVnaXN0ZXJzOjpwYkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JF
eGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0
LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pigm
Y3VycmVudEluc3RydWN0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0
aW9uSGFuZGxlcigpKQotICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRh
Z0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oanVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBy
aW50T1NSRXhpdChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0
IE9TUkV4aXQmIGV4aXQpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZw
PENhbGxGcmFtZSo+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7Ci0gICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
Ci0KLSAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwot
ICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZz
ZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFs
dGVybmF0aXZlKSB7Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50
ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIs
IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdl
J3ZlIGJlZW4gamV0dGlzb25lZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0g
IiwgY29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAg
R1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5h
bWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAg
fQotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBl
eGl0OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0g
ICAgICAgIHVpbnQ2NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAg
ICAgZG91YmxlIHZhbHVlID0gY29udGV4dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVs
bHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAg
ICBkYXRhTG9nKCJcbiIpOwotfQotCi0vLyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6
Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGpp
dCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBP
U1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2Vt
YW50aWMsIGppdC0+bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShq
c1ZhbHVlU291cmNlKQpAQCAtOTU4LDE1ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50
ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2
b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYg
dm0sIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNo
TWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBw
aGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmll
ZElELCBWaXJ0dWFsUmVnaXN0ZXI+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMg
cGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGlu
ZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGlu
dCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBp
ZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkCiAgICAgICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAg
ICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAg
TWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBh
bHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBh
bHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9p
ZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZt
LCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRy
KAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQg
T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwg
Y29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAg
ICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgs
NyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0
LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkp
OwogCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsK
KyAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgIH0KIH0KIApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NS
RXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhp
dCYgZXhpdCwgY29uc3QKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRv
cEVudHJ5RnJhbWUpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29u
dGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZG4ndCB1c2UgYSBwcm9iZSBidXQgZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0
cyBpcyB0cmlja3kgb3RoZXJ3aXNlLi4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2
YWx1ZXMob3BlcmFuZHMubnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9wZXJhbmRzLm51bWJlck9mVG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNb
aV0gPSBvcGVyYW5kcy50bXAoaSk7CisKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAg
ICBhdXRvKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAg
ICAgICBqaXQucHJvYmUoWz0sIHZhbHVlcyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250
ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2Fs
bEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgewor
ICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
PigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50
VG1wczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVz
W2kgKyB0bXBPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGRvIHdoYXQgdGhlIEZUTCBkb2VzIGFuZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGlu
dG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNv
ZGUocmVjb3ZlcnkuY29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAg
ICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1w
c1tpXSA9IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBT
Y3JhdGNoW2kgKyB0bXBPZmZzZXRdKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94
ZWRDZWxsSW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNT
dGFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
ZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRy
LT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdp
bjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZy
YW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2Rl
T3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlu
bGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
OworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlu
bGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAg
ICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zm
c2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNh
bGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFj
b2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsg
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRl
KGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAg
IC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMg
aW50byB0aGUgc3RhY2suCiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3Bl
cmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
b3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChy
ZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNl
bGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFz
ZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQor
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewogICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5kZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1
NGYxYTA0ZWI4ZS4uOWU5YmNlYTQ4MWMxZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBz
dHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAg
c3RhdGljIHZvaWQgZXhlY3V0ZU9TUkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZj
NTMzMjc4NGYwYTI5MmE0OWNiZTFiODJhNTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJj
M2MxMjQzNWRiOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFz
ZS5oCkBAIC03MCw2ICs3MCwxMSBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1
cm4gbV9raW5kID09IEdlbmVyaWNVbndpbmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzRXhpdGluZ1RvQ2hlY2twb2ludEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0K
KwogcHJvdGVjdGVkOgogICAgIHZvaWQgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUo
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKaW5kZXggMmZmM2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRk
NTExNS4uYWNmNTFkMGI0ZmE1YzJmMTEyNGM1YWM3OTU5NTUzOWU4MTBmOTEzOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcApAQCAtMjksMTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJCeXRlY29kZXMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgog
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVu
a3MuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
SW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2
LDkgQEAgdm9pZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciwgQnl0ZWNvZGVJbmRleCBjYWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0
aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxs
Qnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQp
OworCiAgICAgdm9pZCoganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBA
IC0yMzgsNyArMjQ0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBp
bmxpbmVkIHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQu
YmFzZWxpbmVDb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jaykpOworICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2Rl
T3JpZ2luOwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9y
aWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7
CkBAIC0zMDUsMzMgKzMxMSwzNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQ
UiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2RlQmxv
Y2stPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJp
dHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQp
IC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxs
ZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNv
ZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xv
c3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBk
aXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAvLyBEb24ndCBu
ZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5l
IHRhaWwgY2FsbHMKICAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXhGb3JF
eGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKICNlbHNlCi0gICAgICAg
IGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwot
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUlu
ZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1
Y3Rpb25zKGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlv
bikpLmJpdHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAg
ICAgfQogfQogCkBAIC0zODIsMTEgKzM4OSwxMiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlw
ZSgpKSk7CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+IGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9MTElu
dCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRvTExJ
bnQpIHsKICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpOwogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0
aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgp
LnB0cigpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVz
dGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVz
dGluYXRpb24gPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSA/IENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oJmNoZWNrcG9pbnRfb3NyX2V4aXRf
ZW50cnlwb2ludCkpIDogTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudElu
c3RydWN0aW9uKTsKIAogICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewog
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50
SW5zdHJ1Y3Rpb24pLCBHUFJJbmZvOjpyZWdUMik7CkBAIC00MDIsNyArNDEwLDE0IEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9T
UkV4aXRCYXNlJiBleGl0KQogI2VuZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlv
bi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0
aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXgg
aW5kZXhGb3JDaGVja3BvaW50UmV0dXJuID0gY29kZUJsb2NrRm9yRXhpdC0+Ynl0ZWNvZGVJbmRl
eEZvckV4aXQoZXhpdEluZGV4KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0
clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQo
aW5kZXhGb3JDaGVja3BvaW50UmV0dXJuKTsKKyAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3Bv
aW50KCkpIHsKKyAgICAgICAgICAgIGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQgPSBjb2RlTG9jYXRp
b247CisgICAgICAgICAgICBjb2RlTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9p
bnQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAg
ICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXggMjE2YzVi
YWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRiMDNkYzE5OS4uN2RhNmFmZDVjMjIxYzk3ZmY5M2Y0
MDBjYjM0OTQ0NTRkNGQ0OTI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0yMTA3
LDcgKzIxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVhcC5mb2xsb3coYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVy
YW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggZjM5YzE0YjlmMGE0NDg3ODlk
NzcyZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0YmY1ZWE2MGE2ZTY2NTIwZmUw
NTE0NGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCkBAIC00NCw3ICs0
NCw3IEBAIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJbnRlZ3JhbFR5cGUg
dmFsdWUpCiAgICAgICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSB7
IH0KICAgICBleHBsaWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIDog
bV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3Ry
dWN0dXJlKSkpIHsgfQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQgb3ApIDogbV92YWx1
ZShvcC5hc0JpdHMoKSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBleHBs
aWNpdCBPcEluZm8oVCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKaW5kZXggNTBjYTAwYjAwYjk0ODhhMTAzMjg3MjYyOGE5ZTJlZTg3M2YyYzM3OS4u
Y2YwOWQ4NzM5NzRhODU2MzNhMmVkYjY4Nzc2OTJkYjEwNzY4NDA3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTQ2LDE1ICsyOTQ2LDE2IEBA
IGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25M
b2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGZpcnN0RWxl
bWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNl
dCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogeworICAgIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZhcmFyZ3MoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0KSwg
YXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0
LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50KSksIGFy
Z3VtZW50cywgb2Zmc2V0LCBsZW5ndGggLSAxKTsKICAgICAKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgIGZvciAodWludDMy
X3QgaSA9IGxlbmd0aCAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CiB9CiAKIGRvdWJs
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2RiMzZhYjVhMGM2YWRj
Mi4uMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVlMDliYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNw
cApAQCAtNDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBu
YW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWwg
ewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQogY2xhc3MgUGhh
bnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21JbnNlcnRpb25QaGFz
ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGluc2VydGlv
biIpCkBAIC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0TG9jYWxzIGV4ZWN1
dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2VydCB0b28gZmV3
IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgu
bV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAKLSAgICAgICAgaWYg
KERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUGhhbnRvbSBp
bnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBA
IC03Miw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAgIGhhbmRsZUJsb2Nr
KGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAg
ZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAg
IG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIgKzEwMCwyMiBAQCBwcml2YXRl
OgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJ
bmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29u
c2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBu
dWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5
OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAgICAgIG1f
dmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAg
IG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MTM0LDM4ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxk
cmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlVwZGF0aW5n
IGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7
CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOworICAgICAgICAg
ICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxs
ZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIHJlZywgIlxuIik7Cisg
ICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIEtpbGxlZCBv
cGVyYW5kOiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxl
ZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeUtpbGxl
ZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVy
YW5kLCAiIGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJlZyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5v
ZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAgICAgICAgICAgICBpZiAoIWtp
bGxlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAg
ICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVkIGluIHRoaXMgYmxvY2suIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOworICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQgYSBQaGFudG9tIGlm
IHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAgICAgICAgICAgICAg
ICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQuCi0gICAgICAgICAg
ICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKQorICAgICAgICAg
ICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9jaCkgeworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFu
ZCwgIiBoYXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR1Bo
YW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIEluc2VydGluZyBQaGFu
dG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsCisg
ICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9k
ZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJ
bmRleCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZXhh
Y3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRoYXQgd2UgaGF2ZSB0
bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAgICAgICAg
ICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3OSwxNCArMTgwLDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUt
PmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFu
ZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9m
IGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBsaXZlIHVudGlsIHRoZSBT
ZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3BlcmFu
ZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBsb2NhbDsKKyAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2FsKSA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUs
IGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0Mjk4ODZlMDc4ZjBhZmNjLi5mNWYw
OTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApAQCAtNTMs
NyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3JlYWQsIFZp
cnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAgICAgICAgICAgIGNh
bGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hh
cmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhlYXAua2luZCgp
ID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5wYXlsb2FkKCku
aXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9uYWxX
cml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAg
ICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIGhlYXAub3BlcmFu
ZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTg3LDEy
ICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2Nh
dGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAgCi0gICAgICAgIG1fZGVmKFZp
cnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUp
OworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFuZCgpLCBub2RlKTsKICAgICB9
CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9p
ZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9j
YWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50b0xvY2FsKCkpID49IG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKQogICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFh
MzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMz
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8
SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZh
bHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAg
ICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAg
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZjYmZlY2M4NGZlMTk1ODQyOGEwY2Y4N2Nk
NTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5YmU2ZDMxOTdjMTNmMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBF
eGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBQdXREeW5h
bWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRk
ODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBlN2VkZjYzZjA3Zjc4ZDgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQ
dXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQdXRTdGFja1NpbmtpbmdQaGFz
ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRTdGFjayBzaW5raW5n
IikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUgc3RhY2suIEl0J3Mg
bm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9yIG5vdC4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5NgogICAgICAgICAK
LSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsK
KyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9y
ZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAg
ICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAgICAgICBCbG9ja01hcDxPcGVy
YW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAg
ICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2td
ID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7
Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAg
IGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9
IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgZmFs
c2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQ7CkBAIC0xMDcs
MzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2
ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRz
OwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+
IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gd3JpdGVzOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIg
PSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9k
ZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUt
Pm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBvcCA9PSBWYXJhcmdz
TGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZvcndhcmRWYXJhcmdzIHx8IG9w
ID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXMuYXBwZW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHBy
ZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0ZXMpCisgICAgICAgICAgICAg
ICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBP
cGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2Nr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJy
ZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsyNTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNDb25mbGlj
dGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhaXND
b25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQdXRTdGFjaykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0aW5nIGZsdXNoIGZvcm1hdCBm
b3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFjaykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEgUHV0U3RhY2sgcGFzdCBh
IEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5k
bGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBu
b2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAg
ICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHdy
aXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFyZ3NMZW5ndGgg
fHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJh
cmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJXcml0
aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1
c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGRl
ZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywxMyArMzEzLDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgVmlydHVh
bFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIgYXQgIiwgcG9pbnRlckR1
bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtp
XSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZlcnJlZC5vcGVyYW5kRm9ySW5k
ZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNj
ZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
cmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ldKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGRlZmVycmVk
QXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9WYXJpYWJs
ZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7
CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgCisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CiAgICAgICAgICAg
ICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAgICAgICAg
ICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsK
QEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0
YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRkKG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
PmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJh
bmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAgICAgICAg
ICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFu
ZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywg
bm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc3NhQ2Fs
Y3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewotICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUt
PmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVy
YW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwgb3BlcmFuZCwgIiBh
dCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBo
aSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkpOwpAQCAtNDExLDcgKzQx
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGluZy5vcGVy
YW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZChtYXBwaW5n
Lm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFyaWFibGUub3Bl
cmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9
IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKQEAgLTQy
MSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQo
b3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGlu
ZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBwaW5nLCAiXG4iKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURl
ZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52YXJpYWJs
ZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRv
T3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIs
IHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtNDM3LDE1ICs0
MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFti
bG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChERkdQdXRT
dGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2Rl
LCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOiB7
CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBk
YXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJh
bmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5nICIsIG9w
ZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIsIG5vZGUsICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDUzLDE2ICs0
NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBGbHVzaEZv
cm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVy
YW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVy
YW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVy
YW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBkZWZlcnJhbC4gTm8gZGVm
ZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0
aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdoYXQgaXMgc3RvcmVkIGlu
IHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZSBHZXRT
dGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2Nh
bCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKGRhdGEt
Pm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcyLDIwICs0NzIsMjAg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0b3JlZCBhbmQgZ2V0IHJp
ZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBkYXRhLT5mb3JtYXQpOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcg
PSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY2FzZSBL
aWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51
bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0Zs
dXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAi
IGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9wZXJhbmQsICIgYXQg
Iiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5n
ID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFk
Rmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0
byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRpdGlvbmFsIHdyaXRlcyB0
byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1ha2VzIHRob3NlIHN0
YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVm
b3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMgd2Ugc2hvdWxkIG5l
dmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNrcyByaWdodCB0byB0
aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+
b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJn
c0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9y
d2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChv
cGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICB9
CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAoU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNz
b3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+
dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVy
YW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBVcHNpbG9uIGZvciAi
LCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAo
c3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQg
Zm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgaXNDb25j
cmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXggNDM2ZTVkMzkx
NGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRmMmMwY2QzOTk4YjE4MWI5ZTk4YmJh
NDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YWNrLCBu
b2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hpbGROb2RlKTsKQEAg
LTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+aW5kZXgo
KV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gUHJ1bmUgYnkgbGl2ZW5l
c3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBpbGUgdGltZXMuCi0g
ICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpOwog
ICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVudCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
Rm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhpRGVmLT52YXJp
YWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+dmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgTW92SGludCwgYmxvY2st
PmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksCi0gICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVs
dEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgp
KSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4aXRPSykKQEAgLTMzNyw3ICszMzcs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CiAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gZmFsc2U7IC8v
IEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0YWNrKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm9w
ZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5sb2Nh
bCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIC0+
ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2Fy
Z3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBub2Rl
OworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzcxLDggKzM3
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAiLCBub2Rl
LCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAi
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlh
YmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM4NSw3ICszODUsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQyNSwxMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAgICAgICAgICAgICAgICAgICAgIFVzZUtp
bmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KTsKIAotICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZh
cmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJs
ZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2ls
b24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9k
ZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4
IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2EzMTY5MTkuLjlhMzJkNjdhNTg3NDI5
NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIyLDcgQEAgYm9vbCBzYWZlVG9FeGVj
dXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBi
b29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKaW5kZXggYjVhMTFjNTFlZjEwY2Y3YTZiMjMxNzJkMmQ4YmY4ZjY3NWUwNTJiZC4uNDFl
OWM0YjlhY2Q0OTc5YzQyMDFjNmZkYTEwMWZlZThkOTFiOTlmNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE3NzUsNyArMTc3NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAg
Tm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NSQmlydGgo
Y2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6
bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAg
bV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQo
Y2hpbGQpLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpiYWlsKEFib3J0UmVhc29uIHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUuYmVnaW5C
YXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsK
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAg
ICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3Jk
IGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgp
KQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9j
YWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1c2hGb3Jt
YXQoKSk7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICBWYXJp
YWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCksCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAotICAgICAg
ICAgICAgICAgIGZvcm1hdCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsICFvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRv
QXJndW1lbnQoKSA+PSAwKTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1h
dCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkxOSw3ICsx
OTE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAg
ICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3Rlcigp
OworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAKICAgICAg
ICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1NCArNzMz
OSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUq
IG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1Jl
Z3M7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdz
KCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2Rl
LT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFs
dWVSZWdzKCk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdz
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
Z3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
IAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJn
dW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOwotICAgIH0KKyAgICBHUFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdUaGlzKHRo
aXMpOworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3VudEluY2x1
ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAot
ICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZl
Y3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBmcm9tIHRo
ZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25n
IGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1
dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3Zh
cmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhp
c0dQUik7CiAKLSAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAg
SklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFy
Z3VtZW50c1JlZ3MpOworICAgIGludDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwg
bm9kZSk7ICAKK30KIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxk
KCkpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291
bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1Zh
bHVlUmVncygpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJnc092ZXJm
bG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOworICAgICAgICBW
YXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2hUZXN0
MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gz
MigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0gICAgbV9q
aXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2Fk
Rm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBt
X2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5l
U3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5t
YWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgsMTcgKzcz
OTcsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUq
IG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgaWYgKG5v
ZGUtPmNoaWxkMSgpKQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgIGlmIChub2RlLT5hcmd1bWVu
dHNDaGlsZCgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNDaGls
ZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQogICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KCk7CiAKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsKICAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBs
ZW5ndGguZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJn
dW1lbnRDb3VudC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRDb3VudC5n
cHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAgICAgICAK
LSAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBpbmNsdWRl
VGhpcyA9ICovIHRydWUpOworICAgIAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAgICAgICAg
IApAQCAtMTI0NDcsNyArMTI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVDYWxsRnJhbWUo
KSkKICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXI7CiAgICAgZWxzZQotICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0
ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAg
ICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7
CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRS
ZWdpc3RlciksIHJlc3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAppbmRleCBjNjRmOTc4YWRmODVmYmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5Li4wM2Q0ODM1
YmY0YjdhOGRlMDkzOWVmY2ZhMzcwMjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVOZXdSZWdleHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVMb2FkVmFyYXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlv
bihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsK
QEAgLTE2NjksMTUgKzE2NzAsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlT
dG9yYWdlKEdQUlJlZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKAot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNo
aW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywg
VmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcudmly
dHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBw
ZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5lUmVn
LCBmb3JtYXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRhRm9y
bWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX2N1cnJlbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3JkU2V0
TG9jYWwodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0
KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZvJiBn
ZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCmluZGV4IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2ZGJkMGQyYTA1
NmRiODEuLjBhZjNmMTcxODE1NDEwZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cApAQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxl
IGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBi
ZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIsNyAr
MTkxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2Nh
bChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRh
Rm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgyNCw2ICszODI0
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFy
YXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWViNWVhMjZhMzEw
NWRkYjhhZmU3NjYyMTYzMzQ0Li43YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZkYzkzYWM4NmM3
YzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKQEAgLTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2Rl
LT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2
YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90
IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0y
MDA3LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQs
NiArNDQ2NCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJn
c0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxl
TG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2YWM3YTdkMzMz
ZTM5Njc5ZTI2NzU1OTA3NGU0NjRjOWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2MTVmNjA0Mjc1
MjIwNDc3YTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFj
a0xheW91dFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNr
TGF5b3V0UGhhc2UuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdHJl
YXQgYSB2YXJpYWJsZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2VzcyB0
byBpdCAoU2V0TG9jYWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxvY2Fs
KS4KICAgICAgICAgCi0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAgICBPcGVy
YW5kczxib29sPiB1c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3JhcGgoKS5t
X3RtcHMsIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFi
bGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVk
Rml4dXAgPSBmYWxzZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9j
YWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJpYWJs
ZS0+b3BlcmFuZCgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAg
ICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRhLT5j
b3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2Fs
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVz
IG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXNzaWdubWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVh
bFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2Fs
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGlt
aXQ7IGktLTspIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZp
cnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAgICAg
ICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC05Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1
dFN0YWNrOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChzdGFjay0+bG9jYWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJh
bmRzLnNldE9wZXJhbmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA4
LDIxICsxMDcsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigK
KyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgdXNl
ZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwotICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4gYWxsb2NhdGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4gYWxsb2NhdGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9ncmFwaC5t
X25leHRNYWNoaW5lTG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRleChpKSkg
ewogICAgICAgICAgICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2Fs
KCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJh
bmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkgPSB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzaXplX3QgbG9jYWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAgICAgICAg
ICBpZiAobG9jYWwgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0g
dXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQor
ICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOworICAg
ICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVyYW5kcywg
YWxsb2NhdGlvbiwgdmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGZvciAoU3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNz
RGF0YSkgewotICAgICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKLSAgICAg
ICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAg
IGlmIChkYXRhLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGRhdGEt
Pm1hY2hpbmVMb2NhbCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0gYWxs
b2NhdGlvbi5zaXplKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBp
ZiAoYWxsb2NhdGlvbltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2Nh
bCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3Bl
cmFuZC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5k
LnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9j
YWwgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgZGF0YS0+
bWFjaGluZUxvY2FsID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+b3Bl
cmFuZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5uZWVkc1Nj
b3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2Nr
KCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29w
ZVJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVy
KGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lz
dGVyKCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5saW5lVmFy
aWFibGVEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFibGVEYXRh
IGRhdGEgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
IHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ciA9IGFzc2lnbigKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2Nh
dGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFy
Z3VtZW50LS07KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24g
PSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEu
YXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIxNSw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwg
ZGF0YS0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0
ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24s
IGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFy
dCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1YWxSZWdpc3Rl
ciBhc3NpZ24oY29uc3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2Fs
KCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVz
dWx0LnRvTG9jYWwoKV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFY
KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG15QWxsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRleCA9IHVzZWRP
cGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIG15QWxsb2Nh
dGlvbiA9IGFsbG9jYXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15QWxsb2NhdGlv
biA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CiAgICAg
fQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0
aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMyY2U5NjFmZjlh
MDcxMmExYTA1MS4uYjQ4YzZmN2YxOTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4YTcyNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGktLTspIHsKICAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgpID09IGxvY2Fs
KSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+
b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWwgPSBu
b2RlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0
SGVhcChTdGFjaywgbG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFw
KG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIwNzBiNmVlNmY0
ZjhiZjkuLmYxYjFmZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxs
SGVscGVycyBqaXQobnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JF
eGl0LCAmdm0pOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkRGRyBPU1IgZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewog
ICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuaAppbmRleCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4MjA1ZDllLi44
YjVjM2YwMWE0ODUyMGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07CiAKIG5hbWVz
cGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAKaW5kZXggNjBmYmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1ZjU3MTNmMWQ3
ZS4uNzk2NjVmOGFiODVmYzExMTZkNjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAo
aXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y2hlY2tPcCA9IENoZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNw
ZWNDZWxsQ2hlY2sgJiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0aGUgVERaIHZh
bHVlLiBUaGUgY2FsbCBlbnRyeXBvaW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFREWiwKQEAgLTE2
OCw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCkpID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0
ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNW
YWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVl
cygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDllZTVlMDA3
NDA5ZGY1Mjk0YmZjZjUxYjc3NmViOGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUzZGMzYzQ2YzBl
MjRkNGRhMWNlMWIwY2Y1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCkBAIC00ODMsNyArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPnBoaXNbaV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRo
aXNCbG9jay5jb250YWlucyhub2RlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUp
LCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBu
b2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICAv
LyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhp
SW5kZXgoaSkpCkBAIC01MTksMTAgKzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7
ICsraykgewogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0g
YmxvY2stPnByZWRlY2Vzc29yc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhp
cyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBi
bG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMs
MTEgKzUzMywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBw
cmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBTZXRBcmd1bWVudERlZmluaXRlbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBw
cmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0NywxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBp
dCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2
QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXBy
ZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygK
LSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpKTsKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0g
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
LAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KSk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBPcGVyYW5kczxz
aXplX3Q+IHNldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBWQUxJREFURSgodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2Nr
KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5hcmd1bWVudChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBAIC02NjgsMjQg
KzY2NCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3Vu
dHMuZ2V0KG5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5vcGVyYW5kKCkpID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgYmxvY2spLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNldEFy
Z3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1heSBiZSBtdWx0
aXBsZSBTZXRMb2NhbHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBmbHVzaGlu
Zy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6
CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sg
dG8gaGF2ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAg
ICAgICAgICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERlZmluaXRlbHkg
Zm9yIHRoYXQgbG9jYWwuCi0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHNldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAg
ICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5v
dFNldDsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5vcGVyYW5kKCkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5YmU6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtOTY4LDI2ICs5NjQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZyhub2Rl
LCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCisgICAgdm9p
ZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIGJs
b2NrKQogICAgIHsKICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAgZGF0YUxvZyhs
b2NhbCwgIiBpbiBudWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAi
IGluIG51bGwgQmxvY2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAgIGRhdGFM
b2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lk
IHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWws
IEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQor
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Js
b2NrKiBkZXN0aW5hdGlvbkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBp
biBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOworICAg
ICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIs
ICpkZXN0aW5hdGlvbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0
aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBz
b3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFz
aWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0
YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2Nr
KTsKKyAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwgIiBpbiBCbG9j
ayAiLCAqc291cmNlQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KE5vZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5k
ZXggMjZmMDMyOWQ1NDMwNDE1NzIwNWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVjZGM5MmUyYzI0
MTBhMzVjMDEzMTMxZmRjM2I3Y2NjMjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC00MSwxMSAr
NDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAK
LW5hbWVzcGFjZSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlKEdyYXBoJiBn
cmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGluZyIpCkBAIC01
Niw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2YXJhcmdzIGZv
cndhcmRpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBA
IC04OCw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBjYWxscyBpbnRv
IHRoaXMgZnVuY3Rpb24gdG8gYmUgcmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBpbiBhIHNpbXBs
ZSBPKG4pIG1hbm5lci4KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGJsb2Nr
LT5hdChjYW5kaWRhdGVOb2RlSW5kZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2coIkhhbmRsaW5nIGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJcbiIpOwogICAg
ICAgICAKICAgICAgICAgLy8gV2UgZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVyIENyZWF0ZUNs
b25lZEFyZ3VtZW50cyBpZiB0aGUgYnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3ICsxMDMsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBbJl0gewogICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNyw5ICsxMTUs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKS5pc1RtcCgpLCAiV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYSB0bXAgcmVm
ZXJyaW5nIHRvIGFuIGFyZ3VtZW50cyBvYmplY3QuIik7CiAgICAgICAgICAgICAgICAgbGFzdFVz
ZXJJbmRleCA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxz
LmNvbnRhaW5zKG5vZGUtPnVubGlua2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
bGV2YW50TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAg
ICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRPcGVyYW5kKCku
dmlydHVhbFJlZ2lzdGVyKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5h
cHBlbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVj
a1ZhcmFyZ3M6CkBAIC0xNDAsMTMgKzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgc2F3RXNjYXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHNhd0VzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBF
c2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMo
bm9kZSwgY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5v
ZGVJbmRleDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRD
YWxsZXI6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSB8
fCBub2RlLT5jaGlsZDIoKSA9PSBjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzTG9hZGVkRnJvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2
YWxpZEdldEJ5T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBidXR0ZXJmbHkg
OiBjYW5kaWRhdGVCdXR0ZXJmbGllcykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC51c2VzKG5vZGUsIGJ1dHRlcmZseSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgQnV0dGVyZmx5IGVzY2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNSwxMSAr
MjM1LDExIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAog
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAx
KSwKLSAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIHJlZywg
IiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2Fscyks
ICJcbiIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEtpbGxpbmcgIiwgb3BlcmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAi
LCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9jYWxzW2ldKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0tXSA9IHJlbGV2
YW50TG9jYWxzLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2Fscy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJ
bmRleCA9IG5vZGVJbmRleDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNlckluZGV4ID0g
IiwgbGFzdFVzZXJJbmRleCwgIiwgIiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgpLCAiXG4iKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBEZXRlcm1pbmUg
aWYgYmV0d2VlbiB0aGUgY2FuZGlkYXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJlIGlzIGFueQpA
QCAtMjYzLDE2ICsyNjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoK
ICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNr
OgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0
ZSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0
U3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2Fu
ZGlkYXRlLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJm
ZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVz
aDoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUsIG5vZGUtPmxvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5kKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxMyArMjk3LDEyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBh
eWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwg
aGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNJbnRlcmZl
cmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBO
b09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9lc0ludGVyZmVyZSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTEs
NyArMzEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2Ug
Y2FuIG1ha2UgdGhpcyB3b3JrLgotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBXaWxsIGRvIGZvcndhcmRpbmchXG4iKTsKICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgCkBAIC0zNDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0aGVzZS4KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
VmFyYXJnc0xlbmd0aDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGls
ZCgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNB
cnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBub2RlLT5vcmln
aW4sIC8qIGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndh
cmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4ZWJmZmI0MzVl
ZDRkYmY2MDJiZDYyYWVkNGMzNDMyZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMwODEyNWI0ZTZl
Y2M4OGE4N2M3ZDE3OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NE
YXRhKCkKLSAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
KyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRp
Y3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5i
b3goZmFsc2UpCkBAIC00NSwxMCArNDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJs
ZUFjY2Vzc0RhdGEoKQogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVBY2Nlc3NEYXRh
OjpWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgIDogbV9sb2Nh
bChsb2NhbCkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxlQWNjZXNzRGF0
YTo6VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1fcHJlZGljdGlv
bihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxk
TmV2ZXJVbmJveChmYWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChm
YWxzZSkKQEAgLTg3LDcgKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVz
ZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCB0aGlzIGZhY2lsaXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTogbWFrZSB0
aGlzIHdvcmsgZm9yIGFyZ3VtZW50cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCisg
ICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCiAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVkaWN0aW9u
LCB0aGVuIHRoaXMgZG9lc24ndApAQCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFyaWFibGVBY2Nl
c3NEYXRhOjp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsKICAgICBBU1NF
UlQoaXNSb290KCkpOwogICAgICAgICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwg
c2hvdWxkTmV2ZXJVbmJveCgpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkgfHwgc2hv
dWxkTmV2ZXJVbmJveCgpCiAgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0Fz
QXJyYXlJbmRleCkpCiAgICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUo
bV9kb3VibGVGb3JtYXRTdGF0ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgIApAQCAtMTc2
LDcgKzE3NSw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUy
SW1wbCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXZSBwdW50IGZvciBt
YWNoaW5lIGFyZ3VtZW50cy4KLSAgICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgaWYg
KG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICAvLyBUaGUgYXJndW1lbnQtYXdhcmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJnZXMgYWxsIG9m
IGFuIChpbmxpbmVkIG9yIG1hY2hpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEyMDQzZmEyNTRl
NjA5NDIzMjAxNGEyODRlLi5iZTJmYjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1NTczZmNlZmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJs
aWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFZhcmlhYmxlQWNjZXNzRGF0YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KCk7Ci0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCk7CisgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCgpCisgICAgT3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xv
Y2FsID09IGZpbmQoKS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOworICAgICAg
ICBBU1NFUlQobV9vcGVyYW5kID09IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJu
IG1fb3BlcmFuZDsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBtYWNoaW5lTG9j
YWwoKQpAQCAtMjA4LDEwICsyMDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0aW5nIHRoZW0g
aGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQog
ICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQu
CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9t
YWNoaW5lTG9jYWw7CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwogICAgIFNwZWN1
bGF0ZWRUeXBlIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFuZCBtX29wZXJh
bmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5vZGVGbGFncyBt
X2ZsYWdzOwogCiAgICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAppbmRleCAyOGU0MzdmZDUxZmVhNDk2
OWViNDhlY2YwYzA1MDhmMGEzN2RmODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBjNDNiZDM2ZWQ3
MmUzZjljZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudC5jcHAKQEAgLTU5LDExICs1OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgiLCBpZCgpLCAi
KSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgb3V0
LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwgIikiKTsK
KyAgICAgICAgb3V0LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJhbmQoKSwgIiki
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAgICAgICBvdXQu
cHJpbnQoCi0gICAgICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIo
KSwgIiAtPiBieXRlY29kZToiLCBieXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAgICAgICAiU2V0
TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBvcGVy
YW5kKCksCiAgICAgICAgICAgICAiLCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgp
KSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3MjIzZGQ2ZjY5
OWM2ZGJhZDZkMjI0NjdjOTgzNC4uYzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFhYzQ4MTM4ZDM0
ZTNmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgK
QEAgLTY4LDYgKzY4LDEwIEBAIGVudW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50OF90IHsKIH07
CiAKIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIFZhcmlhYmxlUmVwcmVzZW50
YXRpb24oKSAKKyAgICAgICAgOiBvcGVyYW5kKCkgCisgICAgeyB9CisKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBncHI7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBm
cHI7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5pb24gVmFyaWFi
bGVSZXByZXNlbnRhdGlvbiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBh
eWxvYWRHUFI7CiAgICAgfSBwYWlyOwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0dWFsUmVnOwor
ICAgIE9wZXJhbmQgb3BlcmFuZDsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQgewpAQCAtMTYy
LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3
aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXBy
ZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IHZpcnR1YWxS
ZWdpc3Rlci5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlcjsKICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAgZXZlbnQu
bV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3
aGljaCk7CkBAIC0xODEsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0
YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0
ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkK
KyAgICAgICAgT3BlcmFuZCBieXRlY29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5l
UmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZl
bnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2gudmlydHVhbFJlZyA9
IG1hY2hpbmVSZWcub2Zmc2V0KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVw
cmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29k
ZVJlZy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2Rl
T3BlcmFuZDsKICAgICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAgICAgICAg
ZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RG
TW92ZSh3aGljaCk7CkBAIC0xOTUsMTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBldmVudDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChN
aW5pZmllZElEIGlkLCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAgc3RhdGljIFZh
cmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVjb2RlUmVnKQog
ICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdo
aWNoOwogICAgICAgICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXBy
ZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVh
bFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVy
YW5kID0gYnl0ZWNvZGVSZWc7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnRFdmVudDsK
ICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwogICAgICAgICBldmVudC5t
X3JlcHJlc2VudGF0aW9uID0gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0yNjUsMTMgKzI2
OSwxMyBAQCBwdWJsaWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0ZXIoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5k
ID09IFNwaWxsKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0
aW9uLmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5n
ZXQoKS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYnl0ZWNvZGVSZWdpc3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5kIG9wZXJhbmQo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8
IG1fa2luZCA9PSBNb3ZIaW50RXZlbnQpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVy
KG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3Jl
cHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lUmVnaXN0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQzOWJiMDk0YzRi
ODY2ZTY3ZWQzZTJlZTFiNDg5NmFiYjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIxYTM1YWY4ZDIx
ZGUzMmI1ZGRhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6bG9nRXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7CiAgICAgZGF0
YUxvZ0YoInNlcSMldToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CiAgICAgZXZl
bnQuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgIGRhdGFMb2dGKCIgIik7CisgICAgZGF0YUxv
Z0xuKCIgIik7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBAQCB1bnNpZ25l
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFwaCwKICAgICB1
bnNpZ25lZCBpbmRleCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVjb3Zlcmllcywg
VmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNwYW5zKSBjb25z
dAogeworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVu
c2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4
OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBAIC0xMzAsMzcg
KzEzMiw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAg
ICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAg
ICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxS
ZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSAtIDEp
Lm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3Bl
cmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsK
KyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50IG1pbk9mZnNl
dCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAgdW5kZWZpbmVk
T3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0LCBpIC0gZmly
c3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4Owog
ICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1bnNpZ25lZCBp
KSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2YgYXJndW1lbnRz
IGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFjZW50IG9wZXJh
bmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXgg
JiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50
KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0
VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4oaSk7
CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkgewogICAgICAg
ICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0Fy
Z3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAgICAgICBmaXJz
dFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
LmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7Ci0gICAg
ZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJh
bWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNh
bGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAgbnVtVG1wcyA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAgIC8vIENyYXp5
IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMgbXVzdCBiZSBh
biBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHZhcmlh
YmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAogICAgIC8vIHJl
ZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1W
YXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVyZSBiZWNhdXNl
IHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJh
bmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJs
ZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVjb3Zlcmllcy5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNv
dmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLnZpcnR1YWxS
ZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudW1W
YXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQgVmFyaWFibGVF
dmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAgICAKICAg
ICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFuZCBleGVj
dXRlIHRoZSBldmVudHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2Vz
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9wZXJhbmRz
PFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwg
bnVtVmFyaWFibGVzLCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVyYW5kU291
cmNlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoU291cmNlSXNEZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJh
dGlvbkluZm8+IGdlbmVyYXRpb25JbmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydElu
ZGV4OyBpIDwgaW5kZXg7ICsraSkgewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVu
dCA9IGF0KGkpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBldmVu
dCAiLCBldmVudCk7CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAgICAgICAgIGNh
c2UgUmVzZXQ6CiAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4LDIxICsyMDYs
MjMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAg
ICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0
ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5i
eXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAgICAgICAgICAg
IGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAg
ICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVl
U291cmNlKGV2ZW50LmlkKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNl
dExvY2FsRXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChl
dmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2Vz
LnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0
YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkp
KQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFu
ZCgpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwg
ZXZlbnQuZGF0YUZvcm1hdCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJP
cGVyYW5kIHNvdXJjZXM6ICIsIG9wZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAvLyBTdGVwIDM6
IENvbXB1dGUgdmFsdWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVz
KTsKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PihPcGVyYW5k
c0xpa2UsIG9wZXJhbmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3Bl
cmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UmIHNvdXJjZSA9
IG9wZXJhbmRTb3VyY2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlhbGx5UmVjb3Zl
cmFibGUoKSkgewpAQCAtMjMwLDYgKzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnJlY29uc3RydWN0KAogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChz
b3VyY2UuaWQoKSk7CiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9IGdlbmVy
YXRpb25JbmZvcy5nZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAoIWluZm8uYWxpdmUpIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zl
cmllcy5vcGVyYW5kRm9ySW5kZXgoaSksICIgaXMgZGVhZC4iKTsKICAgICAgICAgICAgIHZhbHVl
UmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkK
ICAgICAgICAgICAgICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjM3LDYgKzI0
OCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJp
ZXNbaV0sIG5vZGUpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFu
ZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNvbnN0YW50LiIp
OwogICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRl
ZCkgewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIG5vZGUtPmNv
bnN0YW50KCkgPT0ganNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkVW5k
ZWZpbmVkT3BlcmFuZChpKTsKQEAgLTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFs
dWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
SlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0dWFsUmVnKSwg
aW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7CiAgICAg
fQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAg
ICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6ZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgK
aW5kZXggMDE1NzMwMDdlZGRkZDcwZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4uZTllNDNhYmZl
YzQ4NWZlYzdlNjYzMTUxYzFjMjJlYzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkgKzQyLDEyIEBA
IHN0cnVjdCBVbmRlZmluZWRPcGVyYW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50
U3RyZWFtIDogcHVibGljIFZlY3RvcjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEFuZExv
Zyhjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKICAgICB7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgbG9nRXZlbnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQoZXZlbnQpOwog
ICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNi
YzEwNzZkZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZh
cmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKICAgICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2Qy
YTk1NGYwOGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJ
VENvZGUuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1f
Ynl0ZWNvZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAg
ICA6IG1fZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNiNzgxY2ZiODli
MTFjMzlmOThmN2E5YWJhM2QuLmQzNTkxMzU0ZjE1YTAyZWZiMTdmNzg5Zjk3ZTk4NTljMTZiOWJm
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
QEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
Y2xlYXJTdGFja0ZyYW1lKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFtZVNpemUoKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lz
dGVyQXRPZmZzZXRMaXN0KCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKGNvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAgICAgICAgICAg
ICB9KTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6
IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsK
QEAgLTI3NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVj
YXVzZQogICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVj
dGVkLgotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJm
bG93IENoZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1
aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcg
KzM1NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
LCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShG
bHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7
CkBAIC0xMjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgog
ICAgICAgICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAg
ICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMs
NyArMTk1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3Rh
dGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigp
KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVy
ICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2Vk
T3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2
b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAg
ICAgICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShk
YXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYsMTMgKzc5Mjks
MTMgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsK
LSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAg
ICB2b2lkIGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUs
IHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCkBAIC03OTQ3LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
b21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9v
dXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAg
ICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2Nv
cGUoKQpAQCAtOTU0Miw1MSArOTU0NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVl
KHBhdGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygp
CisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1l
bnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExW
YWx1ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9m
VmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAg
Ly8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1
bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRo
ZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25n
IGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qg
c29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2Fs
bF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAK
KwogICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgs
IG1fb3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJh
cmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3Zl
KGxlbmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJ
bmNsdWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisg
ICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUg
anNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAg
ICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0
aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAg
IAorICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5n
VGhpcyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlv
bkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJh
cmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxS
ZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBt
YWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NG
b3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisg
ICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVl
KCksIG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAg
ICAgICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRW
YXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2Fz
dFRvSW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5t
YW5kYXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+
Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgp
OwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxl
Rm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
OTU5NSw1MCArOTU5OCwyNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KSkKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRz
TGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJh
bWUpOwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAg
ICAgaWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93
bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1f
b3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9w
ZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25z
LgotICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0
aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2Vy
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQot
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxM
ZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJ
bnQzMigxKSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxl
bmd0aEluY2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
IHsKKyAgICAgICAgICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1YihjYWxsZXJMZW5n
dGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2VsZWN0KG1fb3V0
LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRM
ZW5ndGgsIG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxl
KTsKKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNh
bGxlckxlbmd0aEluY2x1ZGluZ1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0
LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1
bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAog
ICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVu
Z3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAg
ICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zm
c2V0OwogICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxp
bmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRh
cmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAg
LTk2OTcsNjUgKzk2NzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJm
b3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhy
b3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAg
ICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNM
YXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGggPSBtX291
dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSk7CiAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxM
ZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUo
aXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5z
dWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVy
biBtX291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5n
dGhSZXN1bHQpOworICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFu
T3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0
LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKICAgICB9CiAK
ICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAgIHsKLSAgICAg
ICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5s
aW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxG
cmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9
IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9t
U3ByZWFkKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7
Ci0gICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgYXV0
byBjb2xsZWN0QXJndW1lbnRDb3VudCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwg
Tm9kZSogdGFyZ2V0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCkgewotICAgICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5u
b2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0g
ICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3Rvcigp
OwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNo
aWxkcmVuKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQo
aSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFy
Z2V0LCBpKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICArK251bWJlck9mU3RhdGljQXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0
YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCk7Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRT
cHJlYWRMZW5ndGhzLmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMtPmdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5s
aW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICB9KS5p
dGVyYXRvci0+dmFsdWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0QXJndW1lbnRD
b3VudChhcmd1bWVudHMpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1f
b3V0LmNvbnN0SW50MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAgICAgICAgZm9y
IChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKyAgICAg
ICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgp
KTsKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgICAgICBzcGVjdWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZVN0YXJ0KS52YWx1ZSgpOwogCi0gICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2Fi
bGVMYW1iZGEoW3RoaXMsICZjYWNoZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRdKGF1dG8g
c2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAg
ICAgYXV0byBmb3J3YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJnRhcmdldFN0
YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1
ZSB7CiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0b3JlSW5k
ZXgpOwogCkBAIC05Nzk4LDggKzk3MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodGFyZ2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9
IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBt
X291dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkp
OworICAgICAgICAgICAgYXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9
IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApOworICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9F
eHRQdHIoZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUs
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxv
b3AgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAg
ICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0No
aWNrZW5fUGFja2V0X2ZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0
cihhZGRyZXNzRm9yKDApKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2Nh
bGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tl
bl9QYWNrZXRfY2FsbGVlKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hp
Y2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5s
b2FkUHRyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
KSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CiAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNr
ZXRfc2NvcGUpOwogICAgIH0KICAgICAKQEAgLTEyMzQ2LDcgKzEyMjgyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5j
YWxsZWVSZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgcmV0dXJuIHdl
YWtQb2ludGVyKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAog
ICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgdW5zaWduZWQgb2Zmc2V0ID0gMCkKQEAgLTE3NjExLDcgKzE3NTQ3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRD
b2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKICAgICAgICAgbV9vdXQuc3Rv
cmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkp
LAotICAgICAgICAgICAgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAg
ICAgICAgICAgIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKICNpZiAhVVNFKEJVSUxUSU5fRlJBTUVfQUREUkVTUykgfHwgIUFTU0VSVF9ESVNB
QkxFRAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJzb2x1dGUo
JnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAjZW5kaWYKQEAgLTE3NzE5LDcgKzE3NjU1LDggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlw
dG9ycy5hbGxvYygKICAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9maWxlLAogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwK
LSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMo
KSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mVG1wcygp
KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0xNzgyNCwxNSArMTc3NjEs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdERlc2Ny
aXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fs
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRM
T1NSRXhpdExpdmVuZXNzKCkKICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fcGxhbi5tb2Rl
KCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWls
YWJsZTogb3BlcmFuZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwgYXZhaWxhYmls
aXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQorICAgICAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9j
YWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJpbGl0eSA9
ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVG
b3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAg
ICBpZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQpAQCAtMTgxMzIs
MzkgKzE4MDY5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5hbHJlYWR5UmVn
aXN0ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgfQogICAg
IAotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwg
cHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVl
IGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5k
XSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52
YXJpYWJsZXNbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7CiAg
ICAgfQotICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFu
ZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5
bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJh
bmQsIFRhZ09mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKGludCBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBvZmZzZXQp
OwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0xvY2FsKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVy
YW5kLm9mZnNldCgpLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxG
cmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZv
cihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0Zv
cihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsK
KyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4IDkzMzE3NzEw
ZjZkMDY4NjA5MTliYzAwMjUzMTNhMTMyMTkwNDQ5MTkuLjA5MWU3ZjNjOWI0OTgzNDA3NmE4ZDZm
OTE3NDJjY2I1Y2FkNWVhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50
cnkuY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAg
ZGF0YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsKICAgICAKICAg
ICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVu
dC0tOykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1Zh
bHVlKCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkuYXNhblVuc2FmZUpTVmFsdWUoKTsKICAg
ICAgICAgT3B0aW9uYWw8SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVzLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFsdWUgJiYgdmFsdWVP
blN0YWNrID09IHJlY29uc3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJndW1lbnQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3Bw
CmluZGV4IDA5OTU4ZDJjNGY5YTVkODliNWZiYmI2NWY4NmJiNmRhYmNkZjE4ZTMuLjA0Yzg1Nzk5
ZTRkNDY5MjNhMzE4NjcxOGUxOWYyNGJkZmZkYWJhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmNwcApAQCAtNDcsMTAgKzQ3LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBE
Rkc7CiAKIE9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcigKICAgICBEYXRhRm9y
bWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVl
UHJvZmlsZSwKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMpCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJl
ck9mTG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpCiAgICAgOiBtX3Byb2ZpbGVEYXRhRm9y
bWF0KHByb2ZpbGVEYXRhRm9ybWF0KQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxl
KQotICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzKQorICAg
ICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzLCBudW1iZXJPZlRt
cHMpCiB7CiB9CiAKQEAgLTExNyw1ICsxMTcsMyBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJu
YWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAppbmRleCBkYTg3Y2NmMzI3M2Zl
NGJlMzYwNjgzYjhhZjNiYmY1MTZkNjIyNWViLi5mZDdmOWYwNWJjNDg5YzFmNmFlY2UwOTdhZDhh
NGQxZTI3YjgwMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaApAQCAt
NjksNyArNjksNyBAQCBzdHJ1Y3QgT1NSRXhpdEhhbmRsZTsKIHN0cnVjdCBPU1JFeGl0RGVzY3Jp
cHRvciB7CiAgICAgT1NSRXhpdERlc2NyaXB0b3IoCiAgICAgICAgIERhdGFGb3JtYXQgcHJvZmls
ZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsCi0gICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5z
aWduZWQgbnVtYmVyT2ZUbXBzKTsKIAogICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUg
ZXhpdCBjYWxsIG1heSBiZSBhIHZhbHVlIHdlIHdpc2ggdG8gcHJvZmlsZS4KICAgICAvLyBJZiB0
aGF0J3MgdGhlIGNhc2UsIHRoZSBmb3JtYXQgd2lsbCBiZSBub3QgSW52YWxpZCBhbmQgd2UnbGwg
aGF2ZSBhCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKaW5kZXggNjY0ZDNiOTg4YWY3ZWE4M2Y2ZmI4MmJjYjNhOGMwYTg4MTc2ZWU3Mi4uYTM3
ODQxMGRhOWI4MDE1NzI0YTlkYzE2YzNmZTFhZWMwODA1NWQ0OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisj
aW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCIKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
LmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtMzcsMTAgKzM4LDExIEBACiAjaW5jbHVk
ZSAiRlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRM
U2F2ZVJlc3RvcmUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlByb2JlQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
QEAgLTQ3NCwxNiArNDc2LDUyIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5z
aWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAKICAgICBzaXpl
X3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyAgICBpZiAoZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewor
ICAgICAgICBhdXRvKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIGV4aXQubV9kZXNjcmlwdG9yLT5t
X3ZhbHVlcy50bXBJbmRleCgwKTsKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBq
aXQucHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0
byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5k
ZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0
ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
c2lkZVN0YXRlLT50bXBzW2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKworICAgICAg
ICAgICAgICAgIHZtUHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3Zl
KHNpZGVTdGF0ZSkpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9y
aWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29u
dGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYm
IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAg
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZSgpOworICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxG
cmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJh
bWUtPnJldHVyblBDT2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2Rl
SW5kZXgsIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgaWYgKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAg
ICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0p
OworICAgIH0KKwogICAgIC8vIE5vdyBnZXQgc3RhdGUgb3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZl
ciBhbmQgcGxhY2UgaXQgYmFjayBpbnRvIHRoZSBzdGFjay4gVGhlIHZhbHVlcyBhcmUKICAgICAv
LyBhbHJlYWR5IHJlYm94ZWQgc28gd2UganVzdCBtb3ZlIHRoZW0uCiAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1
ZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGluZGV4KTsK
KworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0
PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQorICAgICAgICBp
ZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxp
bnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IocmVnKSk7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJl
Z1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIo
KSkpOwogICAgIH0KICAgICAKICAgICBoYW5kbGVFeGl0Q291bnRzKHZtLCBqaXQsIGV4aXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKaW5kZXggN2Y3Y2Qz
ODMyNDk2MWE4ZmY0ZTQ3MjU5YTg4NGRlODZkNTY0YjExNy4uMTAyYzFlNmExYmQ5ZWIzYjQ3MTMz
NzQ0Zjg0M2VjNjRkNjNhMThmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUihKU0dsb2JhbE9iamVjdCoK
ICAgICAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBm
cm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNl
bGxzIGZyb20KICAgICAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSku
c2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJm
bHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5jcHAKaW5kZXggNzQ5MzNkYzYwNTE1YzVkYTAwZWExOGZjN2Q1ZGIzYWQ5
Y2U1ZTljZi4uZDU3ZmIxZWVhODA0NGEzNGI3OTE3NjhhOTA5NzY5ODk5OGFjMzM5MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1NSwxNSArNjU1LDM3IEBA
IExWYWx1ZSBPdXRwdXQ6Om5vdFplcm82NChMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwg
dmFsdWUsIGludDY0WmVybyk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFs
dWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKQorTFZhbHVlIE91dHB1dDo6c2VsZWN0
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgU2VsZWN0UHJlZGljdGFi
aWxpdHkgcHJlZGljdGFiaWxpdHkpCiB7CiAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKSB7CiAg
ICAgICAgIGlmICh2YWx1ZS0+YXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHRha2VuOwor
ICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVy
biBub3RUYWtlbjsKKyAgICAgICAgICAgIHJldHVybiByaWdodDsKICAgICB9Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2lu
KCksIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOworCisgICAgaWYgKHByZWRpY3RhYmlsaXR5ID09
IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSkKKyAgICAgICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCks
IHZhbHVlLCBsZWZ0LCByaWdodCk7CisKKyAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBu
ZXdCbG9jaygpOworICAgIExCYXNpY0Jsb2NrIGxlZnRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsK
KyAgICBMQmFzaWNCbG9jayByaWdodFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworCisgICAgbV9i
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCB2YWx1ZSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGxlZnRUYWtlbkJsb2Nr
LCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UmlnaHRMaWtlbHkgPyBG
cmVxdWVuY3lDbGFzczo6Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBG
cmVxdWVudGVkQmxvY2socmlnaHRUYWtlbkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQ
cmVkaWN0YWJpbGl0eTo6TGVmdExpa2VseSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVx
dWVuY3lDbGFzczo6UmFyZSkpOworCisgICAgTFZhbHVlIHBoaSA9IGNvbnRpbnVhdGlvbi0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6UGhpLCBsZWZ0LT50eXBlKCksIG9yaWdpbigp
KTsKKworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2lsb25WYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgbGVmdCwgcGhpKTsKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJs
b2NrKGNvbnRpbnVhdGlvbikpOworCisgICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6
OlVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcmlnaHQsIHBoaSk7CisgICAgcmlnaHRU
YWtlbkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2lu
KCksIEIzOjpGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICBtX2Jsb2NrID0g
Y29udGludWF0aW9uOworICAgIHJldHVybiBwaGk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21p
Y1hjaGdBZGQoTFZhbHVlIG9wZXJhbmQsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0
aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5
MzYyYjNiZGNhMGZkNDZhMDNhYTU3MGNhMmUuLjRjMDJiMzQwODUxNDZmN2RmMDI1NjI3ZDVmZjMx
Yzc4MTBkOGZiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKICNpbmNsdWRlICJG
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMQ29tbW9uVmFsdWVzLmgi
CisjaW5jbHVkZSAiRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCIKICNpbmNsdWRlICJGVExTdGF0
ZS5oIgogI2luY2x1ZGUgIkZUTFN3aXRjaENhc2UuaCIKICNpbmNsdWRlICJGVExUeXBlZFBvaW50
ZXIuaCIKQEAgLTM2NSw3ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHRlc3RJc1plcm9Q
dHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNOdWxsKGJpdEFuZCh2YWx1
ZSwgbWFzaykpOyB9CiAgICAgTFZhbHVlIHRlc3ROb25aZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZh
bHVlIG1hc2spIHsgcmV0dXJuIG5vdE51bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KIAotICAg
IExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtl
bik7CisgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVl
IG5vdFRha2VuLCBTZWxlY3RQcmVkaWN0YWJpbGl0eSA9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpO
b3RQcmVkaWN0YWJsZSk7CiAgICAgCiAgICAgLy8gVGhlc2UgYXJlIHJlbGF4ZWQgYXRvbWljcyBi
eSBkZWZhdWx0LiBVc2UgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZWRBY2Nl
c3MoKSB3aXRoIGEKICAgICAvLyBub24tbnVsbCBoZWFwIHRvIG1ha2UgdGhlbSBzZXFfY3N0IGZl
bmNlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJl
ZGljdGFiaWxpdHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGlj
dGFiaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTg1M2JhOTg1MjJhYWFjNjFiODQ5OTU1Mjc5NGE1MDkz
MGM3ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
ZWxlY3RQcmVkaWN0YWJpbGl0eS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQzo6RlRMIHsKKworZW51bSBjbGFzcyBTZWxlY3RQcmVk
aWN0YWJpbGl0eSA6IHVpbnQ4X3QgeworICAgIE5vdFByZWRpY3RhYmxlLAorICAgIFByZWRpY3Rh
YmxlLAorICAgIExlZnRMaWtlbHksCisgICAgUmlnaHRMaWtlbHksCit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2OTM0YzNmMGQzNzkxZjY0YmE0
Mjk2M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3YTY3MGQyNTgwNGFhOGNhZTIy
YjNhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgK
QEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBpZiAo
Y2FsbFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih2
bSwgdXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLCByZXN1bHRH
UFIsIGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9DaGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdkZDYzMWFjZDRjY2JlY2QxNGIy
NGNjNWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50CisgICAgYXR0cl9yZWFkZXIg
OnVzZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAg
YXR0cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBpbmRleCwgdG1w
cykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRleCA9IGluZGV4CisgICAgICAg
IEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDp1c2UgfQor
ICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9PSA6
ZGVmaW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhuYW1lc3BhY2UpCisgICAgICAg
IEVPRjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9OgorRU9GCisgICAgZW5kCitl
bmQKKworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlhbGl6ZShvcGNvZGUsIHRtcHMs
IGNoZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEB0bXBzID0g
dG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXBfd2l0aF9pbmRleCB7
IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhuYW1lLCBpbmRleCwgdG1wcykg
fQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAgIEBjaGVja3BvaW50cy5lYWNo
IGRvIHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAgICBFT0Y8LS0KK0JpdE1hcDxt
YXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBpdGFsaXplZF9uYW1lfSh1aW50
OF90IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3BvaW50KSB7CisKKyAgICB9Cit9
CitFT0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29k
ZS5yYgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNlYmI0ZjBhYjI0NDg1Li5jZmQ5
ZGYxNTExNDdhODZkYTRiYzc1YmU0NmE2NzgyNWUyNTM3NWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBPcGNvZGUK
ICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVyIDptZXRhZGF0YQogICAgIGF0
dHJfcmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hlY2twb2ludHMKIAogICAgIG1v
ZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXplOjpOYXJyb3ciCkBAIC00NSwx
MiArNDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAogICAgIGVuZAogCi0gICAgZGVm
IGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRh
dGFfaW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJh
cywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycywgdG1wcywgY2hlY2twb2lu
dHMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAgICBAbmFtZSA9IG5hbWUKICAg
ICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBAbWV0YWRhdGEgPSBNZXRhZGF0
YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwogICAgICAgICBAYXJncyA9IGFy
Z3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwgaW5kZXh8IEFyZ3VtZW50Lm5l
dyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFyZ3MubmlsPworICAgICAgICBA
dG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwIHsgfChj
aGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5uaWw/CiAgICAg
ZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEyMSw4IEBAIGNsYXNzIE9wY29k
ZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVibGljIElu
c3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9CisgICAgI3tjaGVja3Bv
aW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTEzMiw2ICsxMzcsMTggQEAg
RU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBvcGNvZGVJRCA9
ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMKKyAgICAgICAg
cmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJlbnVtIENoZWNrcG9pbnRz
IDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9pbnR8ICIgICAg
ICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9mQ2hlY2twb2lu
dHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAgICBkZWYgdGVtcHMKKyAg
ICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVudW0gVG1wcyA6IHVpbnQ4
X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAgI3t0bXB9LCJ9
KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYgZW1pdHRlcgog
ICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJRFR5cGUsIDAp
CiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29kZUlEVHlwZSwg
MCkKQEAgLTIwMCw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wY29kZVNpemUg
X19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5lcmF0b3I+CiAg
ICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7dHlwZWRfYXJn
c30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3BvaW50cy5uaWw/
ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBpZiAoX19zaXpl
ID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25XaWRlT3Bjb2Rl
MTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUzMikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAyMDRhYzc1OWUx
M2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRjMjNjYzBlYmVj
MTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0
aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAKICAgZGVmIGNy
ZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBj
b25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdb
Om1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNv
bmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6
bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpjaGVja3BvaW50
c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29kZXMsIGNvbmZp
ZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
aW5kZXggZjYzOTRhYzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5NTM2YTYwMC4uZWY3ZjZjOTRm
NDE2OGI0YTI4NDYwNTNhNWQwMTNiZTExMjIwZGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBD
YWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBn
bG9iYWxFeGVjLCBKU0NhbGwKICAgICBBU1NFUlQoZ2xvYmFsRXhlYy0+aXNEZXByZWNhdGVkQ2Fs
bEZyYW1lRm9yRGVidWdnZXIoKSk7CiB9CiAKLWJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpIGNvbnN0Citib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJl
Qnl0ZWNvZGVJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBz
d2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKQEAgLTkwLDEyICs5MCwxMiBAQCBib29s
IENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIAogdW5z
aWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCk7CisgICAgcmV0dXJuIHRo
aXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFnKCk7
CiB9CiAKIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFz
UmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudF0udW5zYWZlVGFnKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udW5zYWZlVGFnKCk7CiB9CiAKIENhbGxTaXRl
SW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKQEAgLTEwNSw3ICsxMDUsNyBA
QCBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CiAKIFNVUFBS
RVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBj
b25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSAmIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkgPj4gQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0KSkpOwogfQogCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTExNywzMyArMTE3LDM0IEBAIGNvbnN0IEluc3RydWN0
aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogdm9pZCBDYWxsRnJhbWU6OnNldEN1
cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlKEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2cGMpKSk7Ci0gICAg
dGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IGNhbGxTaXRlLmJpdHMo
KTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCldLnRhZygpID0gY2FsbFNpdGUuYml0cygpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNh
bGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxv
Y2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
IEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2Rl
QmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQogCiAjZWxzZSAv
LyBVU0UoSlNWQUxVRTMyXzY0KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVu
dFZQQygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0
KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJl
dHVybiBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRzQXNCeXRlY29k
ZU9mZnNldCgpKS5wdHIoKTsKIH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29u
c3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVC
bG9jaygpLT5ieXRlY29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkp
OworICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KV0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2
cGMpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZz
ZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgQVNTRVJUKGNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVC
eXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOwogfQog
CkBAIC0xNjUsOCArMTY2LDggQEAgQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5k
ZXgoKQogICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgfQog
I2VuZGlmCi0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAg
IHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7Cisg
ICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIGNh
bGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1l
Ojpjb2RlT3JpZ2luKCkKQEAgLTE4MCw3ICsxODEsNyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6
Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRl
eCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChj
YWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihj
YWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFt
ZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAppbmRleCBjZmI3NzE4NTYwMzk5MzM5MTAwNGZjMTMyMTE4Mzg0MjNj
NWRjNmE5Li42NDQ5MGU3YTcwN2VlYjAxYmEwN2FjYTMzMjYyM2FkZTEzZTBjOTQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlICJWTUVudHJ5UmVjb3JkLmgiCisjaW5jbHVkZSA8d3RmL0VudW1DbGFzc09wZXJhdG9yT3Zl
cmxvYWRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtNDYsMTggKzQ3LDI0IEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKICAgICAgICAg
CiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQotICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgeyB9CisgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQorICAg
ICAgICB7IAorICAgICAgICAgICAgQVNTRVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7
CisgICAgICAgIH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0g
b3RoZXIubV9ieXRlY29kZUluZGV4OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5t
X2JpdHM7IH0KIAotICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpOyB9CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRzKCkpOyB9CiAK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKKyAg
ICAgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50MzJfdCBtX2Jp
dHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlz
cG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC02NSw3ICs3
Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgo
KSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgo
dWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
Ojpmcm9tQml0cyhiaXRzKSkKKyAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChiaXRzKQogICAg
ICAgICB7CiAgICAgICAgIH0KIApAQCAtNzgsMjQgKzg1LDI3IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVz
ZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25h
cyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhD
UFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVyblBDOworICAgICAgICBhbGlnbmFz
KENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVn
aXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVy
KSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAK
LSAgICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgY2FsbGVlID0gY29kZUJsb2NrICsgMTsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgYXJndW1lbnRDb3VudCA9IGNhbGxlZSArIDE7Ci0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQgKyAxOwotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsg
MTsKKyAgICBlbnVtIGNsYXNzIENhbGxGcmFtZVNsb3QgOiBpbnQgeworICAgICAgICBjb2RlQmxv
Y2sgPSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsCisgICAgICAgIGNhbGxlZSA9
IGNvZGVCbG9jayArIDEsCisgICAgICAgIGFyZ3VtZW50Q291bnQgPSBjYWxsZWUgKyAxLAorICAg
ICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50ICsgMSwKKyAgICAgICAgZmlyc3RBcmd1
bWVudCA9IHRoaXNBcmd1bWVudCArIDEsCiAgICAgfTsKIAorICAgIE9WRVJMT0FEX01BVEhfT1BF
UkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisgICAg
T1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JB
TFMoQ2FsbEZyYW1lU2xvdCkKKwogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUg
b2Ygc2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50
IHRvIG1vc3QgZnVuY3Rpb25zLgogICAgIGNsYXNzIENhbGxGcmFtZSA6IHByaXZhdGUgUmVnaXN0
ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6
ZUluUmVnaXN0ZXJzID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIDE7CisgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IHN0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgKyAxOwogCiAgICAgICAgIC8vIFRo
aXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lmaWMgY2lyY3Vt
c3RhbmNlcwogICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBjYWxsZWUgY2Fu
J3QgYmUgYSBXYXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMTYsMTAgQEAgbmFtZXNw
YWNlIEpTQyAgewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFuZCBpZiBpdCdz
IG5vdCwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBndWFy
YW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNPYmplY3QqIGpz
Q2FsbGVlKCkgY29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1
cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRlcigpKTsgfQot
ICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNhblVuc2FmZVBv
aW50ZXIoKSk7IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBD
YWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5w
b2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxs
ZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZD
b2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMg
KyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9jayoqIGFkZHJl
c3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4o
dGhpcyArIHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7IH0KICAg
ICAgICAgaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2RlQmxvY2soKSBj
b25zdDsKICAgICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zm
c2V0KSBjb25zdDsKIApAQCAtMTQ2LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDYWxsZXJGcmFtZUFuZFBDLCByZXR1cm5QQyk7IH0KICAgICAgICAgQWJzdHJhY3RQQyBh
YnN0cmFjdFJldHVyblBDKFZNJiB2bSkgeyByZXR1cm4gQWJzdHJhY3RQQyh2bSwgdGhpcyk7IH0K
IAotICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3Q7Cisg
ICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0OwogICAgICAg
ICBib29sIGNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0OwogCiAgICAgICAg
IHVuc2lnbmVkIGNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3Q7CkBAIC0xODIsMTUgKzE5MiwxMyBA
QCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXByZWNhdGVkQ2Fs
bEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxlZSogZ2xvYmFs
Q2FsbGVlKTsKIAogICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZyYW1l
IChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdpc3RlciYgcihp
bnQpOwogICAgICAgICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAvLyBS
ZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lzdGVyJiB1bmNo
ZWNrZWRSKGludCk7CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBrbm93biBub24t
Y29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKTsK
IAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNhcHR1
cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCiAgICAgICAg
IHNpemVfdCBhcmd1bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSAtIDE7IH0KLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5w
YXlsb2FkKCk7IH0KKyAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
Y29uc3QgeyByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNl
dChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICsg
YXJndW1lbnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAr
IGFyZ3VtZW50KTsgfQogCkBAIC0yMzksNyArMjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAg
ICAgICAgIEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKIAot
ICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpIHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXpl
X3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogCiAgICAgICAg
IHN0YXRpYyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICAg
ICBib29sIGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QKQEAgLTI1MSwx
MCArMjU5LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0YWNrT3ZlcmZs
b3dGcmFtZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29uc3Q7CiAKLSAg
ICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5w
YXlsb2FkKCkgPSBjb3VudDsgfQorICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19j
YXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnBheWxvYWQoKSA9IGNvdW50
OyB9CiAgICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwogICAgICAgICBp
bmxpbmUgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZvaWQgc2V0UmV0
dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAgICB2b2lkIHNl
dFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZh
bHVlOyB9CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5o
CmluZGV4IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEuLmVlN2VjMmFi
MTA0YTdhMzRkOThiMGY0MzhmNjQ0YzJkY2ExYzUxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAtMzIsNTAgKzMy
LDM5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6
cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxv
Y2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0K
IGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0g
ICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJh
bWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKKyAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZ2lzdGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOwor
ICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdpc3RlciYgQ2Fs
bEZyYW1lOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHVu
Y2hlY2tlZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOwor
ICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1ZhbHVlIENhbGxG
cmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2Fs
bGVlKCkuaXNXYXNtKCkpOwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0u
anNWYWx1ZSgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKV0uanNWYWx1ZSgpOwogfQogCiBpbmxpbmUgSlNPYmplY3QqIENhbGxGcmFtZTo6
anNDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOwotICAg
IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7CisgICAgcmV0dXJu
IHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5vYmplY3QoKTsK
IH0KIAogaW5saW5lIENvZGVCbG9jayogQ2FsbEZyYW1lOjpjb2RlQmxvY2soKSBjb25zdAogewot
ICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVC
bG9jaygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKV0uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUgU1VQUFJFU1Nf
QVNBTiBDb2RlQmxvY2sqIENhbGxGcmFtZTo6dW5zYWZlQ29kZUJsb2NrKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjphc2FuVW5z
YWZlQ29kZUJsb2NrKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOwogfQog
CiBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdChW
TSYgdm0pIGNvbnN0CkBAIC0xMDIsMTIgKzkxLDEyIEBAIGlubGluZSBib29sIENhbGxGcmFtZTo6
aXNXYXNtRnJhbWUoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNldENhbGxlZShK
U09iamVjdCogY2FsbGVlKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGNhbGxlZTsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+
KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBjYWxsZWU7
CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKENvZGVCbG9jayogY29k
ZUJsb2NrKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrXSA9IGNvZGVCbG9jazsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRo
aXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0gPSBjb2RlQmxv
Y2s7CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0U2NvcGUoaW50IHNjb3BlUmVnaXN0
ZXJPZmZzZXQsIEpTU2NvcGUqIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40MjA5YzNhMWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZmNDZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ5dGVj
b2RlSW5kZXguaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBvZmZzZXQpIAorICAg
IHsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkK
KyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZzZXRdKTsKKyAgICAg
ICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDMyX3QpKQorICAg
ICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50MzJfdD4odG1w
c1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6
ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90KSk7CisgICAgICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRtcHNbb2Zm
c2V0XSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4OworICAgIHZvaWQqIG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7CisgICAgdWludDY0X3Qg
dG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBkYWE5NGM4OWY5MDA1
YTk5NzJmYzBlM2IwMmViODkzZDIxMWNkZDk3Li4xZDlkZGMzYjUzNGU5MDkyZThlMTE3OGIzYTE2
ODE1ZGY2OTk2NTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZXMu
aCIKICNpbmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCkBAIC0xMjMsNyArMTI0LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxGcmFtZSogY2FsbGVy
RnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
ZXJDYWxsU2l0ZUluZGV4ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKICAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBK
U1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVy
Q29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwor
ICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2VkUihj
YWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAg
VW5saW5rZWRDb2RlQmxvY2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0gY2FsbGVyQ29kZUJs
b2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250
ZXh0ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpIHx8IGNhbGxl
clVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7CkBAIC0yMTMsNiAr
MjE0LDkgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgMCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+IG1heEFyZ3VtZW50cykK
KyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisK
ICAgICBpZiAobGVuZ3RoID49IGZpcnN0VmFyQXJnT2Zmc2V0KQogICAgICAgICBsZW5ndGggLT0g
Zmlyc3RWYXJBcmdPZmZzZXQ7CiAgICAgZWxzZQpAQCAtMjQ5LDcgKzI1Myw3IEBAIHVuc2lnbmVk
IHNpemVGcmFtZUZvclZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBsb2FkVmFyYXJn
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKK3ZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1
bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIGlmIChVTkxJ
S0VMWSghYXJndW1lbnRzLmlzQ2VsbCgpKSB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1cm47CkBA
IC0yNjEsMzEgKzI2NSwzMSBAQCB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaQogICAgIHN3aXRjaCAo
Y2VsbC0+dHlwZSgpKSB7CiAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKS0+
Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxs
KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTY29wZWRBcmd1bWVudHNUeXBl
OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1bWVu
dHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1
bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0ltbXV0
YWJsZUJ1dHRlcmZseVR5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganND
YXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAg
ICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1lbnRz
KGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAg
ICByZXR1cm47IAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy5pc09i
amVjdCgpKTsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNl
bGwpOwogICAgICAgICBpZiAoaXNKU0FycmF5KG9iamVjdCkpIHsKICAgICAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRv
QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlU
b0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3Ro
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBpOwog
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoICYmIG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGkgKyBvZmZzZXQpOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkpID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAg
ICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSAr
IG9mZnNldCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgfSB9CkBAIC0yOTcsOCArMzAxLDcgQEAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbEYK
ICAgICAKICAgICBsb2FkVmFyYXJncygKICAgICAgICAgZ2xvYmFsT2JqZWN0LAotICAgICAgICBj
YWxsRnJhbWUsCi0gICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldCgwKSwKKyAgICAgICAgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5y
KGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSkpLAogICAg
ICAgICBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAKICAgICBuZXdDYWxsRnJhbWUt
PnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGxlbmd0aCArIDEpOwpAQCAtNTM4LDggKzU0
MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2Nr
KCk7CiAKICAgICAgICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFtX2lzVGVy
bWluYXRpb24pIHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICBpZiAo
bV9jb2RlQmxvY2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBl
eGNlcHRpb24gaGFuZGxpbmcgaW4gY2hlY2twb2ludHMuCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgICAgICAgICBpZiAobV9yZXR1cm5QQyA9PSAmY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF9lbnRyeXBvaW50KQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT52bSgp
LmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1fY2FsbEZyYW1lKTsKKyNlbmRpZgorICAgICAg
ICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKICAgICAgICAgICAgICAgICBtX2hhbmRsZXIg
PSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAg
ICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCisgICAgICAgIG1fcmV0dXJuUEMgPSBtX2Nh
bGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2ICs2MDYsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwogICAgIEhh
bmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11dGFibGUgY29uc3Qgdm9pZCogbV9yZXR1cm5Q
QyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0
ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNl
cHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNh
bGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgIH0K
IAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlm
IChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkKKyAgICBpZiAoVU5MSUtFTFko
IXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykp
CiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUs
NyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5
U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRv
UmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJh
ZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApA
QCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVG
b3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zm
c2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0g
ICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxl
ciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NG
cmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0Nh
bGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJz
dFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxs
RnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRj
OGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUw
NjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0
b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNv
ZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAg
ICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFt
ZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5i
b3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0
ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1f
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5k
ZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQp
IHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5j
YWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbEZy
YW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIs
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZH
X0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4
IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1MmRlZjJkNzFiYzIuLmUwNmNiNDliMjk1ZGU1
ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2NDcsMjggQEAgcHVibGljOgogICAgIH0K
ICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50
cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikK
KyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBl
bnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNz
KGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAg
IH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVh
bFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAq
IHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVu
dHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcg
ZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJl
ZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihm
cm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAg
fQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBl
bnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmly
dHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwg
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8pCkBAIC02OTYsMTkgKzY5NiwxOSBAQCBw
dWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlci4gT24gc29tZSBwbGF0Zm9ybXMs
IHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgdGhlCiAgICAgLy8gImxpbmsg
cmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVybiBhZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBw
cm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkg
KiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFj
a1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UKLSAgICB2b2lkIGVtaXRQdXRQYXlsb2Fk
VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQor
ICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQ
UlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0
cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRh
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICB9CiAKLSAgICB2b2lk
IGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0
YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7
Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50
cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVT
dGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2Vu
ZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
dmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3Bl
cmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVz
cyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsK
KyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0
dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAg
c3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVz
cyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXls
b2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4
ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3Qo
aW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdp
c3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NFUlQoc2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVB
bmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNz
IHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbGVl
RnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7
CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRh
Z1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZp
cnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xv
dChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBj
YWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQp
OwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRy
ZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7
CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJlZ2lzdGVyKDApKS53aXRo
T2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lzdGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1
MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2Fs
bEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpOwogICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5NjkwZTA5YzhiNTcyNzBkZWY3Zjg3YTQ2Y2My
YjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1M2Y4ODgwYjk4MzdiNWM2NGQ0YzU2NDIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcApA
QCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlmCiAKICAgICBB
U1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJl
Z2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEu
YXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNT
dGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmluZGV4IDYyNDM5
YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUuLjRjNmFhMzJmNGY1ODc2MzgzMTA5
MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFs
dWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5l
dyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpz
VmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpAQCAtMTQxLDcg
KzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCiAgICAgewog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNo
ZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0
TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIEluUGFpcjoK
ICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
MjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEy
YTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0z
MzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwog
ICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAg
dm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3Rlciwg
RlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJW
YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lz
dGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJz
CiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBz
Y3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVk
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRv
IHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAt
NDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9i
amVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOwor
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
SlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5k
Q29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwg
aW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9h
ZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBl
bWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdp
c3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
KGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQg
aW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAg
dm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGlu
ZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFs
UmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2Vs
bCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2
b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7
CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
aW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50
aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBl
cywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3Ax
SXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxS
ZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2
b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBm
YWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25s
eSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1
NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZC
b3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdp
c3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3Rl
cklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRj
aGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAg
ICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50
aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lz
dGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24p
OwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3
OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAg
ICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCAr
Njg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9h
ZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQs
IEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lk
IGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsK
KyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQg
ZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNT
ZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50
IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEz
ICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAg
ICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0
dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBw
cmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZv
aWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVh
bFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0
ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5
ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwot
ICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRp
b24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNv
bnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0
aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAg
LTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9u
LT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxp
bmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3
LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2lu
Yyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTks
NyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEg
PSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJz
IGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1Qw
ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0Qmlu
YXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9p
ZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRu
b3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hp
ZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5l
Zml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0
LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9u
LCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4
NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklU
OjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVh
YzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIo
cmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMu
b2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZy
ZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJl
ZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3
ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0
ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQK
IHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUu
bV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYx
NmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAs
NyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFM
b2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNv
ZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
V1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0No
aWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLmM2
NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzllMzExNzY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJ
bnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChp
bnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNT
RVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Myw3ICsxNDQsNyBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU1LDcgKzE1Niw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZQogICAg
IHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJl
ZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKKyAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHJlZykpCiAgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNlbmRpZgogI2Vu
ZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQg
c3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYg
YXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAx
OworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjMsMjYgKzM2NCwyNiBAQCBp
bmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQz
Ml90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwogfQogCi1BTFdB
WVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKQor
QUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNE
b3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcihp
bnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFk
ZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQog
ewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25z
dGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0ZvcihpbmRleCksIHRhZyk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
IHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
ICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSks
IHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA2LDEzNiArNDA3LDEzMyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQg
dGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0KFZp
cnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0TG9hZChzcmMs
IGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0U3RvcmUoZHN0LCBmcm9t
LnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdp
c3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7CiAKICAgICBpZiAoYmFzZSA9
PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkICE9
IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOwotICAgICAg
ICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywg
cGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwogICAgIGlm
IChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAgICAgICBsb2Fk
MzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFz
ZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0
LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcp
OworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOworICAgIGxvYWQz
Mih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQg
aW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBS
ZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcy
LCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5
bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOworICAgIGVtaXRM
b2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0TG9hZChyZWcxLCB0YWcxLCBwYXls
b2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBG
UFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQ
b29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3Io
aW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRl
eCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9E
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07
Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0
b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3IocmVnLCBiYXNl
KSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wg
aW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkp
OworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4
SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
SW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRy
dXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQog
ewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3Io
cmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wg
aW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7
CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJ
c0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcp
LCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsKKyAgICBzdG9y
ZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJh
c2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25z
dCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2Fk
KCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3Rh
bnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25z
dGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIoSW1t
MzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkK
KyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNv
bnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3AsIGludDMyX3Qm
IGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CiAgICAg
ICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwpAQCAtNTU1
LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QKICNlbHNlIC8vIFVTRShKU1ZB
TFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIg
YXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQo
KSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwpAQCAtNTcxLDQ3ICs1Njks
MzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBz
cmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Yy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lz
dGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVn
aXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0
KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1
cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20p
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJl
c3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJl
Z3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZnJvbS5wYXlsb2Fk
R1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
SklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVn
aXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3Jh
dGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50IHZSZWcpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCBy
ZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50
UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFs
dWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRv
RG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAg
ICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgpKTsKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5hc0ludDMyKCkpLCB2
YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3Bl
cmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7
CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVtcCBKSVQ6OmVtaXRQYXRjaGFibGVK
dW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0MTFiZTljZmI4MGY4MDgwNmY3ODhmNmMx
Li42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQyMTlhMWU5YTdlNWFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
c3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwogICAg
IFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2Nh
dG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAgICAgfQogfQogCkBAIC0xMjAsNyAr
MTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0g
Ynl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1
ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCkBAIC0xNTUsOSArMTU1
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAogICAgIC8vIExvYWQgdGhlIG9w
ZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdp
c3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUg
ZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1
bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9p
bnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwNCw4ICsyMDQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
VW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVy
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2Vs
bF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBl
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTMwNyw4ICszMDcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gUmV0dXJuIHRo
ZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzQzLDgg
KzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1ICszNjAsMTUgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CiAKICAgICAv
LyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQg
YXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKICAgICAvLyBjbGVhciBvdGhlciB0
aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBp
bnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5MCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
TnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDQ1LDcg
KzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVkT3JOdWxsPigpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NTcsNyArNDU3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsK
LSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDcwLDggKzQ3
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lh
bFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKQEAgLTQ4NSwx
OCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5t
X3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUzOSw3ICs1MzksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpAQCAtNTQ4LDkgKzU0OCw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEs
IHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01OTIsOCArNTkyLDggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBAIC02NTAsOCArNjUwLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogICAgIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CkBAIC02NjQsOCArNjY0LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0LDIwICs2ODQsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwxMCArNzI4LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNl
cHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9l
eGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBGSVhNRTog
Y29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBp
bmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAg
aWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5h
c0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcgKzc0OSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVu
dHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYg
cHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3Mo
cmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3Bl
cmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19j
YXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAgLTc2NiwxMCArNzY2LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29w
ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKICAgICBzaXpl
X3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZh
dWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVm
YXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUq
IGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpA
QCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4
ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsK
LSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0g
Jm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MTEsNyArODEx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNv
ZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNp
Z25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBj
cmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0
Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MzQsOCArODM0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKICAgICAvLyBvYmplY3QgbGlmZXRp
bWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9m
ZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtOTEzLDcg
KzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHZv
aWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVn
VDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC05MjQsNyArOTI0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4q
IGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVy
SUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0
OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChBZGRyZXNzKHN0
cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJl
Zyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJl
Zyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
IH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVH
UFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtOTk2
LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAyNCwxMCArMTAyNCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUu
bV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2Nv
bnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qx
KTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdS
ZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5
dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAq
PihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTE1LDEyICsxMTE1LDEyIEBAIHZvaWQgSklU
OjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIApAQCAtMTE2
MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogCiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIwNywxMCArMTIwNywxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVz
SW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5
dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAgICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKIH0KQEAgLTEyMTksOCAr
MTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzaXplSW5kZXggPSBieXRlY29kZS5tX2xl
bmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKQEAg
LTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAg
LTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAgIApAQCAtMTMzMCw5ICsx
MzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKLSAgICBpbnQgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEzOTAsOSArMTM5MCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDE0LDkgKzE0MTQsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQ0
MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVn
VDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQogCkBAIC0xNTIzLDggKzE1
MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9
IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAg
ICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCBy
ZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNW
YWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
LCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCBy
ZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9j
b3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVt
UGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAg
bG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
LCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4
IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2Nh
ZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEu
bV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JF
bnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQm
IHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5
M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2VmODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0x
NjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJp
Z2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAK
LSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51
bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKworICAgICAgICBPcGVyYW5kczxP
cHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwogICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNh
bGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAg
ICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxv
Y2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFu
ZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZt
UG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVk
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAg
bWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tl
dHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9v
cGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOworICAg
IHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0
KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQx
Niw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRG
cm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0
KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpz
Q2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5q
c1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMg
Y29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsy
NDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3Qq
IHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxG
cmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmpl
Y3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+
cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5m
byA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBr
ZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2Iw
NjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4
OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5
dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVy
aWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAg
IH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNI
KCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAg
ICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9w
IGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAg
ICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9w
ZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGludCBiYXNlOwotICAgIGludCBw
cm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAog
ICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0
ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgp
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGlu
dDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3
NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgp
LCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDgg
KzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpA
QCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00Njks
NyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyAr
NTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAt
NTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0g
ICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVn
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxh
Z3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBw
YXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUg
b25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3
ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRz
W21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25l
ZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklU
OjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdU
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcg
Kzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVl
Kiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2
b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAt
ODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwog
ICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+
KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNo
cG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1Qx
KTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3Jl
UHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
K3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBAIC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEw
OTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwot
ICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzEx
MTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2
YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFs
RmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSBy
ZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRU
eXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThm
NDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1YzEuLmZhNWQwYWFiNGE1ZDgxMmRlMDExYjM2
ZDU0YzMzYzA4MGQ3ZDlkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJm
YWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGlu
ZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lz
dGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklE
IHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNl
bmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVu
dHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwg
aW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCog
dmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRv
LCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUs
IFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CiAKICAg
ICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBAIC02NCwzNiArNjQsMzYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQog
ICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
cGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdp
c3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVn
aXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRK
dW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAg
IH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cihw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgQVNTRVJU
KHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAg
bG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZp
cnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAg
ICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAg
ICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7Cisg
ICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAgLTEwMSwyMyAr
MTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRK
U0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7
CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAg
ICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIEp1bXAgbm90
SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRy
KGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5z
aWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWQ2NChh
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51
bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdEludCA9
IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMjYgKzEyOSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdp
c3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVy
SUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhm
cm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAg
fQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKKyAgICAgICAg
c3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSk7CiAjZWxzZQogICAgICAgICBzdG9yZTY0
KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKICNlbmRpZgogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQq
IHZhbHVlLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBhZGRy
ZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJm
YWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50
IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCAzODg3MzA1MmQxMjg1
MmZjNmJiOTE0MmQ0NTYwN2FlOGUxOWE2NzBhLi4wYmE3M2VmOGMxMzRlYmJiZDFkMDRhNGIxNzIx
NGY0ZmE3MzUxODNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVw
VmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0Zy
YW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90
CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgICAgIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIERhdGFGb3JtYXRJbnQzMik7CiAgICAgICAgIGZp
cnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dCgwKSk7CiAgICAgfQogICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtLCBqaXQs
IG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywg
YXJndW1lbnRDb3VudFJlY292ZXJ5LCBmaXJzdEFyZ3VtZW50UmVnLCBmaXJzdFZhckFyZ09mZnNl
dCwgc2xvd0Nhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVj
aWFsaXplZFRodW5rSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVk
VGh1bmtKSVQuaAppbmRleCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEzZGYzNmE3MjQ5YjZjMzQz
Li45MzNjYTliZTEwMmUwZWRmOTRiYjRlYWU4MjgyMTQ4MjI5YzgyNmY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNTUsMTMgKzU1
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkRG91Ymxl
QXJndW1lbnQoaW50IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0
Y2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFp
bHVyZXMuYXBwZW5kKGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBzY3JhdGNoKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1bWVudChpbnQgYXJndW1lbnQs
IFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAg
ICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChzcmMsIGRzdCkpOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3Rl
cklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpOwogICAgICAgICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2FkSW50MzIoc3JjLCBkc3QpOwog
ICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCmluZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRlNmRiNDRiZGFmOWU4ZTgwZjIy
YWEuLmMzNzZkYmUyY2Q3ZDZkZDNmYTU0ODdiNTdiNTg5NDdmNmRmYmEzMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTEwMzIsOCArMTAz
Miw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5l
cmF0b3IoVk0mIHZtKQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9h
ZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCk7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1
dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJZk5vdEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAog
ICAgIC8vIEFicyBJbnQzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCmluZGV4IDM1N2E0NmU4ZTU3ODk3ZjI3ODVjZDMzOWZjYmUyYmMwYzkwY2Vk
YjIuLmY2MjEzMWM3MzcxZDYzNDUxYWQ5ZWE5ODAyZmMyNmVjYjZmODgwZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5
LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5f
Tk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9T
VFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUg
SlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVn
aXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5q
c1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9w
ZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJl
dHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRf
UkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNh
bGxGcmFtZSAtIGJ5dGVjb2RlLm1fYXJndjsKICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFt
ZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAg
ICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFt
ZShjYWxsRnJhbWUpOwogICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKQEAgLTE2ODksNyArMTY5MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlv
bioKICAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+
c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+
dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxs
ZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBj
YWxsZWVBc1ZhbHVlKSk7CkBAIC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbgogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxs
RnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2Fs
bGVlRnJhbWUtPnNldFJldHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwog
ICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5z
ZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE5MzAsNyArMTkzMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29k
ZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBw
cm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NjEsMTEg
KzE5NjIsMTI0IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9q
dW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGNvZGU+CitzdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBP
cGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQor
eworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS5nZXRUbXA8SlNWYWx1ZT4o
T3Bjb2RlOjphcmdDb3VudCkuYXNVSW50MzIoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CisgICAgYXJncy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZd
IChKU1ZhbHVlKiBidWZmZXIpIHsKKyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBi
dWZmZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCAwLCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0pOworICAgIGlmIChhcmdzLmhh
c092ZXJmbG93ZWQoKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAg
aWYgKE9wY29kZTo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAgICAgIHJl
c3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBh
cmdzLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2Jq
ZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5
cGUgZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0
aW9uU3RyZWFtOjpSZWYgcGMpCit7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG5l
eHRQQyA9IHBjLm5leHQoKS5wdHIoKTsKKyAgICAgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBMTElu
dDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPigqcGMubmV4dCgpLnB0cigpKTsKKyAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChuZXh0UEMsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VSVChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQnl0ZWNvZGVJbmRleCBuZXh0
Qnl0ZWNvZGVJbmRleCA9IHBjLm5leHQoKS5pbmRleCgpOworICAgIGF1dG8gbmV4dEJ5dGVjb2Rl
ID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNvZGVJbmRleCk7CisgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChudWxscHRyLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisjZW5kaWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRK
U1ZhbHVlKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCB2b2lk
KiwgRW5jb2RlZEpTVmFsdWUgcmVzdWx0KQoreworICAgIC8vIFNpbmNlIGFsbCBvdXIgY2FsbGlu
ZyBjaGVja3BvaW50cyBkbyByaWdodCBub3cgaXMgbW92ZSByZXN1bHQgaW50byBvdXIgZGVzdCB3
ZSBjYW4ganVzdCBkbyB0aGF0IGhlcmUgYW5kIHJldHVybi4KKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52
bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUg
PSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBhdXRv
IHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAg
IGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
cGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7
CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdz
PigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgLy8gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mgc2hvdWxkIG5ldmVyIHJldHVybiBpZiB0
aGUgdGhpbmcgaXQgd2FzIGNhbGxpbmcgd2FzIGlubGluZWQuCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQor
CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3Jf
ZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAg
Vk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUp
OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJ
bmRleDsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworCisgICAgYXV0
byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50
KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCksICpz
aWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBn
bG9iYWxPYmplY3QsIHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9yZXQs
ICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2VkIGJ5IGFuIG9w
X3JldC4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwg
Z2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0
KCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHJldHVy
blRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihj
b2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
dGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9G
cmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJhbWUpCiAgICAg
ICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgqdm0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCBmY2FmODBkYTFj
YjVjNDZjNTBlZTdmN2Y1ODA1MzNmN2Y1M2NlMDQxLi5jZDQ1YWYxMGIzMTNhOTE2YjBkM2VlYzBi
ZGJhMTZlY2Y4ZmQ4YWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVu
a3MuaApAQCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpTVmFsdWU7CiBl
eHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9KYXZhU2NyaXB0KHZvaWQq
LCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0
aXZlKHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CisgICAgdm9pZCBjaGVja3BvaW50X29z
cl9leGl0X2VudHJ5cG9pbnQoKTsKKyAgICB2b2lkIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9p
bmxpbmVkX2NhbGxfZW50cnlwb2ludCgpOwogfQogCiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdm1F
bnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBmcmFtZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0Li5hZGNkMmI4
ODUwNDAzNTgzNWRiODBjMTEwZTAyZjk1Zjk4NTJiNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDkxLDcgKzEw
OTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXpl
KQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0
b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFn
T2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAK
IG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRh
LCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0
LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRh
dGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
LSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9u
KGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwg
Lm5vRXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lCi0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9u
OiAgICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
KyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihf
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1l
IGluIHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0xOTk5LDcg
KzIwMDMsNiBAQCBvcChsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGlu
ZSwgbWFjcm8gKCkKICAgICBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxG
dW5jdGlvbjo6bV9mdW5jdGlvbkZvckNvbnN0cnVjdCkKIGVuZCkKIAotCiAjIExhc3RseSwgbWFr
ZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwg
b3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBM
TEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVjaC4KQEAgLTIwNDQsNCArMjA0
NywyMSBAQCBvcCh3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RscywgbWFjcm8gKCkKICAgICBj
cmFzaCgpCiBlbmQpCiAKK2lmIG5vdCBDX0xPT1AgYW5kIG5vdCBDX0xPT1BfV0lOCisgICAgZ2xv
YmFsIF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQKKyAg
ICBfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50OgorICAg
ICAgICBtb3ZlIHIwLCBhMgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlv
bihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIx
CisKKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludAorICAgIF9jaGVj
a3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQ6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiBwcm9i
YWJseSBkaXNwYXRjaCB0byB0aGUgY2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlz
IHdhcyBlYXNpZXIgCisgICAgICAgICMgYW5kIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGZvciBw
ZXJmb3JtYW5jZS4KKyAgICAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9v
c3JfZXhpdCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xv
d19wYXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMQorZW5kCisKIGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpp
bmRleCAzZGQyZWI0OGNiYmE2ZWY1Y2Q5ODg2MzljNzkxMWUyMmE3MTMzMTQ4Li40MTFkZjJjNjc1
MjMzMGIzN2I5NmFiY2VkODdhODQ0NmE4NzU2OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIs
MTQgQEAgbWFjcm8gbmV4dEluc3RydWN0aW9uV2lkZTMyKCkKICAgICBqbXAgW3QxLCB0MCwgUHRy
U2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAorbWFjcm8gc3RvcmVQQygpCisgICAgc3RvcmVp
IFBDLCBMTEludFJldHVyblBDW2Nmcl0KK2VuZAorCittYWNybyBsb2FkUEMoKQorICAgIGxvYWRp
IExMSW50UmV0dXJuUENbY2ZyXSwgUEMKK2VuZAorCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhv
cGNvZGVTdHJ1Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2Rl
U3RydWN0JV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZApAQCAtOTIsNyAr
MTAwLDcgQEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFp
bWluZyBpbnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRlckNh
bGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50
ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZFBDKCkKICAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQ
Ql0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzkwLDcg
KzM5OCw3IEBAIGVuZAogCiAjIENhbGwgYSBzbG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1h
Y3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKLSAgICBzdG9yZWkgUEMsIEFy
Z3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVT
dGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpAQCAtMzk5
LDIwICs0MDcsMjAgQEAgbWFjcm8gY2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQog
ZW5kCiAKIG1hY3JvIGNhbGxUcmFwSGFuZGxlcih0aHJvd0hhbmRsZXIpCi0gICAgc3RvcmVpIFBD
LCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVw
YXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAg
ICBjQ2FsbDIoX2xsaW50X3Nsb3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRo
cm93SGFuZGxlcgotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMK
KyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0
Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAgICAgICAgIDEsCiAgICAg
ICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09m
ZnNldFtjZnJdCisgICAgICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgICAgIHByZXBhcmVTdGF0
ZUZvckNDYWxsKCkKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQ
QywgYTEKQEAgLTQyMSw3ICs0MjksNyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgp
CiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAogICAgICAgICAgICAgam1wIHIwLCBKU0VudHJ5UHRy
VGFnCiAgICAgICAgIC5yZWNvdmVyOgotICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudCAr
IFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAgICAgbG9hZFBDKCkKICAgICAgICAgZW5kKQog
ZW5kCiAKQEAgLTE3NjgsNiArMTc3Niw4IEBAIG1hY3JvIHB1dEJ5VmFsT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBvc3JFeGl0UG9pbnQpCiAgICAgZW5kKQogZW5kCiAKKworCiBwdXRCeVZh
bE9wKHB1dF9ieV92YWwsIE9wUHV0QnlWYWwsIG1hY3JvIChzaXplLCBkaXNwYXRjaCkKIC5vc3JS
ZXR1cm5Qb2ludDoKICAgICBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BfcHV0X2J5
X3ZhbCwgc2l6ZSkKQEAgLTIwNTcsNyArMjA2Nyw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNv
ZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAg
ICAgICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICAg
ICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgdDIpCi0gICAgICAgIHN0b3JlaSBQ
QywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQogICAg
ICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAg
ICBtb3ZlIHQzLCBzcAogICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBK
U0VudHJ5UHRyVGFnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4
IDg0MGY4OWI4OGQ0MjBjYzNiNzVjODNkNmM1NzgyNDE1NDAyZjMzNjYuLjhmNTA1Y2M2OTljZDRh
ZTM3ZWYzNDUwMGZkZmJlNjk5OTgwN2NkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcmdMaXN0LmgKQEAgLTEzMyw2ICsxMzMsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBvdmVy
Zmxvd0NoZWNrTm90TmVlZGVkKCkgeyBjbGVhck5lZWRzT3ZlcmZsb3dDaGVjaygpOyB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZmlsbChzaXplX3QgY291bnQs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7Cisg
ICAgICAgIGVuc3VyZUNhcGFjaXR5KGNvdW50KTsKKyAgICAgICAgaWYgKEJhc2U6Omhhc092ZXJm
bG93ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zaXplID0gY291bnQ7Cisg
ICAgICAgIGZ1bmMocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJnNsb3RGb3IoMCkpKTsKKyAg
ICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eSgpOwogICAgIHZvaWQgZXhw
YW5kQ2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCBmOGQ5Nzk5NTg3NDUyMjZhNDdlNmY4YjZjNTU4
NjBjMThmY2U4N2ExLi5mZmI3NDU5YTZhZGNjYmFiMTZkYThhNGVmOGIxNzExZDg3MmExYWY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0x
Nzg4LDYgKzE3ODgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBl
dmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQogICAg
IHVuc2lnbmVkIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9
CisgICAgdW5zaWduZWQgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNr
cG9pbnRzOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5l
Q291bnQ7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENv
bHVtbjsgfQogCkBAIC0xODIwLDYgKzE4MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
ZXZhbENvbnRleHRUeXBlIDogMjsKICAgICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAg
ICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVja3BvaW50
cyA6IDE7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQYXJzZU1v
ZGUgbV9wYXJzZU1vZGU7CkBAIC0yMDE4LDYgKzIwMjAsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1
cmUqCiAKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJp
U3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2FjaGVkQ29k
ZUJsb2NrLmhhc0NoZWNrcG9pbnRzKCkpCiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJs
b2NrLmZlYXR1cmVzKCkpCiAgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VN
b2RlKCkpCkBAIC0yMjA2LDYgKzIyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29k
ZUJsb2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29ucwogICAg
IG1fcGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdlbmVyYXRp
b25Nb2RlID0gY29kZUJsb2NrLm1fY29kZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29kZVR5cGUg
PSBjb2RlQmxvY2subV9jb2RlVHlwZTsKKyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2Nr
Lm1faGFzQ2hlY2twb2ludHM7CiAKICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2Rl
QmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2Rlciwg
Y29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggZjM1OGQ0OGE1MGRlNzNlYWIzODU2
OTliM2E2ZjUxMTNiYmJlOWJiYS4uZTI3ZmUzY2E5NzhiMzk0NDgyNjE2N2Q0YTA2MWEyZWFkNGY5
MjYxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCkBAIC05OCw4ICs5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJFR0lOX05P
X1NFVF9QQygpOyAgICAgICAgICAgICAgICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RVQlMoKQog
Ci0jZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zm
c2V0KCkpKQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zm
c2V0KCkpKQorI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVy
YW5kKSkKKyNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKIAog
I2RlZmluZSBSRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTEzOSw4ICsx
MTM5LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25t
ZW50KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0
ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVu
dFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xU
YWJsZSo+KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAgICAgSlNW
YWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1
ZSgpOwogICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFs
VmFsdWUgPT0ganNURFpWYWx1ZSgpKTsKQEAgLTExNTUsOCArMTE1NCw3IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Njb3BlID0g
R0VUX0MoYnl0ZWNvZGUubV9uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVj
dCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29k
ZS5tX2N1cnJlbnRTY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpT
U2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2N1
cnJlbnRTY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQogCkBA
IC0xMTY1LDcgKzExNjMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29w
ZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZh
bD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
KyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Nj
b3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Nj
b3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTE3OSw3ICsxMTc3
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkp
LlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTT2JqZWN0
KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBp
ZGVudCk7CiAgICAgLy8gUHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkg
aW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CkBAIC0xNDI0LDcgKzE0MjIsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5
X2J1ZmZlcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BO
ZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOworICAgIEFT
U0VSVChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwogICAgIEpT
SW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJ
bW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSku
anNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NDMsNyArMTQ0
MSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogICAgICAg
ICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxh
dGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAg
ICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOwotICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9p
bW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVC
dXR0ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUu
bV9pbW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJm
bHkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApAQCAtMTQ4OCw0
ICsxNDg2LDE2IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zcHJlYWQpCiAgICAgUkVUVVJO
KEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGVGcm9tQXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwg
YXJyYXkpKTsKIH0KIAorZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIg
dmFsdWUpOworZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUp
Cit7CisgICAgZGF0YUxvZ0xuKFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkp
KTsKK30KKworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNr
UEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CisvLyBleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCApCisvLyB7CisKKy8vIH0KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zdHJ1Y3REYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVj
dERhdGEuY3BwCmluZGV4IDRiZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzgu
LjQ3YjI0NzQxOGNhODhlZmQxYjc4ZTYzMTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwx
MSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlz
dCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1
Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFy
Z3MsIGVycm9yTWVzc2FnZSk7Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdU
YXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0
LCBjb24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwg
Y29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNv
bnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdU
YXJnZXQpKTsgIAogfQogCi0KIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25z
dHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdM
aXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
dHJ1Y3REYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRh
LmgKaW5kZXggZDBhZTAwYmExMWQ3Y2VlMjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3
NGE3ZGIzOWM0OTFmOWY5M2JhZWI2Y2FjMTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3Qg
Q29uc3RydWN0RGF0YSB7CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5l
ZWQgdG8gZGVhbCB3aXRoIENhbGxEYXRhIGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2lu
ZyB0byB1c2UgdGhlbS4KIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25z
dHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5l
d1RhcmdldCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29u
c3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVj
dCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3Ry
dWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGEx
ZWRjY2YzMTAyMmFjMmRkOWFlZmFmZDQzYTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5
NDI0NWE5M2M1NzUwOWYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmNwcApAQCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RB
cmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21h
cHBlZEFyZ3VtZW50cy5hdChpbmRleCwgaW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12
b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFy
Z3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGlmICghbV9tYXBwZWRBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGlt
aXQgPSBzdGQ6Om1pbihsZW5ndGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWdu
ZWQgaTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAt
IG9mZnNldDsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAg
ICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQo
KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFt
ZS0+cihzdGFydCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJz
dEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBm
aXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFy
Z3VtZW50czo6bWFwcGVkQXJndW1lbnRzU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUw
YTljNTNhMmNmY2U3NzJlMGEuLjhkOTY0MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0Fy
Z3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGlu
ZGV4LCBtX2xlbmd0aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4
IGIzMWI3MGFiZDAwY2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2
NDcwNmY0MDA0YmRhYjNkYWVlYjI3MmNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgc2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2Ny
aXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBN
b2RpZmllZEFyZ3VtZW50c1B0ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZl
LCBib29sPjsKICAgICBNb2RpZmllZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1
YzFiODg2MTgxZmYuLmUwYWFiZjVmMmVlMTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaApAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWdu
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTMwNSw5ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RgogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlz
T2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2ts
eShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2Jq
ZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmpl
Y3QsIGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChn
bG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUx
NDQ1OTM4NzY2MC4uNmQwNzU5MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIz
MCw3IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChn
bG9iYWxPYmplY3QsIGkpKTsKIH0KIAotdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2
b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgdik7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTI5NCwxMSArMTI5NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQog
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlm
ICghdikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpIC0gb2Zmc2V0XSA9IHYuZ2V0KCk7CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0g
b2Zmc2V0KSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0
W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCmluZGV4IDMxNzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNm
NmFiNTAuLjMxMTY1YjVmZjQ5MjU0Y2MxYTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0ds
b2JhbE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9y
UHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0
OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDljMC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4
MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZv
aWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQog
Ci12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1
dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICgoaSArIG9m
ZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVs
ZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1l
bnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0
ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmgKaW5kZXggYWNiNjg0ODE5MWExOTAzNTIyYjliM2U0ZDAwZjk2OWU0MGI3ODE1YS4uMDdl
MWE4YTEwYzNjZGM3MTE3YWNhM2RjNTQzZWQ3ZGRiMGQ0MWYzZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCkBAIC0xNDcs
NyArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNl
QWNjZXNzPgogICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBhNmViMGVhNWY2
YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2ODM0OTdlLi4xNmFhMzY5ZjQ4NTA3MDYxYzA2MzYxNTE4
YWUxNWQyYmM2OGZiNmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKQEAgLTIwNCw2ICsyMDQsNyBAQCB2b2lkIEpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKCkKIHsg
ICAKICAgICBSZWZQdHI8Vk0+IHZtID0gbV92bTsKICAgICBpZiAodm0pIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCF2bS0+aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgp
LCAiUmVsZWFzaW5nIEpTTG9jayBidXQgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGUgc3Rp
bGwgYXZhaWxhYmxlIik7CiAgICAgICAgIHZtLT5kcmFpbk1pY3JvdGFza3MoKTsKIAogICAgICAg
ICBpZiAoIXZtLT50b3BDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKaW5kZXggZGIwNTI1NDg4
MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2ZGUzN2JhMC4uNTk2ODA4Y2FmYzBiMGY0Yzg0NzBiZDc1
OWVkOWY0OTE2YzY2NDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwgdW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZSk7CiAKLSAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmly
b25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganND
YXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdp
c3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRh
YmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2Jh
bE9iamVjdC0+dm0oKSkpOworICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1i
b2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9s
VGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFy
dChnbG9iYWxPYmplY3QtPnZtKCkpKTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA0MTM4N2M4NTBhOTk1
YWQ1NzQyMTA1MGNkZTg2Y2IyNTIxZTU0MTE2Li45MWVkNzM5ZTI1ZjQ5MzhlZjUwMjcyN2RmNTE2
ODBkODZjYTIwODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNw
cApAQCAtNTA5LDExICs1MDksOSBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRp
b25zKCkKICAgICBpZiAoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA8IE9wdGlvbnM6
OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplKQogICAgICAgICBP
cHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6
ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNpemU7CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIC8vIEZJWE1FOiBNYWtlIHByb2JlIE9TUiBleGl0IHdvcmsgb24gMzItYml0OgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYKICAgICBPcHRp
b25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBpZiAoIU9wdGlv
bnM6OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5jcHAKaW5kZXggMDgxZDk3OGE3YjJhNjI2NmFjNTUyYzM3OWQzODQ1MDA1ZGMxMWYxMC4u
M2M3NDBkNDhmNjI0MWIwMjYwNWZiZjUyNWJkZGYyMzE5MmQwOWRiMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCkBAIC0xNDgsOSAr
MTQ4LDkgQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1aW50
MzJfdCBpKQogICAgICAgICBzdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5jbGVhcigpOwogfQog
Ci12b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFNjb3Bl
ZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQogewotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdl
bmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCmluZGV4IGY4NWU0
N2RmYmVlOGNhN2MzNzA0ZjI5ZWQ0Y2IxYjRlOTcyMDQ0NTcuLmU1OGNiMjJlZmQ0OGM2NzRiZjVi
MWIxMTI4MGI1MWFiYzBkZTA4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5oCkBAIC0xNDIsNyArMTQyLDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJn
dW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFs
UmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSog
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAg
ICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IDY0ZGRmY2IxYTI1NjBlNmZlMWI0NTRlNGZlZTE0ODkyYWRjMDhhOWYuLjhmNmU1NjVlMjQ3
ZTVhMjMxOTMzMTk4ODI4NjcyZTIxMDQ4ODE2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCb29sZWFuT2JqZWN0LmgiCiAj
aW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFibGVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5z
aWNSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAj
aW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0xMDI3LDYgKzEwMjgsMjAgQEAgdm9pZCBWTTo6Z2F0aGVy
U2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykK
IH0KICNlbmRpZgogCit2b2lkIFZNOjphZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
JiYgcGF5bG9hZCkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuYWRkKGNhbGxG
cmFtZSwgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPiBWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OworICAgIGF1dG8gc2lkZVN0YXRlID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLnRha2UoY2FsbEZy
YW1lKTsKKyAgICByZXR1cm4gc2lkZVN0YXRlOworfQorCiB2b2lkIGxvZ1Nhbml0aXplU3RhY2so
Vk0mIHZtKQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZt
LnRvcENhbGxGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMjgwODZj
NGVkOTE2MDZjMjgxYjFhMWQ1YjdhMWRhYjA2MDg4MDcwYS4uMjVjNGE1MTRhMThjNjcwZTY1NDMx
YWI5Njg3ODgzMzgxZDcxZWMyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0x
MDMsNiArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7
CiBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ2FsbEZyYW1lOworc3Ry
dWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3Mg
Q29kZUNhY2hlOwogY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CkBAIC05NDksNiArOTUwLDEwIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJik7CiAKKyAgICB2b2lkIGFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1l
Kiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IGZpbmRDaGVja3BvaW50
T1NSU2lkZVN0YXRlKENhbGxGcmFtZSopOworICAgIGJvb2wgaGFzQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2twb2ludFNpZGVTdGF0ZS5zaXplKCk7IH0KKwog
ICAgIFZNRW50cnlTY29wZSogZW50cnlTY29wZTsKIAogICAgIEpTT2JqZWN0KiBzdHJpbmdSZWN1
cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsgbnVsbHB0ciB9OwpAQCAtMTIwMCw2ICsxMjA1LDcgQEAg
cHJpdmF0ZToKICAgICBMb2NrIG1fc2NyYXRjaEJ1ZmZlckxvY2s7CiAgICAgVmVjdG9yPFNjcmF0
Y2hCdWZmZXIqPiBtX3NjcmF0Y2hCdWZmZXJzOwogICAgIHNpemVfdCBtX3NpemVPZkxhc3RTY3Jh
dGNoQnVmZmVyIHsgMCB9OworICAgIEhhc2hNYXA8Q2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRy
PENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPj4gbV9jaGVja3BvaW50U2lkZVN0YXRlOwogICAg
IElubGluZVdhdGNocG9pbnRTZXQgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQ7CiAgICAgRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxvd1Byb2ZpbGVyPiBtX2NvbnRyb2xGbG93UHJvZmlsZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAppbmRleCA4MWM5
ZjFmNjc0NzA3OWVkODMxMjY2MmMwODMwMGM2Y2MzNjI4ZTM3Li5lMTQ4NDAwZDQ4N2RmYzY0ZTQ0
MDU0ZGRhZGIwODU4OTcyZTM5YTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvVk1JbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9W
TUluc3BlY3Rvci5jcHAKQEAgLTM5Nyw4ICszOTcsOCBAQCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1w
UmVnaXN0ZXJzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGNvbnN0IFJlZ2lzdGVyKiBpdDsK
ICAgICBjb25zdCBSZWdpc3RlciogZW5kOwogCi0gICAgaXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCk7Ci0gICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCAtIDE7CisgICAgaXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsK
KyAgICBlbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCAtIDEpOwogICAgIHdoaWxlIChpdCA+IGVuZCkgewogICAgICAgICBKU1ZhbHVlIHYg
PSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVnaXN0ZXJOdW1iZXIgPSBpdCAtIGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGY2ODhhN2M5ZTk0MjZkOWUwYmVhM2FmMGNmZmFm
MmMyN2RkNWE1NjcuLjJmNGIxYzdkZTZhODdjNzQxMWU4NmU4N2U3ZjE5MjQ3MzUyYzBmOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9j
ay5oCkBAIC03MiwxMSArNzIsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRf
dD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzOyB9CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX2luc3Ry
dWN0aW9uczsgfQogCi0gICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2luZGV4IC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShp
bnQgaW5kZXgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25z
dGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKE9wdGlvbnM6
OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOwotICAgICAgICByZXR1cm4gbV9jb25zdGFu
dFR5cGVzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOworICAgICAgICByZXR1
cm4gbV9jb25zdGFudFR5cGVzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07CiAgICAgfQogCiAgICAg
dm9pZCBzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNw
cAppbmRleCBhYjE3NDA2YWZiNzM0YTcwOGRmMTFkYmI2ODAxNTE4Yjc2NjVmYjQyLi5lZTJiMzI3
ZDJhZjU0NzE5Njg3OTY5YWMyNTJhODRjNzg4ZWY2ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTI0Miw2ICsyNDIsOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxMTEludEdlbmVy
YXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKIAorICAgIC8vIFdlIG5lZWQg
dGhpcyBmb3IgYXV0b2dlbmVyYXRlZCB0ZW1wbGF0ZXMgdXNlZCBieSBKUyBieXRlY29kZXMuCisg
ICAgdm9pZCBzZXRVc2VzQ2hlY2twb2ludHMoKSBjb25zdCB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOyB9CisKICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3Rh
Y2sqKSB7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmNwcAppbmRleCBlMmE0YzQyNTMzYTJmNDQ3ZGQzMjAyMDViNzc3Yjc4YjAzOWMw
YjY4Li4yMDY5YWQ4YjI0YjczNjlkY2Q5ZDVmMGM3ZjU4ZWVjOTJiMzVjNzZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC03NDMsNyArNzQz
LDcgQEAgdm9pZCogSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbihDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6RXhjZXAKICAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJz
dCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUg
anVtcGluZwogICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMs
IHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAotICAgIGJpdHdpc2VfY2FzdDx1aW50
NjRfdCo+KGNhbGxGcmFtZSlbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3Qq
PihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7CiAgICAgcmV0dXJuIHZt
LnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDkyN2E2OTg0YTNiZTAxNGNmM2VhN2Q2N2YwMzQ1
ODRlZWJlYjYwY2UuLjU0ZjYzNmFjMWI1MDc1ZDFjNjY3YjM4YTkwMzEzMjkwZDVmMzMzY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBAIC03Niw3
ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogCiAjZGVmaW5lIFJF
QUQodmlydHVhbFJlZ2lzdGVyKSBcCiAgICAgKHZpcnR1YWxSZWdpc3Rlci5pc0NvbnN0YW50KCkg
XAotICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZp
cnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkpIFwKKyAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09E
RV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIpKSBcCiAgICAgICAgIDogY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcikpCiAKIGlubGluZSBib29sIGppdENvbXBpbGVBbmRT
ZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUsIFdhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386029</attachid>
            <date>2019-12-18 16:11:02 -0800</date>
            <delta_ts>2019-12-18 16:42:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218161046.patch</filename>
            <type>text/plain</type>
            <size>639572</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi4xYWE4ZGVlYzE0NTI5YmFh
OGY1MzQ2ODJjMGZlNTM3M2Q2MDc5YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50IGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAo
SlNDOjpGdWxsQnl0ZWNvZGVMaXZlbmVzczo6dmlydHVhbFJlZ2lzdGVySXNMaXZlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJhbmRJc0xpdmUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OklubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6
OklubGluZUNhbGxGcmFtZTo6c2V0VG1wT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bjo6d2Fsa1VwSW5saW5lU3RhY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFu
dE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0
dXApOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFu
ZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0
SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19w
YXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhy
b3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3Qu
aDoKKyAgICAgICAgKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI6OmZpbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6
Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVC
bG9ja1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpkdW1wUmVn
aXN0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmg6CisgICAg
ICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RB
cmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxl
QnV0dGVyZmx5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlU
b0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxs
UmVsZWFzZUxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHA6Cisg
ICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAg
KiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgor
ICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgIChK
U0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSBjb25zdCk6
CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpWTUluc3Bl
Y3Rvcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0
YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNs
b3dQYXRocy5jcHA6CisKIDIwMTktMTItMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBqc2NfY29udGV4dF9ldmFsdWF0ZV9pbl9v
YmplY3Qgc2hvdWxkIHRha2UgdGhlIEFQSSBsb2NrIGJlZm9yZSBjYWxsaW5nIHNldEdsb2JhbFNj
b3BlRXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IGY4YzFiNGFlNTU2YjUzNGMyYWIxMDFhYzM5MGJh
NzExYjQ1Y2JhZWEuLjllYWQ2NTNmYWFhYjE4OTNlYjkyZGQwMmU5NzU3OTY2ZGZhOTlhYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2Zp
bGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CkBAIC02NCw2ICs2NCw3IEBAICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91
ZGlzODYvb3B0YWJsZS54bWwKICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRf
aXRhYi5weQogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCiAkKFBST0pFQ1Rf
RElSKS9nZW5lcmF0b3IvQXNzZXJ0aW9uLnJiCiskKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQ2hl
Y2twb2ludHMucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9EU0wucmIKICQoUFJPSkVDVF9E
SVIpL2dlbmVyYXRvci9GaXRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvR2VuZXJhdGVk
RmlsZS5yYgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkYmNlNWJhY2VkYzA1YzNk
YzBlYThiMDQzMzQ2ZDE1MWQwZGVmNDQxLi5jYmNlOGFjYWJkNDk2Y2Y0NDUwZmFmZjkyZjUzMmFk
NTY5ZGQ3YTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTMxLDYgKzkzMSw3
IEBACiAJCTUzMzNCQkRCMjExMEY3RDIwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgw
RjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsK
IAkJNTMzM0JCREMyMTEwRjdEOTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMyMTMyOERG
ODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi87IH07CiAJCTUzMzNCQkREMjEx
MEY3RTEwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAv
KiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLzsgfTsKKwkJNTMzOEUyQTcyMzk2RUZGQjAwQzYx
QkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLzsgfTsKIAkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyog
UHJvbWlzZVRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1OTcsNiArMzU5OCw3
IEBACiAJCTUzMTgwNDVEMjJFQUFGMEYwMDRBNzM0MiAvKiBCM0V4dHJhY3RWYWx1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0V4dHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0V4dHJhY3RW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMUQ0RTE5MUY1OUNERDIw
MEVDODM2QyAvKiB0ZXN0YXBpLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhcGkuY3BwOyBw
YXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzI2MzFCMzIxODc3N0E1MDA3QjgxOTEgLyogSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gInNvdXJjZWNvZGUubW9kdWxlLW1hcCI7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5t
b2R1bGVtYXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFMkE2MjM5NkVGRUMw
MEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3Vu
ZHNDaGVja1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3
RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTEsNiArMzYx
Myw5IEBACiAJCTUzNEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0
b3IuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBUeXBlZEFycmF5
Q29uc3RydWN0b3IuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdCMUJD
NzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBK
U1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9y
UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0
SXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5
QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJdGVyYXRvckhlbHBlcnMuanM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRv
clByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1h
cEl0ZXJhdG9yUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRF
MDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzNEUwMzRGMUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTQ3LDYg
KzU5NTIsNyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAq
LywKIAkJCQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICov
LAogCQkJCUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8s
CisJCQkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3Bw
ICovLAogCQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJ
CQkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBA
IC04NTc2LDcgKzg1ODIsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9i
YWxPcGVyYXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAw
NDEzODU2IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5
MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIx
QjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZB
MjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1
NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3
MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAy
N0M4ODAwMzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk1
LDcgQEAKIAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAq
LywKIAkJCQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICov
LAogCQkJCTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclBy
b3RvdHlwZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0
b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFBy
b3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29u
c3RydWN0b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk2LDcgQEAKIAkJCQlGRTFCRDAy
MTFFNzIwMjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
QzE2MDMyMjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xv
bmVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0
NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4
YTA3ZGJmY2RlZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNj
ZDY2ODI3NjRiMmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRk
cmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50
YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAg
ICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNv
bnN0IHZvaWQqIHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIz
NjhkYzdjZDBmM2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgz
YWNhZWEzYTBmMTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1Byb2JlRnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGdldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihS
ZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAg
ICBUIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAg
IHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAg
IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxU
PihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
c2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lz
dGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQg
c2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlciksIHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
dm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQor
ICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9m
ZnNldCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwg
dmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0g
SlNWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFl
YzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZk
YTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2Mywy
MCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYg
Y29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
Pgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciog
bmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IElu
dDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBl
ZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhf
dD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7
Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3Bl
cmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IElu
dDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlw
ZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkg
QjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhW
ZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aElu
dGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQog
ewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4p
IH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+
KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGlu
Z1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0
aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5n
UG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFu
ZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApp
bmRleCA2MDA2MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFi
NGRiZDI2M2Y0OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAg
ICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJp
dHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAK
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAg
ICAgICAgICAgYXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4o
KTsKQEAgLTE3OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
T3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZVNuaXBwZXRQYXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMw
ZWU1OGY1ODguLjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBh
cmFtcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0
LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5j
YWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBq
aXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRj
ZDU2ZWY2YTk4Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2Fl
NWMwZWUzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6
cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAK
IHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0
YSgpKTsKKyAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBs
YXRlIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8
V2FzbTo6R2VuZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1w
bGF0ZTxjbGFzcyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rl
ck5hbWUoaW50IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0
ZXJOYW1lKFZpcnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBj
b25zdGFudE5hbWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3Rlcihy
KSk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2Nr
PgpAQCAtOTgsMTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGlu
ZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBs
YXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50
TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29u
c3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9
IGJsb2NrKCktPmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVl
LCAiKCIsIFZpcnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJs
b2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigi
LCByZWcsICIpIik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3
IEBAIHZvaWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0
cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJp
bmcgQnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNv
bnN0CiB7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAg
ICBhdXRvIHZhbHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRl
eCksIGJsb2NrLT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3
YzVhODgyNTEwNzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNh
MTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1w
ZXIuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7
IG1fb3V0LnByaW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVn
aXN0ZXJOYW1lKGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5h
bWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5l
SnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBC
eXRlY29kZUR1bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBw
cm90ZWN0ZWQ6CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVh
bTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJO
YW1lKGludCByKSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0
dWFsUmVnaXN0ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0
KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7
CisgICAgdmlydHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0
OwogCiAgICAgQmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6
CiAgICAgdXNpbmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVj
b2RlRHVtcGVyOwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25z
dGFudE5hbWUoaW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50
TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcg
Zm9ybWF0Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5
MDQwMWE3MTE3ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEy
MDExMWM4N2M1MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiB2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50
KCkpCisgICAgICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW5kZXguaAppbmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4x
MGZiYTQ0MDU4ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpA
QCAtMzcsMjQgKzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5
dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNC
aXRzKCkpCisgICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQog
ICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29k
ZU9mZnNldCkKLSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAot
ICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWlu
dDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBC
eXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQg
PSAwKQorICAgICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3Bv
aW50KSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNf
YXNzZXJ0KGhhc09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2tw
b2ludHMgc2hvdWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3QgY2hlY2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29u
c3RleHByKG51bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4
X3QgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRN
YXNrOyB9CisgICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
OyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1f
b2Zmc2V0KTsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhh
c2gobV9wYWNrZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1
ZSgpIHsgcmV0dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFs
dWUoKTsgfQogCiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0
cyk7CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29m
ZnNldCAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBt
X3BhY2tlZEJpdHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJh
dG9yID09KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMo
KSA9PSBvdGhlci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNv
ZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAg
LTY5LDEzICs3OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDMyX3QgaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKTsKIAotICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0
YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2tw
b2ludCk7CisKKyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9
OwogCitpbmxpbmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29k
ZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBu
dW1iZXJPZkNoZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2tw
b2ludFNoaWZ0KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0
dXJuIGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwog
aW5saW5lIEJ5dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0
cykKIHsKICAgICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBi
aXRzOworICAgIHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
CmluZGV4IDcxYmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLmRmMGJkZWIx
Y2IwZjA1NDA4MDdlOWFmYTdlMjkzMTRhMTcwYzI3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBb
CiAgICAgOldhdGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIsCiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2Zp
bGUsCiAgICAgOkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFy
YXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogewor
ICAgICAgICBhcmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogewor
ICAgICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWws
CiAgICAgfQogCiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9w
IDp0YWlsX2NhbGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2Zp
bGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0s
CisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNo
ZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAg
bWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMs
CkBAIC04NDUsNiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0
YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDog
dW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5n
QXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQs
CkBAIC05OTIsNyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZp
cnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjog
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhi
NDNmNDQwLi43ZGEyMmMyZDJjYzdiZmMxMWQxZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0
ZXhwciBib29sIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlw
ZTIgdjIpCit7CisgICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdf
dHlwZTxFbnVtVHlwZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3Rk
Ojp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNp
emVvZihJbnRUeXBlMSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW50VHlwZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nh
c3Q8SW50VHlwZTI+KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBM
aXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+
IHJlc3VsdDsKKyAgICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKTsKKworICAgIGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwor
ICAgIHN3aXRjaCAoY29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5v
cGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWls
X2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjpt
YWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxB
c0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJn
Q291bnQpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFs
KE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAm
JiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENv
bnN0cnVjdFZhcmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9w
Q2FsbFZhcmFyZ3M6Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJh
cmdzOjphcmdDb3VudCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5
YjNjOWJjNzIzMjU5MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUx
NWNkYmZkNGI0MjdlZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVH
cmFwaC5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
ICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3
LDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitC
aXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25z
dCBDb2RlQmxvY2smLCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3
YXlzTGl2ZShpbnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGlu
ZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFu
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJm
OTYzNmEyYjk3NGU3OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBl
ODk5ODQ4MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICsz
MywyMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlz
TGl2ZShpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLmlzTG9jYWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCwgaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNO
b3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lz
dGVyIHJlZykKIHsKLSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS50b0xvY2FsKCk7CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlm
IChsb2NhbCA+PSBvdXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIG91dFtsb2NhbF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFz
dEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3Rl
cklzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQogewotICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNO
b3RBbHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBk
MDc2MTA5YTFmZGE1Zjk0N2Y1MjBmZTUxNGRkLi42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVj
YzYzNmVhMWViNWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIK
KyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdD
YXBhYmlsaXRpZXMuaCIKQEAgLTQwNyw3ICs0MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
awogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJs
ZS0+bV9sb2NrKTsKICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlw
ZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFi
bGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAg
cmVwbGFjZUNvbnN0YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0
KCkpLCBjbG9uZWRTeW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRo
VHlwZVByb2ZpbGVyT3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhD
b250cm9sRmxvd1Byb2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25s
eSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5v
bnltb3VzLgogICAgICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkg
ewotICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8
U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURl
cHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29k
ZS5tX3Zhcik7CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5
bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29s
dmVkOiB7Ci0gICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5t
X3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAg
ICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4o
Z2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVj
b2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lk
ZW50aWZpZXIpOwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3lt
Ym9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29w
ZSB3YXMgY3JlYXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBo
YXZlIHByZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0
YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNl
VHJhbnNpdGlvbiYgdHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVj
b2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4
aXRJbmRleCkgY29uc3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAg
ICAgICBjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRl
eCk7CisgICAgICAgIGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAg
IH0KKyAgICByZXR1cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
CiB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZv
aWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KGNvbnN0IE9wQ2F0Y2gmCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0
ZXJzKCk7ICsraSkKICAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpKSk7CiAKLSAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHBy
b2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+
KGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3Np
emUgPT0gbGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHByb2ZpbGVzLT5tX3NpemU7ICsraSkKLSAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgp
W2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmls
ZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAg
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZl
bmVzcyh1bnNpZ25lZCYgbnVtYmUKIAogICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURh
dGEuZ2V0KCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEt
Pm1fY2F0Y2hQcm9maWxlcykgewotICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2Zp
bGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1
NmNlNTgxNTBmNTM0MjY2Li4yNTA2NzI2M2UyNDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2Mz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEs
NiArMTYxLDcgQEAgcHVibGljOgogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJl
dHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogCiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJl
dHVybiBtX251bVZhcnM7IH0KKyAgICBpbnQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAog
ICAgIGludCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRl
cnM7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIy
OSwyMCArMjMwLDIwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFr
cG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAot
ICAgIGlubGluZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGlu
ZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA9PSB0aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RN
b2RlKCkpCisgICAgICAgIGlmIChyZWcgPT0gdGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9k
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRl
eCkuaXNDZWxsKCk7CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAg
cmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5k
ZXgoaW50IGluZGV4KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9u
dW1WYXJzOworICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9
CiAKICAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRl
eCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4
MSwxMCArNTgyLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnM7IH0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIo
aW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb25baW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC03NzQsNiArNzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25U
aHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAg
IAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkg
Y29uc3Q7CiAgICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29z
ckV4aXRDb3VudGVyOyB9CiAKICAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291
bnRlcisrOyB9CkBAIC04NzQsNyArODc1LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2lt
cGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmls
ZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxD
b2RlQ2FjaGUgbV9kaXJlY3RFdmFsQ29kZUNhY2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0Miwx
MCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBT
Y3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNl
Q29uc3RhbnQoaW50IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0
YW50KFZpcnR1YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBB
U1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVf
dD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0
ZXJzLnNpemUoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFT
U0VSVChyZWcuaXNDb25zdGFudCgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3Rh
bnRJbmRleCgpKSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFs
dWUpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCmluZGV4IDIxMDY4MTNmMGExZWFhNTEzNGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5
YTI4NmY4YWFiZjRkMzMyZmZmMWU3MWVhM2M4M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhhc2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9
IG51bGxwdHIpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBp
bmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8v
IEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3Ig
ZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJm
M2EuLjQ3YzY1N2M4ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
CkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYv
RmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2Rl
IGxpdmVuZXNzIGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5l
c3Mgb2YgdGVtcHMuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2lu
dCBhc2sgdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUx
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QK
KyAgICBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQp
IHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2Rl
SW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0Fsd2F5c0xpdmUocmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNM
aXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAg
ICAgCi0gICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8g
bWFrZSB0aGVtIGNvbXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3Mgdmll
dyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJp
dFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAg
IFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVz
ZVZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxs
RnJhbWUuaAppbmRleCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5h
MGFhN2MwOTI0NGY5OTU2YmVmMWZiOTgzOGI1NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5
LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9j
az4gYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAg
ICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGlu
Y2x1ZGUgZml4dXBzLgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDog
MjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAx
MDsKICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsg
Ly8gcmVhbCB0eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBm
YWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhl
IERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUg
cmVjb3ZlcmVkIG1hbnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxs
RnJhbWUgewogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3Rv
ciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0
byBpbml0aWFsaXplIGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAg
OiBzdGFja09mZnNldCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDAp
CisgICAgICAgICwgdG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAg
ICAgLCBraW5kKENhbGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBA
IC0yMTksNiArMjIyLDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwog
ICAgIH0KIAorICAgIHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIHRtcE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJk
aWZmX3QgY2FsbGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBw
dHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3
LDkgKzI1Niw5IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2lu
QW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90
IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxl
ciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKKy8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQg
aGVyZSBhbmQgbm90IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhl
IGRpcmVjdENhbGxlciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KLWlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElu
bGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSAqdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsy
NzAsMzggQEAgaW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3Qg
RnVuY3Rpb24mIGZ1bmN0aW9uKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVn
aXN0ZXIgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAg
ICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBy
ZXN1bHQgPSB0cnVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19J
TkxJTkUgT3BlcmFuZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQgb3BlcmFuZCkKK3sKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZh
bHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFu
ZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4g
cmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlT
X0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQu
aXNUbXAoKSA/IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0g
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisK
K0FMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3Bl
cmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1
ZWIxYzY0YTU5Li5lMDNmYTM5Mzk1OTU1NTJlYmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb25jdXJyZW50SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJW
YWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQogICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRl
eC5oYXNoKCkgKyBtX29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2Rl
SW5kZXguaGFzaCgpICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAg
IH0KICAgICAKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgs
NyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAg
fQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3Bl
cmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJl
dHVybiBtX29wZXJhbmQ7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRl
OiAKICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlP
cGVyYW5kVmFsdWVQcm9maWxlS2V5SGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAK
aW5kZXggMmI2OWYzNmM3ZmJkYTEwNTU3ODlkZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5
Yjk1NmY3OTc4NmVjODdhYTJjNjlhOGJjMDY3MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcApAQCAtNDIsNyArNDIsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQu
bV9raW5kID0gTGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2Nr
ID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0g
a2V5LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0g
a2V5Lm9wZXJhbmQoKS5vZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5k
ID0ga2V5Lm9wZXJhbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3
IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKEND
YWxsSGVscGVycyYgaml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6
eU9wZXJhbmQub3BlcmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBr
ZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsK
ICAgICAgICAgCiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFu
ZC5jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBw
cm9maWxlID0KQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlOjpyZXBvcnRWYWx1ZShKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBj
YXNlIExhenlPcGVyYW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtl
eSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3Bl
cmFuZC5vcGVyYW5kKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1
LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oCmluZGV4IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEy
ZGNmMzM1ZWM4OGQuLjM2ZDM2OWYwYzAwZmJkNDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3Bl
cmFuZDsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFu
ZDsKICAgICB9IHU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMu
aAppbmRleCBmMjlmZjlmOTczNmFlYjM3MzQ1OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li5jY2UwODAy
Zjg5ZDE3ODg2ODA0NjA5MDdlOTg2YTcwNGJhNmUxZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExMSArMzUsMjE5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwog
Ci1lbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3Bl
cmFuZCBpcyBvbmUgdGhhdCBleGlzdHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBk
b2VzIG5vdCBleGlzdCBiZXR3ZWVuIGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1
bWVudE9wZXJhbmQsIExvY2FsT3BlcmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5k
IHsKK3B1YmxpYzoKKyAgICBPcGVyYW5kKCkgPSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3Qg
T3BlcmFuZCYpID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDog
QXJndW1lbnRPcGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQor
ICAgIHsgfQorCisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAg
ICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7
IAorICAgICAgICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKS5pc0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisg
ICAgT3BlcmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBU
bXBPcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOwor
ICAgIH0KKyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJp
dHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSA9PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNM
b2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBU
bXBPcGVyYW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0
b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisg
ICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBBcmd1bWVudE9w
ZXJhbmQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmly
dHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0
b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90
aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1RtcCgpKQorICAg
ICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wg
T3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQo
KTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUp
Cit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOwor
ICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFu
ZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsg
T3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7
CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsg
fQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVf
dCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6
OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxz
dGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5n
IENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29s
PiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBl
eHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBz
aXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisg
ICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBtX3Zh
bHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMp
OwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9j
YWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYg
KCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAgICAgICAgICAg
IG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXpl
X3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUp
CisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxv
Y2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBt
X251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9j
YWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3Vt
ZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsg
bnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVl
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBP
cGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBl
eHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhl
ciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRz
KG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIu
bnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhl
ci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9j
YWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0K
LSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxv
Y2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisg
ICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVu
dEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9u
dW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7
CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4
KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMg
KyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0
bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcElu
ZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0KLSAgICBj
b25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1l
bnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQor
ICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlk
eCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxv
Y2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2Fs
SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRl
PE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAg
IHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAg
ICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFu
ZDoKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1
cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1w
bGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQor
ICAgIFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
S2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsK
KyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOwor
ICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVu
dChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9w
ZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQogICAgIH0K
ICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZv
cihzaXplX3QgaWR4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkK
KyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6
CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVy
YW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBs
b2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVy
biBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9j
YWxzKHNpemVfdCBzaXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNv
bnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1l
bnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYg
KHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSAr
IHNpemU7CisgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3Zh
bHVlcy5ncm93KG5ld1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+Ojpu
ZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6
ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ld
ID0gVCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkK
KyAgICAgICAgICAgIG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRl
eChvbGROdW1UbXBzIC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7Cisg
ICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6
bmVlZHNJbml0aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplIC0gb2xkTnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9j
YWxJbmRleChvbGROdW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJl
ZFZhbHVlKQorICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJl
ZFZhbHVlID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5z
aXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwot
ICAgICAgICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1i
ZXJPZlRtcHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IG1fdmFsdWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdy
b3cobmV3U2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsK
KworICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8
VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBv
bGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0g
ZW5zdXJlZFZhbHVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwo
c2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3Miw3NiBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09
IFQoKSk7CiAgICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBz
aXplX3Qgb3BlcmFuZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRG
b3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0K
KyAgICBDb25zdFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgo
aW5kZXgpOyB9CisKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQp
KQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQo
KSk7CisgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAgICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyKSBjb25zdAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
bmRJbmRleChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChv
cC52YWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAg
ICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnQoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJl
dHVybiBsb2NhbChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2Nh
bCgpKTsKICAgICB9CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCisgICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9w
LmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgIHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3Qg
VCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBU
Jj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAg
IGNvbnN0IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFu
ZChvcGVyYW5kKSk7IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVy
YW5kKG9wZXJhbmQpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5k
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3Bl
cmFuZCk7IH0KICAgICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0Cisg
ICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3Bl
cmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwo
KSkgPCBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29s
IGhhc09wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJh
bmQoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJl
Zy5vZmZzZXQoKSk7CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NF
UlQob3AudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG9wLnZhbHVlKCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGhhc09wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0
T3BlcmFuZChPcGVyYW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAg
dGhpcy0+b3BlcmFuZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUp
Ci0gICAgewotICAgICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFs
dWUpOwotICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpOyB9Ci0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tpbmRleF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFs
dWVzW2luZGV4XTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
eyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xv
Y2FsKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0g
ICAgaW50IG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZU
eXBlIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Cisg
ICAgUmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQor
ICAgIENvbnN0UmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5k
ZXgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygp
KQotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5v
ZmZzZXQoKTsKLSAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAg
ICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51
bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBp
bmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7
Ci0gICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCkudG9Bcmd1bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKS50b0xvY2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCkBAIC0yNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNT
RVJUKG51bWJlck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAg
ICAgICAgIEFTU0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwog
ICAgIH0KQEAgLTI2NSw5ICszNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVt
QXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMu
Ci0gICAgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1
bnNpZ25lZCBtX251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMg
b2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2Fs
cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5z
aWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAw
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2
M2RiZGViODE2YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDll
ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5s
aW5lcy5oCkBAIC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZv
aWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1Rt
cCgpKQorICAgICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBj
b250ZXh0KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRl
eCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1w
IiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAg
ICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9w
ZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBs
b2NhbChsb2NhbEluZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsg
dG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRt
cCh0bXBJbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFj
Y2NjYzA1MDJjMTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAg
ICwgbV9jb2RlVHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9k
aWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBt
X2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2Rl
KGluZm8ucGFyc2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJh
dGlvbk1vZGUpCiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRl
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCmluZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMw
ODJiMGEyNjNjMzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiAr
MTQxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBt
X2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAK
KyAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50
czsgfQorICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0
cnVlOyB9CisKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlz
UmVnaXN0ZXI7IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4
LDkgKzIwMSw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNvbnN0YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQx
OSw2ICs0MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwog
ICAgIHVuc2lnbmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAx
KSA+PSBtYXhBZ2UpOworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAg
ICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2Zj
ZWYyYjIxZTExODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5
YTY5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgKQEAgLTE3NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNl
UHJvZmlsZUJ5dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0
dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJh
bmQ7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVl
UHJvZmlsZSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBW
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
IAotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAg
ICAgOiBtX3NpemUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUg
aGFzIG1vcmUgc3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1
ZSBwcm9maWxlcwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAg
ICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9j
KG1fc2l6ZSAqIHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVm
ZmVyID0gTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyht
X3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAo
Jm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAg
ICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgfQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5W
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIu
Z2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVy
LmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1f
c2l6ZTsKLSAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7Cisg
ICAgTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMy
ZGMxY2JmNDVmM2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3Bw
CkBAIC0zNSwyMiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxG
cmFtZSogY2FsbEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAg
ICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1
cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIo
KSk7CiAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZElu
dDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdp
c3RlcigpKS51bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4g
anNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50
NTIoKSk7CiAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVy
biBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5h
TihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAg
IGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0
dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBj
YXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1
ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1Zh
bHVlKCk7CiAjZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVh
bigpKTsKICNlbmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgK
aW5kZXggZDhmMThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJi
YmNjNGZmOTdhNjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4
NmJhYjEyZjZjY2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2
ZmU2NjU5MjRkZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmlydHVhbFJlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zp
cnR1YWxSZWdpc3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWlubGluZSBib29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8
IDA7CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5s
aW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICBy
ZXR1cm4gb3BlcmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBm
cmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGlu
dCk7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0g
MHgzZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lz
dGVyKFJlZ2lzdGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+
KTsKIAogICAgIFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIo
c19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGlu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVn
aXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQot
ICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVh
bFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJh
bmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nh
c3Q8aW50PihzbG90KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAg
IGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92
aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29s
IGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3Zp
cnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wg
aXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQog
ICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJh
bmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29u
c3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmly
dHVhbFJlZ2lzdGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VS
VChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNT
RVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBt
X3ZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVy
ID0gMHgzZmZmZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMg
aW50IGxvY2FsVG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAg
IHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3Bl
cmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsg
cmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCmluZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMu
LjhkMmE3ZmI4MjQ3NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCkBAIC0xMTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAg
ICBtX3BhcmFtZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYg
cGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVn
Lm9mZnNldCgpKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9j
ay0+YWRkUGFyYW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcg
KzExOTYsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhG
dW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBj
b2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3Vy
ZSB0aGF0IHBhcmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVk
LgotICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCkt
PmluZGV4KCkpOyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJl
Z2lzdGVyKGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAg
ICAgYm9vbCBub25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBA
QCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5p
czxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZz
ZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAg
ICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAg
JiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNT
dHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0
VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3Rh
bnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+
dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihz
cmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7
CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFs
dWUpOwpAQCAtMzIyOSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAv
LyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZh
cmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8g
YXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RW
YXJBcmdPZmZzZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVj
a3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNm
NmRhODE5ZTMxZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBj
ZTQ2YWQzYzZmZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmls
ZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENv
ZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAg
ICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpOyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVC
bG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBw
YXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAg
ICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1Jl
Z2lzdGVySUQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJ
RC5oCmluZGV4IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTli
MTIzZDRkODliYTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0
SW5kZXgoaW50IGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBp
bmRleCkKICAgICAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5k
ZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1
YWxSZWdpc3RlcihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4
OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQx
NDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNh
MjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsK
IH0KIAordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJU
T1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1
ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFi
c3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJp
bnQoIigiLCBET01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwg
IikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7
CisgICAgICAgIG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFu
ZChvdXQpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIG91dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1
YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0
NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01K
SVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAg
ICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsK
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKworICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDog
bV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQor
ICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
ICAgICA6IFBheWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgICAgIApAQCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVt
cEFzT3BlcmFuZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICBib29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdv
cmxkICYmIGtpbmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFs
dWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkg
PT0ga2luZCAmJiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAg
IEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiAr
MjI3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5k
KCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgp
OwogICAgIH0KKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1
cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAg
ICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
aW5kZXggNjRhY2I1NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uYzQ0MTBiMjU4
YTYyMDlmODU3Njc2YjY2MDM4NjYwZGE3MGQ0NjQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAt
MzgxLDcgKzM4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAg
ICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0
VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
Lm9mZnNldCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBp
biB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vz
c0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAt
MzkyLDcgKzM5Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNh
c2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0
ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxv
Y2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAg
ICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcg
KzQyOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0
IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRl
bHkvU2V0QXJndW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRo
ZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMg
bWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAg
QVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAg
ICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6
IHsKQEAgLTQ1OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91
bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBz
aG91bGQgdHVybgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwog
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGkt
LTspCi0gICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0
ICsgaSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCmluZGV4IGQ3MzI0N2I5
M2M1ZGM3ODZiNjE3YWE1YWFkYzJiMGY2MTUyODZiNWYuLjg5YzA4ZmEwODBjZWEzMmZkOWM1OTFm
MzBmMWU3ZGQ0NmYxZDEyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRQb3NpdGlvbi5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZXNb
aV0tPmZpbmQoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFi
bGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3Bl
cmFuZCgpOwogCiAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
RWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGFmMmVkYTRhZDg4ZTliOTdhYWQ1ZjRmOTM5
MjM3NjIxOTUyYWVmODQuLmZhMjRjNjlkMGZlY2I3YmFmYzcwNWQ4NWMzYzVhZDBjNjUzOTFlOGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWlu
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtMzU4LDkgKzM1OCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNw
cmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBl
KG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkg
PT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0g
U3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIp
KQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCks
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTQ5MywxMCArNDk2LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBh
eWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IGhlYXAub3BlcmFuZCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIHJlZ2lzdGVyIG1heSBub3QgcG9pbnQgdG8gYW4gYXJndW1lbnQgb3IgbG9jYWws
IGZvciBleGFtcGxlIGlmIHdlIGFyZSBsb29raW5nIGF0IFNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNIZWFkZXIoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKHJl
ZykgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVyYW5kLmlzSGVhZGVy
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3Bl
cmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
ICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgfQpAQCAtNTYwLDEyICs1
NjMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2Ji
ZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJs
b2NrIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxv
Y2sub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xv
YmJlcmVkQnlCbG9jaykgewpAQCAtNjI3LDcgKzYzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoQWJzdHJhY3RIZWFwIGhlYXApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFwLmtpbmQoKSA9PSBT
dGFjayAmJiAhaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgaGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRl
ciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNB
cnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8q
IGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGls
ZCgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0
aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50KSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVk
SW50MzIpKSwKQEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJ
bmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZh
cmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocmVnLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
S2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJl
ZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRo
RXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSwgRWRnZSh2YWx1ZSkpOwpAQCAtMTAxOSw5ICsxMDM3LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5k
aWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNl
dDsKQEAgLTEwMzAsNyArMTA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRh
LT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIHZhcmFyZ3NEYXRh
LT5saW1pdCwgdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCmluZGV4IDYyNjEx
MjNjYmZlYzNlYmExOTVkMDliOTMxMDI2ZjI2YzcyNTg0NzYuLjIwNmQ2ZmJkYzU0YTM2Y2I4NDE4
YThiMzg1NDZkODc1Nzc5OTAxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogeworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm4gKHJlZy5pc0FyZ3VtZW50KCkgJiYgcmVnLnRvQXJndW1lbnQoKSkgfHwgcmVnLmlz
SGVhZGVyKCk7Ci0gICAgCisKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
CiAgICAgICAgICYmIHJlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTIsMTMgKzU2LDEzIEBAIGJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgcmV0dXJuIHJl
ZyA+PSBhcmd1bWVudFN0YXJ0ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7
CiB9CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZp
cnR1YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSog
Y2FuZGlkYXRlLCBPcGVyYW5kIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCks
IHJlZyk7CisgICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBl
bWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNl
cnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2lu
IG9yaWdpbikKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRz
LCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7
CiAgICAgR3JhcGgmIGdyYXBoID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3
MywxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAg
IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbUNsb25lZEFyZ3VtZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhh
bnRvbUNyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZl
cgotICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZCwKKyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50
cy0+b3AoKSk7CiAKKyAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisg
ICAgICAgIHJldHVybiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9u
U2V0LCBhcmd1bWVudHMtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRo
aXMpOworCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkKSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwog
ICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAg
ICAgICAgIE5vZGUqIGN1cnJlbnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJndW1lbnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsx
MTAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBp
ZiAoYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5p
bnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihh
cmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkp
KTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNh
c3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7
CiAgICAgfQogICAgIAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJn
dW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIw
LDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWdu
ZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAhYWRkVGhpczsKICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOwogICAgICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBl
bWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y0ludDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAog
ICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4s
IGpzTnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAg
ICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgKyAhYWRkVGhpcyksIEludDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApIHsKICAgICAgICAgLy8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEg
bmVnYXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRo
YXQgaGVyZS4KICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAg
ICAgICAgICAgRWRnZShyZXN1bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJ
bnQzMlVzZSkpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNl
KG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhZGRUaGlzKSwgSW50MzJVc2UpKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCmluZGV4IDlh
NzcxOGZiYmY1NDdiMmY2YWUxMDFkYWYzNzRhMDZhMmMzZGRmMTIuLjc0ZjkzOWU4MTYyMmQ0MDI0
NmUyMzU1ZDUwOThhOWVkMmE4NTIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaApAQCAtMzEsMTEgKzMxLDExIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rlcik7Ci1ib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBh
cmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQpOworYm9v
bCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCk7CiAK
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25T
ZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbik7Cisg
ICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5v
ZGVPcmlnaW4sIGJvb2wgYWRkVGhpcyA9IGZhbHNlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oCmluZGV4IDk2ZGFjMzlhNDQ0ZmZiZDNjZTU0M2Y1N2YzNmNkNjFkZWNjMjhiZDQu
Ljg5N2M3MGRmZmJhMDY2YjY0OWNhZmRjYzFlZjA5MzM3NjgxMDRkMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCkBAIC0xMzks
OCArMTM5LDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYg
b3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJh
bmQob3BlcmFuZCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQogICAgIEFic3RyYWN0
VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
LmxvY2FsKGluZGV4KTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsgfQogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
CmluZGV4IDc3NDNlN2QwMWYxY2FkNzgxZDg0YWIwM2QzYzA5Yzc3ZjgwMjliYTUuLmMyYjU1YWE1
YzRhNTIyOWIxYjFhNDQzMWMxODdhZGVmNDZjM2RiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCB2
b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVIZWFwKCkKIAogdm9pZCBBdmFpbGFiaWxpdHlNYXA6
OnBydW5lQnlMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4gd2hlcmUpCiB7Ci0gICAg
T3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KG1fbG9jYWxzLm51bWJlck9mQXJndW1l
bnRzKCksIG1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCksIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFi
bGUoKSk7CisgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KE9wZXJhbmRzTGlr
ZSwgbV9sb2NhbHMsIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CiAgICAgZ3JhcGguZm9y
QWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIHdoZXJlLAotICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAg
bG9jYWxzQ29weS5vcGVyYW5kKHJlZykgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAgICAgICAg
IH0pOwogICAgIG1fbG9jYWxzID0gV1RGTW92ZShsb2NhbHNDb3B5KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCmluZGV4IDUzNTUyNTYwMjNkZGNm
MjgwZGM1OTViMzNhN2M3ZmRlYzU0ZTY0ZjAuLjgwYzEyYmYxODAyNWE1NjEwNTk2ZGEyNGUyM2Mw
MjVmMmFiZTRmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHlNYXAuaApAQCAtNjYsOSArNjYsOSBAQCBzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKICAg
ICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzRnVuY3RvciwgdHlwZW5hbWUgQWRk
RnVuY3Rvcj4KLSAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVy
IHJlZywgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCisgICAg
dm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1bmN0b3Im
IGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQogICAgIHsKLSAgICAgICAgQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgQXZhaWxhYmls
aXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQob3ApOwogICAgICAgICBpZiAoIWF2
YWlsYWJpbGl0eS5oYXNOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXggMDU4NDQ5NjNl
NjEwZWQyOTNjNTYwZmFiZmQzODlhOWYzOTc4MGEwNy4uZTIxYjI4YjUyMjFmMTU2MThiODA2NGEz
YTdiMmQ3ODY5MTM4NDIxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVj
dXRpb25Db3VudCkKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWdu
ZWQgbnVtVG1wcywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiAgICAgOiBieXRlY29kZUJlZ2luKGJ5
dGVjb2RlQmVnaW4pCiAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICwgY2ZhU3RydWN0dXJlQ2xv
YmJlclN0YXRlQXRIZWFkKFN0cnVjdHVyZXNBcmVXYXRjaGVkKQpAQCAtNDgsMTEgKzQ4LDExIEBA
IEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNp
Z25lZCBudW1Bcmd1bWVudHMsIHVuc2lnCiAgICAgLCBpc0xpbmtlZChmYWxzZSkKICNlbmRpZgog
ICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCi0gICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMpCi0gICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rp
b25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIEFic3RyYWN0VmFs
dWU6OmZ1bGxUb3AoKSkKKyAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcykKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwg
ZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkBAIC03MCw2ICs3MCwxNSBAQCB2
b2lkIEJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAg
aW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMs
IEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJl
VG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVU
bXBzKG5ld051bVRtcHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRt
cHMpOworICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVl
c0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3Ao
KSk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKIHsKICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IGI1YWRmMDkx
MmQwOTQyYmU5N2U5ODdjZGM4OWY0YWUzNGQwYzBiYzguLjFkZDM4Yzc5MDhkYzZmNGQxYjA4NWJj
OGUwNjI1NDgwZGI0NDk3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCkBAIC00NiwxMSArNDYsMTIgQEAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2Nr
Tm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7
CiAgICAgQmFzaWNCbG9jaygKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1
bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywKKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywKICAgICAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQp
OwogICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAgCiAgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWdu
ZWQgbmV3TnVtTG9jYWxzKTsKKyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1w
cyk7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUo
KTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5k
ZXggNzUwOGUyMTlkYzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOS4uMDA4Y2Y1MjI2OTU3
YzlhODM1ODVjNWU1ZTJjMTI1ZjJmOGNlNGIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9p
ZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+
JiYgYmxvY2spCiAKIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90
IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxv
Y2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7
CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5
dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCks
IGV4ZWN1dGlvbkNvdW50KSk7CiAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKICAgICBh
dXRvKiByZXN1bHQgPSBibG9jay5wdHIoKTsKICAgICBpbnNlcnQoaW5kZXgsIFdURk1vdmUoYmxv
Y2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKaW5kZXggN2U0YTlmZTYyMzNiNzQ0OWU4Mjg2NjJjMWU0OTlkYzllODQ0MDhiNy4uZDA2NDdj
ZjVkOTg2ZTBhOWRlN2ZiNTQ0ZGVjZWE0MjI1NDY1YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkp
KQogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQor
ICAgICAgICAsIG1fbnVtVG1wcyhtX2NvZGVCbG9jay0+bnVtVG1wcygpKQogICAgICAgICAsIG1f
cGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAg
ICAgLCBtX2lubGluZVN0YWNrVG9wKDApCkBAIC0xMzksNiArMTQwLDE3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsK
ICAgICB9CiAKKyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKKyAgICB7
CisgICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9u
dW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOworICAg
ICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9j
ayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8vIEhlbHBlciBm
b3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAg
ICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2RlVHlwZSBvcCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0
IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzAsMjUgKzI4MiwzMyBAQCBwcml2
YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+
JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9j
ayo+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRz
KTsKICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2twb2ludCgpCisg
ICAgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCksIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAv
LyBBdCB0aGlzIHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4
aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9j
ZXNzU2V0TG9jYWxRdWV1ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgp
IHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAog
ICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAg
ICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9
CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUg
aW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIE5vZGUqIGdldERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNU
bXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAg
ICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAg
ICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKIAotICAg
ICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBnZXRMb2NhbChvcGVyYW5k
KTsKKyAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAgfQogCiAgICAg
Tm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAtMjk4LDggKzMxOCw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgp
OwogICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFu
dHNbY29uc3RhbnRJbmRleF0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNv
ZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
b3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVC
bG9jay5nZXRDb25zdGFudChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChj
b25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFu
dHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM1OCw5
ICszNzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0
aGUgdG9wIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsK
LSAgICBOb2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVl
LCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXREaXJlY3QoT3Bl
cmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQog
ICAgIHsKLSAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQo
KSksIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCks
IHZhbHVlKTsKIAogICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIg
T1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CkBA
IC0zNzQsNyArMzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBkZWxh
eWVkLmV4ZWN1dGUodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9j
YWxRdWV1ZSgpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRM
b2NhbFF1ZXVlLnNpemUoKTsgKytpKQpAQCAtMzkyLDE4ICs0MTMsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7CiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBr
ZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CiAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlP
cGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwog
ICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVy
ZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwo
KTsKLQotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChsb2NhbCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFu
ZC5pc0xvY2FsKCkpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMg
aGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFu
ZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fs
cy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtNDI4LDIwICs0NDgsMjYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRp
Y09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNl
dE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2RlT3Jp
Z2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNU
bXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmln
aW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4p
OwogCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewotICAgICAgICAg
ICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0
aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7CisgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCppbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5k
OiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251bVRt
cHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAiIHRt
cHMuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNl
dE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3Vt
ZW50UG9zaXRpb25Gb3JMb2NhbChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRp
b24pCiAgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlv
bik7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYm
IG9wZXJhbmQgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVs
c2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAg
ICAgIH0KIApAQCAtNDUxLDcgKzQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bWVyZ2VDaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKSwgQmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBh
ZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5v
ZGU7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1
MDksMjEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9
Ci0gICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4s
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0g
Tm9ybWFsU2V0KQorICAgIE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFu
dGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUg
PSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmln
aW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAg
ICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
dW5zaWduZWQgYXJndW1lbnQgPSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJn
dW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEocmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1l
bnRzLCBleGNlcHQgZm9yICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAg
ICAgIC8vIHRoZW4gbWFrZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBp
ZiAoYXJndW1lbnQgfHwgbV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAg
IGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNo
RGlyZWN0KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OSwx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQub2Zmc2V0KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3Vt
ZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJn
dW1lbnRdOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9z
aXRpb24oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmlu
ZEFyZ3VtZW50UG9zaXRpb24oT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9z
aXRpb25Gb3JBcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBm
aW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmlu
ZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NTAs
OSArNTc5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1
Z2dlckVuYWJsZWQoKSk7CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlu
bGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERp
cmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpCi0gICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1l
LCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChp
bmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1
bWVudHMgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51
bVBhcmFtZXRlcnMoKTsKIApAQCAtNTc1LDYgKzYwNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgZnVsbExpdmVuZXNzID0gbV9ncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNh
dXNlIHRtcHMgYXJlIG5vdCByZXF1aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5l
c3MuZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNz
Q2FsY3VsYXRpb25Qb2ludChvcmlnaW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxv
Y2FsLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9j
YWxdKQpAQCAtNTg0LDI3ICs2MTQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAg
IH0KIAotICAgIHZvaWQgZmx1c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBm
bHVzaChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJl
Y3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwg
ZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hE
aXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50
UG9zaXRpb24pCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50
UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhh
bnRvbUxvY2FsPEZsdXNoPihvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9t
TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50
UG9zaXRpb24pCisgICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFu
ZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1Rt
cCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAg
IAotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIApAQCAtNjE0LDI2ICs2NDQsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9w
SW5mbyh2YXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikK
ICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAg
ICB9CiAKLSAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewog
ICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmlu
ZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5s
aW5lU3RhY2tFbnRyeSogaW5saW5lU3RhY2tFbnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRk
Rmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcp
IHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJh
bmQpOyB9OwogICAgICAgICBmbHVzaEltcGwoaW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxs
RnJhbWUsIGFkZEZsdXNoRGlyZWN0KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWlu
YWwoKQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OwotICAg
ICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwg
VmlydHVhbFJlZ2lzdGVyIHJlZykgeyBwaGFudG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKKyAgICAg
ICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBv
cGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50
b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7
IHBoYW50b21Mb2NhbERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5h
bEltcGwoY3VycmVudENvZGVPcmlnaW4oKSwgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2Nh
bERpcmVjdCk7CiAgICAgfQogCkBAIC03NjEsNiArNzkwLDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAg
cmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9CisgICAgTm9kZSogYWRkVG9HcmFwaChO
b2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEpCisgICAgeworICAgICAg
ICBBU1NFUlQob3AgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBP
cEluZm8ob3BlcmFuZC5raW5kKCkpLCBPcEluZm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsK
KyAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBP
cEluZm8gaW5mbzIsIEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGls
ZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5v
ZGUoCkBAIC0xMDkxLDggKzExMjUsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIg
b2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHM7Ci0gICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jhcmll
cykgdXNlZCBpbiB0aGUgZnVuY3Rpb24uCisgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZh
cnMgKyB0ZW1wb3JhcmllcykgdXNlZCBieSB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4K
ICAgICB1bnNpZ25lZCBtX251bUxvY2FsczsKKyAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1w
cyB1c2VkIGZvciBmb3J3YXJkaW5nIGRhdGEgdG8gYW4gT1NSIGV4aXQgdG8gY2hlY2twb2ludC4K
KyAgICB1bnNpZ25lZCBtX251bVRtcHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4g
dW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxs
b2NhdGUgZm9yIGFyZ3VtZW50cyB0byBvdXRnb2luZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRo
aXMKICAgICAvLyBudW1iZXIgaW5jbHVkZXMgdGhlIENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGlu
aXRpYWxpemUgZm9yIHRoZSBjYWxsZWUKQEAgLTExNTksMTQgKzExOTUsMTcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCk7CiAgICAgICAgIAotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBj
b25zdAorICAgICAgICBPcGVyYW5kIHJlbWFwT3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1w
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52
YWx1ZSgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNT
RVJUKCFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQog
ICAgIH07CiAgICAgCkBAIC0xMTc1LDEzICsxMjE0LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1
c0NvbnRleHRTdGFjayBtX2ljQ29udGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVk
U2V0TG9jYWwgewotICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOwotICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRN
b2RlIG1fc2V0TW9kZTsKLSAgICAgICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQot
ICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAg
RGVsYXllZFNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5k
LCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihv
cmlnaW4pCiAgICAgICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQpAQCAtMTE5NCw4ICsxMjI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZXItPnNldEFyZ3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUs
IG1fc2V0TW9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdp
biwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBh
cnNlci0+c2V0TG9jYWxPclRtcChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1v
ZGUpOwogICAgICAgICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAg
T3BlcmFuZCBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07Cisg
ICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5
ZWRTZXRMb2NhbCwgMj4gbV9zZXRMb2NhbFF1ZXVlOwpAQCAtMTIwOCw3ICsxMjQ3LDcgQEAgcHJp
dmF0ZToKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9j
ayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5k
ZXgpOwotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9j
ayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBS
ZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJ
bmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBC
YXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5n
VGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRl
Y29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0
cy5zaXplKCkpCkBAIC0xMjIwLDcgKzEyNTksNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNl
cjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQog
CiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygp
CiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2Nr
KEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAg
UmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2Rl
SW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAg
ICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5k
QmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTE0MjMsNyAr
MTQ2Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIC8vIElmIHRoZSB0YXJnZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZhcmFyZ3MsIHdlIGRv
IG5vdCBrbm93IGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgZmlsbGVkIGJ5IExvYWRW
YXJhcmdzLiBWYXJhcmdzIElubGluZUNhbGxGcmFtZSdzCi0gICAgICAgICAgICAvLyBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxs
ZWQgYXJndW1lbnRzIGJ5IExvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBm
cmFtZSB3aGljaCBtYXkgYmUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkg
eGtMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5
IGJlCiAgICAgICAgICAgICAvLyBhIGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50by4KICAgICAgICAg
ICAgIGlmIChjYWxsRnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMTQ0OSw3ICsxNDg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJz
aXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAg
Ly8gV2UgbXVzdCBzZXQgdGhlIGNhbGxlZSB0byB0aGUgcmlnaHQgdmFsdWUKICAgICAgICAgaWYg
KHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoc3RhY2tF
bnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAg
c2V0RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOworICAgICAgICAg
ICAgICAgIHNldERpcmVjdChyZW1hcE9wZXJhbmQoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJh
bWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFy
Z2V0Tm9kZSk7CiAKQEAgLTE2MTQsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
Q2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgPSByZWdp
c3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAgaW50IGlu
bGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2FsbEZyYW1lU3Rh
cnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxvY2FscygKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsK
KyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAgICAgICAgIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVD
YWxsRnJhbWUgPyBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0
IDogMCkgKyBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpICsgY29kZUJs
b2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1f
Z3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0LmlzVmFs
aWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJl
c3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChy
ZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxs
ZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsK
QEAgLTE2MzYsNyArMTY3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAgICBJbmxp
bmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgSW5s
aW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2Nr
LCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlu
bGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29u
dGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC52aXJ0dWFsUmVn
aXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJs
b2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkg
aGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBA
IC0xNjcxLDkgKzE3MTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBI
b3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBl
eGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8g
dGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5saW5lZAog
ICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3
ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9m
ZnNldCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dl
dCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0
Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcElu
Zm8oYXJndW1lbnRUb0dldCksIHZhbHVlKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5h
cHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dl
dCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwpAQCAtMTcxNywxNiArMTc1OCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAg
ICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4KICAgICAg
ICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkgewogICAg
ICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwg
dmFsdWUpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkp
OworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9T
ZXQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxh
eWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwg
SW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAg
ICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBp
bmRleCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRU
b1NldCksIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERl
bGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHVuZGVm
aW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KIApAQCAtMTg5MywxMiArMTkz
NCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVj
a3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAgICAgICAK
ICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zm
c2V0KCk7CisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAg
ICAgCiAgICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rl
ck9mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0
ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAg
ICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworICAgICAg
ICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBo
Lm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxS
ZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKQEAgLTE5MDYsMTEgKzE5NDcsMjQg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1l
bnRzT2Zmc2V0OwogICAgICAgICBkYXRhLT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOwogICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11
bTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJn
cykKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5m
byhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisKKyAgICAgICAgaWYgKGNhbGxPcCA9
PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENv
dW50OworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyk7CisgICAgICAgICAgICBlbHNlIGlmIChpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkp
CisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGdldERpcmVjdChyZW1hcE9wZXJhbmQo
aW5saW5lQ2FsbEZyYW1lKCksIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAg
ICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFt
ZSgpLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0Fy
Z3VtZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQoT3BlcmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3Vu
dCkpOworICAgICAgICAgICAgc2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFy
Z3NMZW5ndGgsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVz
c0NoZWNrcG9pbnQoKTsKKworICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJ
bmZvKGRhdGEpLCBnZXRMb2NhbE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5j
ZSwgd2UgbmVlZCB0byBrZWVwIGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAg
ICAgICAgLy8gYW5kIGFyZ3VtZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dl
dmVyLCB3ZSBvbmx5IG5lZWQgYSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NiwxNCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBh
bHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAg
ICAgICAgLy8gYmVmb3JlIFNTQS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIo
cmVtYXBwZWRSZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsK
KyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKGRhdGEtPmNvdW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwg
YnV0IGl0IHdpbGwgZm9yY2UgdGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlz
IGRvZXNuJ3QKICAgICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBh
IFNldEFyZ3VtZW50RGVmaW5pdGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlz
CiAgICAgICAgIC8vIG1vc3RseSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlh
YmxlLT5wcmVkaWN0KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJn
ZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291
bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFi
bGUpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3Bl
cmFuZCgpLCBzZXRBcmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtl
ZFNldCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcg
KzIwMDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0
QXJndW1lbnRzID49IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJn
dW1lbnREZWZpbml0ZWx5LCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0
QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
ZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAg
ICsrbnVtU2V0QXJndW1lbnRzOwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNyw3
IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZygKICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVy
IG9mZnNldDogIiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVS
ZWcocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJl
ZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxl
ZVJlZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2Fs
bGVlUmVnLCAiXG4iKTsKICAgICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwg
SW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKIApAQCAtNTEwMiw3ICs1MTU2LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9u
ZXdfcmVnZXhwOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3Jl
Z2V4cC5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4
cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJv
emVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZv
KGZyb3plblJlZ0V4cCksIGpzQ29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9uZXdfcmVnZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMyLDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSAmJiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJy
ZW50QmxvY2stPmF0KDApLT5vcCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAg
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9i
dWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90
ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3
ICs2MjQ5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAg
ICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2Nh
bCgpKQpAQCAtNjIyMywxNCArNjI3NywxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHBy
b2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQo
b3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9H
cmFwaChFeHRyYWN0Q2F0Y2hMb2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxv
Y2FsUHJlZGljdGlvbnNbbnVtYmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1i
ZXJPZkxvY2FsczsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhw
cm9maWxlLm1fb3BlcmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1v
dkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1Rv
U2V0LnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcg
KzY0MTIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1f
c3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUp
OwogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1w
ZWQpIHsKQEAgLTY4MjYsOCArNjg4MCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJv
bm1lbnQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5
dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZh
bHVlLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1
ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBp
bml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAg
ICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9k
ZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcElu
Zm8oc3ltYm9sVGFibGUpLCBPcEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2
OTExLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAgICAgICAgIC8vIGxvYWRzIGZyb20gdGhlIHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0
aGF0IHdvdWxkIHByZXZlbnQgdGhlIERGRyBmcm9tIHRyYWNraW5nIHRoZQogICAgICAgICAgICAg
Ly8gYnl0ZWNvZGUtbGV2ZWwgbGl2ZW5lc3Mgb2YgdGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4o
KTsKLSAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAg
IGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxK
U0Z1bmN0aW9uKj4oKm1fdm0pKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0
YW50KGZ1bmN0aW9uLT5zY29wZSgpKTsKQEAgLTcyNzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhl
IG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBi
YXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgICAgIG1faW5saW5lQ2Fs
bEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2Fs
bGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2Rl
QmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09m
ZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAg
ICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzYzOCw3ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTc2NTgsMjQgKzc3MTQsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVj
ZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5n
T3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwg
T3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJh
bmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3Vt
ZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVudHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJn
dW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRvQXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZh
cmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmln
aW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhh
bnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQ
aGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydExpdmVu
ZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJt
aW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2Fs
RGlyZWN0KTsKQEAgLTc3NDAsNiArNzc5Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
KCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVu
dHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9n
cmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJT
bG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCmluZGV4IDhlOWJiNGFjYmU1NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNi
ZmQuLjNkYzc1NjhmMWVlMmM2OTc3MjI2OGNjOTZkZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBw
cml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgY29uc3QgT3Bl
cmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3Bs
YW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIE9w
dGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAg
IGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
Tm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGlmICghbm9k
ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIp
OworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwg
IlxuIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFs
dWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcg
Iiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFk
Lm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9T
UkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFsdWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHAKaW5kZXggZDk4ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0
MjZhZjBmMjM4Mi4uNTc3MGYwOTg5NDJjODk2YjdhY2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1
bWVudHMoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAg
IHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlz
PFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIGNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBA
QCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAg
ICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQo
KSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3
aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVu
dE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50
T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVy
YW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxl
LCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2Rl
VHlwZSwgT3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgQVNTRVJUKG90
aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBv
dGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0yNzAsMTUgKzI4MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAg
ICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1l
bnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUt
PmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgp
LmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogeworICAgICAgICAgICAg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVy
YW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6
IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5
cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9M
b2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1w
T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZv
cjxub2RlVHlwZSwgVG1wT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5k
KCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgp
LCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9k
ZS0+b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVM
b2NhbHNJbkJsb2NrKCkKQEAgLTI4OSw2ICszMTEsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgY2xlYXJWYXJpYWJsZXM8QXJndW1lbnRPcGVyYW5kPigpOwogICAgICAgICBjbGVhclZh
cmlhYmxlczxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJh
bmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVu
Y2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAg
Ly8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3Qg
YXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcgKzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkK
ICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9j
YWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNr
ID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1
cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9i
bG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bl
cmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBo
aVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9w
ZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOwotICAgICAgICBy
ZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOwor
ICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDogcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAg
ICAgY2FzZSBUbXBPcGVyYW5kOiByZXR1cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXB1dGVJc0ZsdXNoZWQoKQpAQCAtNTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3Vt
ZW50UGhpU3RhY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0
YWNrOworICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAg
VmVjdG9yPE5vZGUqLCAxMjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3
NjM0YmI2NmIxMjM5NDcxYjVhNjE2NjdjZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVk
ZGU2OThhYWViZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAK
QEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBTdGFjazogewogICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5
bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJl
bW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhl
YXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBp
ZiAoY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFj
a01hcC5jbGVhcigpOwogICAgICAgICAgICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5r
aW5kKCkgPT0gU3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVl
MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5k
KCkgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjI2LDggKzIyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJz
dHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJh
Y2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0
SGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIo
KSk7Ci0gICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
YWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RI
ZWFwLnBheWxvYWQoKS52YWx1ZSgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUucmVzZXQobmV3IEltcHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgU2lkZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0
aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgp
LnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBT
dGFja01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRp
b24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAh
PSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0
b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZS0+dmFsdWU7CkBAIC0yOTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBh
IGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3Rh
Y2tNYXAuCiAgICAgLy8KICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1f
ZmFsbGJhY2tTdGFja01hcCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgot
ICAgIEhhc2hNYXA8aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVm
YXVsdEhhc2g8aW50MzJfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PGludDMyX3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwg
c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhh
c2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwOwogICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9o
ZWFwTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA4
OWJjNjQxZjUyNmJiNTNmZjAzN2Y3M2NmOTUwYmFjNjQ2ZDQ5OTU0Li44MmYzY2E2NDE4NGY5MTkz
NjUwMzliMTMyMjE3ZGQ5OWVhOTcxMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgLy8gc2NhbiB3b3VsZCByZWFkLiBUaGF0J3Mgd2hhdCB0aGlzIGRvZXMuCiAgICAgZm9y
IChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBp
bmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
Ci0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQog
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2Rl
cyBjYW4gcmVhZCBmcm9tIHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBj
b25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwor
ICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5
Nyw3ICs0OTcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAK
ICAgICBjYXNlIEZsdXNoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+
bG9jYWwoKSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFu
ZCgpKSk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAt
NzY0LDEyICs3NjQsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2FzZSBTZXRDYWxsZWU6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7
CkBAIC03ODAsNyArNzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAg
ICBjYXNlIFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVu
Z3RoOgpAQCAtNzg4LDM2ICs3ODgsNDMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5v
ZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFu
ZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFj
a0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNr
OiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICByZWFkKGhlYXApOwogICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
OworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPm9wZXJhbmQpOwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
IHsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOworICAgICAgICByZXR1cm47
ICAKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQp
OwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4o
aSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MjYsOSArODMzLDkg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAg
IAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQo
KSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19j
YXN0PGludD4oaSkpKTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0
YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21i
aW5lZExpdmVuZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRM
aXZlbmVzcy5jcHAKaW5kZXggOTU4NjZhN2Y5MWE3MTQ0MmRhMWM0ZjdlNDcwMGQwOWNkMmFjMzBm
My4uMTU3NDZjMDU0ZjBkZjMzYmEzMmQzOWZhZmUwMmRiYmQ3ZDI5MTRjYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCkBAIC0zOSw3
ICszOSw3IEBAIHN0YXRpYyB2b2lkIGFkZEJ5dGVjb2RlTGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBB
dmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCwKIHsKICAgICBncmFwaC5mb3JBbGxMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKICAgICAgICAg
ICAgICAgICByZWcsCiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IDc5ODdi
ODcwZmQ1MDlmOTMwMDA3ZTM1NmFjMDU1ZWE2NmJmZTdhZGIuLjdmZmQ0ZDM1YjZjZjVjOWRlMzgx
ZTdkYTYxMzMyZmQ1MjQ5NjU1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcApAQCAtNTYsNyArNTYsNyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6
OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICBjb2RlT3JpZ2lu
cy5hcHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5z
aXplKCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7
Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJl
dHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXgg
Q29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CkBAIC02NCwxMyArNjQsMTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVD
YWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBl
bmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkg
LSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAg
cmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9u
RGF0YTo6bGFzdENhbGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3Jp
Z2lucy5zaXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29k
ZU9yaWdpbnMuc2l6ZSgpIC0gMSkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRl
eChjb2RlT3JpZ2lucy5zaXplKCkgLSAxKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgg
Q29tbW9uRGF0YTo6YWRkRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDg1NDEyMzE0
NzQxZTZmMTEyNjFmMmU5N2M0OWZlNjQ0ZGFlN2JhZjcuLmYzOGM4M2ZkZDMwYzJmNTNiM2Q1MDkz
ZjQwYjJjNzBlOTUzMTA0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKQEAgLTI5NCw2ICsyOTQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIElu
c3RhbmNlT2ZDdXN0b206CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAgICBjYXNlIE51bWJl
clRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAppbmRleCAxN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThi
NTM5Li40NWZiYzQzOWQ1M2JhOTUwZTdhOGQ4OWFjOWVjMTk3MmJhMDkzOWI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw3ICs5MCw2IEBAIHN0YXRpYyBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkg
c3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdh
bnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2Vz
IGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0
eUZpeHVwR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRv
cik7CiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsK
ICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFlZTFmMDA3M2IwZjRi
YmNjNDczNGViNjQxZTQ2NDhjMzA1NWEyNDQuLmNhMzNkYjIyN2Q0YjkyNzczZmE4NmQ3MmVlM2Q0
ZDFiODViZjk4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcApAQCAtMjQzMiw2ICsyNDMyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisKICNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBl
bnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVz
LgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKQEAgLTI0NjQsOCArMjQ3Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAg
ICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgog
ICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6
CiAgICAgICAgIGNhc2UgTmV3UHJvbWlzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaAppbmRleCAwYmYxYzNmYmJhYzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUy
OGI5Li45MzNhMmJkZTIyZTE2NmMyYWViNmQ0YWMxYmJlOWNlMWU1Y2VkNTZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC0zMiw2ICszMiwxMCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFjZSBGb3JBbGxLaWxs
c0ludGVybmFsIHsKK2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKwogLy8gVXRp
bGl0aWVzIGZvciBmaW5kaW5nIHRoZSBsYXN0IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSBp
biBERkcgU1NBLiBUaGlzIGFjY291bnRzIGZvciBsaXZlbmVzcyBkdWUKIC8vIHRvIE9TUiBleGl0
LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgZW51bWVyYXRpbmcgb3ZlciBhbGwgb2YgdGhlIHBy
b2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlLAogLy8gYnkgZXhwbG9yaW5nIGFsbCBi
bG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMgbGl2ZSBhdCB0YWlsIGFuZCB0aGVuIGV4cGxvcmluZyBh
bGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUgdGhlCkBAIC01MywxMyArNTcsMTMgQEAgdm9pZCBmb3JB
bGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5v
ZGVBZnRlciwgY29uc3QKICAgICAKICAgICBDb2RlT3JpZ2luIGFmdGVyID0gbm9kZUFmdGVyLT5v
cmlnaW4uZm9yRXhpdDsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOwor
ICAgIE9wZXJhbmQgYWxyZWFkeU5vdGVkOwogICAgIC8vIElmIHdlIE1vdkhpbnQgc29tZXRoaW5n
IHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxsIHRoZSBvbGQgdmFsdWUuCiAg
ICAgaWYgKG5vZGVBZnRlci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3Jh
cGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3Rvcihy
ZWcpOwotICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gcmVnOworICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBub2RlQWZ0ZXItPnVubGlua2VkT3BlcmFuZCgpOworICAgICAgICBpZiAoZ3JhcGgu
aXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBhZnRlcikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Io
b3BlcmFuZCk7CisgICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSBvcGVyYW5kOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtNzAsOCArNzQsMjQgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5k
cyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QK
ICAgICAvLyBvdGhlciBsb29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJh
bWUgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxG
cmFtZSA9PSBhZnRlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZz
ZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0IDogMDsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGlu
ZUNvZGVCbG9ja0ZvcihiZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIu
Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9y
ZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkpOworCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVz
c0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAg
ICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJs
b2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgaW50IHRtcE9mZnNldCA9
IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0
IDogMDsKKyAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAgICAgICAgIGxpdmVC
ZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CisKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFj
aFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKE9wZXJh
bmQoVG1wT3BlcmFuZCwgdG1wICsgdG1wT2Zmc2V0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIC8vIE5vIGxvY2FscyBjYW4gZGllIGF0IGEgY2hlY2twb2ludC4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlu
bGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwog
ICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5l
c3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9y
ZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRW
ZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29k
ZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKQEAgLTgyLDE3
ICsxMDIsMjEgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAgICAgICAgIH0pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0
ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEg
Y2hlY2twb2ludCBidXQgYmVmb3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxs
RnJhbWUuIik7CisKICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3
YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0g
ICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVy
KTsKLSAgICBncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3Ig
bGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAg
ICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKAogICAgICAgICBiZWZvcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykg
ewotICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQo
cmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlz
VG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsK
KyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgZnVuY3Rvcihv
cGVyYW5kKTsKICAgICAgICAgfSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI5LDggQEAgdm9pZCBm
b3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgc2VlbkluQ2xvc3VyZUZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Y2FsbGVkRnVuY3RvckZsYWcgPSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFn
czsKLSAgICAKKworICAgIEFTU0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAs
MTUgKzE0NSwxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBp
ZiAobm9kZUluZGV4KQotICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7
CisgICAgTm9kZSogYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwo
Ci0gICAgICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAg
ICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZsYWdzLmdldChub2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAg
ICAgIH0sCkBAIC0xNTksNiArMTgyLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAg
Ly8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVj
dGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBi
bG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJv
IHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAxOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewor
ICAgICAgICBkYXRhTG9nTG5JZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwg
YXZhaWxhYmlsaXR5IGF0IGluZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxp
dHkubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4
KAogICAgICAgICAgICAgZ3JhcGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBi
bG9jaywgbm9kZUluZGV4LAogICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGIzMjBmNzA3Yzk1ZjEyMzkzODUxYmMz
YjJiMmI0MmI5NTZkZDBiZjUuLjA3MWRlMjM5MmI5YzVjOTI4NmRlOWM3ODc4ZmU5YWYwMGMwYjRl
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4
LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBp
ZiAodmFyaWFibGVBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwg
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsK
ICAgICAgICAgICAgIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgp
OwogICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0
ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tB
Y2Nlc3NEYXRhKCkpIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOwor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0
YS0+bWFjaGluZUxvY2FsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
Im1hY2hpbmU6IiwgZGF0YS0+bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBkYXRhLT5mb3JtYXQpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgp
KSAKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAg
IGlmIChub2RlLT5oYXNVbmxpbmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0
aEhpbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIs
IG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVl
KCkpCkBAIC01MTUsOSArNTE1LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAg
IG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9w
KCkgPT0gUGhpKTsKICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAm
JiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAi
PCIsIHBoaU5vZGUtPmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5v
ZGUtPm9wZXJhbmQoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAg
ICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0
aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxv
Y2ssIFZhCiAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
aWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQo
KSkKICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0
dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2Nr
LCBWYQogICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlh
YmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1
YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAg
ICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5v
ZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9w
ZXJhbmQoKSk7CiAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAg
ICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9j
YWw7CiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3Jh
cGg6OmtpbGxzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVy
biBraWxsc0ZvcihiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAot
Ym9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5k
IG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBk
YXRhTG9nKCJDaGVja2luZyBvZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwog
ICAgIGJvb2wgaXNDYWxsZXJPcmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVP
cmlnaW5QdHIgPSAmY29kZU9yaWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNl
dCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2Fs
bEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVl
ZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRv
IHRoZQorICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwu
CisgICAgZm9yICg7IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJh
bWUgPyAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAg
ICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZz
ZXQgPSBpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
b3BlcmFuZC52YWx1ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+
PSAwKTsKKyAgICAgICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNv
bWVvbmUgd2UgaW5saW5lZC4KKyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZz
ZXQgKyBtYXhOdW1DaGVja3BvaW50VG1wcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBz
KCkgfHwgb3BlcmFuZEluZGV4IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgq
Y29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAg
cmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQor
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
IC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAg
ICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJh
bWUoKTsKLSAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFj
a09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAg
aWYgKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5z
dGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAg
ICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmVnLm9mZnNldCgpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwog
CiAKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0g
ICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkxvb2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAg
ICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSB7CisgICAgICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc2LDQyICsxMTk3LDQx
IEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2sp
OwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpblB0
ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy5vcGVy
YW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0
dXJuaW5nIHRydWUuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIGZ1bGxMaXZlbmVzcy52aXJ0dWFsUmVnaXN0ZXJJc0xpdmUocmVnLCBieXRlY29kZUlu
ZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwg
aXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUg
YWx3YXlzIGxpdmUuIFRoaXMgd291bGQgYmUgcmVkdW5kYW50IGlmIGl0IHdhc24ndCBmb3Igb3Vy
CiAgICAgICAgIC8vIG9wX2NhbGxfdmFyYXJncyBpbmxpbmluZy4KLSAgICAgICAgaWYgKHJlZy5p
c0FyZ3VtZW50KCkKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiByZWcuaXNBcmd1bWVu
dCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpKSB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBpcyBs
aXZlLlxuIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUg
dG8gZXhpdCB0byB0aGUKLSAgICAgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcg
dGhlIHRhaWwgY2FsbC4KLSAgICAgICAgY29kZU9yaWdpblB0ciA9ICZpbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlcjsKICAgICAgICAgaXNDYWxsZXJPcmlnaW4gPSB0cnVlOwogICAgIH0KKwor
ICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcg
dHJ1ZS5cbiIpOworICAgIHJldHVybiB0cnVlOyAgICAKICAgICAKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCi1CaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBCaXRWZWN0b3Ig
cmVzdWx0OwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAg
dW5zaWduZWQgbnVtTG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCkpOworICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgY29kZU9yaWdpbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7Ci0gICAgICAg
ICAgICByZXN1bHQucXVpY2tTZXQocmVnLnRvTG9jYWwoKSk7CisgICAgICAgIFsmXSAoT3BlcmFu
ZCBvcGVyYW5kKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1w
KCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5xdWlja1NldChvZmZzZXQpOwogICAgICAgICB9KTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpAQCAtMTYzNSw4ICsxNjU1LDggQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJy
ZW4KIAogICAgIGZvciAoTm9kZSogbm9kZSA9IG9wZXJhbmROb2RlOyBub2RlOykgewogICAgICAg
ICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKLSAgICAgICAgICAgIGlmIChtX2Zv
cm0gIT0gU1NBICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAg
ICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQo
KTsKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX3Jvb3RUb0FyZ3VtZW50
cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVy
IGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQpAQCAtMTY1Niw3ICsxNjc2LDcgQEAgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwg
bm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZmFiOWNmMDJhMjU5NzZlZjQ3ZDE3
OTA1YmFkOWNlMDNlMzgyYmNlNS4uZjdhMWQ4MjE0YzMwMmQ3ZDk2YWMyYTc3YTAxODY2YTlkMTE5
ZjUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtODQwLDEzICs4NDAs
MTMgQEAgcHVibGljOgogICAgIC8vIFF1aWNrbHkgcXVlcnkgaWYgYSBzaW5nbGUgbG9jYWwgaXMg
bGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZwogICAg
IC8vIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgaWYgeW91IHdpbGwgb25seSBxdWVyeSBvbmUgbG9j
YWwuIEJ1dCwgaWYgeW91IHdhbnQgdG8ga25vdyBhbGwgb2YgdGhlCiAgICAgLy8gbG9jYWxzIGxp
dmUsIHRoZW4gY2FsbGluZyB0aGlzIGZvciBlYWNoIGxvY2FsIGlzIG11Y2ggc2xvd2VyIHRoYW4g
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoKS4KLSAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVh
bFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFu
ZCwgQ29kZU9yaWdpbik7CiAgICAgCi0gICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24t
YXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2
ZSB5b3UKKyAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMg
YW5kIHRtcHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQog
ICAgIC8vIGFueSBhcmd1bWVudHMgYmVjYXVzZSB0aG9zZSBhcmUgYWxsIHByZXN1bWVkIGxpdmUu
IFlvdSBjYW4gY2FsbCBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIHRvCiAgICAgLy8gYWxzbyBnZXQg
dGhlIGFyZ3VtZW50cy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNhbGxpbmcgaXNMaXZlSW5C
eXRlY29kZSgpIGZvciBlYWNoIGxvY2FsLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxMb2NhbHNBbmRUbXBz
TGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogICAgIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3Igbm90IHJlZHVuZGFudGx5IHJlcG9y
dGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGluIGNhc2Ugb2YgYSB2YXJhcmdzCiAg
ICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93cyB0aGF0IGFyZ3VtZW50cyBhcmUg
bGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJhcmdzCkBAIC04ODEsNiArODgxLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW3JlbGF0
aXZlTG9jYWxdKQogICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hl
Y2twb2ludCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygp
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5lc3NGb3JDaGVja3Bv
aW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVy
YW5kKFRtcE9wZXJhbmQsIHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC05MDQsOSArOTEyLDkgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIG5vbi1h
cmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgor
ICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIGxvY2FscyBhbmQgdG1wcyBsaXZl
IHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCiAgICAgLy8geW91IHdhbnQgdG8g
Y29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxvY2FscyBmcm9tIHR3byBkaWZmZXJlbnQgQ29kZU9y
aWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwor
ICAgIEJpdFZlY3RvciBsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CiAK
ICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0
aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNDYWxsZXJPcmlnaW4pCiAgICAgewpA
QCAtOTM4LDEyICs5NDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTGl2ZW5lc3NDYWxj
dWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAgICAgfQogICAgIAotICAgIC8vIFRlbGxzIHlvdSBh
bGwgb2YgdGhlIGFyZ3VtZW50cyBhbmQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmln
aW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2
ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVyYW5kcyBsaXZlIGF0IHRoZSBnaXZl
biBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKKyAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxs
TG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3
YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2
b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAgICAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAgICAgIAogICAgICAgICAvLyBSZXBv
cnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBsaXZlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBh
cmd1bWVudC0tOykKQEAgLTExMTQsNiArMTEyMiw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VB
bmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7
CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTExYzQ1YjA1NzQxMjUwZjRkMmFl
YjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhiZTM4NGUzZTc2NTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUoR3JhcGgm
IGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdy
YXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9j
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCi0gICAgLCBtX2Js
b2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIpCiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAppbmRl
eCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcxMjk5Li4xODY1ZTZhMWVmZmMz
ZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBAIC0xNjcsMTMgKzE2NywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0p
OwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAg
QWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBy
ZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5kZXgob3BlcmFuZCkpOwogICAg
IH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpOyB9Ci0gICAgCiAg
ICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRleChpbmRleCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAzZDg0M2NlNThmMjBi
NDExNjMzOWZjZGE5NTg4YWViYTZiN2E4YzJlLi41M2RiOWNkMTRjYWM2YjZlNjY4MmVmZGY0YmE3
OTQ4OTdjYTVkNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMo
KQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dl
bmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9T
UkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAg
ICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAt
OTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKIAogICAgICAg
ICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVBy
b2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdldCA9IGp1bXAoKTsKLSAgICAg
ICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0YXJnZXQs
IG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgICAg
ICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAgICB9CiB9CiAKQEAg
LTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2lj
QmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkgIT0gdmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm9wZXJhbmQoKS5p
c1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAgICAgICAgICAgICAgIGVu
dHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIE9TUkVudHJ5
UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAppbmRleCA2OGNhOThkZjZmNWM0YjdiNjM3MmNjMTU4MThlYzI1NzI4MmY4OWQ5Li41MGYx
ZDg5M2RhMzAyMTAyYjk1ZTc4YWM2MDQzOWQ4NjIzNmYzY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGUp
CiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkp
LCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgIH0KIAogICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3
OGExMTcxY2VhZDBmOTNlMDhhYzI1Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFm
NDJhNzA4YTFhMDQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBA
IC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1
bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlk
Rmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwg
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFu
dCB0byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxp
dmVuZXNzIHdyb25nLAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxz
ZSBmb3IgYSBGbHVzaCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgog
ICAgICAgICBhdXRvIGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayog
YmxvY2ssIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxz
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxv
Y2stPmF0KGkpLT5sb2NhbCgpID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFu
ZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsx
MTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxv
Y2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhh
bmRsZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZh
c3RCaXRWZWN0b3IgbGl2ZUF0Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVz
aXplKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsK
KyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBj
YWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47
CkBAIC0xMzMsMTEgKzEzMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAg
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZv
KiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFy
QWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsK
IAogICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJ
bmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgp
XSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxs
RnJhbWUpLCBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFu
ZGxlcjsKQEAgLTE1NiwxMiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBj
YWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlh
YmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
TG9jYWxzKCksIG51bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEq
PiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbCwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5v
ZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9w
ZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8
IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5k
KSk7CiAKQEAgLTE3OCw2ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKTsgbG9jYWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChsb2NhbCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAg
PCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAg
ICAgICAgICBmbHVzaChPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1
c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAg
ICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09
IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVy
YW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBv
cGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3Bl
cmFuZCkpOwogCiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpA
QCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVu
dEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkg
KzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFu
ZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAg
ICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlz
Q29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLmxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2
YTBmZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcApAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZp
bGwoRXBvY2goKSk7CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAg
ICAgICAgICBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcp
IHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewotICAgICAgICAgICAg
ICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKTsKKyAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGlu
dFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9j
YWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBv
Y2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBF
cG9jaCgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSkgPSBFcG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwx
NSArMTE2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAo
T3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVu
IGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdl
IG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoISFtX3N0YXRlLm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
IW1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUs
ICI6ICIsIHJlZywgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJh
bmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJy
ZW50RXBvY2g7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2Fh
MmU2NTVmNTI1MWY5NmY0MDRlMzNiNDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0
NzBjNzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1
MCwxMyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAg
IFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1h
dCkKLSAgICAgICAgOiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBv
cGVyYW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQog
ICAgICAgICAsIGZvcm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBtYWNoaW5lTG9jYWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYg
KzkwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9m
Qm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CkBAIC05MjMsOSArOTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgp
KSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6Cisg
ICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7
CisgICAgICAgICAgICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CkBAIC05NzMsOSArOTc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9v
cEluZm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewot
ICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJl
dHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxp
bmtlZE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBAIC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwo
KQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCho
YXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJ
bmZvLmFzPGludDMyX3Q+KCkpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkp
OworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+
KCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUw
LDcgKzEzNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBG
b3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3Ao
KSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAg
IAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYw
YmYwNmFjMjRjMWQ0Li5lM2U5YzMyZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBc
CiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0
byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNr
LCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAog
ICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9y
d2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVj
dCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmNwcAppbmRleCAzMjgwZjg3YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi5k
MTBhMjA3MDRiMDE5ZDdlODc3YWNiMjk2MzI2YmE4OTcwMGMxM2ZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgp
CiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAg
LTc1LDggKzczLDggQEAgcHVibGljOgogICAgICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAg
IGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIp
OworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAgICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hh
bmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBB
dmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWls
ID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewog
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBi
bG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2Nr
KTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1
Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5p
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nv
cik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChz
dWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0
eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOwor
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNl
dEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZs
aWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1
c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFp
bGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRh
dGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZI
aW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNl
dE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQy
LDE1ICsyNDAsMTggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1
dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
ICAgICAKKworICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9
CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0g
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNo
aW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5jb3VudCkgPSBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFj
aGluZUNvdW50KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07
KSB7Ci0gICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEt
Pm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCAr
IGkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3Mywy
MCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9k
ZSogbm9kZSkKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAg
ICAgICAgICAgIC8vIFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJn
dW1lbnQgY291bnQuCiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0g
ICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAg
ICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFw
LnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3Vt
ZW50Q291bnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0g
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFw
LnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2Fs
bGVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1l
bnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkp
KTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlv
bihBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1
NzFhNWIwYzdjOTRiODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZh
ZDg5ZDkzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAg
LTMyMiw3ICszMjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcp
IEZpeCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAot
ICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jaykgPSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4o
cGl2b3QgLSAoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAg
IAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAg
T1NSIHJldHVybmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICsz
ODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHBy
ZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24g
PSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAg
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpT
VmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24t
PmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXgg
PSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHBy
b2ZpbGUpIHsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmls
ZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0
YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQp
LmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYz
ZGZkYmVhODQ1MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3
ZTFhZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91
c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAg
ICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9j
YWwoKS5vZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhp
bnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkp
LAogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2
OWI0MWNhOGY5OGYzMDhiM2E0YzkzM2JhOTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZl
MzJkNjc3NDIwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVz
aW5nIENQVVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpD
b250ZXh0OwotdXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4
dCYsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNW
YWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewot
ICAgIGlmIChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0g
ICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNl
KCkpICsgc291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAg
IGlmIChzb3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNl
LnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50
MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0Zf
Q0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJz
OjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAg
QVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2Fs
bGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3Rl
clNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFj
a1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdp
c3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5
c2ljYWxTdGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRS
ZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5h
bCBzdGFjaywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSBy
ZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGlu
c3RlYWQgb2YKLSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAg
ICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAg
ICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1l
W2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0
aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCi17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVl
U2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNl
dCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9
IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChl
bnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNv
bnRleHQuZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50
cnkucmVnKCkuZ3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVy
czo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCku
Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8
Vk0qPigpOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0
IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0g
ICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAg
ICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlG
cmFtZSk7Ci0gICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRf
Y2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZl
cik7Ci0KLSAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3Rv
cmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBzaXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVS
ZWdpc3Rlcik7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAg
Y29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRy
T2Zmc2V0XTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
IGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNh
bGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBm
bG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAg
IH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRl
eHQuc3RhY2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJl
Y29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50
cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0
ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxs
Q2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENh
bGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygp
LmlzR1BSKCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnku
b2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsK
LSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNl
dChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lz
dGVyPihlbnRyeS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGlu
ZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0K
LQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29u
dGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFs
UmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUo
Y29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwot
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2Nr
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3Rl
cnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJT
ZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVz
LT5zaXplKCk7Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVy
QXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2
ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgdWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2Fs
bGVkVmlhVGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQot
ICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50
cnkub2Zmc2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFs
dWUgPSBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0
KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwg
c2F2ZWRSZWdpc3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NB
TExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZl
c0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2
ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0
YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Q29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRl
eHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8g
TlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNy
ZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4
dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6
bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpIC0gMSkpOwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRz
OjpjcmVhdGUoCi0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RB
cmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNl
dENhbGxlZSh2bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8
UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNl
dEluZGV4UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhp
dChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENv
dW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQo
dm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAg
ICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQg
LSAxOwotICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVh
dGVFbXB0eSgKLSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0
dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQu
ZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2so
KSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENv
bnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJ
VENvZGUsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBG
cmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFw
PE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFu
dG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9w
ZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQK
LSAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1Ro
YXRXZXJlTm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlm
aWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0KLSAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5l
Q2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7
Ci0KLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxs
ZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292
ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3Vu
dDsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMy
X3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9m
ZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCog
YXJndW1lbnRzT2JqZWN0OwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
Ci0gICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAg
ICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChj
b250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRX
ZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25l
ZEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUs
IGNhbGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoYXJndW1lbnRzT2JqZWN0KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBp
cyBhIGxpc3Qgb2YgZXh0cmEgaW5pdGlhbGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGlu
IG9yZGVyCi0vLyBvZiBtb3N0IGxpa2VseSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxl
YXN0IGxpa2VseSBuZWVkZWQgKGhpZ2hlciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5p
dGlhbGl6YXRpb24gaW5jbHVkZXMgdGhlIHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1
c2Ugb2YgdGhlCi0vLyBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51
bSBjbGFzcyBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3Vs
YXRpb25SZWNvdmVyeSwKLSAgICBWYWx1ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxl
VXBkYXRlLAotICAgIE90aGVyCi19OwotCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxG
cmFtZS0+ZGVwcmVjYXRlZFZNKCkgPT0gJnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNw
dTsKLQotICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91
dCB0byBleGl0IG9wdGltaXplZCBjb2RlLiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGlt
aXplZAotICAgICAgICAvLyBjb2RlIHJ1bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAg
ICB2bS5oZWFwLnNldEV4cGVjdERvZXNHQyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2Fs
bEZyYW1lRm9yQ2F0Y2gpIHsKLSAgICAgICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0
Y2g7Ci0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7Ci0KLSAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdD
IHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5
IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwot
Ci0gICAgdWludDMyX3QgZXhpdEluZGV4ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklU
Q29kZSogZGZnSklUQ29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JF
eGl0JiBleGl0ID0gZGZnSklUQ29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJU
KCF2bS5jYWxsRnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsK
LSAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8
fCAhZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQu
ZXhpdFN0YXRlKSkgewotICAgICAgICBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAg
ICAgIC8vIFdlIG9ubHkgbmVlZCB0byBleGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBP
U1JFeGl0IHJlY29yZC4gVGhlIGNvbXB1dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBj
YWNoZWQgaW4gdGhlIE9TUkV4aXRTdGF0ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0
aGUKLSAgICAgICAgLy8gZXhpdCByYW1wIGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5
cGUoKSkpOwotCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0
cjsKLSAgICAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAg
ICAgICAgICByZWNvdmVyeSA9ICZkZmdKSVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQu
bV9yZWNvdmVyeUluZGV4XTsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9
IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJ
S0VMWShleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBh
cnJheVByb2ZpbGUgPSBudWxscHRyOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJj
ZSkgewotICAgICAgICAgICAgaWYgKGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAg
ICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0g
QmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmls
ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5
UHJvZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0g
c3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2
ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbnQzMl90IGFjdGl2ZVRocmVzaG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3Rl
ZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1V
cCgpKTsKLSAgICAgICAgZG91YmxlIGFkanVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2Fn
ZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9JbnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVC
bG9jayk7Ci0gICAgICAgIEFTU0VSVChhZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBh
ZGp1c3RlZFRocmVzaG9sZCA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0
VG9MTEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rOwotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhp
dFRvTExJbnQpIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRy
PEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9y
RXhpdC0+aml0Q29kZU1hcCgpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAg
ICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5k
ZWZpbmVkT3BlcmFuZFNwYW4+IHVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklU
Q29kZS0+dmFyaWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9j
b2RlT3JpZ2luLCBkZmdKSVRDb2RlLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBv
cGVyYW5kcywgJnVuZGVmaW5lZE9wZXJhbmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFj
a1BvaW50ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9m
KFJlZ2lzdGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JF
eGl0U3RhdGUoZXhpdCwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdU
Rk1vdmUodW5kZWZpbmVkT3BlcmFuZFNwYW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNl
dCwgYWN0aXZlVGhyZXNob2xkLCBhZGp1c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQ
cm9maWxlLCBleGl0VG9MTEludCkpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21w
aWxhdGlvbikpIHsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAq
dm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyOwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29t
cGlsYXRpb24uZ2V0KCk7Ci0KLSAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxl
ckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5k
ZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29k
ZU9yaWdpbiksCi0gICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9m
aWxlckV4aXQgPSBwcm9maWxlckV4aXQ7Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6T3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPSBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZH
T1NSRXhpdCgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVz
LCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4
aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAg
ICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2Nr
KS5kYXRhKCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1w
Q29udGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NS
RXhpdFN0YXRlJiBleGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5
cGUoKSkpOwotCi0gICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0
YXRlLm9wZXJhbmRzOwotICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5l
ZE9wZXJhbmRTcGFucyA9IGV4aXRTdGF0ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBj
b250ZXh0LnNwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9p
bnRlck9mZnNldDsKLQotICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3
aGlsZSBsb29wIGlzIHNvIHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUu
Ci0gICAgZG8gewotICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRp
Y19jYXN0PEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCk7Ci0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292
ZXJ5Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJz
dCBiZWNhdXNlIGFycmF5IHByb2ZpbGluZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8v
IG1heSByZWx5IG9uIGEgdmFsdWUgdGhhdCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vz
bid0IG1lYW4gdGhhdCBpdCBpcyBsaWtlbHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5
IHZhbHVlLiBTbywgd2UnbGwgZGVjb3JhdGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1
bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBp
ZiAoVU5MSUtFTFkocmVjb3ZlcnkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50
eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAg
ICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5
LT5kZXN0KCkpIC0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRl
c3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
IHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBj
cHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8
aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRl
c3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
IHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAg
ICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3Zl
cnktPmRlc3QoKSkgLSByZWNvdmVyeS0+aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAz
MikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1
ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVy
eS0+ZGVzdCgpKSBeIEpTVmFsdWU6OlZhbHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRp
b24gbGV2ZWw6IFZhbHVlUHJvZmlsZVVwZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFs
dWU7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBw
cm9maWxlZFZhbHVlID0ganNWYWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAg
ICAgICAgICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0
Lm1fdmFsdWVQcm9maWxlKQotICAgICAgICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJv
ZmlsZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24g
bGV2ZWw6IEFycmF5UHJvZmlsZVVwZGF0ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpbGUgPSBleGl0U3RhdGUuYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
ISFleGl0Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQg
PT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUs
IGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IHByb2ZpbGVkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAg
ICBib29sIGRvUHJvZmlsZSA9ICFpbnN0cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkubWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9k
ZU1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAg
aWYgKGRvUHJvZmlsZSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
cHJvZmlsZWRWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBh
cnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAg
ICBhcnJheVByb2ZpbGUtPm9ic2VydmVBcnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUo
c3RydWN0dXJlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJv
ZmlsZVVwZGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJh
IGluaXRpbGl6YXRpb24gbGV2ZWw6IE90aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1f
a2luZCA9PSBHZW5lcmljVW53aW5kKSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBh
cyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNV
bndpbmQoKS4KLSAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJh
bWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NF
UlQoY29udGV4dC5mcCgpID09IHZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChleGl0U3RhdGUucHJvZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRl
LnByb2ZpbGVyRXhpdC0+aW5jQ291bnQoKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6cHJpbnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0
LCB2bS5vc3JFeGl0SW5kZXgsIGV4aXQpOwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQg
ZXh0cmEgaW5pdGlhbGl6YXRpb24uCi0KLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4
dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoIShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4Nykp
OwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NF
UlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1Zh
bHVlOjpOb3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBj
b252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8g
Tm90ZTogd2UgbmVlZCB0byByZWNvdmVyIHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBz
YXZlIHJlZ2lzdGVycyBiZWxvdwotICAgIC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5
IG9uIHZhbHVlcyBpbiBzb21lIG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBj
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2Vs
aW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAg
c2l6ZV90IG51bWJlck9mT3BlcmFuZHMgPSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51
bVVuZGVmaW5lZE9wZXJhbmRTcGFucyA9IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0K
LSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRV
bmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRl
ZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1
bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsK
LQotICAgIEpTVmFsdWUgdW5kZWZpbmVkID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVf
dCBzcGFuSW5kZXggPSAwOyBzcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsr
c3BhbkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNb
c3BhbkluZGV4XTsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0g
ICAgICAgIGludCBsYXN0T2Zmc2V0ID0gZmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0
ZXJzOwotCi0gICAgICAgIGZvciAoaW50IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBs
YXN0T2Zmc2V0OyArK29mZnNldCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0
LCB1bmRlZmluZWQpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBudW1iZXJPZk9wZXJhbmRzOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAg
IGlmIChVTkxJS0VMWShpbmRleCA9PSBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAg
ICAgICAgICAgaW5kZXggKz0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFu
SW5kZXgrK10ubnVtYmVyT2ZSZWdpc3RlcnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRl
ZmluZWRTcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAg
ICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0
VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9j
YWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zm
c2V0KCk7Ci0KLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAg
ICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4o
cmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwgY3B1LmdwcjxKU1ZhbHVlPihyZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0jZWxzZQotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigp
KSwgY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+
KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBD
ZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNh
blVuc2FmZVVuYm94ZWRDZWxsKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNv
dmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2Fz
ZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8
aW50MzJfdD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90
PihyZWNvdmVyeS5ncHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIo
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQ
UjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3By
PGludDY0X3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0g
ICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIHB1cmlmeU5hTihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkRG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCByZWNvdmVyeS5jb25zdGFudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNl
IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0
IGRvIHRoaXMsIHlldC4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNh
dmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJl
c3RvcmVDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVT
YXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGNwdS5ncHIoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8
SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJ
bmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVy
PihKU1ZhbHVlOjpOb3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0
aW9uSGFuZGxlcigpKQotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBz
dGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUg
dGhhdCBhcmd1bWVudHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVy
IHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25s
eQotICAgIC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdl
IG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAv
LyBOb3RlIHRoYXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWln
aHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNh
bGwgZnJhbWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0K
LSAgICBERkc6OmVtaXRSZXN0b3JlQXJndW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklU
Q29kZSwgb3BlcmFuZHMpOwotCi0gICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBj
b3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFs
bCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhl
IGV4ZWN1dGUKLSAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBl
cmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwg
ZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdz
Ci0gICAgLy8gT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgotICAgIC8vCi0gICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0
IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVu
dHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAg
IC8vICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChj
KSBiZWxvdykuCi0gICAgLy8KLSAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2Fs
bCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBj
b2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwot
ICAgIC8vICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUg
ZXhpdGVkLgotICAgIC8vCi0gICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0
IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5j
ZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAg
ICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBP
U1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0g
ICAgLy8gICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24g
Z2V0dGluZyB0cmlnZ2VyZWQuCi0gICAgLy8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxp
a2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgot
ICAgIC8vIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5
IHRoZSBvcHBvcnR1bml0eSBmb3IKLSAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0g
T1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1
ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdp
bGwgbmV2ZXIKLSAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBu
ZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYg
YSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAg
Ly8gZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFr
ZSBjYXJlIG9mIChkKSwKLSAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291
bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlm
IHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAg
IC8vIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNj
ZXNzIHJhdGUpLCBhbmQgaWYKLSAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2gg
bnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8g
MDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KLQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVw
ZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9
PSBDb2RlQmxvY2s6Ok9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJp
Z2dlclJlb3B0aW1pemF0aW9uTm93KGJhc2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0
KTsKLQotICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxv
Y2ssIGV4aXQpOwotICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJs
b2NrLCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNl
bGluZUNvZGVCbG9jaywgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1
ID0gY29udGV4dC5jcHU7Ci0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2so
KSk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFj
ayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NSIGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxp
bmVkIHRhaWwgY2FsbHMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzUxMQotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1v
c3RCYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxD
b2RlQmxvY2sqPihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrKTsKLQotICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChj
b2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4t
PmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJD
YWxsS2luZDsKLSAgICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFt
ZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAg
ICAgIHZvaWQqIGNhbGxlckZyYW1lID0gY3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJ
c0xMSW50ID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiBy
ZXR1cm5QQyA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsK
LSNpZiBDUFUoQVJNNjRFKQotICAgICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1
aW50OF90Kj4oKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQq
IG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVy
blBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRh
Z0NvZGVQdHIocmV0dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1l
LnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7
Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0g
dHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdl
dCA9IGNhbGxlclJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNv
ZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAg
ICAgaWYgKHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNh
bGxlckZyYW1lID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZy
YW1lKCktPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShB
Uk02NEUpCi0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigp
ICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSB0YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2Fz
dDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZv
aWQqPihpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxv
Y2spOwotCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVl
IHNhdmUgcmVnaXN0ZXJzLgotICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0
YWlsIGNhbGwgdGhhdCB3aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdl
IG5lZWQgdG8KLSAgICAgICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyBy
ZWdpc3RlcnMgYWxyZWFkeSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUu
Ci0gICAgICAgIHNhdmVPckNvcHlDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVC
bG9jaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1
ZUNhbGxlcik7Ci0KLSAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGlu
ZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNh
dmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3Rl
cnM6Om1ldGFkYXRhVGFibGVHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
Pm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1l
LnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJU
KGNhbGxlckZyYW1lKTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlckZyYW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQz
Ml90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1
ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZB
TFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVp
bnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8
dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIFRhZ09mZnNldCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6
OkNlbGxUYWcpKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlQ29uc3RhbnQoKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5n
IHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAg
ICB9Ci0KLSAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4g
aWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5w
dHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwot
I2VuZGlmCi0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JF
eGl0JiBleGl0KQotewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3Rh
dGUuZ2V0KCk7Ci0KLSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5n
IGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0
ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2Nr
KTsKLQotICAgIC8vIFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVz
dCB0aGUgY3VycmVudCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtu
b3cgd2hpY2ggaW5saW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAg
ICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgp
OyBiKCk7IH0iLCBpZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQg
ZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgot
ICAgIC8vIEZJWE1FOiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJl
ciB3aGljaCBDb2RlQmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElu
bGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lcykgewotICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
IDogKmlubGluZUNhbGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihp
bmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBh
dXRvKiBleGl0SW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKCk7Ci0gICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAo
KSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0g
ZXhpdFN0YXRlLT5qdW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1
bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAg
ICAgICB2bS5jYWxsRnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAg
ICB9Ci0KLSAgICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0K
LSAgICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0g
KmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigp
OwotCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVH
UFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFU
YWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6
UmVnaXN0ZXJzOjpwYkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JF
eGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0
LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pigm
Y3VycmVudEluc3RydWN0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0
aW9uSGFuZGxlcigpKQotICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRh
Z0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oanVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBy
aW50T1NSRXhpdChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0
IE9TUkV4aXQmIGV4aXQpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZw
PENhbGxGcmFtZSo+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7Ci0gICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
Ci0KLSAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwot
ICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZz
ZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFs
dGVybmF0aXZlKSB7Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50
ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIs
IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdl
J3ZlIGJlZW4gamV0dGlzb25lZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0g
IiwgY29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAg
R1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5h
bWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAg
fQotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBl
eGl0OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0g
ICAgICAgIHVpbnQ2NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAg
ICAgZG91YmxlIHZhbHVlID0gY29udGV4dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVs
bHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAg
ICBkYXRhTG9nKCJcbiIpOwotfQotCi0vLyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6
Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGpp
dCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBP
U1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2Vt
YW50aWMsIGppdC0+bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShq
c1ZhbHVlU291cmNlKQpAQCAtOTU4LDE1ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50
ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2
b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYg
dm0sIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNo
TWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBw
aGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmll
ZElELCBWaXJ0dWFsUmVnaXN0ZXI+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMg
cGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGlu
ZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGlu
dCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBp
ZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkCiAgICAgICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAg
ICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAg
TWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBh
bHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBh
bHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9p
ZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZt
LCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRy
KAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQg
T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwg
Y29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAg
ICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgs
NyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0
LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkp
OwogCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsK
KyAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgIH0KIH0KIApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NS
RXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhp
dCYgZXhpdCwgY29uc3QKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRv
cEVudHJ5RnJhbWUpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29u
dGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZG4ndCB1c2UgYSBwcm9iZSBidXQgZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0
cyBpcyB0cmlja3kgb3RoZXJ3aXNlLi4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2
YWx1ZXMob3BlcmFuZHMubnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9wZXJhbmRzLm51bWJlck9mVG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNb
aV0gPSBvcGVyYW5kcy50bXAoaSk7CisKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAg
ICBhdXRvKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAg
ICAgICBqaXQucHJvYmUoWz0sIHZhbHVlcyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250
ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2Fs
bEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgewor
ICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
PigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50
VG1wczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVz
W2kgKyB0bXBPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGRvIHdoYXQgdGhlIEZUTCBkb2VzIGFuZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGlu
dG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNv
ZGUocmVjb3ZlcnkuY29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAg
ICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1w
c1tpXSA9IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBT
Y3JhdGNoW2kgKyB0bXBPZmZzZXRdKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94
ZWRDZWxsSW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNT
dGFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
ZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRy
LT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdp
bjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZy
YW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2Rl
T3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlu
bGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
OworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlu
bGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAg
ICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zm
c2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNh
bGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFj
b2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsg
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRl
KGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAg
IC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMg
aW50byB0aGUgc3RhY2suCiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3Bl
cmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
b3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChy
ZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNl
bGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFz
ZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQor
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewogICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5kZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1
NGYxYTA0ZWI4ZS4uOWU5YmNlYTQ4MWMxZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBz
dHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAg
c3RhdGljIHZvaWQgZXhlY3V0ZU9TUkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZj
NTMzMjc4NGYwYTI5MmE0OWNiZTFiODJhNTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJj
M2MxMjQzNWRiOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFz
ZS5oCkBAIC03MCw2ICs3MCwxMSBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1
cm4gbV9raW5kID09IEdlbmVyaWNVbndpbmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzRXhpdGluZ1RvQ2hlY2twb2ludEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0K
KwogcHJvdGVjdGVkOgogICAgIHZvaWQgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUo
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKaW5kZXggMmZmM2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRk
NTExNS4uYWNmNTFkMGI0ZmE1YzJmMTEyNGM1YWM3OTU5NTUzOWU4MTBmOTEzOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcApAQCAtMjksMTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJCeXRlY29kZXMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgog
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVu
a3MuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
SW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2
LDkgQEAgdm9pZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciwgQnl0ZWNvZGVJbmRleCBjYWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0
aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxs
Qnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQp
OworCiAgICAgdm9pZCoganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBA
IC0yMzgsNyArMjQ0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBp
bmxpbmVkIHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQu
YmFzZWxpbmVDb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jaykpOworICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2Rl
T3JpZ2luOwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9y
aWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7
CkBAIC0zMDUsMzMgKzMxMSwzNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQ
UiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2RlQmxv
Y2stPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJp
dHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBq
aXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQp
IC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxs
ZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNv
ZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xv
c3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBk
aXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAvLyBEb24ndCBu
ZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5l
IHRhaWwgY2FsbHMKICAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXhGb3JF
eGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKICNlbHNlCi0gICAgICAg
IGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwot
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUlu
ZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1
Y3Rpb25zKGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlv
bikpLmJpdHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAg
ICAgfQogfQogCkBAIC0zODIsMTEgKzM4OSwxMiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlw
ZSgpKSk7CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+IGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9MTElu
dCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRvTExJ
bnQpIHsKICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpOwogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0
aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgp
LnB0cigpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVz
dGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVz
dGluYXRpb24gPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSA/IENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oJmNoZWNrcG9pbnRfb3NyX2V4aXRf
ZW50cnlwb2ludCkpIDogTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudElu
c3RydWN0aW9uKTsKIAogICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewog
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50
SW5zdHJ1Y3Rpb24pLCBHUFJJbmZvOjpyZWdUMik7CkBAIC00MDIsNyArNDEwLDE0IEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9T
UkV4aXRCYXNlJiBleGl0KQogI2VuZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlv
bi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0
aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXgg
aW5kZXhGb3JDaGVja3BvaW50UmV0dXJuID0gY29kZUJsb2NrRm9yRXhpdC0+Ynl0ZWNvZGVJbmRl
eEZvckV4aXQoZXhpdEluZGV4KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0
clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQo
aW5kZXhGb3JDaGVja3BvaW50UmV0dXJuKTsKKyAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3Bv
aW50KCkpIHsKKyAgICAgICAgICAgIGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQgPSBjb2RlTG9jYXRp
b247CisgICAgICAgICAgICBjb2RlTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9p
bnQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAg
ICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXggMjE2YzVi
YWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRiMDNkYzE5OS4uN2RhNmFmZDVjMjIxYzk3ZmY5M2Y0
MDBjYjM0OTQ0NTRkNGQ0OTI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0yMTA3
LDcgKzIxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVhcC5mb2xsb3coYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVy
YW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggZjM5YzE0YjlmMGE0NDg3ODlk
NzcyZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0YmY1ZWE2MGE2ZTY2NTIwZmUw
NTE0NGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCkBAIC00NCw3ICs0
NCw3IEBAIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJbnRlZ3JhbFR5cGUg
dmFsdWUpCiAgICAgICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSB7
IH0KICAgICBleHBsaWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIDog
bV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3Ry
dWN0dXJlKSkpIHsgfQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQgb3ApIDogbV92YWx1
ZShvcC5hc0JpdHMoKSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBleHBs
aWNpdCBPcEluZm8oVCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKaW5kZXggNTBjYTAwYjAwYjk0ODhhMTAzMjg3MjYyOGE5ZTJlZTg3M2YyYzM3OS4u
Y2YwOWQ4NzM5NzRhODU2MzNhMmVkYjY4Nzc2OTJkYjEwNzY4NDA3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTQ2LDE1ICsyOTQ2LDE2IEBA
IGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25M
b2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGZpcnN0RWxl
bWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNl
dCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogeworICAgIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZhcmFyZ3MoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0KSwg
YXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0
LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50KSksIGFy
Z3VtZW50cywgb2Zmc2V0LCBsZW5ndGggLSAxKTsKICAgICAKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgIGZvciAodWludDMy
X3QgaSA9IGxlbmd0aCAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CiB9CiAKIGRvdWJs
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2RiMzZhYjVhMGM2YWRj
Mi4uMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVlMDliYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNw
cApAQCAtNDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBu
YW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWwg
ewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQogY2xhc3MgUGhh
bnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21JbnNlcnRpb25QaGFz
ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGluc2VydGlv
biIpCkBAIC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0TG9jYWxzIGV4ZWN1
dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2VydCB0b28gZmV3
IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgu
bV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAKLSAgICAgICAgaWYg
KERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUGhhbnRvbSBp
bnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBA
IC03Miw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAgIGhhbmRsZUJsb2Nr
KGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAg
ZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAg
IG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIgKzEwMCwyMiBAQCBwcml2YXRl
OgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJ
bmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29u
c2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBu
dWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5
OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAgICAgIG1f
dmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAg
IG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MTM0LDM4ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxk
cmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlVwZGF0aW5n
IGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7
CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOworICAgICAgICAg
ICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxs
ZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIHJlZywgIlxuIik7Cisg
ICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIEtpbGxlZCBv
cGVyYW5kOiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxl
ZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeUtpbGxl
ZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVy
YW5kLCAiIGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJlZyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5v
ZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAgICAgICAgICAgICBpZiAoIWtp
bGxlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAg
ICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVkIGluIHRoaXMgYmxvY2suIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOworICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQgYSBQaGFudG9tIGlm
IHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAgICAgICAgICAgICAg
ICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQuCi0gICAgICAgICAg
ICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKQorICAgICAgICAg
ICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9jaCkgeworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFu
ZCwgIiBoYXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR1Bo
YW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIEluc2VydGluZyBQaGFu
dG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsCisg
ICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9k
ZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJ
bmRleCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZXhh
Y3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRoYXQgd2UgaGF2ZSB0
bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAgICAgICAg
ICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3OSwxNCArMTgwLDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUt
PmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFu
ZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9m
IGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBsaXZlIHVudGlsIHRoZSBT
ZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3BlcmFu
ZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBsb2NhbDsKKyAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2FsKSA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUs
IGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0Mjk4ODZlMDc4ZjBhZmNjLi5mNWYw
OTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApAQCAtNTMs
NyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3JlYWQsIFZp
cnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAgICAgICAgICAgIGNh
bGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hh
cmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhlYXAua2luZCgp
ID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5wYXlsb2FkKCku
aXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9uYWxX
cml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAg
ICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIGhlYXAub3BlcmFu
ZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTg3LDEy
ICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2Nh
dGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAgCi0gICAgICAgIG1fZGVmKFZp
cnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUp
OworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFuZCgpLCBub2RlKTsKICAgICB9
CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9p
ZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9j
YWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50b0xvY2FsKCkpID49IG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKQogICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFh
MzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMz
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8
SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZh
bHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAg
ICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAg
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZjYmZlY2M4NGZlMTk1ODQyOGEwY2Y4N2Nk
NTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5YmU2ZDMxOTdjMTNmMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBF
eGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBQdXREeW5h
bWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRk
ODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBlN2VkZjYzZjA3Zjc4ZDgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQ
dXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQdXRTdGFja1NpbmtpbmdQaGFz
ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRTdGFjayBzaW5raW5n
IikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUgc3RhY2suIEl0J3Mg
bm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9yIG5vdC4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5NgogICAgICAgICAK
LSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsK
KyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9y
ZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAg
ICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAgICAgICBCbG9ja01hcDxPcGVy
YW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAg
ICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2td
ID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7
Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAg
IGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9
IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgZmFs
c2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQ7CkBAIC0xMDcs
MzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2
ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRz
OwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+
IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gd3JpdGVzOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIg
PSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9k
ZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUt
Pm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBvcCA9PSBWYXJhcmdz
TGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZvcndhcmRWYXJhcmdzIHx8IG9w
ID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXMuYXBwZW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHBy
ZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0ZXMpCisgICAgICAgICAgICAg
ICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBP
cGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2Nr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJy
ZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsyNTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNDb25mbGlj
dGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhaXND
b25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQdXRTdGFjaykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0aW5nIGZsdXNoIGZvcm1hdCBm
b3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFjaykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEgUHV0U3RhY2sgcGFzdCBh
IEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5k
bGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBu
b2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAg
ICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHdy
aXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFyZ3NMZW5ndGgg
fHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJh
cmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJXcml0
aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1
c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGRl
ZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywxMyArMzEzLDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgVmlydHVh
bFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIgYXQgIiwgcG9pbnRlckR1
bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtp
XSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZlcnJlZC5vcGVyYW5kRm9ySW5k
ZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNj
ZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
cmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ldKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGRlZmVycmVk
QXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9WYXJpYWJs
ZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7
CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgCisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CiAgICAgICAgICAg
ICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAgICAgICAg
ICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsK
QEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0
YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRkKG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
PmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJh
bmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAgICAgICAg
ICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFu
ZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywg
bm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc3NhQ2Fs
Y3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewotICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUt
PmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVy
YW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwgb3BlcmFuZCwgIiBh
dCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBo
aSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkpOwpAQCAtNDExLDcgKzQx
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGluZy5vcGVy
YW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZChtYXBwaW5n
Lm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFyaWFibGUub3Bl
cmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9
IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKQEAgLTQy
MSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQo
b3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGlu
ZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBwaW5nLCAiXG4iKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURl
ZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52YXJpYWJs
ZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRv
T3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIs
IHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtNDM3LDE1ICs0
MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFti
bG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChERkdQdXRT
dGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2Rl
LCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOiB7
CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBk
YXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJh
bmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5nICIsIG9w
ZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIsIG5vZGUsICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDUzLDE2ICs0
NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBGbHVzaEZv
cm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVy
YW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVy
YW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVy
YW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBkZWZlcnJhbC4gTm8gZGVm
ZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0
aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdoYXQgaXMgc3RvcmVkIGlu
IHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZSBHZXRT
dGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2Nh
bCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKGRhdGEt
Pm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcyLDIwICs0NzIsMjAg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0b3JlZCBhbmQgZ2V0IHJp
ZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBkYXRhLT5mb3JtYXQpOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcg
PSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY2FzZSBL
aWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51
bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0Zs
dXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAi
IGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9wZXJhbmQsICIgYXQg
Iiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5n
ID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFk
Rmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0
byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRpdGlvbmFsIHdyaXRlcyB0
byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1ha2VzIHRob3NlIHN0
YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVm
b3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMgd2Ugc2hvdWxkIG5l
dmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNrcyByaWdodCB0byB0
aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+
b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJn
c0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9y
d2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChv
cGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICB9
CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAoU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNz
b3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+
dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVy
YW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBVcHNpbG9uIGZvciAi
LCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAo
c3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQg
Zm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgaXNDb25j
cmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXggNDM2ZTVkMzkx
NGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRmMmMwY2QzOTk4YjE4MWI5ZTk4YmJh
NDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YWNrLCBu
b2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hpbGROb2RlKTsKQEAg
LTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+aW5kZXgo
KV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gUHJ1bmUgYnkgbGl2ZW5l
c3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBpbGUgdGltZXMuCi0g
ICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpOwog
ICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVudCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
Rm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhpRGVmLT52YXJp
YWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+dmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgTW92SGludCwgYmxvY2st
PmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksCi0gICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVs
dEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgp
KSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4aXRPSykKQEAgLTMzNyw3ICszMzcs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CiAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gZmFsc2U7IC8v
IEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0YWNrKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm9w
ZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5sb2Nh
bCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIC0+
ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2Fy
Z3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBub2Rl
OworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzcxLDggKzM3
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAiLCBub2Rl
LCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAi
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlh
YmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM4NSw3ICszODUsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQyNSwxMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAgICAgICAgICAgICAgICAgICAgIFVzZUtp
bmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KTsKIAotICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZh
cmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJs
ZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2ls
b24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9k
ZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4
IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2EzMTY5MTkuLjlhMzJkNjdhNTg3NDI5
NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIyLDcgQEAgYm9vbCBzYWZlVG9FeGVj
dXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBi
b29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKaW5kZXggYjVhMTFjNTFlZjEwY2Y3YTZiMjMxNzJkMmQ4YmY4ZjY3NWUwNTJiZC4uNDFl
OWM0YjlhY2Q0OTc5YzQyMDFjNmZkYTEwMWZlZThkOTFiOTlmNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE3NzUsNyArMTc3NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAg
Tm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NSQmlydGgo
Y2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6
bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAg
bV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQo
Y2hpbGQpLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpiYWlsKEFib3J0UmVhc29uIHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUuYmVnaW5C
YXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsK
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAg
ICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3Jk
IGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgp
KQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9j
YWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1c2hGb3Jt
YXQoKSk7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICBWYXJp
YWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCksCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAotICAgICAg
ICAgICAgICAgIGZvcm1hdCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsICFvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRv
QXJndW1lbnQoKSA+PSAwKTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1h
dCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkxOSw3ICsx
OTE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAg
ICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3Rlcigp
OworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAKICAgICAg
ICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1NCArNzMz
OSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUq
IG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1Jl
Z3M7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdz
KCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2Rl
LT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFs
dWVSZWdzKCk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdz
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
Z3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
IAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJn
dW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOwotICAgIH0KKyAgICBHUFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdUaGlzKHRo
aXMpOworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3VudEluY2x1
ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAot
ICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZl
Y3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBmcm9tIHRo
ZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25n
IGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1
dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3Zh
cmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhp
c0dQUik7CiAKLSAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAg
SklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFy
Z3VtZW50c1JlZ3MpOworICAgIGludDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwg
bm9kZSk7ICAKK30KIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxk
KCkpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291
bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1Zh
bHVlUmVncygpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJnc092ZXJm
bG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOworICAgICAgICBW
YXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2hUZXN0
MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gz
MigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0gICAgbV9q
aXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2Fk
Rm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBt
X2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5l
U3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5t
YWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgsMTcgKzcz
OTcsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUq
IG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgaWYgKG5v
ZGUtPmNoaWxkMSgpKQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgIGlmIChub2RlLT5hcmd1bWVu
dHNDaGlsZCgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNDaGls
ZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQogICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KCk7CiAKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsKICAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBs
ZW5ndGguZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJn
dW1lbnRDb3VudC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRDb3VudC5n
cHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAgICAgICAK
LSAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBpbmNsdWRl
VGhpcyA9ICovIHRydWUpOworICAgIAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAgICAgICAg
IApAQCAtMTI0NDcsNyArMTI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVDYWxsRnJhbWUo
KSkKICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXI7CiAgICAgZWxzZQotICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0
ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAg
ICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7
CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRS
ZWdpc3RlciksIHJlc3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAppbmRleCBjNjRmOTc4YWRmODVmYmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5Li4wM2Q0ODM1
YmY0YjdhOGRlMDkzOWVmY2ZhMzcwMjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVOZXdSZWdleHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVMb2FkVmFyYXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlv
bihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsK
QEAgLTE2NjksMTUgKzE2NzAsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlT
dG9yYWdlKEdQUlJlZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKAot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNo
aW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywg
VmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcudmly
dHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBw
ZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5lUmVn
LCBmb3JtYXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRhRm9y
bWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX2N1cnJlbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3JkU2V0
TG9jYWwodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0
KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZvJiBn
ZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCmluZGV4IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2ZGJkMGQyYTA1
NmRiODEuLjBhZjNmMTcxODE1NDEwZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cApAQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxl
IGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBi
ZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIsNyAr
MTkxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2Nh
bChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRh
Rm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgyNCw2ICszODI0
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFy
YXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWViNWVhMjZhMzEw
NWRkYjhhZmU3NjYyMTYzMzQ0Li43YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZkYzkzYWM4NmM3
YzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKQEAgLTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2Rl
LT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2
YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90
IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0y
MDA3LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQs
NiArNDQ2NCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJn
c0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxl
TG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2YWM3YTdkMzMz
ZTM5Njc5ZTI2NzU1OTA3NGU0NjRjOWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2MTVmNjA0Mjc1
MjIwNDc3YTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFj
a0xheW91dFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNr
TGF5b3V0UGhhc2UuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdHJl
YXQgYSB2YXJpYWJsZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2VzcyB0
byBpdCAoU2V0TG9jYWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxvY2Fs
KS4KICAgICAgICAgCi0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAgICBPcGVy
YW5kczxib29sPiB1c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3JhcGgoKS5t
X3RtcHMsIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFi
bGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVk
Rml4dXAgPSBmYWxzZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9j
YWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJpYWJs
ZS0+b3BlcmFuZCgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAg
ICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRhLT5j
b3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2Fs
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVz
IG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXNzaWdubWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVh
bFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2Fs
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGlt
aXQ7IGktLTspIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZp
cnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAgICAg
ICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC05Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1
dFN0YWNrOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChzdGFjay0+bG9jYWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJh
bmRzLnNldE9wZXJhbmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA4
LDIxICsxMDcsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigK
KyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgdXNl
ZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwotICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4gYWxsb2NhdGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4gYWxsb2NhdGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9ncmFwaC5t
X25leHRNYWNoaW5lTG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRleChpKSkg
ewogICAgICAgICAgICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2Fs
KCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJh
bmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkgPSB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzaXplX3QgbG9jYWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAgICAgICAg
ICBpZiAobG9jYWwgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0g
dXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQor
ICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOworICAg
ICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVyYW5kcywg
YWxsb2NhdGlvbiwgdmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGZvciAoU3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNz
RGF0YSkgewotICAgICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKLSAgICAg
ICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAg
IGlmIChkYXRhLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGRhdGEt
Pm1hY2hpbmVMb2NhbCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0gYWxs
b2NhdGlvbi5zaXplKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBp
ZiAoYWxsb2NhdGlvbltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2Nh
bCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3Bl
cmFuZC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5k
LnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9j
YWwgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgZGF0YS0+
bWFjaGluZUxvY2FsID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+b3Bl
cmFuZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5uZWVkc1Nj
b3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2Nr
KCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29w
ZVJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVy
KGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lz
dGVyKCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5saW5lVmFy
aWFibGVEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFibGVEYXRh
IGRhdGEgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
IHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ciA9IGFzc2lnbigKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2Nh
dGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFy
Z3VtZW50LS07KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24g
PSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEu
YXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIxNSw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwg
ZGF0YS0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0
ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24s
IGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFy
dCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1YWxSZWdpc3Rl
ciBhc3NpZ24oY29uc3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2Fs
KCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVz
dWx0LnRvTG9jYWwoKV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFY
KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG15QWxsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRleCA9IHVzZWRP
cGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIG15QWxsb2Nh
dGlvbiA9IGFsbG9jYXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15QWxsb2NhdGlv
biA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CiAgICAg
fQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0
aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMyY2U5NjFmZjlh
MDcxMmExYTA1MS4uYjQ4YzZmN2YxOTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4YTcyNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGktLTspIHsKICAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgpID09IGxvY2Fs
KSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+
b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWwgPSBu
b2RlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0
SGVhcChTdGFjaywgbG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFw
KG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIwNzBiNmVlNmY0
ZjhiZjkuLmYxYjFmZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxs
SGVscGVycyBqaXQobnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JF
eGl0LCAmdm0pOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkRGRyBPU1IgZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewog
ICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuaAppbmRleCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4MjA1ZDllLi44
YjVjM2YwMWE0ODUyMGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07CiAKIG5hbWVz
cGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAKaW5kZXggNjBmYmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1ZjU3MTNmMWQ3
ZS4uNzk2NjVmOGFiODVmYzExMTZkNjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAo
aXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y2hlY2tPcCA9IENoZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNw
ZWNDZWxsQ2hlY2sgJiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0aGUgVERaIHZh
bHVlLiBUaGUgY2FsbCBlbnRyeXBvaW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFREWiwKQEAgLTE2
OCw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCkpID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0
ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNW
YWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVl
cygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDllZTVlMDA3
NDA5ZGY1Mjk0YmZjZjUxYjc3NmViOGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUzZGMzYzQ2YzBl
MjRkNGRhMWNlMWIwY2Y1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCkBAIC00ODMsNyArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPnBoaXNbaV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRo
aXNCbG9jay5jb250YWlucyhub2RlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUp
LCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBu
b2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICAv
LyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhp
SW5kZXgoaSkpCkBAIC01MTksMTAgKzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7
ICsraykgewogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0g
YmxvY2stPnByZWRlY2Vzc29yc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhp
cyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBi
bG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMs
MTEgKzUzMywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBw
cmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBTZXRBcmd1bWVudERlZmluaXRlbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBw
cmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0NywxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBp
dCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2
QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXBy
ZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygK
LSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpKTsKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0g
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
LAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KSk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBPcGVyYW5kczxz
aXplX3Q+IHNldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBWQUxJREFURSgodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2Nr
KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5hcmd1bWVudChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBAIC02NjgsMjQg
KzY2NCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3Vu
dHMuZ2V0KG5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5vcGVyYW5kKCkpID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgYmxvY2spLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNldEFy
Z3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1heSBiZSBtdWx0
aXBsZSBTZXRMb2NhbHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBmbHVzaGlu
Zy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6
CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sg
dG8gaGF2ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAg
ICAgICAgICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERlZmluaXRlbHkg
Zm9yIHRoYXQgbG9jYWwuCi0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHNldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAg
ICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5v
dFNldDsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5vcGVyYW5kKCkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5YmU6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtOTY4LDI2ICs5NjQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZyhub2Rl
LCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCisgICAgdm9p
ZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIGJs
b2NrKQogICAgIHsKICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAgZGF0YUxvZyhs
b2NhbCwgIiBpbiBudWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAi
IGluIG51bGwgQmxvY2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAgIGRhdGFM
b2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lk
IHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWws
IEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQor
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Js
b2NrKiBkZXN0aW5hdGlvbkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBp
biBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOworICAg
ICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIs
ICpkZXN0aW5hdGlvbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0
aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBz
b3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFz
aWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0
YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2Nr
KTsKKyAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwgIiBpbiBCbG9j
ayAiLCAqc291cmNlQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KE5vZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5k
ZXggMjZmMDMyOWQ1NDMwNDE1NzIwNWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVjZGM5MmUyYzI0
MTBhMzVjMDEzMTMxZmRjM2I3Y2NjMjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC00MSwxMSAr
NDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAK
LW5hbWVzcGFjZSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlKEdyYXBoJiBn
cmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGluZyIpCkBAIC01
Niw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2YXJhcmdzIGZv
cndhcmRpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBA
IC04OCw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBjYWxscyBpbnRv
IHRoaXMgZnVuY3Rpb24gdG8gYmUgcmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBpbiBhIHNpbXBs
ZSBPKG4pIG1hbm5lci4KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGJsb2Nr
LT5hdChjYW5kaWRhdGVOb2RlSW5kZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2coIkhhbmRsaW5nIGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJcbiIpOwogICAg
ICAgICAKICAgICAgICAgLy8gV2UgZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVyIENyZWF0ZUNs
b25lZEFyZ3VtZW50cyBpZiB0aGUgYnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3ICsxMDMsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBbJl0gewogICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNyw5ICsxMTUs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKS5pc1RtcCgpLCAiV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYSB0bXAgcmVm
ZXJyaW5nIHRvIGFuIGFyZ3VtZW50cyBvYmplY3QuIik7CiAgICAgICAgICAgICAgICAgbGFzdFVz
ZXJJbmRleCA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxz
LmNvbnRhaW5zKG5vZGUtPnVubGlua2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
bGV2YW50TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAg
ICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRPcGVyYW5kKCku
dmlydHVhbFJlZ2lzdGVyKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5h
cHBlbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVj
a1ZhcmFyZ3M6CkBAIC0xNDAsMTMgKzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgc2F3RXNjYXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHNhd0VzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBF
c2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMo
bm9kZSwgY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5v
ZGVJbmRleDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRD
YWxsZXI6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSB8
fCBub2RlLT5jaGlsZDIoKSA9PSBjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzTG9hZGVkRnJvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2
YWxpZEdldEJ5T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBidXR0ZXJmbHkg
OiBjYW5kaWRhdGVCdXR0ZXJmbGllcykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC51c2VzKG5vZGUsIGJ1dHRlcmZseSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgQnV0dGVyZmx5IGVzY2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNSwxMSAr
MjM1LDExIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAog
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAx
KSwKLSAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIHJlZywg
IiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2Fscyks
ICJcbiIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEtpbGxpbmcgIiwgb3BlcmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAi
LCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9jYWxzW2ldKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0tXSA9IHJlbGV2
YW50TG9jYWxzLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2Fscy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJ
bmRleCA9IG5vZGVJbmRleDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNlckluZGV4ID0g
IiwgbGFzdFVzZXJJbmRleCwgIiwgIiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgpLCAiXG4iKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBEZXRlcm1pbmUg
aWYgYmV0d2VlbiB0aGUgY2FuZGlkYXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJlIGlzIGFueQpA
QCAtMjYzLDE2ICsyNjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoK
ICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNr
OgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0
ZSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0
U3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2Fu
ZGlkYXRlLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJm
ZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVz
aDoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUsIG5vZGUtPmxvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5kKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxMyArMjk3LDEyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBh
eWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwg
aGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNJbnRlcmZl
cmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBO
b09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9lc0ludGVyZmVyZSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTEs
NyArMzEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2Ug
Y2FuIG1ha2UgdGhpcyB3b3JrLgotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBXaWxsIGRvIGZvcndhcmRpbmchXG4iKTsKICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgCkBAIC0zNDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0aGVzZS4KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
VmFyYXJnc0xlbmd0aDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGls
ZCgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNB
cnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBub2RlLT5vcmln
aW4sIC8qIGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndh
cmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4ZWJmZmI0MzVl
ZDRkYmY2MDJiZDYyYWVkNGMzNDMyZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMwODEyNWI0ZTZl
Y2M4OGE4N2M3ZDE3OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NE
YXRhKCkKLSAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
KyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRp
Y3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5i
b3goZmFsc2UpCkBAIC00NSwxMCArNDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJs
ZUFjY2Vzc0RhdGEoKQogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVBY2Nlc3NEYXRh
OjpWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgIDogbV9sb2Nh
bChsb2NhbCkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxlQWNjZXNzRGF0
YTo6VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1fcHJlZGljdGlv
bihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxk
TmV2ZXJVbmJveChmYWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChm
YWxzZSkKQEAgLTg3LDcgKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVz
ZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCB0aGlzIGZhY2lsaXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTogbWFrZSB0
aGlzIHdvcmsgZm9yIGFyZ3VtZW50cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCisg
ICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCiAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVkaWN0aW9u
LCB0aGVuIHRoaXMgZG9lc24ndApAQCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFyaWFibGVBY2Nl
c3NEYXRhOjp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsKICAgICBBU1NF
UlQoaXNSb290KCkpOwogICAgICAgICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwg
c2hvdWxkTmV2ZXJVbmJveCgpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkgfHwgc2hv
dWxkTmV2ZXJVbmJveCgpCiAgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0Fz
QXJyYXlJbmRleCkpCiAgICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUo
bV9kb3VibGVGb3JtYXRTdGF0ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgIApAQCAtMTc2
LDcgKzE3NSw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUy
SW1wbCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXZSBwdW50IGZvciBt
YWNoaW5lIGFyZ3VtZW50cy4KLSAgICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgaWYg
KG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICAvLyBUaGUgYXJndW1lbnQtYXdhcmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJnZXMgYWxsIG9m
IGFuIChpbmxpbmVkIG9yIG1hY2hpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEyMDQzZmEyNTRl
NjA5NDIzMjAxNGEyODRlLi5iZTJmYjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1NTczZmNlZmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJs
aWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFZhcmlhYmxlQWNjZXNzRGF0YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KCk7Ci0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCk7CisgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCgpCisgICAgT3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xv
Y2FsID09IGZpbmQoKS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOworICAgICAg
ICBBU1NFUlQobV9vcGVyYW5kID09IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJu
IG1fb3BlcmFuZDsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBtYWNoaW5lTG9j
YWwoKQpAQCAtMjA4LDEwICsyMDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0aW5nIHRoZW0g
aGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQog
ICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQu
CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9t
YWNoaW5lTG9jYWw7CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwogICAgIFNwZWN1
bGF0ZWRUeXBlIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFuZCBtX29wZXJh
bmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5vZGVGbGFncyBt
X2ZsYWdzOwogCiAgICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAppbmRleCAyOGU0MzdmZDUxZmVhNDk2
OWViNDhlY2YwYzA1MDhmMGEzN2RmODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBjNDNiZDM2ZWQ3
MmUzZjljZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudC5jcHAKQEAgLTU5LDExICs1OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgiLCBpZCgpLCAi
KSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgb3V0
LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwgIikiKTsK
KyAgICAgICAgb3V0LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJhbmQoKSwgIiki
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAgICAgICBvdXQu
cHJpbnQoCi0gICAgICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIo
KSwgIiAtPiBieXRlY29kZToiLCBieXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAgICAgICAiU2V0
TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBvcGVy
YW5kKCksCiAgICAgICAgICAgICAiLCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgp
KSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3MjIzZGQ2ZjY5
OWM2ZGJhZDZkMjI0NjdjOTgzNC4uYzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFhYzQ4MTM4ZDM0
ZTNmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgK
QEAgLTY4LDYgKzY4LDEwIEBAIGVudW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50OF90IHsKIH07
CiAKIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIFZhcmlhYmxlUmVwcmVzZW50
YXRpb24oKSAKKyAgICAgICAgOiBvcGVyYW5kKCkgCisgICAgeyB9CisKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBncHI7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBm
cHI7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5pb24gVmFyaWFi
bGVSZXByZXNlbnRhdGlvbiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBh
eWxvYWRHUFI7CiAgICAgfSBwYWlyOwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0dWFsUmVnOwor
ICAgIE9wZXJhbmQgb3BlcmFuZDsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQgewpAQCAtMTYy
LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3
aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXBy
ZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IHZpcnR1YWxS
ZWdpc3Rlci5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlcjsKICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAgZXZlbnQu
bV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3
aGljaCk7CkBAIC0xODEsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0
YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0
ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkK
KyAgICAgICAgT3BlcmFuZCBieXRlY29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5l
UmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZl
bnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2gudmlydHVhbFJlZyA9
IG1hY2hpbmVSZWcub2Zmc2V0KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVw
cmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29k
ZVJlZy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2Rl
T3BlcmFuZDsKICAgICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAgICAgICAg
ZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RG
TW92ZSh3aGljaCk7CkBAIC0xOTUsMTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBldmVudDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChN
aW5pZmllZElEIGlkLCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAgc3RhdGljIFZh
cmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVjb2RlUmVnKQog
ICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdo
aWNoOwogICAgICAgICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXBy
ZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVh
bFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVy
YW5kID0gYnl0ZWNvZGVSZWc7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnRFdmVudDsK
ICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwogICAgICAgICBldmVudC5t
X3JlcHJlc2VudGF0aW9uID0gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0yNjUsMTMgKzI2
OSwxMyBAQCBwdWJsaWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0ZXIoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5k
ID09IFNwaWxsKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0
aW9uLmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5n
ZXQoKS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYnl0ZWNvZGVSZWdpc3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5kIG9wZXJhbmQo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8
IG1fa2luZCA9PSBNb3ZIaW50RXZlbnQpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVy
KG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3Jl
cHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lUmVnaXN0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQzOWJiMDk0YzRi
ODY2ZTY3ZWQzZTJlZTFiNDg5NmFiYjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIxYTM1YWY4ZDIx
ZGUzMmI1ZGRhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6bG9nRXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7CiAgICAgZGF0
YUxvZ0YoInNlcSMldToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CiAgICAgZXZl
bnQuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgIGRhdGFMb2dGKCIgIik7CisgICAgZGF0YUxv
Z0xuKCIgIik7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBAQCB1bnNpZ25l
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFwaCwKICAgICB1
bnNpZ25lZCBpbmRleCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVjb3Zlcmllcywg
VmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNwYW5zKSBjb25z
dAogeworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVu
c2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4
OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBAIC0xMzAsMzcg
KzEzMiw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAg
ICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAg
ICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxS
ZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSAtIDEp
Lm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3Bl
cmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsK
KyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50IG1pbk9mZnNl
dCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAgdW5kZWZpbmVk
T3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0LCBpIC0gZmly
c3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4Owog
ICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1bnNpZ25lZCBp
KSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2YgYXJndW1lbnRz
IGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFjZW50IG9wZXJh
bmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXgg
JiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50
KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0
VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4oaSk7
CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkgewogICAgICAg
ICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0Fy
Z3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAgICAgICBmaXJz
dFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
LmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7Ci0gICAg
ZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJh
bWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNh
bGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAgbnVtVG1wcyA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAgIC8vIENyYXp5
IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMgbXVzdCBiZSBh
biBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHZhcmlh
YmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAogICAgIC8vIHJl
ZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1W
YXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVyZSBiZWNhdXNl
IHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJh
bmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJs
ZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVjb3Zlcmllcy5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNv
dmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLnZpcnR1YWxS
ZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudW1W
YXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQgVmFyaWFibGVF
dmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAgICAKICAg
ICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFuZCBleGVj
dXRlIHRoZSBldmVudHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2Vz
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9wZXJhbmRz
PFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwg
bnVtVmFyaWFibGVzLCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVyYW5kU291
cmNlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoU291cmNlSXNEZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJh
dGlvbkluZm8+IGdlbmVyYXRpb25JbmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydElu
ZGV4OyBpIDwgaW5kZXg7ICsraSkgewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVu
dCA9IGF0KGkpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBldmVu
dCAiLCBldmVudCk7CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAgICAgICAgIGNh
c2UgUmVzZXQ6CiAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4LDIxICsyMDYs
MjMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAg
ICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0
ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5i
eXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAgICAgICAgICAg
IGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAg
ICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVl
U291cmNlKGV2ZW50LmlkKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNl
dExvY2FsRXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChl
dmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2Vz
LnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0
YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkp
KQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFu
ZCgpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwg
ZXZlbnQuZGF0YUZvcm1hdCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJP
cGVyYW5kIHNvdXJjZXM6ICIsIG9wZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAvLyBTdGVwIDM6
IENvbXB1dGUgdmFsdWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVz
KTsKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PihPcGVyYW5k
c0xpa2UsIG9wZXJhbmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3Bl
cmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UmIHNvdXJjZSA9
IG9wZXJhbmRTb3VyY2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlhbGx5UmVjb3Zl
cmFibGUoKSkgewpAQCAtMjMwLDYgKzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnJlY29uc3RydWN0KAogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChz
b3VyY2UuaWQoKSk7CiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9IGdlbmVy
YXRpb25JbmZvcy5nZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAoIWluZm8uYWxpdmUpIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zl
cmllcy5vcGVyYW5kRm9ySW5kZXgoaSksICIgaXMgZGVhZC4iKTsKICAgICAgICAgICAgIHZhbHVl
UmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkK
ICAgICAgICAgICAgICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjM3LDYgKzI0
OCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJp
ZXNbaV0sIG5vZGUpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFu
ZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNvbnN0YW50LiIp
OwogICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRl
ZCkgewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIG5vZGUtPmNv
bnN0YW50KCkgPT0ganNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkVW5k
ZWZpbmVkT3BlcmFuZChpKTsKQEAgLTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFs
dWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
SlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0dWFsUmVnKSwg
aW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7CiAgICAg
fQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAg
ICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6ZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgK
aW5kZXggMDE1NzMwMDdlZGRkZDcwZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4uZTllNDNhYmZl
YzQ4NWZlYzdlNjYzMTUxYzFjMjJlYzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkgKzQyLDEyIEBA
IHN0cnVjdCBVbmRlZmluZWRPcGVyYW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50
U3RyZWFtIDogcHVibGljIFZlY3RvcjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEFuZExv
Zyhjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKICAgICB7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgbG9nRXZlbnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQoZXZlbnQpOwog
ICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNi
YzEwNzZkZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZh
cmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKICAgICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2Qy
YTk1NGYwOGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJ
VENvZGUuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1f
Ynl0ZWNvZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAg
ICA6IG1fZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNiNzgxY2ZiODli
MTFjMzlmOThmN2E5YWJhM2QuLmQzNTkxMzU0ZjE1YTAyZWZiMTdmNzg5Zjk3ZTk4NTljMTZiOWJm
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
QEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
Y2xlYXJTdGFja0ZyYW1lKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFtZVNpemUoKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lz
dGVyQXRPZmZzZXRMaXN0KCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKGNvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAgICAgICAgICAg
ICB9KTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6
IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsK
QEAgLTI3NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVj
YXVzZQogICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVj
dGVkLgotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJm
bG93IENoZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1
aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcg
KzM1NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
LCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShG
bHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7
CkBAIC0xMjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgog
ICAgICAgICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAg
ICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMs
NyArMTk1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3Rh
dGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigp
KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVy
ICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2Vk
T3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2
b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAg
ICAgICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShk
YXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYsMTMgKzc5Mjks
MTMgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsK
LSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAg
ICB2b2lkIGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUs
IHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCkBAIC03OTQ3LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
b21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9v
dXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAg
ICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2Nv
cGUoKQpAQCAtOTU0Miw1MSArOTU0NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVl
KHBhdGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygp
CisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1l
bnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExW
YWx1ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9m
VmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAg
Ly8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1
bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRo
ZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25n
IGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qg
c29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2Fs
bF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAK
KwogICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgs
IG1fb3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJh
cmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3Zl
KGxlbmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJ
bmNsdWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisg
ICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUg
anNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAg
ICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0
aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAg
IAorICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5n
VGhpcyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlv
bkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJh
cmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxS
ZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBt
YWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NG
b3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisg
ICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVl
KCksIG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAg
ICAgICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRW
YXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2Fz
dFRvSW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5t
YW5kYXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+
Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgp
OwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxl
Rm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
OTU5NSw1MCArOTU5OCwyNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KSkKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRz
TGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJh
bWUpOwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAg
ICAgaWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93
bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1f
b3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9w
ZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25z
LgotICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0
aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2Vy
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQot
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxM
ZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJ
bnQzMigxKSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxl
bmd0aEluY2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
IHsKKyAgICAgICAgICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1YihjYWxsZXJMZW5n
dGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2VsZWN0KG1fb3V0
LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRM
ZW5ndGgsIG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxl
KTsKKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNh
bGxlckxlbmd0aEluY2x1ZGluZ1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0
LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1
bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAog
ICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVu
Z3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAg
ICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zm
c2V0OwogICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxp
bmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRh
cmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAg
LTk2OTcsNjUgKzk2NzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJm
b3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhy
b3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAg
ICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNM
YXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGggPSBtX291
dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSk7CiAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxM
ZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUo
aXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5z
dWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVy
biBtX291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5n
dGhSZXN1bHQpOworICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFu
T3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0
LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKICAgICB9CiAK
ICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAgIHsKLSAgICAg
ICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5s
aW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxG
cmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9
IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9t
U3ByZWFkKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7
Ci0gICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgYXV0
byBjb2xsZWN0QXJndW1lbnRDb3VudCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwg
Tm9kZSogdGFyZ2V0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCkgewotICAgICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5u
b2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0g
ICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3Rvcigp
OwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNo
aWxkcmVuKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQo
aSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFy
Z2V0LCBpKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICArK251bWJlck9mU3RhdGljQXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0
YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCk7Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRT
cHJlYWRMZW5ndGhzLmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMtPmdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5s
aW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICB9KS5p
dGVyYXRvci0+dmFsdWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0QXJndW1lbnRD
b3VudChhcmd1bWVudHMpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1f
b3V0LmNvbnN0SW50MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAgICAgICAgZm9y
IChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKyAgICAg
ICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgp
KTsKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgICAgICBzcGVjdWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZVN0YXJ0KS52YWx1ZSgpOwogCi0gICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2Fi
bGVMYW1iZGEoW3RoaXMsICZjYWNoZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRdKGF1dG8g
c2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAg
ICAgYXV0byBmb3J3YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJnRhcmdldFN0
YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1
ZSB7CiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0b3JlSW5k
ZXgpOwogCkBAIC05Nzk4LDggKzk3MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodGFyZ2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9
IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBt
X291dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkp
OworICAgICAgICAgICAgYXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9
IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApOworICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9F
eHRQdHIoZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUs
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxv
b3AgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAg
ICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0No
aWNrZW5fUGFja2V0X2ZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0
cihhZGRyZXNzRm9yKDApKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2Nh
bGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tl
bl9QYWNrZXRfY2FsbGVlKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hp
Y2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5s
b2FkUHRyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
KSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CiAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNr
ZXRfc2NvcGUpOwogICAgIH0KICAgICAKQEAgLTEyMzQ2LDcgKzEyMjgyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5j
YWxsZWVSZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgcmV0dXJuIHdl
YWtQb2ludGVyKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAog
ICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgdW5zaWduZWQgb2Zmc2V0ID0gMCkKQEAgLTE3NjExLDcgKzE3NTQ3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRD
b2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKICAgICAgICAgbV9vdXQuc3Rv
cmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkp
LAotICAgICAgICAgICAgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAg
ICAgICAgICAgIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKICNpZiAhVVNFKEJVSUxUSU5fRlJBTUVfQUREUkVTUykgfHwgIUFTU0VSVF9ESVNB
QkxFRAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJzb2x1dGUo
JnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAjZW5kaWYKQEAgLTE3NzE5LDcgKzE3NjU1LDggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlw
dG9ycy5hbGxvYygKICAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9maWxlLAogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwK
LSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMo
KSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mVG1wcygp
KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0xNzgyNCwxNSArMTc3NjEs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdERlc2Ny
aXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fs
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRM
T1NSRXhpdExpdmVuZXNzKCkKICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fcGxhbi5tb2Rl
KCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWls
YWJsZTogb3BlcmFuZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwgYXZhaWxhYmls
aXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQorICAgICAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9j
YWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJpbGl0eSA9
ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVG
b3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAg
ICBpZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQpAQCAtMTgxMzIs
MzkgKzE4MDY5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5hbHJlYWR5UmVn
aXN0ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgfQogICAg
IAotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwg
cHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVl
IGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5k
XSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52
YXJpYWJsZXNbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7CiAg
ICAgfQotICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFu
ZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5
bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJh
bmQsIFRhZ09mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKGludCBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBvZmZzZXQp
OwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0xvY2FsKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVy
YW5kLm9mZnNldCgpLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxG
cmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZv
cihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0Zv
cihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsK
KyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4IDkzMzE3NzEw
ZjZkMDY4NjA5MTliYzAwMjUzMTNhMTMyMTkwNDQ5MTkuLjA5MWU3ZjNjOWI0OTgzNDA3NmE4ZDZm
OTE3NDJjY2I1Y2FkNWVhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50
cnkuY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAg
ZGF0YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsKICAgICAKICAg
ICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVu
dC0tOykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1Zh
bHVlKCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkuYXNhblVuc2FmZUpTVmFsdWUoKTsKICAg
ICAgICAgT3B0aW9uYWw8SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVzLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFsdWUgJiYgdmFsdWVP
blN0YWNrID09IHJlY29uc3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJndW1lbnQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3Bw
CmluZGV4IDA5OTU4ZDJjNGY5YTVkODliNWZiYmI2NWY4NmJiNmRhYmNkZjE4ZTMuLjA0Yzg1Nzk5
ZTRkNDY5MjNhMzE4NjcxOGUxOWYyNGJkZmZkYWJhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmNwcApAQCAtNDcsMTAgKzQ3LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBE
Rkc7CiAKIE9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcigKICAgICBEYXRhRm9y
bWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVl
UHJvZmlsZSwKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMpCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJl
ck9mTG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpCiAgICAgOiBtX3Byb2ZpbGVEYXRhRm9y
bWF0KHByb2ZpbGVEYXRhRm9ybWF0KQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxl
KQotICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzKQorICAg
ICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzLCBudW1iZXJPZlRt
cHMpCiB7CiB9CiAKQEAgLTExNyw1ICsxMTcsMyBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJu
YWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAppbmRleCBkYTg3Y2NmMzI3M2Zl
NGJlMzYwNjgzYjhhZjNiYmY1MTZkNjIyNWViLi5mZDdmOWYwNWJjNDg5YzFmNmFlY2UwOTdhZDhh
NGQxZTI3YjgwMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaApAQCAt
NjksNyArNjksNyBAQCBzdHJ1Y3QgT1NSRXhpdEhhbmRsZTsKIHN0cnVjdCBPU1JFeGl0RGVzY3Jp
cHRvciB7CiAgICAgT1NSRXhpdERlc2NyaXB0b3IoCiAgICAgICAgIERhdGFGb3JtYXQgcHJvZmls
ZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsCi0gICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5z
aWduZWQgbnVtYmVyT2ZUbXBzKTsKIAogICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUg
ZXhpdCBjYWxsIG1heSBiZSBhIHZhbHVlIHdlIHdpc2ggdG8gcHJvZmlsZS4KICAgICAvLyBJZiB0
aGF0J3MgdGhlIGNhc2UsIHRoZSBmb3JtYXQgd2lsbCBiZSBub3QgSW52YWxpZCBhbmQgd2UnbGwg
aGF2ZSBhCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKaW5kZXggNjY0ZDNiOTg4YWY3ZWE4M2Y2ZmI4MmJjYjNhOGMwYTg4MTc2ZWU3Mi4uYTM3
ODQxMGRhOWI4MDE1NzI0YTlkYzE2YzNmZTFhZWMwODA1NWQ0OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisj
aW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCIKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
LmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtMzcsMTAgKzM4LDExIEBACiAjaW5jbHVk
ZSAiRlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRM
U2F2ZVJlc3RvcmUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlByb2JlQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
QEAgLTQ3NCwxNiArNDc2LDUyIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5z
aWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAKICAgICBzaXpl
X3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyAgICBpZiAoZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewor
ICAgICAgICBhdXRvKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIGV4aXQubV9kZXNjcmlwdG9yLT5t
X3ZhbHVlcy50bXBJbmRleCgwKTsKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBq
aXQucHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0
byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5k
ZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0
ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
c2lkZVN0YXRlLT50bXBzW2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKworICAgICAg
ICAgICAgICAgIHZtUHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3Zl
KHNpZGVTdGF0ZSkpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9y
aWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29u
dGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYm
IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAg
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZSgpOworICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxG
cmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJh
bWUtPnJldHVyblBDT2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2Rl
SW5kZXgsIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgaWYgKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAg
ICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0p
OworICAgIH0KKwogICAgIC8vIE5vdyBnZXQgc3RhdGUgb3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZl
ciBhbmQgcGxhY2UgaXQgYmFjayBpbnRvIHRoZSBzdGFjay4gVGhlIHZhbHVlcyBhcmUKICAgICAv
LyBhbHJlYWR5IHJlYm94ZWQgc28gd2UganVzdCBtb3ZlIHRoZW0uCiAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1
ZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGluZGV4KTsK
KworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0
PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQorICAgICAgICBp
ZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxp
bnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IocmVnKSk7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJl
Z1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIo
KSkpOwogICAgIH0KICAgICAKICAgICBoYW5kbGVFeGl0Q291bnRzKHZtLCBqaXQsIGV4aXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKaW5kZXggN2Y3Y2Qz
ODMyNDk2MWE4ZmY0ZTQ3MjU5YTg4NGRlODZkNTY0YjExNy4uMTAyYzFlNmExYmQ5ZWIzYjQ3MTMz
NzQ0Zjg0M2VjNjRkNjNhMThmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUihKU0dsb2JhbE9iamVjdCoK
ICAgICAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBm
cm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNl
bGxzIGZyb20KICAgICAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSku
c2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJm
bHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5jcHAKaW5kZXggNzQ5MzNkYzYwNTE1YzVkYTAwZWExOGZjN2Q1ZGIzYWQ5
Y2U1ZTljZi4uZDU3ZmIxZWVhODA0NGEzNGI3OTE3NjhhOTA5NzY5ODk5OGFjMzM5MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1NSwxNSArNjU1LDM3IEBA
IExWYWx1ZSBPdXRwdXQ6Om5vdFplcm82NChMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwg
dmFsdWUsIGludDY0WmVybyk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFs
dWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKQorTFZhbHVlIE91dHB1dDo6c2VsZWN0
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgU2VsZWN0UHJlZGljdGFi
aWxpdHkgcHJlZGljdGFiaWxpdHkpCiB7CiAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKSB7CiAg
ICAgICAgIGlmICh2YWx1ZS0+YXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHRha2VuOwor
ICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVy
biBub3RUYWtlbjsKKyAgICAgICAgICAgIHJldHVybiByaWdodDsKICAgICB9Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2lu
KCksIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOworCisgICAgaWYgKHByZWRpY3RhYmlsaXR5ID09
IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSkKKyAgICAgICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCks
IHZhbHVlLCBsZWZ0LCByaWdodCk7CisKKyAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBu
ZXdCbG9jaygpOworICAgIExCYXNpY0Jsb2NrIGxlZnRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsK
KyAgICBMQmFzaWNCbG9jayByaWdodFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworCisgICAgbV9i
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCB2YWx1ZSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGxlZnRUYWtlbkJsb2Nr
LCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UmlnaHRMaWtlbHkgPyBG
cmVxdWVuY3lDbGFzczo6Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBG
cmVxdWVudGVkQmxvY2socmlnaHRUYWtlbkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQ
cmVkaWN0YWJpbGl0eTo6TGVmdExpa2VseSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVx
dWVuY3lDbGFzczo6UmFyZSkpOworCisgICAgTFZhbHVlIHBoaSA9IGNvbnRpbnVhdGlvbi0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6UGhpLCBsZWZ0LT50eXBlKCksIG9yaWdpbigp
KTsKKworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2lsb25WYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgbGVmdCwgcGhpKTsKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJs
b2NrKGNvbnRpbnVhdGlvbikpOworCisgICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6
OlVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcmlnaHQsIHBoaSk7CisgICAgcmlnaHRU
YWtlbkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2lu
KCksIEIzOjpGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICBtX2Jsb2NrID0g
Y29udGludWF0aW9uOworICAgIHJldHVybiBwaGk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21p
Y1hjaGdBZGQoTFZhbHVlIG9wZXJhbmQsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0
aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5
MzYyYjNiZGNhMGZkNDZhMDNhYTU3MGNhMmUuLjRjMDJiMzQwODUxNDZmN2RmMDI1NjI3ZDVmZjMx
Yzc4MTBkOGZiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKICNpbmNsdWRlICJG
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMQ29tbW9uVmFsdWVzLmgi
CisjaW5jbHVkZSAiRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCIKICNpbmNsdWRlICJGVExTdGF0
ZS5oIgogI2luY2x1ZGUgIkZUTFN3aXRjaENhc2UuaCIKICNpbmNsdWRlICJGVExUeXBlZFBvaW50
ZXIuaCIKQEAgLTM2NSw3ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHRlc3RJc1plcm9Q
dHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNOdWxsKGJpdEFuZCh2YWx1
ZSwgbWFzaykpOyB9CiAgICAgTFZhbHVlIHRlc3ROb25aZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZh
bHVlIG1hc2spIHsgcmV0dXJuIG5vdE51bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KIAotICAg
IExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtl
bik7CisgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVl
IG5vdFRha2VuLCBTZWxlY3RQcmVkaWN0YWJpbGl0eSA9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpO
b3RQcmVkaWN0YWJsZSk7CiAgICAgCiAgICAgLy8gVGhlc2UgYXJlIHJlbGF4ZWQgYXRvbWljcyBi
eSBkZWZhdWx0LiBVc2UgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZWRBY2Nl
c3MoKSB3aXRoIGEKICAgICAvLyBub24tbnVsbCBoZWFwIHRvIG1ha2UgdGhlbSBzZXFfY3N0IGZl
bmNlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJl
ZGljdGFiaWxpdHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGlj
dGFiaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTg1M2JhOTg1MjJhYWFjNjFiODQ5OTU1Mjc5NGE1MDkz
MGM3ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
ZWxlY3RQcmVkaWN0YWJpbGl0eS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQzo6RlRMIHsKKworZW51bSBjbGFzcyBTZWxlY3RQcmVk
aWN0YWJpbGl0eSA6IHVpbnQ4X3QgeworICAgIE5vdFByZWRpY3RhYmxlLAorICAgIFByZWRpY3Rh
YmxlLAorICAgIExlZnRMaWtlbHksCisgICAgUmlnaHRMaWtlbHksCit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2OTM0YzNmMGQzNzkxZjY0YmE0
Mjk2M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3YTY3MGQyNTgwNGFhOGNhZTIy
YjNhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgK
QEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBpZiAo
Y2FsbFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih2
bSwgdXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLCByZXN1bHRH
UFIsIGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9DaGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdkZDYzMWFjZDRjY2JlY2QxNGIy
NGNjNWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50CisgICAgYXR0cl9yZWFkZXIg
OnVzZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAg
YXR0cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBpbmRleCwgdG1w
cykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRleCA9IGluZGV4CisgICAgICAg
IEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDp1c2UgfQor
ICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9PSA6
ZGVmaW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhuYW1lc3BhY2UpCisgICAgICAg
IEVPRjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9OgorRU9GCisgICAgZW5kCitl
bmQKKworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlhbGl6ZShvcGNvZGUsIHRtcHMs
IGNoZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEB0bXBzID0g
dG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXBfd2l0aF9pbmRleCB7
IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhuYW1lLCBpbmRleCwgdG1wcykg
fQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAgIEBjaGVja3BvaW50cy5lYWNo
IGRvIHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAgICBFT0Y8LS0KK0JpdE1hcDxt
YXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBpdGFsaXplZF9uYW1lfSh1aW50
OF90IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3BvaW50KSB7CisKKyAgICB9Cit9
CitFT0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29k
ZS5yYgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNlYmI0ZjBhYjI0NDg1Li5jZmQ5
ZGYxNTExNDdhODZkYTRiYzc1YmU0NmE2NzgyNWUyNTM3NWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBPcGNvZGUK
ICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVyIDptZXRhZGF0YQogICAgIGF0
dHJfcmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hlY2twb2ludHMKIAogICAgIG1v
ZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXplOjpOYXJyb3ciCkBAIC00NSwx
MiArNDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAogICAgIGVuZAogCi0gICAgZGVm
IGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRh
dGFfaW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJh
cywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycywgdG1wcywgY2hlY2twb2lu
dHMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAgICBAbmFtZSA9IG5hbWUKICAg
ICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBAbWV0YWRhdGEgPSBNZXRhZGF0
YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwogICAgICAgICBAYXJncyA9IGFy
Z3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwgaW5kZXh8IEFyZ3VtZW50Lm5l
dyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFyZ3MubmlsPworICAgICAgICBA
dG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwIHsgfChj
aGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5uaWw/CiAgICAg
ZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEyMSw4IEBAIGNsYXNzIE9wY29k
ZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVibGljIElu
c3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9CisgICAgI3tjaGVja3Bv
aW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTEzMiw2ICsxMzcsMTggQEAg
RU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBvcGNvZGVJRCA9
ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMKKyAgICAgICAg
cmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJlbnVtIENoZWNrcG9pbnRz
IDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9pbnR8ICIgICAg
ICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9mQ2hlY2twb2lu
dHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAgICBkZWYgdGVtcHMKKyAg
ICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVudW0gVG1wcyA6IHVpbnQ4
X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAgI3t0bXB9LCJ9
KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYgZW1pdHRlcgog
ICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJRFR5cGUsIDAp
CiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29kZUlEVHlwZSwg
MCkKQEAgLTIwMCw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wY29kZVNpemUg
X19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5lcmF0b3I+CiAg
ICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7dHlwZWRfYXJn
c30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3BvaW50cy5uaWw/
ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBpZiAoX19zaXpl
ID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25XaWRlT3Bjb2Rl
MTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUzMikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAyMDRhYzc1OWUx
M2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRjMjNjYzBlYmVj
MTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0
aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAKICAgZGVmIGNy
ZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBj
b25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdb
Om1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNv
bmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6
bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpjaGVja3BvaW50
c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29kZXMsIGNvbmZp
ZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
aW5kZXggZjYzOTRhYzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5NTM2YTYwMC4uZWY3ZjZjOTRm
NDE2OGI0YTI4NDYwNTNhNWQwMTNiZTExMjIwZGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBD
YWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBn
bG9iYWxFeGVjLCBKU0NhbGwKICAgICBBU1NFUlQoZ2xvYmFsRXhlYy0+aXNEZXByZWNhdGVkQ2Fs
bEZyYW1lRm9yRGVidWdnZXIoKSk7CiB9CiAKLWJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpIGNvbnN0Citib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJl
Qnl0ZWNvZGVJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBz
d2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKQEAgLTkwLDEyICs5MCwxMiBAQCBib29s
IENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIAogdW5z
aWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCk7CisgICAgcmV0dXJuIHRo
aXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFnKCk7
CiB9CiAKIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFz
UmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudF0udW5zYWZlVGFnKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udW5zYWZlVGFnKCk7CiB9CiAKIENhbGxTaXRl
SW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKQEAgLTEwNSw3ICsxMDUsNyBA
QCBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CiAKIFNVUFBS
RVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBj
b25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSAmIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkgPj4gQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0KSkpOwogfQogCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTExNywzMyArMTE3LDM0IEBAIGNvbnN0IEluc3RydWN0
aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogdm9pZCBDYWxsRnJhbWU6OnNldEN1
cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlKEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2cGMpKSk7Ci0gICAg
dGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IGNhbGxTaXRlLmJpdHMo
KTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCldLnRhZygpID0gY2FsbFNpdGUuYml0cygpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNh
bGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxv
Y2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
IEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2Rl
QmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQogCiAjZWxzZSAv
LyBVU0UoSlNWQUxVRTMyXzY0KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVu
dFZQQygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0
KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJl
dHVybiBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRzQXNCeXRlY29k
ZU9mZnNldCgpKS5wdHIoKTsKIH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29u
c3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVC
bG9jaygpLT5ieXRlY29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkp
OworICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KV0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2
cGMpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZz
ZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgQVNTRVJUKGNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVC
eXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOwogfQog
CkBAIC0xNjUsOCArMTY2LDggQEAgQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5k
ZXgoKQogICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgfQog
I2VuZGlmCi0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAg
IHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7Cisg
ICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIGNh
bGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1l
Ojpjb2RlT3JpZ2luKCkKQEAgLTE4MCw3ICsxODEsNyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6
Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRl
eCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChj
YWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihj
YWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFt
ZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAppbmRleCBjZmI3NzE4NTYwMzk5MzM5MTAwNGZjMTMyMTE4Mzg0MjNj
NWRjNmE5Li42NDQ5MGU3YTcwN2VlYjAxYmEwN2FjYTMzMjYyM2FkZTEzZTBjOTQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlICJWTUVudHJ5UmVjb3JkLmgiCisjaW5jbHVkZSA8d3RmL0VudW1DbGFzc09wZXJhdG9yT3Zl
cmxvYWRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtNDYsMTggKzQ3LDI0IEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKICAgICAgICAg
CiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQotICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgeyB9CisgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQorICAg
ICAgICB7IAorICAgICAgICAgICAgQVNTRVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7
CisgICAgICAgIH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0g
b3RoZXIubV9ieXRlY29kZUluZGV4OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5t
X2JpdHM7IH0KIAotICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpOyB9CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRzKCkpOyB9CiAK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKKyAg
ICAgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50MzJfdCBtX2Jp
dHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlz
cG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC02NSw3ICs3
Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgo
KSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgo
dWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
Ojpmcm9tQml0cyhiaXRzKSkKKyAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChiaXRzKQogICAg
ICAgICB7CiAgICAgICAgIH0KIApAQCAtNzgsMjQgKzg1LDI3IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVz
ZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25h
cyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhD
UFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVyblBDOworICAgICAgICBhbGlnbmFz
KENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVn
aXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVy
KSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAK
LSAgICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgY2FsbGVlID0gY29kZUJsb2NrICsgMTsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgYXJndW1lbnRDb3VudCA9IGNhbGxlZSArIDE7Ci0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQgKyAxOwotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsg
MTsKKyAgICBlbnVtIGNsYXNzIENhbGxGcmFtZVNsb3QgOiBpbnQgeworICAgICAgICBjb2RlQmxv
Y2sgPSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsCisgICAgICAgIGNhbGxlZSA9
IGNvZGVCbG9jayArIDEsCisgICAgICAgIGFyZ3VtZW50Q291bnQgPSBjYWxsZWUgKyAxLAorICAg
ICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50ICsgMSwKKyAgICAgICAgZmlyc3RBcmd1
bWVudCA9IHRoaXNBcmd1bWVudCArIDEsCiAgICAgfTsKIAorICAgIE9WRVJMT0FEX01BVEhfT1BF
UkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisgICAg
T1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JB
TFMoQ2FsbEZyYW1lU2xvdCkKKwogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUg
b2Ygc2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50
IHRvIG1vc3QgZnVuY3Rpb25zLgogICAgIGNsYXNzIENhbGxGcmFtZSA6IHByaXZhdGUgUmVnaXN0
ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6
ZUluUmVnaXN0ZXJzID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIDE7CisgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IHN0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgKyAxOwogCiAgICAgICAgIC8vIFRo
aXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lmaWMgY2lyY3Vt
c3RhbmNlcwogICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBjYWxsZWUgY2Fu
J3QgYmUgYSBXYXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMTYsMTAgQEAgbmFtZXNw
YWNlIEpTQyAgewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFuZCBpZiBpdCdz
IG5vdCwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBndWFy
YW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNPYmplY3QqIGpz
Q2FsbGVlKCkgY29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1
cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRlcigpKTsgfQot
ICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNhblVuc2FmZVBv
aW50ZXIoKSk7IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBD
YWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5w
b2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxs
ZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZD
b2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMg
KyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9jayoqIGFkZHJl
c3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4o
dGhpcyArIHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7IH0KICAg
ICAgICAgaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2RlQmxvY2soKSBj
b25zdDsKICAgICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zm
c2V0KSBjb25zdDsKIApAQCAtMTQ2LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDYWxsZXJGcmFtZUFuZFBDLCByZXR1cm5QQyk7IH0KICAgICAgICAgQWJzdHJhY3RQQyBh
YnN0cmFjdFJldHVyblBDKFZNJiB2bSkgeyByZXR1cm4gQWJzdHJhY3RQQyh2bSwgdGhpcyk7IH0K
IAotICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3Q7Cisg
ICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0OwogICAgICAg
ICBib29sIGNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0OwogCiAgICAgICAg
IHVuc2lnbmVkIGNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3Q7CkBAIC0xODIsMTUgKzE5MiwxMyBA
QCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXByZWNhdGVkQ2Fs
bEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxlZSogZ2xvYmFs
Q2FsbGVlKTsKIAogICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZyYW1l
IChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdpc3RlciYgcihp
bnQpOwogICAgICAgICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAvLyBS
ZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lzdGVyJiB1bmNo
ZWNrZWRSKGludCk7CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBrbm93biBub24t
Y29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKTsK
IAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNhcHR1
cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCiAgICAgICAg
IHNpemVfdCBhcmd1bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSAtIDE7IH0KLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5w
YXlsb2FkKCk7IH0KKyAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
Y29uc3QgeyByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNl
dChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICsg
YXJndW1lbnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAr
IGFyZ3VtZW50KTsgfQogCkBAIC0yMzksNyArMjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAg
ICAgICAgIEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKIAot
ICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpIHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXpl
X3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogCiAgICAgICAg
IHN0YXRpYyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICAg
ICBib29sIGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QKQEAgLTI1MSwx
MCArMjU5LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0YWNrT3ZlcmZs
b3dGcmFtZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29uc3Q7CiAKLSAg
ICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5w
YXlsb2FkKCkgPSBjb3VudDsgfQorICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19j
YXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnBheWxvYWQoKSA9IGNvdW50
OyB9CiAgICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwogICAgICAgICBp
bmxpbmUgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZvaWQgc2V0UmV0
dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAgICB2b2lkIHNl
dFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZh
bHVlOyB9CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5o
CmluZGV4IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEuLmVlN2VjMmFi
MTA0YTdhMzRkOThiMGY0MzhmNjQ0YzJkY2ExYzUxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAtMzIsNTAgKzMy
LDM5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6
cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxv
Y2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0K
IGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0g
ICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJh
bWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKKyAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZ2lzdGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOwor
ICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdpc3RlciYgQ2Fs
bEZyYW1lOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHVu
Y2hlY2tlZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOwor
ICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1ZhbHVlIENhbGxG
cmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2Fs
bGVlKCkuaXNXYXNtKCkpOwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0u
anNWYWx1ZSgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKV0uanNWYWx1ZSgpOwogfQogCiBpbmxpbmUgSlNPYmplY3QqIENhbGxGcmFtZTo6
anNDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOwotICAg
IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7CisgICAgcmV0dXJu
IHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5vYmplY3QoKTsK
IH0KIAogaW5saW5lIENvZGVCbG9jayogQ2FsbEZyYW1lOjpjb2RlQmxvY2soKSBjb25zdAogewot
ICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVC
bG9jaygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKV0uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUgU1VQUFJFU1Nf
QVNBTiBDb2RlQmxvY2sqIENhbGxGcmFtZTo6dW5zYWZlQ29kZUJsb2NrKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjphc2FuVW5z
YWZlQ29kZUJsb2NrKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOwogfQog
CiBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdChW
TSYgdm0pIGNvbnN0CkBAIC0xMDIsMTIgKzkxLDEyIEBAIGlubGluZSBib29sIENhbGxGcmFtZTo6
aXNXYXNtRnJhbWUoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNldENhbGxlZShK
U09iamVjdCogY2FsbGVlKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGNhbGxlZTsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+
KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBjYWxsZWU7
CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKENvZGVCbG9jayogY29k
ZUJsb2NrKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrXSA9IGNvZGVCbG9jazsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRo
aXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0gPSBjb2RlQmxv
Y2s7CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0U2NvcGUoaW50IHNjb3BlUmVnaXN0
ZXJPZmZzZXQsIEpTU2NvcGUqIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40MjA5YzNhMWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZmNDZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ5dGVj
b2RlSW5kZXguaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBvZmZzZXQpIAorICAg
IHsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkK
KyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZzZXRdKTsKKyAgICAg
ICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDMyX3QpKQorICAg
ICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50MzJfdD4odG1w
c1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6
ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90KSk7CisgICAgICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRtcHNbb2Zm
c2V0XSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4OworICAgIHZvaWQqIG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7CisgICAgdWludDY0X3Qg
dG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBkYWE5NGM4OWY5MDA1
YTk5NzJmYzBlM2IwMmViODkzZDIxMWNkZDk3Li4xZDlkZGMzYjUzNGU5MDkyZThlMTE3OGIzYTE2
ODE1ZGY2OTk2NTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZXMu
aCIKICNpbmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCkBAIC0xMjMsNyArMTI0LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxGcmFtZSogY2FsbGVy
RnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
ZXJDYWxsU2l0ZUluZGV4ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKICAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBK
U1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVy
Q29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwor
ICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2VkUihj
YWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAg
VW5saW5rZWRDb2RlQmxvY2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0gY2FsbGVyQ29kZUJs
b2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250
ZXh0ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpIHx8IGNhbGxl
clVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7CkBAIC0yMTMsNiAr
MjE0LDkgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgMCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+IG1heEFyZ3VtZW50cykK
KyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisK
ICAgICBpZiAobGVuZ3RoID49IGZpcnN0VmFyQXJnT2Zmc2V0KQogICAgICAgICBsZW5ndGggLT0g
Zmlyc3RWYXJBcmdPZmZzZXQ7CiAgICAgZWxzZQpAQCAtMjQ5LDcgKzI1Myw3IEBAIHVuc2lnbmVk
IHNpemVGcmFtZUZvclZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBsb2FkVmFyYXJn
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKK3ZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1
bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIGlmIChVTkxJ
S0VMWSghYXJndW1lbnRzLmlzQ2VsbCgpKSB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1cm47CkBA
IC0yNjEsMzEgKzI2NSwzMSBAQCB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaQogICAgIHN3aXRjaCAo
Y2VsbC0+dHlwZSgpKSB7CiAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKS0+
Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxs
KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTY29wZWRBcmd1bWVudHNUeXBl
OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1bWVu
dHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1
bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0ltbXV0
YWJsZUJ1dHRlcmZseVR5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganND
YXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAg
ICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1lbnRz
KGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAg
ICByZXR1cm47IAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy5pc09i
amVjdCgpKTsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNl
bGwpOwogICAgICAgICBpZiAoaXNKU0FycmF5KG9iamVjdCkpIHsKICAgICAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRv
QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlU
b0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3Ro
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBpOwog
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoICYmIG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGkgKyBvZmZzZXQpOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkpID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAg
ICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSAr
IG9mZnNldCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgfSB9CkBAIC0yOTcsOCArMzAxLDcgQEAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbEYK
ICAgICAKICAgICBsb2FkVmFyYXJncygKICAgICAgICAgZ2xvYmFsT2JqZWN0LAotICAgICAgICBj
YWxsRnJhbWUsCi0gICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldCgwKSwKKyAgICAgICAgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5y
KGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSkpLAogICAg
ICAgICBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAKICAgICBuZXdDYWxsRnJhbWUt
PnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGxlbmd0aCArIDEpOwpAQCAtNTM4LDggKzU0
MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2Nr
KCk7CiAKICAgICAgICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFtX2lzVGVy
bWluYXRpb24pIHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICBpZiAo
bV9jb2RlQmxvY2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBl
eGNlcHRpb24gaGFuZGxpbmcgaW4gY2hlY2twb2ludHMuCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgICAgICAgICBpZiAobV9yZXR1cm5QQyA9PSAmY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF9lbnRyeXBvaW50KQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT52bSgp
LmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1fY2FsbEZyYW1lKTsKKyNlbmRpZgorICAgICAg
ICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKICAgICAgICAgICAgICAgICBtX2hhbmRsZXIg
PSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAg
ICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCisgICAgICAgIG1fcmV0dXJuUEMgPSBtX2Nh
bGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2ICs2MDYsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwogICAgIEhh
bmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11dGFibGUgY29uc3Qgdm9pZCogbV9yZXR1cm5Q
QyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0
ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNl
cHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNh
bGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgIH0K
IAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlm
IChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkKKyAgICBpZiAoVU5MSUtFTFko
IXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykp
CiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUs
NyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5
U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRv
UmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJh
ZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApA
QCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVG
b3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zm
c2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0g
ICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxl
ciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NG
cmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0Nh
bGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJz
dFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxs
RnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRj
OGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUw
NjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0
b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNv
ZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAg
ICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFt
ZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5i
b3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0
ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1f
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5k
ZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQp
IHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5j
YWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbEZy
YW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIs
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZH
X0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4
IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1MmRlZjJkNzFiYzIuLmUwNmNiNDliMjk1ZGU1
ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2NDcsMjggQEAgcHVibGljOgogICAgIH0K
ICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50
cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikK
KyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBl
bnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNz
KGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAg
IH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVh
bFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAq
IHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVu
dHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcg
ZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJl
ZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihm
cm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAg
fQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBl
bnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmly
dHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwg
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8pCkBAIC02OTYsMTkgKzY5NiwxOSBAQCBw
dWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlci4gT24gc29tZSBwbGF0Zm9ybXMs
IHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgdGhlCiAgICAgLy8gImxpbmsg
cmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVybiBhZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBw
cm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkg
KiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFj
a1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UKLSAgICB2b2lkIGVtaXRQdXRQYXlsb2Fk
VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQor
ICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQ
UlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0
cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRh
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICB9CiAKLSAgICB2b2lk
IGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0
YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7
Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50
cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVT
dGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2Vu
ZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
dmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3Bl
cmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVz
cyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsK
KyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0
dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAg
c3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVz
cyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXls
b2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4
ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3Qo
aW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdp
c3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NFUlQoc2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVB
bmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNz
IHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbGVl
RnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7
CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRh
Z1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZp
cnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xv
dChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBj
YWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQp
OwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRy
ZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7
CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJlZ2lzdGVyKDApKS53aXRo
T2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lzdGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1
MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2Fs
bEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpOwogICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5NjkwZTA5YzhiNTcyNzBkZWY3Zjg3YTQ2Y2My
YjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1M2Y4ODgwYjk4MzdiNWM2NGQ0YzU2NDIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcApA
QCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlmCiAKICAgICBB
U1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJl
Z2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEu
YXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNT
dGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmluZGV4IDYyNDM5
YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUuLjRjNmFhMzJmNGY1ODc2MzgzMTA5
MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFs
dWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5l
dyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpz
VmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpAQCAtMTQxLDcg
KzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCiAgICAgewog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNo
ZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0
TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIEluUGFpcjoK
ICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
MjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEy
YTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0z
MzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwog
ICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAg
dm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3Rlciwg
RlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJW
YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lz
dGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJz
CiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBz
Y3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVk
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRv
IHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAt
NDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9i
amVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOwor
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
SlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5k
Q29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwg
aW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9h
ZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBl
bWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdp
c3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
KGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQg
aW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAg
dm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGlu
ZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFs
UmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2Vs
bCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2
b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7
CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
aW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50
aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBl
cywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3Ax
SXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxS
ZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2
b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBm
YWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25s
eSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1
NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZC
b3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdp
c3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3Rl
cklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRj
aGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAg
ICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50
aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lz
dGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24p
OwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3
OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAg
ICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCAr
Njg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9h
ZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQs
IEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lk
IGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsK
KyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQg
ZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNT
ZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50
IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEz
ICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAg
ICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0
dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBw
cmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZv
aWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVh
bFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0
ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5
ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwot
ICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRp
b24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNv
bnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0
aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAg
LTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9u
LT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxp
bmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3
LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2lu
Yyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTks
NyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEg
PSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJz
IGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1Qw
ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0Qmlu
YXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9p
ZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRu
b3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hp
ZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5l
Zml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0
LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9u
LCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4
NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklU
OjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVh
YzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIo
cmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMu
b2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZy
ZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJl
ZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3
ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0
ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQK
IHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUu
bV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYx
NmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAs
NyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFM
b2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNv
ZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
V1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0No
aWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLmM2
NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzllMzExNzY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJ
bnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChp
bnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNT
RVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Myw3ICsxNDQsNyBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU1LDcgKzE1Niw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZQogICAg
IHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJl
ZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKKyAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHJlZykpCiAgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNlbmRpZgogI2Vu
ZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQg
c3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYg
YXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAx
OworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjMsMjYgKzM2NCwyNiBAQCBp
bmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQz
Ml90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwogfQogCi1BTFdB
WVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKQor
QUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNE
b3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcihp
bnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFk
ZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQog
ewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25z
dGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0ZvcihpbmRleCksIHRhZyk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
IHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
ICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSks
IHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA2LDEzNiArNDA3LDEzMyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQg
dGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0KFZp
cnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0TG9hZChzcmMs
IGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0U3RvcmUoZHN0LCBmcm9t
LnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdp
c3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7CiAKICAgICBpZiAoYmFzZSA9
PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkICE9
IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOwotICAgICAg
ICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywg
cGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwogICAgIGlm
IChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAgICAgICBsb2Fk
MzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFz
ZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0
LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcp
OworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOworICAgIGxvYWQz
Mih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQg
aW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBS
ZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcy
LCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5
bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOworICAgIGVtaXRM
b2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0TG9hZChyZWcxLCB0YWcxLCBwYXls
b2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBG
UFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQ
b29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3Io
aW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRl
eCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9E
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07
Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0
b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3IocmVnLCBiYXNl
KSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wg
aW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkp
OworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4
SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
SW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRy
dXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQog
ewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3Io
cmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wg
aW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7
CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJ
c0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcp
LCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsKKyAgICBzdG9y
ZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJh
c2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25z
dCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2Fk
KCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3Rh
bnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25z
dGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIoSW1t
MzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkK
KyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNv
bnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3AsIGludDMyX3Qm
IGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CiAgICAg
ICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwpAQCAtNTU1
LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QKICNlbHNlIC8vIFVTRShKU1ZB
TFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIg
YXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQo
KSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwpAQCAtNTcxLDQ3ICs1Njks
MzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBz
cmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Yy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lz
dGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVn
aXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0
KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1
cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20p
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJl
c3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJl
Z3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZnJvbS5wYXlsb2Fk
R1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
SklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVn
aXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3Jh
dGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50IHZSZWcpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCBy
ZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50
UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFs
dWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRv
RG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAg
ICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgpKTsKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5hc0ludDMyKCkpLCB2
YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3Bl
cmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7
CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVtcCBKSVQ6OmVtaXRQYXRjaGFibGVK
dW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0MTFiZTljZmI4MGY4MDgwNmY3ODhmNmMx
Li42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQyMTlhMWU5YTdlNWFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
c3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwogICAg
IFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2Nh
dG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAgICAgfQogfQogCkBAIC0xMjAsNyAr
MTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0g
Ynl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1
ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCkBAIC0xNTUsOSArMTU1
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAogICAgIC8vIExvYWQgdGhlIG9w
ZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdp
c3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUg
ZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1
bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9p
bnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwNCw4ICsyMDQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
VW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVy
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2Vs
bF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBl
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTMwNyw4ICszMDcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gUmV0dXJuIHRo
ZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzQzLDgg
KzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1ICszNjAsMTUgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CiAKICAgICAv
LyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQg
YXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKICAgICAvLyBjbGVhciBvdGhlciB0
aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBp
bnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5MCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
TnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDQ1LDcg
KzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVkT3JOdWxsPigpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NTcsNyArNDU3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsK
LSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDcwLDggKzQ3
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lh
bFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKQEAgLTQ4NSwx
OCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5t
X3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUzOSw3ICs1MzksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpAQCAtNTQ4LDkgKzU0OCw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEs
IHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01OTIsOCArNTkyLDggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBAIC02NTAsOCArNjUwLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogICAgIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CkBAIC02NjQsOCArNjY0LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0LDIwICs2ODQsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwxMCArNzI4LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNl
cHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9l
eGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBGSVhNRTog
Y29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBp
bmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAg
aWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5h
c0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcgKzc0OSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVu
dHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYg
cHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3Mo
cmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3Bl
cmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19j
YXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAgLTc2NiwxMCArNzY2LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29w
ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKICAgICBzaXpl
X3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZh
dWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVm
YXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUq
IGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpA
QCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4
ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsK
LSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0g
Jm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MTEsNyArODEx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNv
ZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNp
Z25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBj
cmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0
Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MzQsOCArODM0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKICAgICAvLyBvYmplY3QgbGlmZXRp
bWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9m
ZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtOTEzLDcg
KzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHZv
aWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVn
VDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC05MjQsNyArOTI0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4q
IGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVy
SUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0
OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChBZGRyZXNzKHN0
cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJl
Zyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJl
Zyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
IH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVH
UFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtOTk2
LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAyNCwxMCArMTAyNCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUu
bV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2Nv
bnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qx
KTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdS
ZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5
dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAq
PihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTE1LDEyICsxMTE1LDEyIEBAIHZvaWQgSklU
OjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIApAQCAtMTE2
MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogCiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIwNywxMCArMTIwNywxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVz
SW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5
dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAgICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKIH0KQEAgLTEyMTksOCAr
MTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzaXplSW5kZXggPSBieXRlY29kZS5tX2xl
bmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKQEAg
LTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAg
LTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAgIApAQCAtMTMzMCw5ICsx
MzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKLSAgICBpbnQgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEzOTAsOSArMTM5MCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDE0LDkgKzE0MTQsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQ0
MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVn
VDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQogCkBAIC0xNTIzLDggKzE1
MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9
IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAg
ICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCBy
ZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNW
YWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
LCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCBy
ZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9j
b3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVt
UGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAg
bG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
LCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4
IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2Nh
ZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEu
bV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JF
bnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQm
IHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5
M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2VmODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0x
NjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJp
Z2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAK
LSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51
bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKworICAgICAgICBPcGVyYW5kczxP
cHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwogICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNh
bGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAg
ICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxv
Y2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFu
ZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZt
UG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVk
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAg
bWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tl
dHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9v
cGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOworICAg
IHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0
KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQx
Niw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRG
cm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0
KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpz
Q2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5q
c1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMg
Y29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsy
NDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3Qq
IHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxG
cmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmpl
Y3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+
cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5m
byA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBr
ZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2Iw
NjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4
OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5
dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVy
aWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAg
IH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNI
KCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAg
ICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9w
IGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAg
ICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9w
ZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGludCBiYXNlOwotICAgIGludCBw
cm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAog
ICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0
ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgp
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGlu
dDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3
NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgp
LCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDgg
KzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpA
QCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00Njks
NyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyAr
NTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAt
NTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0g
ICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVn
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxh
Z3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBw
YXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUg
b25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3
ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRz
W21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25l
ZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklU
OjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdU
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcg
Kzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVl
Kiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2
b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAt
ODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwog
ICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+
KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNo
cG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1Qx
KTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3Jl
UHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
K3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBAIC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEw
OTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwot
ICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzEx
MTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2
YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFs
RmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSBy
ZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRU
eXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThm
NDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1YzEuLmZhNWQwYWFiNGE1ZDgxMmRlMDExYjM2
ZDU0YzMzYzA4MGQ3ZDlkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJm
YWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGlu
ZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lz
dGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklE
IHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNl
bmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVu
dHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwg
aW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCog
dmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRv
LCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUs
IFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CiAKICAg
ICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBAIC02NCwzNiArNjQsMzYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQog
ICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
cGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdp
c3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVn
aXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRK
dW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAg
IH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cihw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgQVNTRVJU
KHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAg
bG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZp
cnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAg
ICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAg
ICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7Cisg
ICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAgLTEwMSwyMyAr
MTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRK
U0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7
CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAg
ICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIEp1bXAgbm90
SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRy
KGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5z
aWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWQ2NChh
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51
bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdEludCA9
IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMjYgKzEyOSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdp
c3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVy
SUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhm
cm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAg
fQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKKyAgICAgICAg
c3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSk7CiAjZWxzZQogICAgICAgICBzdG9yZTY0
KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKICNlbmRpZgogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQq
IHZhbHVlLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBhZGRy
ZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJm
YWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50
IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCAzODg3MzA1MmQxMjg1
MmZjNmJiOTE0MmQ0NTYwN2FlOGUxOWE2NzBhLi4wYmE3M2VmOGMxMzRlYmJiZDFkMDRhNGIxNzIx
NGY0ZmE3MzUxODNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVw
VmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0Zy
YW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90
CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgICAgIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIERhdGFGb3JtYXRJbnQzMik7CiAgICAgICAgIGZp
cnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dCgwKSk7CiAgICAgfQogICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtLCBqaXQs
IG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywg
YXJndW1lbnRDb3VudFJlY292ZXJ5LCBmaXJzdEFyZ3VtZW50UmVnLCBmaXJzdFZhckFyZ09mZnNl
dCwgc2xvd0Nhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVj
aWFsaXplZFRodW5rSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVk
VGh1bmtKSVQuaAppbmRleCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEzZGYzNmE3MjQ5YjZjMzQz
Li45MzNjYTliZTEwMmUwZWRmOTRiYjRlYWU4MjgyMTQ4MjI5YzgyNmY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNTUsMTMgKzU1
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkRG91Ymxl
QXJndW1lbnQoaW50IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0
Y2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFp
bHVyZXMuYXBwZW5kKGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBzY3JhdGNoKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1bWVudChpbnQgYXJndW1lbnQs
IFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAg
ICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChzcmMsIGRzdCkpOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3Rl
cklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpOwogICAgICAgICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2FkSW50MzIoc3JjLCBkc3QpOwog
ICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCmluZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRlNmRiNDRiZGFmOWU4ZTgwZjIy
YWEuLmMzNzZkYmUyY2Q3ZDZkZDNmYTU0ODdiNTdiNTg5NDdmNmRmYmEzMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTEwMzIsOCArMTAz
Miw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5l
cmF0b3IoVk0mIHZtKQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9h
ZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCk7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1
dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJZk5vdEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAog
ICAgIC8vIEFicyBJbnQzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCmluZGV4IDM1N2E0NmU4ZTU3ODk3ZjI3ODVjZDMzOWZjYmUyYmMwYzkwY2Vk
YjIuLmY2MjEzMWM3MzcxZDYzNDUxYWQ5ZWE5ODAyZmMyNmVjYjZmODgwZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5
LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5f
Tk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9T
VFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUg
SlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVn
aXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5q
c1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9w
ZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJl
dHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRf
UkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNh
bGxGcmFtZSAtIGJ5dGVjb2RlLm1fYXJndjsKICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFt
ZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAg
ICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFt
ZShjYWxsRnJhbWUpOwogICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKQEAgLTE2ODksNyArMTY5MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlv
bioKICAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+
c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+
dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxs
ZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBj
YWxsZWVBc1ZhbHVlKSk7CkBAIC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbgogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxs
RnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2Fs
bGVlRnJhbWUtPnNldFJldHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwog
ICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5z
ZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE5MzAsNyArMTkzMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29k
ZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBw
cm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NjEsMTEg
KzE5NjIsMTI0IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9q
dW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGNvZGU+CitzdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBP
cGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQor
eworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS5nZXRUbXA8SlNWYWx1ZT4o
T3Bjb2RlOjphcmdDb3VudCkuYXNVSW50MzIoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CisgICAgYXJncy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZd
IChKU1ZhbHVlKiBidWZmZXIpIHsKKyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBi
dWZmZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCAwLCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0pOworICAgIGlmIChhcmdzLmhh
c092ZXJmbG93ZWQoKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAg
aWYgKE9wY29kZTo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAgICAgIHJl
c3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBh
cmdzLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2Jq
ZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5
cGUgZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0
aW9uU3RyZWFtOjpSZWYgcGMpCit7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG5l
eHRQQyA9IHBjLm5leHQoKS5wdHIoKTsKKyAgICAgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBMTElu
dDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPigqcGMubmV4dCgpLnB0cigpKTsKKyAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChuZXh0UEMsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VSVChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQnl0ZWNvZGVJbmRleCBuZXh0
Qnl0ZWNvZGVJbmRleCA9IHBjLm5leHQoKS5pbmRleCgpOworICAgIGF1dG8gbmV4dEJ5dGVjb2Rl
ID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNvZGVJbmRleCk7CisgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChudWxscHRyLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisjZW5kaWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRK
U1ZhbHVlKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCB2b2lk
KiwgRW5jb2RlZEpTVmFsdWUgcmVzdWx0KQoreworICAgIC8vIFNpbmNlIGFsbCBvdXIgY2FsbGlu
ZyBjaGVja3BvaW50cyBkbyByaWdodCBub3cgaXMgbW92ZSByZXN1bHQgaW50byBvdXIgZGVzdCB3
ZSBjYW4ganVzdCBkbyB0aGF0IGhlcmUgYW5kIHJldHVybi4KKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52
bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUg
PSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBhdXRv
IHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAg
IGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
cGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7
CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdz
PigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgLy8gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mgc2hvdWxkIG5ldmVyIHJldHVybiBpZiB0
aGUgdGhpbmcgaXQgd2FzIGNhbGxpbmcgd2FzIGlubGluZWQuCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQor
CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3Jf
ZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAg
Vk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUp
OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJ
bmRleDsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworCisgICAgYXV0
byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50
KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCksICpz
aWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBn
bG9iYWxPYmplY3QsIHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9yZXQs
ICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2VkIGJ5IGFuIG9w
X3JldC4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwg
Z2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0
KCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHJldHVy
blRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihj
b2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
dGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9G
cmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJhbWUpCiAgICAg
ICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgqdm0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCBmY2FmODBkYTFj
YjVjNDZjNTBlZTdmN2Y1ODA1MzNmN2Y1M2NlMDQxLi5jZDQ1YWYxMGIzMTNhOTE2YjBkM2VlYzBi
ZGJhMTZlY2Y4ZmQ4YWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVu
a3MuaApAQCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpTVmFsdWU7CiBl
eHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9KYXZhU2NyaXB0KHZvaWQq
LCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0
aXZlKHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CisgICAgdm9pZCBjaGVja3BvaW50X29z
cl9leGl0X2VudHJ5cG9pbnQoKTsKKyAgICB2b2lkIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9p
bmxpbmVkX2NhbGxfZW50cnlwb2ludCgpOwogfQogCiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdm1F
bnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBmcmFtZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0Li40MGY5MmUz
MTJhNDAwZDg4NGMwMzJhZDhhZDQ5ODM0YzZlYTc4MmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDkxLDcgKzEw
OTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXpl
KQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0
b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFn
T2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAK
IG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRh
LCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0
LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRh
dGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
LSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9u
KGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwg
Lm5vRXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lCi0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9u
OiAgICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
KyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihf
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1l
IGluIHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0xOTk5LDcg
KzIwMDMsNiBAQCBvcChsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGlu
ZSwgbWFjcm8gKCkKICAgICBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxG
dW5jdGlvbjo6bV9mdW5jdGlvbkZvckNvbnN0cnVjdCkKIGVuZCkKIAotCiAjIExhc3RseSwgbWFr
ZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwg
b3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBM
TEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVjaC4KQEAgLTIwNDUsMyArMjA0
OCwyMCBAQCBvcCh3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RscywgbWFjcm8gKCkKIGVuZCkK
IAogZW5kCisKK2lmIG5vdCBDX0xPT1AgYW5kIG5vdCBDX0xPT1BfV0lOCisgICAgZ2xvYmFsIF9j
aGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQKKyAgICBfY2hl
Y2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50OgorICAgICAgICBt
b3ZlIHIwLCBhMgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3BvaW50X29z
cl9leGl0X2Zyb21faW5saW5lZF9jYWxsKQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIxCisKKyAg
ICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludAorICAgIF9jaGVja3BvaW50
X29zcl9leGl0X2VudHJ5cG9pbnQ6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSBk
aXNwYXRjaCB0byB0aGUgY2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdhcyBl
YXNpZXIgCisgICAgICAgICMgYW5kIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGZvciBwZXJmb3Jt
YW5jZS4KKyAgICAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhp
dCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRo
X3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMQorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IDNkZDJlYjQ4
Y2JiYTZlZjVjZDk4ODYzOWM3OTExZTIyYTcxMzMxNDguLjQxMWRmMmM2NzUyMzMwYjM3Yjk2YWJj
ZWQ4N2E4NDQ2YTg3NTY5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC00Miw2ICs0MiwxNCBAQCBtYWNybyBu
ZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQogICAgIGptcCBbdDEsIHQwLCBQdHJTaXplXSwgQnl0ZWNv
ZGVQdHJUYWcKIGVuZAogCittYWNybyBzdG9yZVBDKCkKKyAgICBzdG9yZWkgUEMsIExMSW50UmV0
dXJuUENbY2ZyXQorZW5kCisKK21hY3JvIGxvYWRQQygpCisgICAgbG9hZGkgTExJbnRSZXR1cm5Q
Q1tjZnJdLCBQQworZW5kCisKIG1hY3JvIGdldHVPcGVyYW5kTmFycm93KG9wY29kZVN0cnVjdCwg
ZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIgY29uc3RleHByICVvcGNvZGVTdHJ1Y3QlXyVmaWVs
ZE5hbWUlX2luZGV4W1BCLCBQQywgMV0sIGRzdAogZW5kCkBAIC05Miw3ICsxMDAsNyBAQCBlbmQK
IAogIyBBZnRlciBjYWxsaW5nLCBjYWxsaW5nIGJ5dGVjb2RlIGlzIGNsYWltaW5nIGlucHV0IHJl
Z2lzdGVycyBhcmUgbm90IHVzZWQuCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcGNv
ZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRb
Y2ZyXSwgUEMKKyAgICBsb2FkUEMoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgogICAg
IGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwgUEIKICAgICBn
ZXQoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2RzdCwgdDEpCkBAIC0zOTAsNyArMzk4LDcgQEAgZW5k
CiAKICMgQ2FsbCBhIHNsb3cgcGF0aCBmb3IgY2FsbCBvcGNvZGVzLgogbWFjcm8gY2FsbENhbGxT
bG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCAr
IFRhZ09mZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwo
KQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0zOTksMjAgKzQwNywyMCBA
QCBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQKIAogbWFjcm8g
Y2FsbFRyYXBIYW5kbGVyKHRocm93SGFuZGxlcikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291
bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckND
YWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQogICAgIGNDYWxsMihfbGxp
bnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAgICBidHBueiByMCwgdGhyb3dIYW5kbGVyCi0g
ICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRpIExM
SW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9v
cCgpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVCgKICAgICAgICAgMSwKICAgICAgICAgbWFjcm8oKQot
ICAgICAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAg
ICAgICAgICAgIHN0b3JlUEMoKQogICAgICAgICAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQog
ICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtNDIx
LDcgKzQyOSw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAg
IG1vdmUgcjEsIHNwCiAgICAgICAgICAgICBqbXAgcjAsIEpTRW50cnlQdHJUYWcKICAgICAgICAg
LnJlY292ZXI6Ci0gICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nm
cl0sIFBDCisgICAgICAgICAgICBsb2FkUEMoKQogICAgICAgICBlbmQpCiBlbmQKIApAQCAtMTc2
OCw2ICsxNzc2LDggQEAgbWFjcm8gcHV0QnlWYWxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IG9zckV4aXRQb2ludCkKICAgICBlbmQpCiBlbmQKIAorCisKIHB1dEJ5VmFsT3AocHV0X2J5X3Zh
bCwgT3BQdXRCeVZhbCwgbWFjcm8gKHNpemUsIGRpc3BhdGNoKQogLm9zclJldHVyblBvaW50Ogog
ICAgIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcF9wdXRfYnlfdmFsLCBzaXplKQpA
QCAtMjA1Nyw3ICsyMDY3LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQ
YXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRkcCBj
ZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNpemUs
IG9wY29kZVN0cnVjdCwgbV9hcmdjLCB0MikKLSAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENv
dW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICAgICAgc3RvcmVQQygpCiAgICAgICAgIHN0b3JlaSB0
MiwgQXJndW1lbnRDb3VudCArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMsIHNw
CiAgICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKaW5kZXggODQwZjg5Yjg4ZDQy
MGNjM2I3NWM4M2Q2YzU3ODI0MTU0MDJmMzM2Ni4uOGY1MDVjYzY5OWNkNGFlMzdlZjM0NTAwZmRm
YmU2OTk5ODA3Y2RhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaApA
QCAtMTMzLDYgKzEzMywxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tOb3RO
ZWVkZWQoKSB7IGNsZWFyTmVlZHNPdmVyZmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVuY3Rv
ciYgZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5zdXJl
Q2FwYWNpdHkoY291bnQpOworICAgICAgICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVuYyhy
ZWludGVycHJldF9jYXN0PEpTVmFsdWUqPigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJpdmF0
ZToKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eShp
bnQgbmV3Q2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCmluZGV4IGY4ZDk3OTk1ODc0NTIyNmE0N2U2ZjhiNmM1NTg2MGMxOGZjZTg3YTEu
LmZmYjc0NTlhNmFkY2NiYWIxNmRhOGE0ZWY4YjE3MTFkODcyYTFhZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTE3ODgsNiArMTc4OCw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgaGFz
VGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNpZ25l
ZCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KICAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAg
IHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKQEAg
LTE4MjAsNiArMTgyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5
cGUgOiAyOwogICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDogMTsKICAgICB1bnNpZ25lZCBt
X2NvZGVUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIAogICAg
IENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9k
ZTsKQEAgLTIwMTgsNiArMjAyMCw3IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSoKIAogICAgICwg
bV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAg
LCBtX2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhjYWNoZWRDb2RlQmxvY2suaGFzQ2hl
Y2twb2ludHMoKSkKIAogICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMo
KSkKICAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKQEAgLTIy
MDYsNiArMjIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJs
b2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zCiAgICAgbV9wYXJzZU1vZGUg
PSBjb2RlQmxvY2subV9wYXJzZU1vZGU7CiAgICAgbV9jb2RlR2VuZXJhdGlvbk1vZGUgPSBjb2Rl
QmxvY2subV9jb2RlR2VuZXJhdGlvbk1vZGU7CiAgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5t
X2NvZGVUeXBlOworICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVja3Bv
aW50czsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFk
YXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9y
YXJlRGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAppbmRleCBmMzU4ZDQ4YTUwZGU3M2VhYjM4NTY5OWIzYTZmNTExM2Ji
YmU5YmJhLi5lMjdmZTNjYTk3OGIzOTQ0ODI2MTY3ZDRhMDYxYTJlYWQ0ZjkyNjE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAg
LTk4LDggKzk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7ICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUgR0VU
KG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCi0jZGVm
aW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCisjZGVm
aW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpKQorI2RlZmlu
ZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQpKQogCiAjZGVmaW5lIFJFVFVS
Tl9UV08oZmlyc3QsIHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAgICAgICBcCkBAIC0xMTM5LDggKzExMzksNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCiB7CiAgICAg
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmly
b25tZW50PigpOwotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7
Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3Bl
UmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VUX0Mo
Ynl0ZWNvZGUubV9zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRpYWxW
YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgQVNT
RVJUKGluaXRpYWxWYWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBqc1RE
WlZhbHVlKCkpOwpAQCAtMTE1NSw4ICsxMTU0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1c2hfd2l0aF9zY29wZSkKICAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29k
ZS5tX25ld1Njb3BlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVD
S19FWENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVudFNj
b3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVu
dFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIG5ld1Njb3BlKSk7CiB9CiAKQEAgLTExNjUsNyArMTE2
Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwogICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVT
Y29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQp
OwogCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTc5LDcgKzExNzcsNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNv
ZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVkU2Nv
cGUgPSBKU1Njb3BlOjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKICAgICAv
LyBQcm94eSBjYW4gdGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQcm94eSBpbiB3aXRoIHN0YXRl
bWVudCdzIEB1bnNjb3BhYmxlcy4KICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTE0MjQsNyAr
MTQyMiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogewog
ICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVy
PigpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGJ5dGVj
b2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgQVNTRVJUKGJ5dGVjb2Rl
Lm1faW1tdXRhYmxlQnV0dGVyZmx5LmlzQ29uc3RhbnQoKSk7CiAgICAgSlNJbW11dGFibGVCdXR0
ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1dHRl
cmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5qc1ZhbHVlKCkuYXND
ZWxsKCkpOwogICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIApAQCAtMTQ0Myw3ICsxNDQxLDcgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIC8vIFdlIGFsc28g
Y2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMg
c2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgLy8gYSBj
b21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAg
ICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRl
cmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7Cisg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1
dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogCkBAIC0xNDg4LDQgKzE0ODYsMTYgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NwcmVhZCkKICAgICBSRVRVUk4oSlNJbW11dGFibGVC
dXR0ZXJmbHk6OmNyZWF0ZUZyb21BcnJheShnbG9iYWxPYmplY3QsIHZtLCBhcnJheSkpOwogfQog
CitleHRlcm4gIkMiIHZvaWQgZHVtcFJlZ2lzdGVyKFVDUFVSZWdpc3RlciB2YWx1ZSk7CitleHRl
cm4gIkMiIHZvaWQgZHVtcFJlZ2lzdGVyKFVDUFVSZWdpc3RlciB2YWx1ZSkKK3sKKyAgICBkYXRh
TG9nTG4oUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlKSkpOworfQorCisvLyBl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKTsKKy8vIGV4dGVybiAiQyIgU2xvd1Bh
dGhSZXR1cm5UeXBlIFNMT1dfUEFUSCBjaGVja1BDKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25z
dCBJbnN0cnVjdGlvbiogcGMsICkKKy8vIHsKKworLy8gfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKaW5k
ZXggNGJkMTkyYTZjNzdlZmMwMjZlN2E5NWE1YjdiZWM3MTI0MzY3N2U3OC4uNDdiMjQ3NDE4Y2E4
OGVmZDFiNzhlNjMxMWI2NzVkMWVmYTVhNWZmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKQEAgLTM1LDYgKzM1LDExIEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNvbnN0cnVjdChnbG9iYWxPYmpl
Y3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgYXJncywgZXJyb3JNZXNz
YWdlKTsKK30KKworSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3Qg
QXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC00NiwxMCArNTEsOSBAQCBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIGNvbgogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBl
LCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBjb25zdHJ1Y3Rvck9iamVjdCkpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmpl
Y3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIG5ld1RhcmdldCkpOyAgCiB9
CiAKLQogSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNv
bnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpT
VmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAppbmRleCBkMGFl
MDBiYTExZDdjZWUyNGRmZmFlOTE5MTE5NjdlMDJhYTZlZGUzLi5mYjYxOTc0YTdkYjM5YzQ5MWY5
ZjkzYmFlYjZjYWMxMjYyMWYzYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdHJ1Y3REYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uc3RydWN0RGF0YS5oCkBAIC02MCw2ICs2MCw4IEBAIHN0cnVjdCBDb25zdHJ1Y3REYXRh
IHsKIAogLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdp
dGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVt
LgogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25z
dCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZB
VEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgY29uc3RydWN0
b3IsIENvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0Jiwg
SlNWYWx1ZSBuZXdUYXJnZXQpOwogCiBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwg
Q29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1
Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKaW5kZXggYTY3OTVkYTFlZGNjZjMxMDIyYWMy
ZGQ5YWVmYWZkNDNhMDFhNWM4NS4uNGIzNDYxZGUyMmU3NmY3ZGJlMzE4Mzk0MjQ1YTkzYzU3NTA5
ZjM4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuY3BwCkBAIC0xMzcsMjAgKzEzNywxOSBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5t
YXBBcmd1bWVudChWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQogICAgIG1fbWFwcGVkQXJndW1lbnRz
LmF0KGluZGV4LCBpbnRlcm5hbExlbmd0aCgpKSA9IHRydWU7CiB9CiAKLXZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYg
KCFtX21hcHBlZEFyZ3VtZW50cykgewogICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWlu
KGxlbmd0aCArIG9mZnNldCwgbV9sZW5ndGgpOwogICAgICAgICB1bnNpZ25lZCBpOwotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQgPSBmaXJzdEVsZW1lbnREZXN0IC0gb2Zmc2V0OwogICAg
ICAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKHN0YXJ0ICsgaSkgPSBzdG9yYWdlKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBmaXJz
dEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gc3RvcmFnZSgpW2ldLmdldCgpOwogICAgICAgICBm
b3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0ICsg
aSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3Rb
aSAtIG9mZnNldF0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVy
aWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogdW5zaWduZWQgRGlyZWN0QXJndW1lbnRzOjptYXBw
ZWRBcmd1bWVudHNTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmgKaW5kZXggMGE2YjFhMDY2MDkwZTJjYTVmNTZmNTBhOWM1M2EyY2ZjZTc3
MmUwYS4uOGQ5NjQyYTJjOTQwNDA4MGI5MTNhYzI3MGNkMDEzYzM5ZWNkYTgxNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKQEAgLTE0NCw3
ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVj
dEFyZ3VtZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fbGVuZ3Ro
KTsKICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKaW5kZXggYjMxYjcwYWJkMDBj
ZWVhZjVlYmI3ZWUxZDQ2N2RhNDg4NzBkNTFjMS4uMDc0YzIxNjJkOGRhMTY0NzA2ZjQwMDRiZGFi
M2RhZWViMjcyY2JiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHMuaApAQCAtNTksNyArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBz
ZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihWTSYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHVzaW5nIE1vZGlmaWVkQXJndW1l
bnRzUHRyID0gQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAg
IE1vZGlmaWVkQXJndW1lbnRzUHRyIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgKaW5kZXggMjE4MmE2MmIxMzAzNDNhZjU2NzIxNzM2M2EzZjVjMWI4ODYxODFmZi4u
ZTBhYWJmNWYyZWUxODViN2QxMzMxNjAzN2Q4YzFkODg4NDI0Njg1MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CkBAIC0yOTcsNyArMjk3LDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlm
aWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ24KIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMzA1LDkgKzMwNSw5IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGCiAgICAgVHlwZSog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmlzTWFw
cGVkQXJndW1lbnQoaSArIG9mZnNldCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50RGVzdCArIGkpID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQp
OworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHRoaXNPYmplY3QtPmdldEluZGV4
UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjYWxsRnJh
bWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNl
dCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGdsb2JhbE9iamVjdCwg
aSArIG9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAppbmRleCA0NGM3ZTUyMGYxYzBhMjQwYThiNjY2NWEyNzRhNTE0NDU5Mzg3NjYwLi42
ZDA3NTkxNzExZWVkYmMyOGUwZTRkYTc4NDk4MjJhYjhkNjZmNWQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9pZCBK
U0FycmF5OjpmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNYXJrZWRB
cmd1bWVudEJ1ZmZlciYgYXIKICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGdsb2JhbE9iamVjdCwg
aSkpOwogfQogCi12b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0Fy
cmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyNjksNyArMTI2OSw3IEBAIHZvaWQgSlNBcnJheTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lCiAgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpLmF0KHRoaXMsIGkpOwogICAgICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsg
aSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKKyAgICAg
ICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCB2KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0x
Mjk0LDExICsxMjk0LDExIEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKICAgICAgICAgaWYgKCF2KQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAt
IG9mZnNldCkgPSB2LmdldCgpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRd
ID0gdi5nZXQoKTsKICAgICB9CiAgICAgCiAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0
KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0g
PSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKaW5kZXggMzE3OTQ5YzU3MmExMWI3NWFkYzE4M2FjOWU0MTQ0ZjY2Y2Y2YWI1MC4uMzExNjVi
NWZmNDkyNTRjYzFhNmM0NzkwMmI3OTEwYWM0YTdkOWJmZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0Kiwg
TWFya2VkQXJndW1lbnRCdWZmZXImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAppbmRleCBlMzJlOTQ5N2Q0NzgyOTUwMzNk
YWE5OWE1OTM2ZGVhMTlhMWM0OWMwLi5lNDkwOTc1NjE2ZGFkMzkxMTQyMzgyYzk5M2U3OGQxMmMx
OTExYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0
YWJsZUJ1dHRlcmZseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuY3BwCkBAIC00NiwxMyArNDYsMTMgQEAgdm9pZCBKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91
cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKLXZvaWQgSlNJbW11
dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IHB1Ymxp
Y0xlbmd0aCgpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBp
KSA9IGdldChpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBn
ZXQoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihm
aXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgZmlyc3RF
bGVtZW50RGVzdFtpXSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAppbmRleCBh
Y2I2ODQ4MTkxYTE5MDM1MjJiOWIzZTRkMDBmOTY5ZTQwYjc4MTVhLi4wN2UxYThhMTBjM2NkYzcx
MTdhY2EzZGM1NDNlZDdkZGIwZDQxZjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAg
c3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IGE2ZWIwZWE1ZjZhYWRlYjM3ZDI3Nzk0
ZjdjOTEzZjY4MTY4MzQ5N2UuLjE2YWEzNjlmNDg1MDcwNjFjMDYzNjE1MThhZTE1ZDJiYzY4ZmI2
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjA0LDYg
KzIwNCw3IEBAIHZvaWQgSlNMb2NrOjp3aWxsUmVsZWFzZUxvY2soKQogeyAgIAogICAgIFJlZlB0
cjxWTT4gdm0gPSBtX3ZtOwogICAgIGlmICh2bSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0UoIXZtLT5oYXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCksICJSZWxlYXNpbmcg
SlNMb2NrIGJ1dCBwZW5kaW5nIGNoZWNrcG9pbnQgc2lkZSBzdGF0ZSBzdGlsbCBhdmFpbGFibGUi
KTsKICAgICAgICAgdm0tPmRyYWluTWljcm90YXNrcygpOwogCiAgICAgICAgIGlmICghdm0tPnRv
cENhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAppbmRleCBkYjA1MjU0ODgyNTMzOWE2YjEzMmJh
NGU0NDJiMjExZDZkZTM3YmEwLi41OTY4MDhjYWZjMGIwZjRjODQ3MGJkNzU5ZWQ5ZjQ5MTZjNjY0
NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPCiAKICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCB1bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlKTsKIAotICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xU
YWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKHVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJl
Z2lzdGVyT2Zmc2V0KCkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgp
KSk7CisgICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChn
bG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25z
dGFudFJlZ2lzdGVyT2Zmc2V0KCkpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVj
dC0+dm0oKSkpOwogCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDQxMzg3Yzg1MGE5OTVhZDU3NDIxMDUwY2Rl
ODZjYjI1MjFlNTQxMTYuLjkxZWQ3MzllMjVmNDkzOGVmNTAyNzI3ZGY1MTY4MGQ4NmNhMjA4N2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01MDksMTEg
KzUwOSw5IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIGlm
IChPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpIDwgT3B0aW9uczo6cmVzZXJ2ZWRab25l
U2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNpemUpCiAgICAgICAgIE9wdGlvbnM6OnNvZnRS
ZXNlcnZlZFpvbmVTaXplKCkgPSBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVt
UmVzZXJ2ZWRab25lU2l6ZTsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgLy8gRklYTUU6
IE1ha2UgcHJvYmUgT1NSIGV4aXQgd29yayBvbiAzMi1iaXQ6CiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzk1NgogICAgIE9wdGlvbnM6OnVzZVByb2Jl
T1NSRXhpdCgpID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29kZUNh
Y2hlKCkpCiAgICAgICAgIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSA9IG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAppbmRl
eCAwODFkOTc4YTdiMmE2MjY2YWM1NTJjMzc5ZDM4NDUwMDVkYzExZjEwLi4zYzc0MGQ0OGY2MjQx
YjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lk
IFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCiAgICAg
ICAgIHN0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVk
QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAg
R2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50
czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKaW5kZXggZjg1ZTQ3ZGZiZWU4Y2E3YzM3
MDRmMjllZDRjYjFiNGU5NzIwNDQ1Ny4uZTU4Y2IyMmVmZDQ4YzY3NGJmNWIxYjExMjgwYjUxYWJj
MGRlMDg0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5l
cmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0
b3IoaW5kZXgsIG1fdGFibGUtPmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJz
dEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9p
ZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lO
Rk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggNjRkZGZjYjFh
MjU2MGU2ZmUxYjQ1NGU0ZmVlMTQ4OTJhZGMwOGE5Zi4uOGY2ZTU2NWUyNDdlNWEyMzE5MzMxOTg4
Mjg2NzJlMjEwNDg4MTY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJvb2xlYW5PYmplY3QuaCIKICNpbmNsdWRlICJCdWls
dGluRXhlY3V0YWJsZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5Lmgi
CisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9u
ZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2Fj
aGUuaCIKQEAgLTEwMjcsNiArMTAyOCwyMCBAQCB2b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVy
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogfQogI2VuZGlmCiAK
K3ZvaWQgVk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJiBwYXlsb2FkKQor
eworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS5hZGQoY2FsbEZyYW1lLCBXVEZNb3Zl
KHBheWxvYWQpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBz
aWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUudGFrZShjYWxsRnJhbWUpOworICAgIHJl
dHVybiBzaWRlU3RhdGU7Cit9CisKIHZvaWQgbG9nU2FuaXRpemVTdGFjayhWTSYgdm0pCiB7CiAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5pdGl6ZVN0YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1l
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCAyODA4NmM0ZWQ5MTYwNmMyODFi
MWExZDViN2ExZGFiMDYwODgwNzBhLi4yNWM0YTUxNGExOGM2NzBlNjU0MzFhYjk2ODc4ODMzODFk
NzFlYzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEwMyw2ICsxMDMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxsRnJhbWU7CitzdHJ1Y3QgQ2hlY2twb2lu
dE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBj
bGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTk0OSw2ICs5NTAsMTAgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKIAor
ICAgIHZvaWQgYWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1
ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUo
Q2FsbEZyYW1lKik7CisgICAgYm9vbCBoYXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGVja3BvaW50U2lkZVN0YXRlLnNpemUoKTsgfQorCiAgICAgVk1FbnRyeVNj
b3BlKiBlbnRyeVNjb3BlOwogCiAgICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmly
c3RPYmplY3QgeyBudWxscHRyIH07CkBAIC0xMjAwLDYgKzEyMDUsNyBAQCBwcml2YXRlOgogICAg
IExvY2sgbV9zY3JhdGNoQnVmZmVyTG9jazsKICAgICBWZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IG1f
c2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6ZV90IG1fc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgeyAw
IH07CisgICAgSGFzaE1hcDxDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNrcG9pbnRTaWRlU3RhdGU7CiAgICAgSW5saW5lV2F0Y2hw
b2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJvbEZsb3dQcm9maWxlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCmluZGV4IDgxYzlmMWY2NzQ3MDc5ZWQ4
MzEyNjYyYzA4MzAwYzZjYzM2MjhlMzcuLmUxNDg0MDBkNDg3ZGZjNjRlNDQwNTRkZGFkYjA4NTg5
NzJlMzlhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3Bl
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNw
cApAQCAtMzk3LDggKzM5Nyw4IEBAIHZvaWQgVk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgY29uc3QgUmVnaXN0ZXIqIGl0OwogICAgIGNvbnN0IFJl
Z2lzdGVyKiBlbmQ7CiAKLSAgICBpdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBl
bmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
IC0gMTsKKyAgICBpdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyAoQ2FsbEZyYW1lU2xvdDo6
dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOworICAgIGVuZCA9IGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMSk7
CiAgICAgd2hpbGUgKGl0ID4gZW5kKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGl0LT5qc1ZhbHVl
KCk7CiAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmgKaW5kZXggZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2Ny4u
MmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdmMTkyNDczNTJjMGY4YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTcyLDEx
ICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgY29uc3RhbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KICAgICBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdHJ1Y3Rpb25zOyB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudHNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07
IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKGludCBpbmRleCkgY29u
c3QKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoT3B0aW9uczo6ZHVtcEdlbmVyYXRl
ZFdhc21CeXRlY29kZXMoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07CisgICAgICAgIHJldHVybiBtX2NvbnN0YW50
VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsKICAgICB9CiAKICAgICB2b2lkIHNldEluc3Ry
dWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4IGFiMTc0
MDZhZmI3MzRhNzA4ZGYxMWRiYjY4MDE1MThiNzY2NWZiNDIuLmVlMmIzMjdkMmFmNTQ3MTk2ODc5
NjlhYzI1MmE4NGM3ODhlZjZlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtMjQyLDYgKzI0Miw5IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiogcGFyc2Vy
KSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCisgICAgLy8gV2UgbmVlZCB0aGlzIGZvciBhdXRv
Z2VuZXJhdGVkIHRlbXBsYXRlcyB1c2VkIGJ5IEpTIGJ5dGVjb2Rlcy4KKyAgICB2b2lkIHNldFVz
ZXNDaGVja3BvaW50cygpIGNvbnN0IHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7IH0KKwog
ICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayopIHsgfQogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3Bw
CmluZGV4IGUyYTRjNDI1MzNhMmY0NDdkZDMyMDIwNWI3NzdiNzhiMDM5YzBiNjguLjIwNjlhZDhi
MjRiNzM2OWRjZDlkNWYwYzdmNThlZWM5MmIzNWM3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTc0Myw3ICs3NDMsNyBAQCB2b2lkKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBXYXNtOjpFeGNlcAogICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZy
YW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCiAgICAg
Ly8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVt
b3ZlIHRoaXMgdGVycmlibGUgaGFjay4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCi0gICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZy
YW1lKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0
YW5jZS0+bW9kdWxlKCkpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlb
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3c7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQ
YXRocy5jcHAKaW5kZXggOTI3YTY5ODRhM2JlMDE0Y2YzZWE3ZDY3ZjAzNDU4NGVlYmViNjBjZS4u
NTRmNjM2YWMxYjUwNzVkMWM2NjdiMzhhOTAzMTMyOTBkNWYzMzNjZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKICNkZWZpbmUgUkVBRCh2aXJ0dWFsUmVn
aXN0ZXIpIFwKICAgICAodmlydHVhbFJlZ2lzdGVyLmlzQ29uc3RhbnQoKSBcCi0gICAgICAgID8g
SlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVy
Lm9mZnNldCgpKSkgXAorICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NLKCktPmdl
dENvbnN0YW50KHZpcnR1YWxSZWdpc3RlcikpIFwKICAgICAgICAgOiBjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyKSkKIAogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Mo
V2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVC
bG9jaywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386031</attachid>
            <date>2019-12-18 16:42:06 -0800</date>
            <delta_ts>2019-12-18 16:52:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218164151.patch</filename>
            <type>text/plain</type>
            <size>656805</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi41YWZiZjFhODU4NGI0MzMx
OTIzMjZjNjZhYjJiOTU5N2QzNDU3ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGlu
ZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludERhdGEuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlND
OjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6ZHVtcFJlZ2lz
dGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAoSlND
OjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0
b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFu
dFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25z
dCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0ganNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2Jq
ZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBiZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29w
ZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdiMGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJl
Li41OWEwMDQzNDgyYWMyM2UwMmI4NmEzOTY5OThhM2IwNTg1MWIyNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxl
IG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJl
bmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0
b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RG
OjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGlnbmVkQWNjZXNzLmg6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRT
dG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQu
eGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CmluZGV4IGY4YzFiNGFlNTU2YjUzNGMyYWIxMDFhYzM5MGJhNzExYjQ1Y2JhZWEu
LjllYWQ2NTNmYWFhYjE4OTNlYjkyZGQwMmU5NzU3OTY2ZGZhOTlhYzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBA
IC02NCw2ICs2NCw3IEBAICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvb3B0YWJs
ZS54bWwKICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfaXRhYi5weQogJChQ
Uk9KRUNUX0RJUikvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0
b3IvQXNzZXJ0aW9uLnJiCiskKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIK
ICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9EU0wucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRv
ci9GaXRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvR2VuZXJhdGVkRmlsZS5yYgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkYmNlNWJhY2VkYzA1YzNkYzBlYThiMDQzMzQ2
ZDE1MWQwZGVmNDQxLi5jYmNlOGFjYWJkNDk2Y2Y0NDUwZmFmZjkyZjUzMmFkNTY5ZGQ3YTljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTMxLDYgKzkzMSw3IEBACiAJCTUzMzNC
QkRCMjExMEY3RDIwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFCMTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsKIAkJNTMzM0JCREMy
MTEwRjdEOTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMyMTMyOERGODIwMDJCMkFENyAv
KiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi87IH07CiAJCTUzMzNCQkREMjExMEY3RTEwMDc2MThF
QyAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCAqLzsgfTsKKwkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4
aXRTaWRlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0MUZD
NzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsgfTsKIAkJ
NTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJB
QzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3
NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1OTcsNiArMzU5OCw3IEBACiAJCTUzMTgw
NDVEMjJFQUFGMEYwMDRBNzM0MiAvKiBCM0V4dHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0V4dHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0V4dHJhY3RWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMUQ0RTE5MUY1OUNERDIwMEVDODM2QyAvKiB0
ZXN0YXBpLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhcGkuY3BwOyBwYXRoID0gQVBJL3Rl
c3RzL3Rlc3RhcGkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzI2MzFCMzIx
ODc3N0E1MDA3QjgxOTEgLyogSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gInNv
dXJjZWNvZGUubW9kdWxlLW1hcCI7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTEsNiArMzYxMyw5IEBACiAJCTUz
NEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0b3IuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBUeXBlZEFycmF5Q29uc3RydWN0b3Iu
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0NzZB
NyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0SXRlcmF0b3JQcm90
b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkY5MjM2M0M1NUQw
MDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBJdGVyYXRvckhlbHBlcnMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5q
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM0RDFFNEQ0QjE2
MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzRGMUU0
RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTQ3LDYgKzU5NTIsNyBAQAog
CQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJCQlBN0Y4
NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJCUZFQTNC
QkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJNTMzOEUy
QTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8sCiAJ
CQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAogCQkJCTE0
RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdDMUVBRUIx
Nzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2LDcgKzg1
ODIsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVyYXRpb25z
LmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIElu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1NUQwMDU0
NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURC
MUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0
NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5
MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNG
ODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3
IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk1LDcgQEAKIAkJCQk3
Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJCQk2NTQ3
ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJCTg0OTI1
QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAq
LywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5qcyAq
LywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0b3IuanMg
Ki8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90
eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk2LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIwMjc5MDAx
MzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMyMjMzOUU5
RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNEREExQkJD
RTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEUyQTcy
Mzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BT
dGFjay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2RlZmRl
Yzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRiMmY0
ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5j
dGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRh
Zz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NFUlRf
VkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQqIHZh
bHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBmM2I0
Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBmMTY1
NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1By
b2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJh
bWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxUPihD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3RlcikpOwog
ICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQo
aW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9w
ZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBnZXQ8
VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQsIHB0
cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBw
dHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUp
OwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFuZChp
bnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVl
KTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2
YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVy
YW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQgc2V0
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9w
ZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOworICAg
ICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQs
IHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNlZjdh
NTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxpbmUg
dm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRpb24s
IGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IE9w
ZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICBU
eXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsK
LXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8
aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9wZXJh
bmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVmIEIz
T3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQxNl90
PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwog
Ci0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsg
I3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5kPGRl
Y2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxv
YXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFu
ZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFs
dWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9wZXJh
bmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAgIG9w
ZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7CkBA
IC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0
b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVy
YW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5k
cygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAgVmVj
dG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJbnRl
cmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCA2MDA2MmY5
ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFiNGRiZDI2M2Y0OGI1
YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5z
dG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2Fs
bFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAgaWYg
KG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAgICAgICAgICAgYXV0
byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKQEAgLTE3OTcs
NyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgp
LmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5t
YWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJh
bXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMwZWU1OGY1ODguLjQ1
MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1z
LmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4
Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBqaXQubWFrZVNwYWNl
T25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4Mzg3
OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNw
cApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlv
bkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0ZWNv
ZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBtX291
dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2VuZXJh
dG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFzcyBC
bG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50IHIp
IGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZpcnR1
YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChy
KSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUo
cik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAgcmV0
dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgsMTAg
Kzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZzZXQo
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJs
b2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQgaW5k
ZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lKFZp
cnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZpcnR1
YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENv
bnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIpIik7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgQnl0
ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRlY29k
ZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVE
dW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAgICAg
RnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZhbHVl
ID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2NrLT5n
ZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEwNzVl
ZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAtNjEs
NyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnByaW50
KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGlu
dCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJl
Z2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1bXBl
ckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwg
Y29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBj
b25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIp
IGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVh
bCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAgQmxv
Y2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcg
SlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVyOwog
CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50
IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29uc3Rh
bnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3ZGMw
ZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1MDg3
MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEJ5
dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91
dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAgICAg
IG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAppbmRl
eCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4ZWM5
ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQgKzM4
LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5kZXgo
KSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisgICAg
ICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAgICB9
Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkKLSAg
ICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQzMl90
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNCaXRz
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4
KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAgICAg
ICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhhc09u
ZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hvdWxk
IGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2tw
b2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51bWJl
ck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2twb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9CisgICAg
dWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsgfQor
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNrZWRC
aXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJu
IGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQogCiAg
ICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAgICAv
LyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBkZWxl
dGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJpdHMg
IT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNvbnN0
IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhlci5h
c0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3OSwy
MiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgaW52
YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAotICAg
IHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50MzJf
dCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisKKyAg
ICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxpbmUg
dWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50
OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNoZWNr
cG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0KSA+
PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVjb2Rl
SW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5dGVj
b2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAgICBC
eXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAgIHJl
c3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDcxYmY2
YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLmRmMGJkZWIxY2IwZjA1NDA4MDdl
OWFmYTdlMjkzMTRhMTcwYzI3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldhdGNo
cG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIsCiAg
ICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkFy
cmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAgICBt
ZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdD
b3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBkZXRl
cm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBv
cCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9wIDp0YWlsX2NhbGxf
dmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJv
ZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczog
eworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7
CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5p
bCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBAIC04NDUsNiAr
ODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAg
ICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5p
bCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTIsNyAr
MTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhiNDNmNDQwLi43ZGEy
MmMyZDJjYzdiZmMxMWQxZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6
ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0ZXhwciBib29sIGVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCit7Cisg
ICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlw
ZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5n
X3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNpemVvZihJbnRUeXBl
MSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlw
ZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTI+
KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNo
ZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKKyAg
ICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKKworICAg
IGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN3aXRjaCAo
Y29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5vcGNvZGVJRCgpKSB7
CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BU
YWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9w
Q2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFy
Z3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVz
RXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENvbnN0cnVjdFZhcmFy
Z3M6OmFyZ0NvdW50KSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFyZ3M6
Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3Vu
dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIzMjU5
MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0Mjdl
ZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3
dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDggQEAg
cHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4TnVt
Q2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
LCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJh
bmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3NGU3
OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4MjgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQgb3Bl
cmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9j
YWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50
IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCk7
CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+PSBv
dXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFtsb2Nh
bF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYg
b3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShjb25z
dCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAgIHJl
dHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdh
eXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcklz
QWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBkMDc2MTA5YTFmZGE1
Zjk0N2Y1MjBmZTUxNGRkLi42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVjYzYzNmVhMWViNWNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMu
aCIKQEAgLTQwNyw3ICs0MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2NrKTsK
ICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhs
b2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJl
Z2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNvbnN0
YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9uZWRT
eW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2ZpbGVy
T3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxvd1By
b2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkg
PT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRjaGlu
ZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgogICAg
ICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUq
PihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRh
YmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1i
b2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CiAg
ICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5m
aW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0gICAg
ICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRhYmxl
T3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQo
c3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9s
VGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIpOwog
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1f
bG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRl
ZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVk
IGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0YXRpYyBib29sIHNo
b3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYg
dHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXggQ29k
ZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkgY29u
c3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25zdCBh
dXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAgICAg
IGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICByZXR1
cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZvaWQgQ29kZUJsb2Nr
OjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNvbnN0
IE9wQ2F0Y2gmCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0ZXJzKCk7ICsraSkK
ICAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSk7CiAKLSAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHByb2ZpbGVzID0gbWFr
ZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+KGxpdmVPcGVyYW5k
cy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3NpemUgPT0gbGl2ZU9w
ZXJhbmRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGVzLT5t
X3NpemU7ICsraSkKLSAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3BlcmFu
ZCA9IGxpdmVPcGVyYW5kc1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVy
LmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25l
ZCYgbnVtYmUKIAogICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsK
ICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9m
aWxlcykgewotICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAg
ICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAppbmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1NmNlNTgxNTBmNTM0
MjY2Li4yNTA2NzI2M2UyNDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2MzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEsNiArMTYxLDcgQEAg
cHVibGljOgogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNh
bGxlZUxvY2FsczsgfQogCiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KKyAgICBpbnQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5o
YXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAogICAgIGludCogYWRk
cmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIyOSwyMCArMjMwLDIw
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29u
c3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBi
b29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGluZSBib29sIGlzS25v
d25Ob3RJbW1lZGlhdGUoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIGlmIChp
bmRleCA9PSB0aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCisgICAg
ICAgIGlmIChyZWcgPT0gdGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9kZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRleCkuaXNDZWxsKCk7
CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KHJlZykuaXNDZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGluZGV4
KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOworICAg
ICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9CiAKICAgICBIYW5k
bGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRI
YW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4MSwxMCArNTgyLDkg
QEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0K
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25z
dGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
IAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1
cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0
aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC03NzQsNiAr
Nzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAgIAorICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkgY29uc3Q7CiAgICAg
dWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVy
OyB9CiAKICAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9CkBA
IC04NzQsNyArODc1LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CisgICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxDb2RlQ2FjaGUgbV9k
aXJlY3RFdmFsQ29kZUNhY2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0MiwxMCBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRh
YmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50
IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7
Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChyZWcuaXND
b25zdGFudCgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3RhbnRJbmRleCgpKSA8
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwogICAgIH0K
IAogICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4IDIx
MDY4MTNmMGExZWFhNTEzNGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5YTI4NmY4YWFiZjRk
MzMyZmZmMWU3MWVhM2M4M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uaApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBhcHByb3hpbWF0ZUhhc2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9IG51bGxwdHIpIGNv
bnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAgIHZvaWQgd2Fsa1Vw
SW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtVcElubGluZVN0YWNr
KGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBpbmxpbmVTdGFja0Nv
bnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0aGUgaW5s
aW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9u
bHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
CmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLjQ3YzY1N2M4
ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiAr
MjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNzIGRv
ZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVtcHMu
CisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1wTGl2
ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29sIHZp
cnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50
KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUo
cmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVu
ZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAgLy8g
RklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVtIGNv
bXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5pc20g
dG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxGYXN0
Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAppbmRl
eCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5hMGFhN2MwOTI0NGY5
OTU2YmVmMWZiOTgzOGI1NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3RydWN0
IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVD
b2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25lZCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBz
LgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERvIG5v
dCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBzaWdu
ZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0eXBl
IGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdl
IGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0
cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1h
bnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAg
IC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1
c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFsaXpl
IGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09mZnNl
dCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAgICwg
dG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5kKENh
bGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiArMjIy
LDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAorICAg
IHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRtcE9m
ZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2FsbGVy
RnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3Rl
cikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3QgcmV0
dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3Rl
cikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3LDkgKzI1Niw5IEBA
IGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrOwog
fQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVPcmln
aW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBpbiBJ
bmxpbmVDYWxsRnJhbWUKKy8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90
IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxl
ciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4K
LWlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9u
JiBmdW5jdGlvbikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSAqdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMzggQEAgaW5s
aW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1
bmN0aW9uKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBP
cGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNo
ZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1Vw
SW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVl
OworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3BlcmFu
ZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQg
b3BlcmFuZCkKK3sKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gb3Bl
cmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBpbmxp
bmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKworQUxX
QVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVyYW5k
KGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBPcGVy
YW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFu
ZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9w
ZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FMV0FZU19JTkxJ
TkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1ZWIxYzY0YTU5Li5l
MDNmYTM5Mzk1OTU1NTJlYmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
aApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25jdXJyZW50
SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICA6IG1fYnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQog
ICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBt
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgp
ICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAgIH0KICAgICAKICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgsNyArNzksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogCi0gICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJldHVybiBtX29wZXJh
bmQ7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRlOiAKICAgICBCeXRl
Y29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5SGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggMmI2OWYz
NmM3ZmJkYTEwNTU3ODlkZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5Yjk1NmY3OTc4NmVj
ODdhYTJjNjlhOGJjMDY3MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApAQCAt
NDIsNyArNDIsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQubV9raW5kID0gTGF6
eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2NrID0gY29kZUJsb2Nr
OwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0ga2V5LmJ5dGVjb2Rl
SW5kZXgoKTsKLSAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJhbmQo
KS5vZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJh
bmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKENDYWxsSGVscGVycyYg
aml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXp5
T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5
T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3Bl
cmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3Bl
cmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKICAgICAgICAgCiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpyZXBvcnRW
YWx1ZShKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIExhenlPcGVy
YW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVy
YW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5k
KSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5k
LmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7CiAg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5oCmluZGV4IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEyZGNmMzM1ZWM4OGQu
LjM2ZDM2OWYwYzAwZmJkNDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0cnVj
dCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAgICAgICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZDsKKyAgICAg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9IHU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCBmMjlm
ZjlmOTczNmFlYjM3MzQ1OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li5jY2UwODAyZjg5ZDE3ODg2ODA0
NjA5MDdlOTg2YTcwNGJhNmUxZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDExMSArMzUsMjE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9wZXJh
bmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1bnNp
Z25lZCBtYXhOdW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBvbmUg
dGhhdCBleGlzdHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBleGlz
dCBiZXR3ZWVuIGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQs
IExvY2FsT3BlcmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1YmxpYzoK
KyAgICBPcGVyYW5kKCkgPSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3QgT3BlcmFuZCYpID0g
ZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1lbnRPcGVy
YW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsgfQorCisg
ICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAgOiBtX2tp
bmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAgICAgICBB
U1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0xv
Y2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3BlcmFuZEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVyYW5kKTsK
KyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0KKyAgICB1
aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWludDY0X3Qg
dmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBUbXBP
cGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09
IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9Cisg
ICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVyYW5kICYm
IHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50KCkg
Y29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRv
QXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgp
KTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5lIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBP
cGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBBcmd1bWVudE9wZXJhbmQgfTsKKyAg
ICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lzdGVy
IH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25zdCBP
cGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4g
dmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKSA9
PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6aXNW
YWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgp
ID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKworaW5s
aW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAgT3Bl
cmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VSVChy
ZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNzZXJ0
KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRzKCkg
cmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtl
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0g
ICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAotICAg
IGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMp
CisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxU
LCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVf
djxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVmVHlw
ZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29u
c3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9u
dW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNpemUo
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9
CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1w
czsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZlY3Rv
clRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVzLmZp
bGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1l
bnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGlj
aXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90
IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50
cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsK
LSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51bUxv
Y2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVy
YW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYg
aW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJl
ck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2Nh
bHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFy
Z3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVzLmdy
b3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwog
ICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQorICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90IHRt
cEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVt
YmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVudHMp
OworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJl
dHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CisgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJl
ck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlk
eCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUg
dG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9
CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBhcmd1
bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2Fy
Z3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlk
eCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVm
VHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVu
dEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBp
ZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3Bl
cmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJu
IG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAg
ICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1wbGF0ZTxPcGVyYW5k
S2luZCBvcGVyYW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQorICAgIFJlZlR5cGUg
YXRGb3Ioc2l6ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1
bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBjYXNl
IEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwotICAg
ICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAg
ICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1wbGF0
ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZvcihzaXplX3QgaWR4
KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dp
dGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAg
ICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgpOwor
ICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgp
OworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBz
aXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3Vy
ZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMu
c2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsK
LSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVt
YmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAg
ICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOworICAgICAgICBzaXpl
X3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5l
d1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFs
dWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gVCgpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkKKyAgICAgICAgICAg
IG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRleChvbGROdW1UbXBz
IC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7CisgICAgICAgIGlmIChl
bnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplIC0gb2xk
TnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9jYWxJbmRleChvbGRO
dW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2
b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlKQorICAg
IHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgp
KQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBpZiAo
bmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZlRtcHMoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVz
LnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsg
bnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKworICAgICAgICBp
ZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5p
dGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwg
bmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVl
OworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlkeCwg
Y29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3Miw3NiBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09IFQoKSk7CiAgICAg
ICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzaXplX3Qgb3BlcmFu
ZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRGb3JPcGVyYW5kSW5k
ZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJl
ZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgoaW5kZXgpOyB9CisK
KyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAog
ICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1l
bnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCi0gICAg
c2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBjb25z
dAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmRJbmRleChvcC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChvcC52YWx1ZSgpKTsK
ICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBSZWZUeXBlIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbChW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1
bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAg
UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICByZXR1cm4gb3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlzVG1wKCkpCisg
ICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
IHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3QgVCYgb3BlcmFuZChp
bnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2Fz
dDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAgIGNvbnN0IFQmIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7
IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQp
OyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KICAg
ICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgYm9vbCBoYXNP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYg
KG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSkgPCBudW1iZXJP
ZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRv
TG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29sIGhhc09wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBv
cCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJlZy5vZmZzZXQoKSk7
CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AudmFsdWUo
KSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wLnZhbHVl
KCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc09wZXJh
bmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE9wZXJh
bmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChPcGVy
YW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy0+b3BlcmFu
ZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAg
ICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFsdWUpOwotICAgIH0K
IAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9Ci0g
ICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRl
eF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsg
fQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBh
dChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQo
aW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xvY2FsKHNpemVfdCBp
bmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IG9wZXJh
bmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZUeXBlIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgUmVmVHlwZSBh
dChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVm
VHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiAg
ICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQotICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZzZXQoKTsKLSAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1
bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgZWxzZSBpZiAo
aW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1l
bnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBpbmRleCAtIChudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAgICB2
b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAg
ICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVu
dCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCkBA
IC0yNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9m
QXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFTU0VS
VChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBB
U1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAgLTI2
NSw5ICszNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9m
IG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVjdG9y
PFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBtX251
bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMg
YXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSBy
ZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2YWY5
MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBAIC0z
MCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFuZDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAg
ICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgT3Bl
cmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxv
Y2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7CiAg
ICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRt
cHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgs
ICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2NhbElu
ZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBu
dW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwg
dG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJjMTI2
NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApA
QCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2RlVHlw
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6ZShz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQorICAg
ICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VN
b2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAg
ICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4
IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMwODJiMGEyNjNjMzA2
NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhw
cmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29sIGhh
c0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAgIHZv
aWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisKICAg
ICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0K
ICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIp
IHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0g
ICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50
SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQxOSw2ICs0MjEsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2lnbmVk
IG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhBZ2Up
OworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTExODMz
ZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5YTY5ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3Niwy
OCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVj
b2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVDYXNl
UHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1Y3Qg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3NpemUo
c2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUgc3R1
ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxlcwog
ICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1ZmZl
ciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1fc2l6ZSAqIHNp
emVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVmZmVyID0gTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyhtX3NpemUgKiBzaXpl
b2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZtX2J1
ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQog
Ci0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5W
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICBN
YWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7CisgICAgTWFsbG9jUHRy
PFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJl
Y292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVmM2U5
Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCkBAIC0zNSwyMiAr
MzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxGcmFtZSogY2FsbEZy
YW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSk7CiAgICAgY2Fz
ZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOworICAg
ICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJv
eGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CiAgICAg
Y2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihw
dXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVk
RG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAgIGNhc2UgQ2VsbERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBjYXNlIEJvb2xlYW5E
aXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAjZWxz
ZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4o
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKICNlbmRp
ZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZDhmMThj
M2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJiYmNjNGZmOTdhNjhm
ODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4NmJhYjEyZjZjY2M3
Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRkZjRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lz
dGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rl
ci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29s
IG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8IDA7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFu
ZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGludCk7CiAKKyAgICBz
dGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsK
KyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVy
SUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+KTsKIAogICAgIFZp
cnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50IHZp
cnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0
dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNM
b2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3VtZW50
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50PihzbG90
KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1
YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNMb2Nh
bCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0
ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lz
dGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzSGVhZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3Rl
ciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wgaXNDb25zdGFudCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xv
Y2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQo
aXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVy
KTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50
KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3Rh
bnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVy
OyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdp
c3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZm
ZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMgaW50IGxvY2FsVG9P
cGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAgIHN0YXRpYyBpbnQg
b3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAg
IHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJh
bmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmlu
ZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMuLjhkMmE3ZmI4MjQ3
NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xMTg3
LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5l
eHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAgICBtX3BhcmFtZXRl
cnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1ldGVyID0g
cmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgpKTsK
KyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1l
dGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb2RlIGJsb2NrIGtu
b3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IHBhcmFt
ZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgotICAgIG1fdGhp
c1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpOyAv
LyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAgICAgYm9vbCBub25T
aW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4o
KSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigp
OwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAg
ICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYm
IHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewot
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAg
ICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAg
ICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lz
dGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFs
dWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFs
UmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVl
ID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAg
ICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIy
OSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFy
YXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwu
CiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1p
dCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDog
VmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQp
OworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpKTsK
ICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMxZmUw
N2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZmZWMw
NjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0aW9u
TW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNT
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9
CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFz
Q2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4IDM1
NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTliMTIzZDRkODliYTA1
OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50IGlu
ZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBpbmRleCkKICAgICAg
ICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVlOwog
I2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rlcihp
bmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUz
ZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAg
LTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBB
YnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBl
bHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisK
IHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
b3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01K
SVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91
dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAg
ICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5w
cmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2Zjcz
OTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2Uu
aCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVl
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAg
ICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxz
ZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAg
LCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxv
YWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQ
cmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29s
IG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNT
RVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQg
IT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUo
a2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0
aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVh
cChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxp
ZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAg
ICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6
ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhl
YXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRhY2I1
NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uYzQ0MTBiMjU4YTYyMDlmODU3Njc2
YjY2MDM4NjYwZGE3MGQ0NjQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4MSw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExv
Y2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwg
c2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNo
Rm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5Miw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6
IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+
bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRh
dGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBh
bHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFs
dWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFs
dWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6
IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBv
ZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1l
bnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2
YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGlu
ZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0
YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1OCw2
ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwor
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYg
dGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpA
QCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRv
cCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFrZUhl
YXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCmluZGV4IGQ3MzI0N2I5M2M1ZGM3ODZiNjE3
YWE1YWFkYzJiMGY2MTUyODZiNWYuLjg5YzA4ZmEwODBjZWEzMmZkOWM1OTFmMzBmMWU3ZGQ0NmYx
ZDEyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQ
b3NpdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3Np
dGlvbi5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZXNbaV0tPmZpbmQoKTsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOwogCiAg
ICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAiKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCmluZGV4IGFmMmVkYTRhZDg4ZTliOTdhYWQ1ZjRmOTM5MjM3NjIxOTUyYWVm
ODQuLmZhMjRjNjlkMGZlY2I3YmFmYzcwNWQ4NWMzYzVhZDBjNjUzOTFlOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcApAQCAtMzU4LDkgKzM1OCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZz
ZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2Rl
LT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3
QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxk
MSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlX
aXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5v
ZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCksIG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTQ5MywxMCArNDk2LDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1Rv
cCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IGhlYXAub3BlcmFuZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJl
Z2lzdGVyIG1heSBub3QgcG9pbnQgdG8gYW4gYXJndW1lbnQgb3IgbG9jYWwsIGZvciBleGFtcGxl
IGlmIHdlIGFyZSBsb29raW5nIGF0IFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNIZWFkZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKHJlZykgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZChvcGVyYW5k
KSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5v
T3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgfQpAQCAtNTYwLDEyICs1NjMsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sg
fD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrIHx8IGlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9j
aykgewpAQCAtNjI3LDcgKzYzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoQWJzdHJhY3RIZWFwIGhlYXApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFwLmtpbmQoKSA9PSBTdGFjayAmJiAhaGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlu
bGluZUNhbGxGcmFtZSwgaGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0su
CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3Jp
Z2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9k
ZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChp
bnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8qIGFkZFRoaXMgPSAq
LyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0
ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
CkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtl
VmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5F
eGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNv
dW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSwgRWRn
ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhj
YW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKQEAg
LTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgYXV0byBz
dG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJbmRleCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRhLT5z
dGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVnLmlz
TG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9y
aWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNldCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBu
b2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZykpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2lu
LnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4
aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1
ZSkpOwpAQCAtMTAxOSw5ICsxMDM3LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4g
dmFyYXJnc0RhdGEtPm9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKQEAgLTEwMzAs
NyArMTA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJn
c0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEg
Pj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIHZhcmFyZ3NEYXRhLT5saW1pdCwgdmFy
YXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCmluZGV4IDYyNjExMjNjYmZlYzNlYmEx
OTVkMDliOTMxMDI2ZjI2YzcyNTg0NzYuLjIwNmQ2ZmJkYzU0YTM2Y2I4NDE4YThiMzg1NDZkODc1
Nzc5OTAxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1V0aWxpdGllcy5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJn
dW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
T3BlcmFuZCBvcGVyYW5kKQogeworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gKHJl
Zy5pc0FyZ3VtZW50KCkgJiYgcmVnLnRvQXJndW1lbnQoKSkgfHwgcmVnLmlzSGVhZGVyKCk7Ci0g
ICAgCisKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCiAgICAgICAgICYm
IHJlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTIsMTMgKzU2
LDEzIEBAIGJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgcmV0dXJuIHJlZyA+PSBhcmd1bWVu
dFN0YXJ0ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9CiAKLWJvb2wg
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBP
cGVyYW5kIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3Qo
Y2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIHJlZyk7CisgICAg
cmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBlbWl0Q29kZVRvR2V0
QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5v
ZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbikKKyAg
ICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBu
b2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7CiAgICAgR3JhcGgm
IGdyYXBoID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3MywxNCBAQCBOb2Rl
KiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8IGFyZ3VtZW50
cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25l
ZEFyZ3VtZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJl
c3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgotICAgICAgICB8
fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwKKyAgICAgICAg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSk7CiAK
KyAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisgICAgICAgIHJldHVy
biBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBhcmd1bWVu
dHMtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMpOworCiAgICAg
aWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsKKyAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwogICAgICAgICBCaXRW
ZWN0b3IqIGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAgICAgIE5vZGUq
IGN1cnJlbnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXJndW1lbnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsxMTAsNyBAQCBOb2Rl
KiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAoYXJndW1lbnRz
LT5vcCgpID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3
QXJyYXlCdWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNh
c3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAg
ICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpT
SW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CiAgICAgfQogICAg
IAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIwLDcgQEAgTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAK
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRz
U2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAhYWRk
VGhpczsKICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApCiAgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OwogICAgICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0
QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwg
QXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAgICAgICBFZGdl
KGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDEg
KyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBub2Rl
SW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgKyAhYWRkVGhp
cyksIEludDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAg
ICAgICAgLy8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVnYXRpdmUgbnVt
YmVyIGlmIHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQgaGVyZS4KICAg
ICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAgICAgICAgRWRn
ZShyZXN1bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29u
c3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQzMlVzZSkpOwor
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwg
b3JpZ2luLCBqc051bWJlcihhZGRUaGlzKSwgSW50MzJVc2UpKTsKICAgICAgICAgcmVzdWx0LT5z
ZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCmluZGV4IDlhNzcxOGZiYmY1NDdi
MmY2YWUxMDFkYWYzNzRhMDZhMmMzZGRmMTIuLjc0ZjkzOWU4MTYyMmQ0MDI0NmUyMzU1ZDUwOThh
OWVkMmE4NTIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNVdGlsaXRpZXMuaApAQCAtMzEsMTEgKzMxLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNh
bGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rlcik7Ci1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQpOworYm9vbCBhcmd1bWVudHNJ
bnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCk7CiAKIE5vZGUqIGVtaXRD
b2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBh
cmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbik7CisgICAgSW5zZXJ0aW9u
U2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIGJv
b2wgYWRkVGhpcyA9IGZhbHNlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCmlu
ZGV4IDk2ZGFjMzlhNDQ0ZmZiZDNjZTU0M2Y1N2YzNmNkNjFkZWNjMjhiZDQuLjg5N2M3MGRmZmJh
MDY2YjY0OWNhZmRjYzFlZjA5MzM3NjgxMDRkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCkBAIC0xMzksOCArMTM5LDcgQEAg
cHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IH0KICAgICB1
bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0
VGFpbC5udW1iZXJPZkxvY2FscygpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQg
b3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7
IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFi
c3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52
YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGxvY2Fs
KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4
KTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4g
bV9ibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsgfQogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCmluZGV4IDc3NDNl
N2QwMWYxY2FkNzgxZDg0YWIwM2QzYzA5Yzc3ZjgwMjliYTUuLmMyYjU1YWE1YzRhNTIyOWIxYjFh
NDQzMWMxODdhZGVmNDZjM2RiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCB2b2lkIEF2YWlsYWJp
bGl0eU1hcDo6cHJ1bmVIZWFwKCkKIAogdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lQnlMaXZl
bmVzcyhHcmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4gd2hlcmUpCiB7Ci0gICAgT3BlcmFuZHM8QXZh
aWxhYmlsaXR5PiBsb2NhbHNDb3B5KG1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksIG1fbG9j
YWxzLm51bWJlck9mTG9jYWxzKCksIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CisgICAg
T3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KE9wZXJhbmRzTGlrZSwgbV9sb2NhbHMs
IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoCiAgICAgICAgIHdoZXJlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcp
IHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgbG9jYWxzQ29weS5v
cGVyYW5kKHJlZykgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAgICAgICAgIH0pOwogICAgIG1f
bG9jYWxzID0gV1RGTW92ZShsb2NhbHNDb3B5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCmluZGV4IDUzNTUyNTYwMjNkZGNmMjgwZGM1OTViMzNh
N2M3ZmRlYzU0ZTY0ZjAuLjgwYzEyYmYxODAyNWE1NjEwNTk2ZGEyNGUyM2MwMjVmMmFiZTRmMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaApA
QCAtNjYsOSArNjYsOSBAQCBzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzRnVuY3RvciwgdHlwZW5hbWUgQWRkRnVuY3Rvcj4KLSAg
ICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3Qg
SGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCisgICAgdm9pZCBjbG9zZVN0
YXJ0aW5nV2l0aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3Qg
QWRkRnVuY3RvciYgYWRkKQogICAgIHsKLSAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0
eSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJp
bGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQob3ApOwogICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5o
YXNOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXggMDU4NDQ5NjNlNjEwZWQyOTNjNTYw
ZmFiZmQzODlhOWYzOTc4MGEwNy4uZTIxYjI4YjUyMjFmMTU2MThiODA2NGEzYTdiMmQ3ODY5MTM4
NDIxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotQmFz
aWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVk
IG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkK
K0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNp
Z25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywg
ZmxvYXQgZXhlY3V0aW9uQ291bnQpCiAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4p
CiAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICwgY2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRI
ZWFkKFN0cnVjdHVyZXNBcmVXYXRjaGVkKQpAQCAtNDgsMTEgKzQ4LDExIEBAIEJhc2ljQmxvY2s6
OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1
bWVudHMsIHVuc2lnCiAgICAgLCBpc0xpbmtlZChmYWxzZSkKICNlbmRpZgogICAgICwgaXNSZWFj
aGFibGUoZmFsc2UpCi0gICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMpCi0gICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdFRh
aWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3Ao
KSkKKyAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykK
KyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAg
ICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291
bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkBAIC03MCw2ICs3MCwxNSBAQCB2b2lkIEJhc2ljQmxv
Y2s6OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAgaW50ZXJzZWN0aW9u
T2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFs
dWU6OmZ1bGxUb3AoKSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25l
ZCBuZXdOdW1UbXBzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRt
cHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZh
bHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1
cmVUbXBzKG5ld051bVRtcHMpOworICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5l
bnN1cmVUbXBzKG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Cit9CisKIHZv
aWQgQmFzaWNCbG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
IHsKICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IGI1YWRmMDkxMmQwOTQyYmU5N2U5
ODdjZGM4OWY0YWUzNGQwYzBiYzguLjFkZDM4Yzc5MDhkYzZmNGQxYjA4NWJjOGUwNjI1NDgwZGI0
NDk3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00
NiwxMSArNDYsMTIgQEAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAK
IHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNC
bG9jaygKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1B
cmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5z
aWduZWQgbnVtVG1wcywKICAgICAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwogICAgIH5CYXNp
Y0Jsb2NrKCk7CiAgICAgCiAgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9j
YWxzKTsKKyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcyk7CiAgICAgCiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5kZXggNzUwOGUyMTlk
YzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOS4uMDA4Y2Y1MjI2OTU3YzlhODM1ODVjNWU1
ZTJjMTI1ZjJmOGNlNGIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBCbG9ja0luc2Vy
dGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+JiYgYmxvY2spCiAK
IEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9h
dCBleGVjdXRpb25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJl
ZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7CisgICAgUmVmPEJh
c2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgo
KSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCks
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCksIGV4ZWN1dGlvbkNv
dW50KSk7CiAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKICAgICBhdXRvKiByZXN1bHQg
PSBibG9jay5wdHIoKTsKICAgICBpbnNlcnQoaW5kZXgsIFdURk1vdmUoYmxvY2spKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggN2U0
YTlmZTYyMzNiNzQ0OWU4Mjg2NjJjMWU0OTlkYzllODQ0MDhiNy4uZDA2NDdjZjVkOTg2ZTBhOWRl
N2ZiNTQ0ZGVjZWE0MjI1NDY1YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkpKQogICAgICAgICAs
IG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwg
bV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQorICAgICAgICAsIG1f
bnVtVG1wcyhtX2NvZGVCbG9jay0+bnVtVG1wcygpKQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xv
dHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGlu
ZVN0YWNrVG9wKDApCkBAIC0xMzksNiArMTQwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAKKyAg
ICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKKyAgICB7CisgICAgICAgIFZF
UkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20g
IiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOworICAgICAgICBpZiAobmV3
TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbnVt
VG1wcyA9IG5ld051bVRtcHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJl
VG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBt
YXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRs
ZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0
b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzAsMjUgKzI4MiwzMyBAQCBwcml2YXRlOgogICAgIHZv
aWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRh
cmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtl
ZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2twb2ludCgpCisgICAgeworICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCks
IG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7
CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxR
dWV1ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5p
c0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJu
ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCiAgICAg
Ly8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24u
Ci0gICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUq
IGdldERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgIC8vIElzIHRo
aXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKIAotICAgICAgICAvLyBNdXN0
IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBnZXRMb2NhbChvcGVyYW5kKTsKKyAgICAgICAg
cmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAtMjk4LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAg
ICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJ
bmRleF0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICpt
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOwotICAgICAgICAg
ICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
PSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25z
dGFudChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
c291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4
ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhjb25z
dGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9s
ZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM1OCw5ICszNzgsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9mIGEg
ZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsKLSAgICBOb2RlKiBz
ZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNl
dE1vZGUgPSBOb3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5k
LCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAg
ICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsK
KyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKIAog
ICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3Rh
dGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CkBAIC0zNzQsNyArMzk1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUo
dGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNp
emUoKTsgKytpKQpAQCAtMzkyLDE4ICs0MTMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50
SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVk
aWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAg
IC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFu
ZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFuZCBvcGVyYW5kKQogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLQotICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2Nh
bCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkp
OworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2Fs
czogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAg
ICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJl
cXVpcmVkIGZvcgpAQCAtNDI4LDIwICs0NDgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZh
cmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAg
ICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0K
LSAgICBOb2RlKiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3Jt
YWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRp
Y09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0g
Tm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVy
YW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNo
YW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAg
IHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewotICAgICAgICAgICAgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwo
b3BlcmFuZCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG9wZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7CisgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxs
RnJhbWUoKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5k
LCAiIGJ1dCBjdXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBi
bG9jayBoYXM6ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAiIHRtcHMuIik7CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1t
ZWRpYXRlTmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBB
cmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25G
b3JMb2NhbChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAg
ICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0g
bV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3Jh
cGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lz
dGVyKCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAt
NDUxLDcgKzQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVy
Z2VDaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KSwgQmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNl
dExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7
CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDksMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSog
c2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQor
ICAgIE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBP
cGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQp
CiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9j
dXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnQgPSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251
bUFyZ3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEocmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQg
Zm9yICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4g
bWFrZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQg
fHwgbV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2Rl
ICE9IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJh
bmQpOworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9u
S2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OSwxNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zm
c2V0KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAg
ICAgICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9z
aXRpb24oT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAo
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1
bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQ
b3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9z
aXRpb25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NTAsOSArNTc5LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1Z2dlckVuYWJsZWQo
KSk7CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
c1dpdGhGaXh1cC5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFt
ZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVD
YWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0g
ICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJh
bmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJh
bWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBtX2dy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51bVBhcmFtZXRlcnMo
KTsKIApAQCAtNTc1LDYgKzYwNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVu
ZXNzID0gbV9ncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIC8v
IE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNhdXNlIHRtcHMgYXJl
IG5vdCByZXF1aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgICAgICAg
ICBjb25zdCBhdXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5l
c3MoYnl0ZWNvZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Q
b2ludChvcmlnaW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBsb2NhbCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9jYWxdKQpAQCAtNTg0
LDI3ICs2MTQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZv
aWQgZmx1c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaChPcGVyYW5k
IG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50
UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisg
ICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFy
Z3VtZW50UG9zaXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPEZs
dXNoPihvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxO
b2RlVHlwZSBub2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisg
ICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFu
ZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGU7CiAgICAgICAgIApAQCAtNjE0LDI2ICs2NDQsMjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJs
ZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3Bl
cmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAg
IGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2
b2lkIHBoYW50b21Mb2NhbERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lk
IHBoYW50b21Mb2NhbERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBhZGRG
bHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9z
aXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRy
eSogaW5saW5lU3RhY2tFbnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3Qg
PSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJl
Y3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAg
ICAgICBmbHVzaEltcGwoaW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZs
dXNoRGlyZWN0KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsK
LSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmly
dHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OwotICAgICAgICBhdXRvIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyIHJlZykgeyBwaGFudG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRG
bHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZs
dXNoRGlyZWN0KG9wZXJhbmQpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVj
dCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2Nh
bERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVu
dENvZGVPcmlnaW4oKSwgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAg
ICAgfQogCkBAIC03NjEsNiArNzkwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNo
aWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRv
R3JhcGgocmVzdWx0KTsKICAgICB9CisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwg
T3BlcmFuZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQob3Ag
PT0gTW92SGludCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFu
ZC5raW5kKCkpLCBPcEluZm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAg
Tm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIs
IEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkp
CiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCkBAIC0xMDkx
LDggKzExMjUsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJndW1lbnRz
IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7Ci0g
ICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBpbiB0
aGUgZnVuY3Rpb24uCisgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jh
cmllcykgdXNlZCBieSB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25l
ZCBtX251bUxvY2FsczsKKyAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1wcyB1c2VkIGZvciBm
b3J3YXJkaW5nIGRhdGEgdG8gYW4gT1NSIGV4aXQgdG8gY2hlY2twb2ludC4KKyAgICB1bnNpZ25l
ZCBtX251bVRtcHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6
ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGFy
Z3VtZW50cyB0byBvdXRnb2luZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRoaXMKICAgICAvLyBu
dW1iZXIgaW5jbHVkZXMgdGhlIENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGluaXRpYWxpemUgZm9y
IHRoZSBjYWxsZWUKQEAgLTExNTksMTQgKzExOTUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAorICAgICAg
ICBPcGVyYW5kIHJlbWFwT3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpICsgbV9p
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAr
IG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQogICAgIH07CiAgICAg
CkBAIC0xMTc1LDEzICsxMjE0LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFj
ayBtX2ljQ29udGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgewot
ICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOwotICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRNb2RlIG1fc2V0TW9k
ZTsKLSAgICAgICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQotICAgICAgICBEZWxh
eWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExv
Y2FsKGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1
ZSwgU2V0TW9kZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAg
ICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVl
KQpAQCAtMTE5NCw4ICsxMjI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJz
ZXItPnNldEFyZ3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7
Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5k
LCBtX3ZhbHVlLCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9j
YWxPclRtcChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwogICAgICAg
ICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAgT3BlcmFuZCBtX29w
ZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07CisgICAgICAgIFNldE1v
ZGUgbV9zZXRNb2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwg
Mj4gbV9zZXRMb2NhbFF1ZXVlOwpAQCAtMTIwOCw3ICsxMjQ3LDcgQEAgcHJpdmF0ZToKIEJhc2lj
QmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwotICAgIFJl
ZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUlu
ZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBi
bG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0
IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29kZUJlZ2luCiAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCkpCkBA
IC0xMjIwLDcgKzEyNTksNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVU
YXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2Nr
KiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVm
PEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5k
ZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2Nr
KiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92
ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTE0MjMsNyArMTQ2Miw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIElm
IHRoZSB0YXJnZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZhcmFyZ3MsIHdlIGRvIG5vdCBrbm93IGhv
dyBtYW55IGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgZmlsbGVkIGJ5IExvYWRWYXJhcmdzLiBWYXJh
cmdzIElubGluZUNhbGxGcmFtZSdzCi0gICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRz
IGJ5IExvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBt
YXkgYmUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGlt
dW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgeGtMb2FkVmFyYXJn
cy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCiAgICAgICAg
ICAgICAvLyBhIGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50by4KICAgICAgICAgICAgIGlmIChjYWxs
RnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OSw3
ICsxNDg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwo
Tm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgLy8gV2UgbXVzdCBz
ZXQgdGhlIGNhbGxlZSB0byB0aGUgcmlnaHQgdmFsdWUKICAgICAgICAgaWYgKHN0YWNrRW50cnkt
Pm1faW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgc2V0RGlyZWN0KHN0
YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOworICAgICAgICAgICAgICAgIHNldERp
cmVjdChyZW1hcE9wZXJhbmQoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAK
QEAgLTE2MTQsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NF
UlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAt
IG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFt
ZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFs
UmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAg
CisgICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBt
X2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpICsgY29kZUJsb2NrLT5udW1UbXBz
KCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1
bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAg
ICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAg
ICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1
YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9
IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzYsNyAr
MTY3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5
KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRy
eSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVu
Y3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFt
ZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxv
Y2spOworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAg
IC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAg
ICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBAIC0xNjcxLDkgKzE3
MTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVu
IHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3
YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwg
bG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBj
YWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3Zl
ciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAg
ICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwg
dmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRU
b0dldCksIHZhbHVlKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXll
ZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIElt
bWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxNywx
NiArMTc1OCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNo
IGNhc2VzLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lz
dGVyT2Zmc2V0QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2lu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBj
YWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlu
ZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRU
b0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwg
eyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFr
ZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKyBpbmRleCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJn
dW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFy
Z3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAg
ICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVm
aW5lZCk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2Nh
bCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRp
YXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KIApAQCAtMTg5MywxMiArMTkzNCwxMiBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlh
bnQsIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50
IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAg
IGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9M
b2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJl
bWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBw
ZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAg
ICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFy
Z3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1h
cHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKQEAgLTE5MDYsMTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0Owog
ICAgICAgICBkYXRhLT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAg
ICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0
KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50ID0gYWRkVG9HcmFwaChHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAg
ICAgICBlbHNlIGlmIChpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudCA9IGdldERpcmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZy
YW1lKCksIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIGVsc2Ug
CisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwg
T3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRW
YXJhcmdzLCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAg
ICAgICAgICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoT3BlcmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAg
ICAgICAgc2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9w
SW5mbyhkYXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQo
KTsKKworICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBn
ZXRMb2NhbE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0
byBrZWVwIGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5k
IGFyZ3VtZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5
IG5lZWQgYSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NiwxNCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1
YWxSZWdpc3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3Ro
ZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVm
b3JlIFNTQS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJp
YWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRh
dGEtPmNvdW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwg
Zm9yY2UgdGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAg
ICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50
RGVmaW5pdGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8v
IG1vc3RseSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0
KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJs
ZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dy
YXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFi
bGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRB
cmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAg
ICAgIHVuc2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDcsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49
IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0
ZWx5LCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOwor
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJn
dW1lbnRzOwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNyw3IEBAIEJ5dGVDb2Rl
UGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZygKICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwg
cmVnaXN0ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4i
KTsKICAgICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0
V2l0aEZsdXNoKTsKIApAQCAtNTEwMiw3ICs1MTU2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0
YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGgu
ZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChi
eXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZy
b3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4
cCksIGpzQ29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9uZXdfcmVnZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMyLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSAmJiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0
KDApLT5vcCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayku
bV9idWZmZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZm
ZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAg
ICAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2Fk
IGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIy
MywxNCArNjI3NywxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkg
ewogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVy
YW5kKTsKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xv
Y2FsKCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0
Q2F0Y2hMb2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlv
bnNbbnVtYmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsK
LSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3Bl
cmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhvcGVyYW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tl
ZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTIsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0g
bV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENv
bnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAgICAgICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4
MjYsOCArNjg4MCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
TGV4aWNhbEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3Rh
bnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUq
IGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkp
OworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
Lm1fc3ltYm9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNj
b3BlID0gZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVu
dmlyb25tZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFi
bGUpLCBPcEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2OTExLDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IC8vIGxvYWRzIGZyb20gdGhlIHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0aGF0IHdvdWxkIHBy
ZXZlbnQgdGhlIERGRyBmcm9tIHRyYWNraW5nIHRoZQogICAgICAgICAgICAgLy8gYnl0ZWNvZGUt
bGV2ZWwgbGl2ZW5lc3Mgb2YgdGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICAgICAg
ICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKTsKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIGlmIChKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4o
Km1fdm0pKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9u
LT5zY29wZSgpKTsKQEAgLTcyNzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRo
ZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRo
YXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRU
bXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGlu
ZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRt
cHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVD
YWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
KTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGNhbGxlZSk7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9
IGZhbHNlOwpAQCAtNzYzOCw3ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2Uo
KQogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSht
X2dyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5s
b2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3Jj
ZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc2NTgsMjQg
Kzc3MTQsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1w
dHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhdXRv
IGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF2YXJpYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnQgPSBvcGVyYW5kIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQg
PSB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVy
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQ
b3NpdGlvbio+JiBhcmd1bWVudHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlv
bnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRzW2FyZ3VtZW50LnRvQXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2
YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBh
dXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBh
ZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQ
cmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGly
ZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxE
aXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2Vydmlu
Z09wKGlubGluZUNhbGxGcmFtZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3Jp
Z2luLnNlbWFudGljLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAg
LTc3NDAsNiArNzc5Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAg
QVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
fQogCisgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2Fs
VmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFy
YW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CmluZGV4IDhlOWJiNGFjYmU1NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNiZmQuLjNkYzc1Njhm
MWVlMmM2OTc3MjI2OGNjOTZkZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9u
YWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRs
ZVZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFs
dWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgIGlmICghdmFsdWUp
IHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4g
Ynl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGlmICghbm9kZSkgewogICAgICAg
ICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5p
bmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwg
IiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUo
bV9ncmFwaCwgdmFsdWUudmFsdWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKaW5kZXggZDk4ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0MjZhZjBmMjM4Mi4u
NTc3MGYwOTg5NDJjODk2YjdhY2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC01
Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKICAg
ICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBo
aXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPFRtcE9wZXJhbmQ+
KCk7CiAgICAgICAgIGNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFi
bGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlh
YmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9u
aWNhbGl6ZUdldExvY2FsRm9yPFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+
b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0yNzAsMTUgKzI4MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXpl
Rmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2Rl
VHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9M
b2NhbCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXpl
Rmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2
YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3Bl
cmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogewor
ICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwg
VG1wT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY2Fub25pY2FsaXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2Js
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAg
ICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
LCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2Nr
KCkKQEAgLTI4OSw2ICszMTEsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgY2xlYXJW
YXJpYWJsZXM8QXJndW1lbnRPcGVyYW5kPigpOwogICAgICAgICBjbGVhclZhcmlhYmxlczxMb2Nh
bE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJhbmQ+KCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVl
biByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJl
IGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQg
dGhlIHJlZgpAQCAtMzg4LDcgKzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09
IEFyZ3VtZW50T3BlcmFuZCA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsK
KyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tG
b3I8b3BlcmFuZEtpbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRl
bXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBA
IC00NjYsOSArNDg5LDEyIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkK
ICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAg
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2Nh
bFBoaVN0YWNrOworICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2Ug
QXJndW1lbnRPcGVyYW5kOiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNl
IExvY2FsT3BlcmFuZDogcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBUbXBP
cGVyYW5kOiByZXR1cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0Zs
dXNoZWQoKQpAQCAtNTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7
CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZl
Y3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUq
LCAxMjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5
NDcxYjVhNjE2NjdjZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsx
NDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazog
ewogICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5y
ZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNv
bnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigp
OwogICAgICAgICAgICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3Rh
Y2spIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZp
bmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0
b3ItPnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIy
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0g
bG9jYXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCku
aXNUb3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwg
bG9jYXRpb24sIG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2Fk
KCkudmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0
SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQo
KS52YWx1ZSgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3
IEltcHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
U2lkZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7
Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5k
KGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBh
eWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5r
ZXkgPT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+
dmFsdWU7CkBAIC0yOTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBp
biB0aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAg
Ly8KICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFj
a01hcCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8
aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50
MzJfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBt
X2Fic3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVf
cHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
OwogICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA4OWJjNjQxZjUyNmJi
NTNmZjAzN2Y3M2NmOTUwYmFjNjQ2ZDQ5OTU0Li44MmYzY2E2NDE4NGY5MTkzNjUwMzliMTMyMjE3
ZGQ5OWVhOTcxMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgLy8gc2Nh
biB3b3VsZCByZWFkLiBUaGF0J3Mgd2hhdCB0aGlzIGRvZXMuCiAgICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
KTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogCiAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2RlcyBjYW4gcmVhZCBm
cm9tIHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICB3cml0
ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5Nyw3ICs0OTcsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZs
dXNoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwor
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAg
ICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNzY0LDEyICs3NjQs
MTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBMYXp5Tm9kZShu
b2RlKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
TG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBT
ZXRDYWxsZWU6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7CkBAIC03ODAsNyAr
NzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3Qg
UmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAgICBjYXNlIFNldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgpAQCAtNzg4
LDM2ICs3ODgsNDMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZSkpOwor
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+
b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJh
Y3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQo
KSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7Ci0gICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
OworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPm9wZXJhbmQpOwogICAgICAgICByZWFkKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVh
cCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBB
YnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQp
OwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xv
YywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOworICAgICAgICByZXR1cm47ICAKKyAgICB9CisK
ICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3
cml0ZShIZWFwKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291
bnQub2Zmc2V0KCkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGkt
LTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9m
ZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MjYsOSArODMzLDkgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAgIAogICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkp
KTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBz
dGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAK
aW5kZXggOTU4NjZhN2Y5MWE3MTQ0MmRhMWM0ZjdlNDcwMGQwOWNkMmFjMzBmMy4uMTU3NDZjMDU0
ZjBkZjMzYmEzMmQzOWZhZmUwMmRiYmQ3ZDI5MTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCkBAIC0zOSw3ICszOSw3IEBAIHN0
YXRpYyB2b2lkIGFkZEJ5dGVjb2RlTGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlN
YXAmIGF2YWlsYWJpbGl0eU1hcCwKIHsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgK
ICAgICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lz
dGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKICAgICAgICAgICAgICAgICByZWcs
CiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IDc5ODdiODcwZmQ1MDlmOTMw
MDA3ZTM1NmFjMDU1ZWE2NmJmZTdhZGIuLjdmZmQ0ZDM1YjZjZjVjOWRlMzgxZTdkYTYxMzMyZmQ1
MjQ5NjU1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNw
cApAQCAtNTYsNyArNTYsNyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZENvZGVPcmln
aW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29k
ZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwog
ICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJu
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3Nh
YmxlQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6
YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkBAIC02NCwxMyAr
NjQsMTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4
KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdp
bik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFT
U0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2Fs
bFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6bGFzdENh
bGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5zaXplKCkp
OwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdpbnMuc2l6
ZSgpIC0gMSkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
cy5zaXplKCkgLSAxKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6
YWRkRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDg1NDEyMzE0NzQxZTZmMTEyNjFm
MmU5N2M0OWZlNjQ0ZGFlN2JhZjcuLmYzOGM4M2ZkZDMwYzJmNTNiM2Q1MDkzZjQwYjJjNzBlOTUz
MTA0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI5NCw2
ICsyOTQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0
b206CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
Y2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0
aFZhbGlkUmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAppbmRleCAxN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5Li40NWZiYzQz
OWQ1M2JhOTUwZTdhOGQ4OWFjOWVjMTk3MmJhMDkzOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw3ICs5MCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJl
c3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0
aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAv
LyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlv
biBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKTsKLSAgICB2bS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7CiAgICAgdm0u
Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgdm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFlZTFmMDA3M2IwZjRiYmNjNDczNGViNjQx
ZTQ2NDhjMzA1NWEyNDQuLmNhMzNkYjIyN2Q0YjkyNzczZmE4NmQ3MmVlM2Q0ZDFiODViZjk4M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjQz
Miw2ICsyNDMyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBu
b2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBj
YXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKQEAgLTI0NjQsOCArMjQ3Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFp
bENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
SW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgY2FzZSBG
b3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNl
IFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNh
c2UgTmV3UHJvbWlzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aAppbmRleCAwYmYxYzNmYmJhYzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUyOGI5Li45MzNhMmJk
ZTIyZTE2NmMyYWViNmQ0YWMxYmJlOWNlMWU1Y2VkNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC0zMiw2ICszMiwxMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFjZSBGb3JBbGxLaWxsc0ludGVybmFsIHsK
K2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKwogLy8gVXRpbGl0aWVzIGZvciBm
aW5kaW5nIHRoZSBsYXN0IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSBpbiBERkcgU1NBLiBU
aGlzIGFjY291bnRzIGZvciBsaXZlbmVzcyBkdWUKIC8vIHRvIE9TUiBleGl0LiBUaGlzIGlzIHVz
dWFsbHkgdXNlZCBmb3IgZW51bWVyYXRpbmcgb3ZlciBhbGwgb2YgdGhlIHByb2dyYW0gcG9pbnRz
IHdoZXJlIGEgbm9kZSBpcyBsaXZlLAogLy8gYnkgZXhwbG9yaW5nIGFsbCBibG9ja3Mgd2hlcmUg
dGhlIG5vZGUgaXMgbGl2ZSBhdCB0YWlsIGFuZCB0aGVuIGV4cGxvcmluZyBhbGwgcHJvZ3JhbSBw
b2ludHMgd2hlcmUgdGhlCkBAIC01MywxMyArNTcsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVy
YW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29u
c3QKICAgICAKICAgICBDb2RlT3JpZ2luIGFmdGVyID0gbm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhp
dDsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOworICAgIE9wZXJhbmQg
YWxyZWFkeU5vdGVkOwogICAgIC8vIElmIHdlIE1vdkhpbnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2
ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxsIHRoZSBvbGQgdmFsdWUuCiAgICAgaWYgKG5vZGVB
ZnRlci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5C
eXRlY29kZShyZWcsIGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAg
ICAgICAgYWxyZWFkeU5vdGVkID0gcmVnOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2Rl
QWZ0ZXItPnVubGlua2VkT3BlcmFuZCgpOworICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRl
Y29kZShvcGVyYW5kLCBhZnRlcikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7Cisg
ICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSBvcGVyYW5kOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtNzAsOCArNzQsMjQgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAvLyBvdGhl
ciBsb29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUu
aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxGcmFtZSA9PSBhZnRl
ci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJ
bmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsK
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihiZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRl
eCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZS5ieXRlY29kZUlu
ZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkp
OworCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRv
IGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5i
eXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgaW50IHRtcE9mZnNldCA9IGJlZm9yZUlubGlu
ZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAg
ICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZmlsdGVy
KGxpdmVBZnRlcik7CisKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0g
KHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKE9wZXJhbmQoVG1wT3BlcmFu
ZCwgdG1wICsgdG1wT2Zmc2V0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIE5v
IGxvY2FscyBjYW4gZGllIGF0IGEgY2hlY2twb2ludC4KKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFt
ZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwogICAgICAgICBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJs
b2NrKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZl
bmVzcy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0
aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVB
ZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKQEAgLTgyLDE3ICsxMDIsMjEgQEAg
dm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUs
IE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIAorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJ
bmRleCgpLmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEgY2hlY2twb2ludCBi
dXQgYmVmb3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxsRnJhbWUuIik7CisK
ICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtp
bGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9y
IGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAgICBncmFw
aC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0g
Z3JhcGgubG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICB1bnNpZ25lZCBu
dW1Mb2NhbHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAg
ICBiZWZvcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAg
ICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5k
KSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQocmVnLnRvTG9jYWwo
KSkpCisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1M
b2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAg
IGlmIChsaXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKICAg
ICAgICAgfSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI5LDggQEAgdm9pZCBmb3JBbGxLaWxsZWRO
b2Rlc0F0Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VlbkluQ2xv
c3VyZUZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsbGVkRnVuY3Rv
ckZsYWcgPSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFnczsKLSAgICAKKwor
ICAgIEFTU0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAsMTUgKzE0NSwxMyBA
QCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0pOwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBpZiAobm9kZUluZGV4
KQotICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgTm9kZSog
YmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAgIFsmXSAoVmlydHVh
bFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCi0gICAgICAgICAg
ICAgICAgcmVnLAorICAgICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgICAgICAgICAgWyZd
IChOb2RlKiBub2RlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdz
LmdldChub2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAgICAgIH0sCkBAIC0x
NTksNiArMTgyLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgLy8gU3RhcnQgYXQg
dGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkg
aW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1cCB0byBu
b2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1
bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAx
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICBkYXRh
TG9nTG5JZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5
IGF0IGluZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFi
aWxpdHkpOwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAg
ICAgZ3JhcGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBibG9jaywgbm9kZUlu
ZGV4LAogICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCmluZGV4IGIzMjBmNzA3Yzk1ZjEyMzkzODUxYmMzYjJiMmI0MmI5NTZk
ZDBiZjUuLjA3MWRlMjM5MmI5YzVjOTI4NmRlOWM3ODc4ZmU5YWYwMGMwYjRlNDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4LDggQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUq
IG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0
aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVB
Y2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRo
aXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwgVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAgICAgICAg
IG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwogICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgIm1hY2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9k
ZSwgRHVtcENvbnRleAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkp
IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0YS0+bWFjaGluZUxv
Y2FsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwg
ZGF0YS0+bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5mb3Jt
YXQpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKLSAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgIGlmIChub2RlLT5o
YXNVbmxpbmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIsIG5vZGUtPnZlY3Rv
ckxlbmd0aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVlKCkpCkBAIC01MTUs
OSArNTE1LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAgIG91dC5wcmludChw
cmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJs
b2NrLT5waGlzW2ldOworICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsK
ICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVt
cE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUt
PmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQo
KSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBo
aU5vZGUtPmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9k
ZS0+Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGls
ZDIoKSkgewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2Nh
bChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAg
ICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmxv
Y2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkKICAgICAgICAg
ICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwo
QmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAg
ICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0
YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxv
Y2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgTm9kZSog
b2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAg
ICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICBibG9j
ay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0g
bmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAg
ICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9y
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVybiBraWxsc0Zvcihi
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6
aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJhbmQsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDaGVj
a2luZyBvZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgIGJvb2wgaXND
YWxsZXJPcmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAm
Y29kZU9yaWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9y
aWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29k
ZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUg
dGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQorICAgIC8v
IHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAgZm9yICg7
IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAgIGlubGluZUNhbGxG
cmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAob3Bl
cmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBpbmxpbmVD
YWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAgICAgICB1
bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1
ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsKKyAgICAg
ICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5s
aW5lZC4KKyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1D
aGVja3BvaW50VG1wcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFu
ZEluZGV4IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBj
b2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdE1h
cC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9yaWdp
blB0ci0+c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAgICAgICBhdXRvKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAg
ICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgp
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAgICAgICAgIGlmIChy
ZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLm9m
ZnNldCgpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogCiAKICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0gICAgICAgICAgICAg
ICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkxvb2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAg
ICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7CisgICAg
ICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTG9va3MgbGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc2LDQyICsxMTk3LDQxIEBAIGJvb2wgR3Jh
cGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxp
dmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2spOwogICAgICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJ
bmRleCgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy5vcGVyYW5kSXNMaXZlKHJl
Zy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUu
XG4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZ1bGxM
aXZlbmVzcy52aXJ0dWFsUmVnaXN0ZXJJc0xpdmUocmVnLCBieXRlY29kZUluZGV4LCBhcHByb3By
aWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmln
aW4pKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWx3YXlzIGxpdmUu
IFRoaXMgd291bGQgYmUgcmVkdW5kYW50IGlmIGl0IHdhc24ndCBmb3Igb3VyCiAgICAgICAgIC8v
IG9wX2NhbGxfdmFyYXJncyBpbmxpbmluZy4KLSAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkK
KyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiByZWcuaXNBcmd1bWVudCgpCiAgICAgICAg
ICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkpIDwgaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpKSB7CiAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBpcyBsaXZlLlxuIik7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFdlIG5lZWQg
dG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0
aGUKLSAgICAgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2Fs
bC4KLSAgICAgICAgY29kZU9yaWdpblB0ciA9ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxl
cjsKICAgICAgICAgaXNDYWxsZXJPcmlnaW4gPSB0cnVlOwogICAgIH0KKworICAgIGlmIChvcGVy
YW5kLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwor
ICAgIHJldHVybiB0cnVlOyAgICAKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi1CaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmln
aW4gY29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBCaXRWZWN0b3IgcmVzdWx0OwotICAg
IHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgdW5zaWduZWQgbnVt
TG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOworICAg
IHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZUbXBzKCkpOworICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgK
ICAgICAgICAgY29kZU9yaWdpbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXN1bHQu
cXVpY2tTZXQocmVnLnRvTG9jYWwoKSk7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2Nh
bHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIHJl
c3VsdC5xdWlja1NldChvZmZzZXQpOwogICAgICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMTYzNSw4ICsxNjU1LDggQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFw
aDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KIAogICAgIGZv
ciAoTm9kZSogbm9kZSA9IG9wZXJhbmROb2RlOyBub2RlOykgewogICAgICAgICBpZiAobm9kZS0+
YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKLSAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYm
IG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAgICBpZiAobV9mb3Jt
ICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKTsKICAgICAgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX3Jvb3RUb0FyZ3VtZW50cy5maW5kKGJsb2Nr
KDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRz
IGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NTg0MQpAQCAtMTY1Niw3ICsxNjc2LDcgQEAgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2Rl
KiBjdXJyZW4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUtleSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+b3BlcmFu
ZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZmFiOWNmMDJhMjU5NzZlZjQ3ZDE3OTA1YmFkOWNlMDNl
MzgyYmNlNS4uZjdhMWQ4MjE0YzMwMmQ3ZDk2YWMyYTc3YTAxODY2YTlkMTE5ZjUyZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtODQwLDEzICs4NDAsMTMgQEAgcHVibGlj
OgogICAgIC8vIFF1aWNrbHkgcXVlcnkgaWYgYSBzaW5nbGUgbG9jYWwgaXMgbGl2ZSBhdCB0aGUg
Z2l2ZW4gcG9pbnQuIFRoaXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZwogICAgIC8vIGZvckFsbExp
dmVJbkJ5dGVjb2RlKCkgaWYgeW91IHdpbGwgb25seSBxdWVyeSBvbmUgbG9jYWwuIEJ1dCwgaWYg
eW91IHdhbnQgdG8ga25vdyBhbGwgb2YgdGhlCiAgICAgLy8gbG9jYWxzIGxpdmUsIHRoZW4gY2Fs
bGluZyB0aGlzIGZvciBlYWNoIGxvY2FsIGlzIG11Y2ggc2xvd2VyIHRoYW4gZm9yQWxsTGl2ZUlu
Qnl0ZWNvZGUoKS4KLSAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBD
b2RlT3JpZ2luKTsKKyAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCwgQ29kZU9yaWdp
bik7CiAgICAgCi0gICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9j
YWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKKyAgICAv
LyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgYW5kIHRtcHMgbGl2
ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQogICAgIC8vIGFueSBh
cmd1bWVudHMgYmVjYXVzZSB0aG9zZSBhcmUgYWxsIHByZXN1bWVkIGxpdmUuIFlvdSBjYW4gY2Fs
bCBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIHRvCiAgICAgLy8gYWxzbyBnZXQgdGhlIGFyZ3VtZW50
cy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNhbGxpbmcgaXNMaXZlSW5CeXRlY29kZSgpIGZv
ciBlYWNoIGxvY2FsLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBm
b3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNv
ZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsK
ICAgICAgICAgLy8gU3VwcG9ydCBmb3Igbm90IHJlZHVuZGFudGx5IHJlcG9ydGluZyBhcmd1bWVu
dHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGluIGNhc2Ugb2YgYSB2YXJhcmdzCiAgICAgICAgIC8vIGNh
bGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93cyB0aGF0IGFyZ3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBp
biB0aGUgY2FzZSBvZiBhIG5vbi12YXJhcmdzCkBAIC04ODEsNiArODgxLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW3JlbGF0aXZlTG9jYWxdKQog
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygpKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxv
Y2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgbGl2
ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kKFRtcE9wZXJh
bmQsIHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC05MDQsOSArOTEyLDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2Nh
bHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgorICAgIC8vIEdldCBh
IEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIGxvY2FscyBhbmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4g
VGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCiAgICAgLy8geW91IHdhbnQgdG8gY29tcGFyZSB0d28g
c2V0cyBvZiBsaXZlIGxvY2FscyBmcm9tIHR3byBkaWZmZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAg
Qml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOworICAgIEJpdFZlY3Rv
ciBsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CiAKICAgICBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29k
ZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNDYWxsZXJPcmlnaW4pCiAgICAgewpAQCAtOTM4LDEyICs5
NDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50
OjpCZWZvcmVVc2U7CiAgICAgfQogICAgIAotICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIGFy
Z3VtZW50cyBhbmQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMg
YSBzbWFsbAotICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgp
LCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KKyAgICAvLyBU
ZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVyYW5kcyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2lu
LiBUaGlzIGlzIGEgc21hbGwKKyAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzT3JUbXBz
TGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVk
IGxpdmUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbExp
dmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKICAgICB7Ci0gICAgICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4s
IGZ1bmN0b3IpOworICAgICAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29k
ZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAgICAgIAogICAgICAgICAvLyBSZXBvcnQgYWxsIGFyZ3Vt
ZW50cyBhcyBiZWluZyBsaXZlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykK
QEAgLTExMTQsNiArMTEyMiw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dh
cmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9t
aW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKKyAg
ICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWdu
ZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTExYzQ1YjA1NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIw
MmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhiZTM4NGUzZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00
NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAg
IDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJh
Y3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCi0gICAgLCBtX2Jsb2NrKDApCisgICAg
LCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAppbmRleCBiZjVlYWQxOGVj
MTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcxMjk5Li4xODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4
NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBAIC0xNjcsMTMgKzE2NywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAot
ICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1
ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFi
bGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5kZXgob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAg
ICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVy
biB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpOyB9Ci0gICAgCiAgICAgQWJzdHJhY3RW
YWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxl
QXQobV92YXJpYWJsZXMubG9jYWxJbmRleChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAzZDg0M2NlNThmMjBiNDExNjMzOWZjZGE5
NTg4YWViYTZiN2E4YzJlLi41M2RiOWNkMTRjYWM2YjZlNjY4MmVmZGY0YmE3OTQ4OTdjYTVkNWE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAt
ODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0g
ICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRy
VGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxh
dGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBM
aXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRI
YXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZt
KCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgp
KSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdldCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGFkZExp
bmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0YXJnZXQsIG9zckV4aXRUaHVu
a0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGlu
Zm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgICAgICBpbmZvLm1fcGF0
Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAgICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3
LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2lj
QmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7
CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1
ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmco
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJs
ZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA2
OGNhOThkZjZmNWM0YjdiNjM3MmNjMTU4MThlYzI1NzI4MmY4OWQ5Li41MGYxZDg5M2RhMzAyMTAy
Yjk1ZTc4YWM2MDQzOWQ4NjIzNmYzY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBl
bWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCiAgICAgewotICAg
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwor
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFy
aWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBm
OTNlMDhhYzI1Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1Zh
bGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRl
eCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlv
bihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0
LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25n
LAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVz
aCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRv
IGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2ln
bmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlm
IChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5s
b2NhbCgpID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5h
Y2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJh
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJ
bnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBj
dXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3Ig
bGl2ZUF0Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3Bl
cmFuZHM8Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVy
UmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEg
KzEzMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
Y29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykp
IHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAg
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxM
b2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hI
ZWFkLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAog
ICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1
NiwxMiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVy
UmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0
YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51
bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50Qmxv
Y2tBY2Nlc3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0
cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3Jp
Z2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVu
dEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2Nh
bCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNB
cmd1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0
Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3
OCw2ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwg
PSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9j
YWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2Nh
bCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVz
aChPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1c2goVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAgICAgICAgfTsKIApA
QCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09IFNldExvY2FsIHx8
IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwo
KSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJn
dW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3Bl
cmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZl
QXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3BlcmFuZCkpOwogCiAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIw
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFj
Y2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNz
RGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3Bl
cmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7
CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChv
cGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxh
c3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJl
bW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVk
ODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApA
QCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7
CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICBibG9j
ay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAg
IH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewotICAgICAgICAgICAgICAgIEVwb2NoIGxv
Y2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQg
Iiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2Nh
bEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxF
cG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOworICAg
ICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBF
cG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWF5
RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSArMTE2LDE1IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2Nr
LT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0
IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJv
dGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRl
Lm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3Bl
cmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdNb3ZI
aW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywg
IlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1
cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2ls
bGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50RXBvY2g7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5
NmY0MDRlMzNiNDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1
Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0YWNrQWNjZXNz
RGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKLSAgICAgICAg
OiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVz
aEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAsIGZv
cm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9j
YWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAg
ICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05
MjMsOSArOTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBy
ZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBA
IC05NzMsOSArOTc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8VmFy
aWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZE9wZXJhbmQo
KQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgRXh0cmFjdE9T
UkVudHJ5TG9jYWw6CkBAIC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJh
bmQgdW5saW5rZWRPcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExv
Y2FsKCkpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMy
X3Q+KCkpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICBy
ZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0K
ICAgICAKICAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJn
czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJk
VmFyYXJncyB8fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRW
YXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAppbmRleCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0
Li5lM2U5YzMyZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAg
IC8qIFRoZXNlIGFyZSB1c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wK
ICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxT
dGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0
SlMpIFwKQEAgLTIwMiw2ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oR2V0QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRz
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xl
bmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExv
YWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3Ms
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRl
eCAzMjgwZjg3YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi5kMTBhMjA3MDRiMDE5
ZDdlODc3YWNiMjk2MzI2YmE4OTcwMGMxM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
QEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci19CiAKIGNsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAg
ICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDgg
QEAgcHVibGljOgogICAgICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBt
X2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgw
KS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAg
ICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2cob3BlcmFuZCwgIiAiKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFM
b2dMbigiIik7CiAgICAgICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sg
IyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHko
YmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAg
ICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAg
ICAgICAgICB9CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4
KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNj
ZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiQWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpA
QCAtMjA4LDI4ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6
OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
Y2FzZSBQdXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChkYXRhLT5sb2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEt
PmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEtpbGxTdGFjazogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gp
KTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9k
ZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRB
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21i
aWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVu
YXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQyLDE1ICsyNDAsMTgg
QEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUq
IG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKworICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsK
KyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPSBB
dmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7Ci0gICAgICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRh
LT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZs
dXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFy
dC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShG
bHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCArIGkpKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3MywyMCBAQCB2b2lkIExv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8v
IFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQu
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0gICAgICAgICAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBM
b2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRi
ODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTMyMiw3ICszMjIs
NyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcpIEZpeCB0aGUgY2Fs
bCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAotICAgICpiaXR3aXNl
X2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykg
PSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAgIAogICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmlu
ZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICszODIsMTAgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9T
UkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwog
ICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0
YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCku
bWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUqIGRhdGFC
dWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNoT1NSRW50
cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQp
LmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZlcltpbmRl
eF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1MDY2
NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jvb3QtPmFw
cGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rpb24o
KSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8o
dmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8odmFy
aWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNw
ZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQo
KSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwg
T3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAgICAgICAg
ICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2OWI0MWNhOGY5OGYz
MDhiM2E0YzkzM2JhOTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZlMzJkNjc3NDIwMWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVV
c2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1
ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAi
REZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQVVN0YXRl
ID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0OwotdXNp
bmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBjb25z
dCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFByb2Jl
OjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
LCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVpbnQzMl90
IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBqc1ZhbHVl
Rm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlmIChzb3Vy
Y2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHN0ZDo6
bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsgc291cmNl
Lm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoY3B1Lmdw
cjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChzb3VyY2Uu
aGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygpLCBjcHUu
Z3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZShj
cHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4oc291cmNl
LnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVT
X1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29u
dGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKGNvZGVC
bG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVz
dG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygp
LCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
Y2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxTdGFja0Zy
YW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBl
bnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0
ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8g
VGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFjaywgbm90
IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRoZSB2YWx1
ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQgb2YKLSAg
ICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFTU0VSVCgh
KGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAgY29udGV4
dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5Lm9mZnNl
dCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNz
ZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZl
Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17
Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2Rl
QmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdp
c3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVl
U2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNv
dW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVz
LT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQuZnAoKSwg
ZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3By
KCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9p
ZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0g
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZt
Q2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQg
cmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVudHJ5UmVj
b3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAg
VUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ1BVUmVn
aXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0KLSAgICAv
LyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0g
YWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMu
Z2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzaXplX3Qg
dWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rlcik7Ci0g
ICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4dC5ncHIo
ZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XTsKLSAg
ICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRleHQuZnBy
KGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZm
ZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2lu
dCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0g
KmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsK
LQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BF
bnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNvcmQtPmNh
bGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxs
Q2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMt
PnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBp
KyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5h
dChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0g
ICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNv
bnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAgICAgZWxz
ZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZl
QnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5y
ZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdp
c3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQg
b24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0
aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIsIGJv
b2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgp
LCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3Rl
clNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMo
KSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0K
LSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50
cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdWludHB0
cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlhVGFpbENh
bGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAg
c2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zmc2V0KCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBjb250ZXh0
LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNldFZpcnR1
YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRSZWdpc3Rl
clZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9TQVZFU19S
RUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4
dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsg
fQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxv
Y2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVSX09GX0NB
TExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVjdEFy
Z3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGlu
dDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigp
OwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1
bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxlbmd0aCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMSkpOwot
ICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCi0g
ICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVudHNTdHJ1
Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxlZSh2bSwg
Y2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigp
ICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsK
LSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4UXVpY2ts
eSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBj
b250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAg
IFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0Rl
ZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsK
LQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIENs
b25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKLSAg
ICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxl
ZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIq
PigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAw
KTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdElu
ZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUsIGNvbnN0
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBmcmFtZShj
b250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQs
IGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50
cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVy
YW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAgICAgICAg
ICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3Jl
YXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQgaWQgPSBy
ZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBm
cmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0KLSAgICAg
ICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZyYW1lKCk7
Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAgICAgICAg
SlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVlID0ganND
YXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50
KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCogYXJndW1lbnRzT2Jq
ZWN0OwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0ID0gY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBjb2Rl
QmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRl
ZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1
cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJn
dW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoYXJn
dW1lbnRzT2JqZWN0KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQo
aWQsIG9wZXJhbmQpOwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2Yg
ZXh0cmEgaW5pdGlhbGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGluIG9yZGVyCi0vLyBv
ZiBtb3N0IGxpa2VseSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxlYXN0IGxpa2VseSBu
ZWVkZWQgKGhpZ2hlciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5pdGlhbGl6YXRpb24g
aW5jbHVkZXMgdGhlIHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1c2Ugb2YgdGhlCi0v
LyBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51bSBjbGFzcyBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3VsYXRpb25SZWNvdmVy
eSwKLSAgICBWYWx1ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxlVXBkYXRlLAotICAg
IE90aGVyCi19OwotCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxGcmFtZS0+ZGVwcmVj
YXRlZFZNKCkgPT0gJnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsKLQotICAgIGlm
ICh2YWxpZGF0ZURGR0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBleGl0IG9w
dGltaXplZCBjb2RlLiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGltaXplZAotICAgICAg
ICAvLyBjb2RlIHJ1bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAgICB2bS5oZWFwLnNl
dEV4cGVjdERvZXNHQyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1lRm9yQ2F0
Y2gpIHsKLSAgICAgICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2g7Ci0gICAgICAg
IGNvbnRleHQuZnAoKSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0KLSAg
ICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhl
cmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFi
bGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotCi0gICAgdWludDMy
X3QgZXhpdEluZGV4ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklUQ29kZSogZGZnSklU
Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JFeGl0JiBleGl0ID0g
ZGZnSklUQ29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJUKCF2bS5jYWxsRnJh
bWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBFWENFUFRJ
T05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8fCAhZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQuZXhpdFN0YXRlKSkg
ewotICAgICAgICBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAgICAgIC8vIFdlIG9u
bHkgbmVlZCB0byBleGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBPU1JFeGl0IHJlY29y
ZC4gVGhlIGNvbXB1dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBjYWNoZWQgaW4gdGhl
IE9TUkV4aXRTdGF0ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0aGUKLSAgICAgICAg
Ly8gZXhpdCByYW1wIGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0g
ICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsKLSAgICAgICAg
aWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICByZWNv
dmVyeSA9ICZkZmdKSVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVyeUlu
ZGV4XTsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxh
dGlvblJlY292ZXJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1f
a2luZCA9PSBHZW5lcmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUg
PSBudWxscHRyOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAg
ICAgICAgaWYgKGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICBp
ZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2Zp
bGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJv
ZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQzMl90
IGFjdGl2ZVRocmVzaG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3RlZENvdW50ZXJWYWx1
ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKTsKLSAgICAg
ICAgZG91YmxlIGFkanVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NB
bmRDb252ZXJ0VG9JbnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAg
ICAgIEFTU0VSVChhZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBhZGp1c3RlZFRocmVz
aG9sZCA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNl
bGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAg
ICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8
IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OwotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhpdFRvTExJbnQpIHsK
LSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3Vy
cmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlT2Zmc2V0KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJU
YWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29k
ZU1hcCgpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29k
ZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAgICAgIE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFu
ZFNwYW4+IHVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklUQ29kZS0+dmFyaWFi
bGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBk
ZmdKSVRDb2RlLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5kcywgJnVu
ZGVmaW5lZE9wZXJhbmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJPZmZz
ZXQgPSAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29t
bW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKTsK
LQotICAgICAgICBleGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JFeGl0U3RhdGUoZXhp
dCwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdURk1vdmUodW5kZWZp
bmVkT3BlcmFuZFNwYW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNldCwgYWN0aXZlVGhy
ZXNob2xkLCBhZGp1c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQcm9maWxlLCBleGl0
VG9MTEludCkpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikpIHsK
LSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9wZXJCeXRl
Y29kZVByb2ZpbGVyOwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxh
dGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0
KCk7Ci0KLSAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21w
aWxhdGlvbi0+YWRkT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVy
OjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0g
ICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxlSW52
YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9maWxlckV4aXQgPSBw
cm9maWxlckV4aXQ7Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6
Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6
T3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50
RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBz
dGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bDo6T3RoZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpKSkg
ewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykgZnJvbSAl
cywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9D
U3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgZXhpdEtp
bmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCi0g
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3Bl
cmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NSRXhpdFN0YXRlJiBl
eGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0g
ICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0YXRlLm9wZXJhbmRz
OwotICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5lZE9wZXJhbmRTcGFu
cyA9IGV4aXRTdGF0ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBjb250ZXh0LnNwKCkg
PSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9pbnRlck9mZnNldDsK
LQotICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGlsZSBsb29wIGlz
IHNvIHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCi0gICAgZG8gewot
ICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19jYXN0PEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCk7
Ci0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBFeHRyYUluaXRpYWxp
emF0aW9uTGV2ZWw6Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdp
biBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292ZXJ5Ci0KLSAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJzdCBiZWNhdXNlIGFy
cmF5IHByb2ZpbGluZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8vIG1heSByZWx5IG9u
IGEgdmFsdWUgdGhhdCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vzbid0IG1lYW4gdGhh
dCBpdCBpcyBsaWtlbHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5IHZhbHVlLiBTbywg
d2UnbGwgZGVjb3JhdGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3Zl
cnkqIHJlY292ZXJ5ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBpZiAoVU5MSUtFTFko
cmVjb3ZlcnkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAgICAgY3B1Lmdwcihy
ZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0g
Y3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIp
KTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6
Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIFNwZWN1bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8aW50MzJfdD4ocmVj
b3ZlcnktPmRlc3QoKSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIp
KTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6
Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgICAgIGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkg
LSByZWNvdmVyeS0+aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAgICAg
ICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFn
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSBe
IEpTVmFsdWU6OlZhbHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFZh
bHVlUHJvZmlsZVVwZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFsdWU7Ci0gICAgICAg
IGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBwcm9maWxlZFZhbHVl
ID0ganNWYWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAgIGlm
IChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFsdWVQcm9m
aWxlKQotICAgICAgICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJvZmlsZWRWYWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IEFycmF5
UHJvZmlsZVVwZGF0ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBl
eGl0U3RhdGUuYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoISFleGl0Lm1fanNW
YWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUg
fHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJhc2VsaW5lQ29k
ZUJsb2NrKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IHBy
b2ZpbGVkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAgICBib29sIGRvUHJv
ZmlsZSA9ICFpbnN0cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCkubWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9kZU1ldGFkYXRhLm1v
ZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgaWYgKGRvUHJvZmls
ZSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcHJvZmlsZWRWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUt
Pm9ic2VydmVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2Zp
bGUtPm9ic2VydmVBcnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSkK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJhIGluaXRpbGl6YXRp
b24gbGV2ZWw6IE90aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9PSBHZW5l
cmljVW53aW5kKSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8g
b3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KLSAg
ICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNr
IHBvaW50ZXIuCi0gICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29udGV4dC5m
cCgpID09IHZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChl
eGl0U3RhdGUucHJvZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRlLnByb2ZpbGVyRXhp
dC0+aW5jQ291bnQoKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRFYWNo
T1NSRXhpdCgpKSkKLSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0LCB2bS5vc3JFeGl0
SW5kZXgsIGV4aXQpOwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQgZXh0cmEgaW5pdGlh
bGl6YXRpb24uCi0KLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsK
LSAgICBBU1NFUlQoIShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4NykpOwotCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3RlcikgPT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NFUlQoY3B1Lmdwcjxp
bnQ2NF90PihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOb3RDZWxs
TWFzayk7Ci0jZW5kaWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBh
bmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8gTm90ZTogd2UgbmVl
ZCB0byByZWNvdmVyIHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBzYXZlIHJlZ2lzdGVy
cyBiZWxvdwotICAgIC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5IG9uIHZhbHVlcyBp
biBzb21lIG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBjYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lQ29kZUJsb2Nr
LT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAgc2l6ZV90IG51bWJl
ck9mT3BlcmFuZHMgPSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51bVVuZGVmaW5lZE9w
ZXJhbmRTcGFucyA9IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0KLSAgICBzaXplX3Qg
bmV4dFVuZGVmaW5lZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRPcGVy
YW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRlZmluZWRPcGVyYW5k
U3BhbnMpCi0gICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVy
YW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLQotICAgIEpTVmFs
dWUgdW5kZWZpbmVkID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVfdCBzcGFuSW5kZXgg
PSAwOyBzcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsrc3BhbkluZGV4KSB7
Ci0gICAgICAgIGF1dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbc3BhbkluZGV4XTsK
LSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0gICAgICAgIGludCBs
YXN0T2Zmc2V0ID0gZmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0ZXJzOwotCi0gICAg
ICAgIGZvciAoaW50IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBsYXN0T2Zmc2V0OyAr
K29mZnNldCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0LCB1bmRlZmluZWQp
OwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZk9w
ZXJhbmRzOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5
ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFu
ZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChVTkxJS0VM
WShpbmRleCA9PSBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAgICAgICAgICAgaW5k
ZXggKz0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXgrK10ubnVt
YmVyT2ZSZWdpc3RlcnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRlZmluZWRTcGFuSW5k
ZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAgICAgbmV4dFVuZGVm
aW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3Bh
bkluZGV4XS5maXJzdEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5l
eHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcu
dG9Mb2NhbCgpIDwgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0KLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2Fs
bEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZnBy
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
Y2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1Lmdw
cjxKU1ZhbHVlPihyZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQot
ICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigpKSwgY3B1Lmdwcjxp
bnQzMl90PihyZWNvdmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+KHJlY292ZXJ5Lmdw
cigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVl
KGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94
ZWRDZWxsKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNvdmVyeS5ncHIoKSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBCb29sZWFuRGlz
cGxhY2VkSW5KU1N0YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2VuZGlmCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVj
b3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVu
c2FmZVVuYm94ZWRJbnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5n
cHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJl
Y292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdHJp
Y3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LmFzYW5VbnNhZmVVbmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHB1cmlmeU5hTihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5V
bnNhZmVVbmJveGVkRG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIENvbnN0YW50OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCByZWNv
dmVyeS5jb25zdGFudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRGly
ZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNlIENsb25lZEFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHll
dC4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVu
IHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVTYXZlc0Zvcihjb250
ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNwdS5n
cHIoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVn
aXN0ZXI+KEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJbmZvOjpub3RDZWxs
TWFza1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpO
b3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KGNvbnRleHQpOwotCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFjayBhcmUgcmVj
b3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhhdCBhcmd1bWVu
dHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRvIGVhY2ggb3Ro
ZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQotICAgIC8vIHJl
ZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5lZWQgdG8gZG8g
dGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAvLyBOb3RlIHRoYXQg
d2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQgc3RpbGwgYmUg
bWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNhbGwgZnJhbWUgc2Nv
cGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0KLSAgICBERkc6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklUQ29kZSwgb3BlcmFu
ZHMpOwotCi0gICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5j
ZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFsbCBuZXcgY2FsbHMg
aW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKLSAg
ICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1Ig
ZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRo
ZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gT1NS
IGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAg
IC8vCi0gICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFu
Y2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVudHVhbGx5LCBzaW5j
ZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAgICB3YW50
IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCi0g
ICAgLy8KLSAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0
IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBjb2RlIGFuZCBoYXMg
bmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8vICAgICBw
ZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgotICAg
IC8vCi0gICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3Qg
aW1tZWRpYXRlbHkgcmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1z
IG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAgICAgcGFydGljdWxh
cmx5IGV4cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMs
IGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8gICAgIHJ1
bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmln
Z2VyZWQuCi0gICAgLy8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRo
ZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
V2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8vIChhKSBh
bmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1
bml0eSBmb3IKLSAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBF
c3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1ZW50bHkgYW5kIHRo
ZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKLSAg
ICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmln
Z2VyZWQuIE9TUiBlbnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMg
aG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gZ29vZCBqb2Ig
b2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChk
KSwKLSAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhl
IGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIg
b2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vIGxhcmdlciB0
aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBh
bmQgaWYKLSAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNl
IHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJXYXJtVXAoKS4KLQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9TUkV4aXRD
b3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2RlQmxvY2s6
Ok9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJlb3B0aW1p
emF0aW9uTm93KGJhc2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0KTsKLQotICAgIHJl
aWZ5SW5saW5lZENhbGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwot
ICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJsb2NrLCBiYXNlbGlu
ZUNvZGVCbG9jaywgZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9j
aywgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5j
cHU7Ci0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZv
cm1pbmcgYW4gT1NSIGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2Fs
bHMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUx
MQotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxvY2sqPihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLQot
ICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0g
JmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENh
bGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2Nr
KTsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZDsKLSAg
ICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAgICAgIHZvaWQqIGNh
bGxlckZyYW1lID0gY3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50ID0gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5s
aW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5QQyA9IGZy
YW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSNpZiBDUFUoQVJN
NjRFKQotICAgICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSAr
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1Ag
PSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkg
KyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIocmV0
dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8UHRy
VGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4o
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7Ci0gICAgICAgICAg
ICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+
Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxlclJl
dHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwgdHJ1
ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAgICAgaWYgKHRydWVD
YWxsZXItPmlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNhbGxlckZyYW1lID0g
Y3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCktPnN0YWNr
T2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShBUk02NEUpCi0gICAg
ICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2Fs
bEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSB0YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG5l
d0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVD
YWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnJhbWUuc2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAg
ICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVnaXN0
ZXJzLgotICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwgdGhh
dCB3aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8KLSAg
ICAgICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMgYWxy
ZWFkeSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAgIHNh
dmVPckNvcHlDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7Ci0K
LSAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7
Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGlu
ZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRh
VGFibGVHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFi
bGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2
b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywg
TExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1l
KTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1l
T2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFn
T2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNv
IHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0
cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWlu
dDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIFRhZ09mZnNldCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpKTsK
LSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29u
c3RhbnQoKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBw
YXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAgICB9Ci0KLSAgICAv
LyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBk
aWQgaW5saW5lIHRhaWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotI2VuZGlmCi0gICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0KQot
ewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0K
LSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4
cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNl
LgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8v
IFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVu
dCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5s
aW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1
cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBp
ZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUg
YiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1F
OiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBDb2Rl
QmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxGcmFt
ZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewot
ICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNh
bGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJh
bWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0SW5s
aW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAg
aWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRleHQu
ZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5q
dW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3Bf
Y2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5jYWxs
RnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAgICB2
bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAoZXhp
dFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9y
RXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhp
dC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0Zv
ckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAgICAg
IGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVj
dGlvbnNSYXdQb2ludGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKS5vZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3Ry
dWN0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8SlNF
bnRyeVB0clRhZz4oanVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChD
b250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4
aXQpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+
KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwot
ICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0g
ICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBkYXRh
TG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2co
IiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4
aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7
Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRl
cm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRl
cm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAg
ICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0
dGlzb25lZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1l
IG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVn
aXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoi
LCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRhdGFM
b2coIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAg
ICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVpbnQ2
NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91YmxlIHZh
bHVlID0gY29udGV4dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJc
biIpOwotfQotCi0vLyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQg
c3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShr
aW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+
bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNl
KQpAQCAtOTU4LDE1ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+
IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4aXQ6
OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlmaWVk
SUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0dWFs
UmVnaXN0ZXI+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1
bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0g
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAgICAg
ICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJRCBp
ZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2Nh
dGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2Nh
dGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0Ojpl
bWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVy
YW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGppdC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFu
ZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgsNyBAQCB2b2lkIE9T
UkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNv
bnN0IE9wZXJhbmRzPFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBP
cGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCi0gICAgICAg
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICAgICAgYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkp
OwogICAgIH0KIH0KIApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGls
ZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29u
c3QKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUp
OwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVD
aGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4ndCB1c2Ug
YSBwcm9iZSBidXQgZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0cyBpcyB0cmlja3kg
b3RoZXJ3aXNlLi4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2YWx1ZXMob3BlcmFu
ZHMubnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJh
bmRzLm51bWJlck9mVG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvcGVyYW5k
cy50bXAoaSk7CisKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBhdXRvKiB0bXBT
Y3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAgICAgICBqaXQucHJv
YmUoWz0sIHZhbHVlcyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFt
ZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRl
ID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAg
ICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVzW2kgKyB0bXBPZmZz
ZXRdOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdoYXQgdGhl
IEZUTCBkb2VzIGFuZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGludG8gdGhlIHNjcmF0
Y2ggYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUocmVjb3Zlcnku
Y29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0bXBTY3Jh
dGNoW2kgKyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZElu
dDMySW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3Rh
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kgKyB0
bXBPZmZzZXRdKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEaXNw
bGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1w
c1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAg
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4
aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxl
clNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNh
bGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAg
ICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIGFkZFNp
ZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgLSBzaXpl
b2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwg
Ynl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIERvIGFsbCBk
YXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3Rh
Y2suCiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgp
OyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3Bl
cmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMudmly
dHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgp
ICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpbnQg
b3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYm
IG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxv
Y2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAg
ICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmgKaW5kZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1NGYxYTA0ZWI4ZS4u
OWU5YmNlYTQ4MWMxZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBzdHJ1Y3QgT1NSRXhp
dCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAgc3RhdGljIHZvaWQg
ZXhlY3V0ZU9TUkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZjNTMzMjc4NGYwYTI5
MmE0OWNiZTFiODJhNTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJjM2MxMjQzNWRiOTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCkBAIC03MCw2
ICs3MCwxMSBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1cm4gbV9raW5kID09
IEdlbmVyaWNVbndpbmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzRXhpdGlu
Z1RvQ2hlY2twb2ludEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0KKwogcHJvdGVjdGVk
OgogICAgIHZvaWQgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBw
cm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKaW5kZXggMmZmM2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRkNTExNS4uYWNmNTFk
MGI0ZmE1YzJmMTEyNGM1YWM3OTU5NTUzOWU4MTBmOTEzOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjks
MTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZXMu
aCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRG
R0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKKyNpbmNs
dWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2LDkgQEAgdm9pZCog
Y2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0
ZWNvZGVJbmRleCBjYWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VP
U1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZjaGVj
a3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQpOworCiAgICAgdm9p
ZCoganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBAIC0yMzgsNyArMjQ0
LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwg
Y2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQuYmFzZWxpbmVDb2Rl
QmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwor
ICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2Vs
aW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwogICAg
IGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2Rl
T3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CkBAIC0zMDUsMzMg
KzMxMSwzNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBBc3Nl
bWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRl
eChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3Jl
MzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlI
ZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2RlQmxvY2stPmJ5dGVjb2Rl
SW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKKyAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5z
dG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMg
aXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0
aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KCkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0g
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkp
LCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92
ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0
aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMK
ICAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5k
ZXgoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKICNlbHNlCi0gICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlv
bnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9j
YXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9yRXhpdChj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKGJ5dGVj
b2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpLmJpdHMoKTsK
ICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBqaXQuc3RvcmUzMihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgfQogfQogCkBA
IC0zODIsMTEgKzM4OSwxMiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpKSk7CiAKICAg
ICB2b2lkKiBqdW1wVGFyZ2V0OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6
OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRvTExJbnQpIHsKICAgICAg
ICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVC
bG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBM
TEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBi
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSA/IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJU
YWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oJmNoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCkp
IDogTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsK
IAogICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewogICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50SW5zdHJ1Y3Rpb24p
LCBHUFJJbmZvOjpyZWdUMik7CkBAIC00MDIsNyArNDEwLDE0IEBAIHZvaWQgYWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQogI2VuZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxP
U1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJs
b2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggaW5kZXhGb3JDaGVj
a3BvaW50UmV0dXJuID0gY29kZUJsb2NrRm9yRXhpdC0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoZXhp
dEluZGV4KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxv
Y2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoaW5kZXhGb3JDaGVj
a3BvaW50UmV0dXJuKTsKKyAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpIHsKKyAg
ICAgICAgICAgIGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQgPSBjb2RlTG9jYXRpb247CisgICAgICAg
ICAgICBjb2RlTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KCZjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQpKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAgICAgIGp1bXBUYXJn
ZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRk
cmVzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXggMjE2YzViYWExNGQ5NmIyOWI1
ZGQzNjlhNzNiZmVjYjRiMDNkYzE5OS4uN2RhNmFmZDVjMjIxYzk3ZmY5M2Y0MDBjYjM0OTQ0NTRk
NGQ0OTI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0yMTA3LDcgKzIxMDcsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVhcC5mb2xsb3coYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGlu
dCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAg
ICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggZjM5YzE0YjlmMGE0NDg3ODlkNzcyZGMyN2RmMTU4
ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0YmY1ZWE2MGE2ZTY2NTIwZmUwNTE0NGJjYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVj
dCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJbnRlZ3JhbFR5cGUgdmFsdWUpCiAgICAg
ICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSB7IH0KICAgICBleHBs
aWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIDogbV92YWx1ZShzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlKSkpIHsg
fQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQgb3ApIDogbV92YWx1ZShvcC5hc0JpdHMo
KSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBleHBsaWNpdCBPcEluZm8o
VCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5k
ZXggNTBjYTAwYjAwYjk0ODhhMTAzMjg3MjYyOGE5ZTJlZTg3M2YyYzM3OS4uY2YwOWQ4NzM5NzRh
ODU2MzNhMmVkYjY4Nzc2OTJkYjEwNzY4NDA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTQ2LDE1ICsyOTQ2LDE2IEBAIGludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg
bGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogeworICAgIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0KSwgYXJndW1lbnRzLCBv
ZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50KSksIGFyZ3VtZW50cywgb2Zm
c2V0LCBsZW5ndGggLSAxKTsKICAgICAKLSAgICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGg7IGkg
PCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0
aCAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGNhbGxGcmFtZS0+cihm
aXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CiB9CiAKIGRvdWJsZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAK
aW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2RiMzZhYjVhMGM2YWRjMi4uMmIxMDViMmNh
ZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVlMDliYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcApAQCAtNDMsMTEg
KzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2Ugewog
Ci1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWwgewotc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQogY2xhc3MgUGhhbnRvbUluc2VydGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21JbnNlcnRpb25QaGFzZShHcmFwaCYgZ3Jh
cGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGluc2VydGlvbiIpCkBAIC02Miw3
ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0TG9jYWxzIGV4ZWN1dGUsIHdoaWNoIGlz
IGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2VydCB0b28gZmV3IFBoYW50b21zLgog
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9yZWZDb3VudFN0
YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1BoYW50b21J
bnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUGhhbnRvbSBpbnNlcnRpb246XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC03Miw3ICs2OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAgIGhhbmRsZUJsb2NrKGJsb2NrKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3Jh
cGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVt
cCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIgKzEwMCwyMiBAQCBwcml2YXRlOgogICAgICAgICB1
bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAg
aWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwg
bm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgICAgICAg
ICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBudWxscHRyOworICAg
ICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0g
bnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM0LDM4ICsxMzEs
NDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAg
ICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlVwZGF0aW5nIGVwb2NoIGZvciAi
LCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIGVkZ2Ut
PnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOworICAgICAgICAgICAgT3BlcmFuZCBh
bHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0g
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERGR1BoYW50
b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIHJlZywgIlxuIik7CisgICAgICAgICAgICBh
dXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIEtpbGxlZCBvcGVyYW5kOiAiLCBv
cGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZCBmcm9tIFNldExv
Y2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeUtpbGxlZCkKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGFscmVh
ZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUq
IGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJlZyk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVl
cy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIs
IG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVkIGluIHRoaXMgYmxvY2suIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBt
X3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQgYSBQaGFudG9tIGlmIHRoZSBub2RlIGhh
c24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAgICAgICAgICAgICAgICAvLyBleGl0LCBh
bmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQuCi0gICAgICAgICAgICAgICAgaWYgKGtp
bGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKQorICAgICAgICAgICAgICAgIGlmIChr
aWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9jaCkgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiBoYXMgY3Vy
cmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRp
b25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
Ci0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIEluc2VydGluZyBQaGFudG9tIG9uICIsIGtp
bGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChs
YXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsCisgICAgICAgICAgICAg
ICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAi
LAorICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCkpOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50
cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bwogICAgICAgICAg
ICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAgICAgICAgICAgICAgIGtpbGxl
ZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3OSwxNCArMTgwLDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewot
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7Cisg
ICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAg
ICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAog
ICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBk
b25lLgotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBsb2NhbDsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAg
IGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2FsKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAg
bV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlB
dChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCBh
NThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0Mjk4ODZlMDc4ZjBhZmNjLi5mNWYwOTZjOGViNTZkNDVm
YTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3Rl
cihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJp
YXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4
cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBi
eSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0g
ICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVh
bFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElm
QXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIGhlYXAub3BlcmFuZCgpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCku
a2luZCgpID09IFN0YWNrKTsKICAgICAgICAgCi0gICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rl
cihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUpOworICAgICAgICBt
X2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHBy
b3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkw
NDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBt
dXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25h
bDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAg
aWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCmluZGV4IDgwNTA1MTZjYmZlY2M4NGZlMTk1ODQyOGEwY2Y4N2NkNTRlZTExN2IuLjIy
MWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5YmU2ZDMxOTdjMTNmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAg
ICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAg
ICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5mZDYx
MjNmYTlmMWQ1MjllNGMyZWUyYzBlN2VkZjYzZjA3Zjc4ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIs
MTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2Ug
ewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1Npbmtp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3Jh
cGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcg
KzcwLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRv
IG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBz
aW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAt
ODgsMTEgKzg1LDggQEAgcHVibGljOgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4g
bGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxp
dmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFy
aWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8
Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAg
ICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRb
YmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJv
b2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRh
aWxbYmxvY2tdOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxv
Y2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1
dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAi
LCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5k
bGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQ
dXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9y
d2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBvcCA9PSBWYXJhcmdzTGVuZ3RoIHx8IG9w
ID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZvcndhcmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFj
ayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1
YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0ZXMpCisgICAgICAgICAgICAgICAgICAgIGZvciAo
T3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5v
cGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVy
YW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFu
ZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApA
QCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVz
aEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
Mzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNDb25mbGljdGluZyA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFu
ZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhaXNDb25mbGljdGluZyk7
CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQdXRTdGFjaykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0aW5nIGZsdXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwg
IiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFjaykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEgUHV0U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRM
b2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcg
c3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxp
Y3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBh
dXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2Fw
aW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJh
bmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0y
OTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9Owog
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9
IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5p
c0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3Mg
fHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3Ao
KSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1
c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRl
ZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywxMyArMzEzLDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6
IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRl
ZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAi
LT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwg
ZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQg
IiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAi
LCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBt
ZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1
Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVk
QXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ldKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nl
c3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgT3BlcmFu
ZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKICAgICAgICAg
ICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAg
ICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIFZl
Y3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1f
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZv
ckluZGV4KGkpOworCiAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CiAgICAgICAgICAgICBvcGVyYW5kVG9W
YXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAgICAgICAgICAgICBBU1NFUlQo
aW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKQEAgLTM3MCwxMiAr
MzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAg
ICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAg
ICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ss
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1
bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUu
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zODYs
NyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21w
dXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlh
YmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewotICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxl
LT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWxpdmVB
dEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBp
ZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVy
RHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0
KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgo
aSkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJ
bmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0
b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBk
ZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2Yg
IiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBwaW5nLCAiXG4iKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1
bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgp
XTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlE
ZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFs
dWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0g
cGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVi
bGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVy
cmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxv
Y2FsOworICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5k
OwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+
Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8g
Iiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNr
OiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQg
PSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRh
dGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxv
Y2FsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRh
LT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9w
ZXJhbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBkZWZlcnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMg
dGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2
YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBzdGFjay4g
U28sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZSBHZXRTdGFjay4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBub2RlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0g
bm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcyLDIwICs0NzIsMjAgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0b3JlZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0
U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZm9y
bWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9
IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6IHsK
LSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2Fs
KCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGVz
Y2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5k
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIs
IG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5p
c0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChE
RkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxu
Iik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5v
cGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAg
ICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRs
ZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3Mg
YW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRpdGlvbmFsIHdyaXRlcyB0byB0aGUgc3RhY2sK
QEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9u
cyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZh
cmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNrcyByaWdodCB0byB0aGlzIHBvaW50Lgot
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2Fk
VmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBu
b2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3Mp
OwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERl
YWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBw
cmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICB9CkBAIC01MzksOCAr
NTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVm
KiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsK
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAg
ICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhp
RGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxl
LT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAi
IGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxv
Y2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVm
ZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQp
LCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRh
dGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1f
Z3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXggNDM2ZTVkMzkxNGIzMjM1YTAyNDdm
YzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRmMmMwY2QzOTk4YjE4MWI5ZTk4YmJhNDI3MDQ4ODNiNDBk
MmQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YWNrLCBub2RlLT5vcmlnaW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0
YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRk
KHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hpbGROb2RlKTsKQEAgLTE3OCw3ICsxNzgs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gUHJ1bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9l
c24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBpbGUgdGltZXMuCi0gICAgICAgICAgICAg
ICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAgICAgICAgICAg
ICAgIGlmICghaGVhZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFub2RlLT5yZXBsYWNlbWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIk1hcHBpbmc6ICIsIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZv
ckluZGV4KGkpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSks
ICIgLT4gIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFu
ZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzEzLDEx
ICszMTMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRl
eCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAg
ICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhpRGVmLT52
YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCkpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
IHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgTW92SGludCwgYmxvY2stPmF0KDApLT5vcmln
aW4ud2l0aEludmFsaWRFeGl0KCksCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJs
ZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgcGhpRGVmLT52
YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4aXRPSykKQEAgLTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CiAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gZmFsc2U7IC8vIEtpbGxTdGFjayBj
bG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CkBAIC0zNDksMTkgKzM0OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFy
aWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIs
IGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVy
cy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBub2RlOworICAgICAgICAg
ICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzcxLDggKzM3MSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92
ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFu
ZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTM4NSw3ICszODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJs
ZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CkBAIC00MjUsMTIgKzQyNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IC8vIGlzIG5vdCBleGl0T0suCiAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9
IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KTsKIAotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5sb2Nh
bCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVy
YW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25P
cmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDE1YmU0MmFjM2I2
OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2EzMTY5MTkuLjlhMzJkNjdhNTg3NDI5NTg1YjM3ZDlhZTFh
NmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0
U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAg
ICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBD
YWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXgg
YjVhMTFjNTFlZjEwY2Y3YTZiMjMxNzJkMmQ4YmY4ZjY3NWUwNTJiZC4uNDFlOWM0YjlhY2Q0OTc5
YzQyMDFjNmZkYTEwMWZlZThkOTFiOTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogY2hpbGQg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQpOwogICAg
IAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5p
ZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFw
cGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKEFi
b3J0UmVhc29uIHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1f
YmxvY2spOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhl
YWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
bV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2Rl
KQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9j
YWwncy4KQEAgLTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQogICAgICAgICAg
ICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAg
ICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAg
ICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICBWYXJpYWJsZUV2ZW50Ojpz
ZXRMb2NhbCgKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksCi0gICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAotICAgICAgICAgICAgICAgIGZv
cm1hdCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5k
LmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+
PSAwKTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRM
b2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCkpOwogICAgIH0K
IAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkxOSw3ICsxOTE2LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1h
dCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZh
cmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBB
U1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAKICAgICAgICAgSlNWYWx1ZVNv
dXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1NCArNzMzOSw1NSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAg
bm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFy
YXJncyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5n
dGgoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgewot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHND
aGlsZCgpKTsKKyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Cisg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3Ms
IGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2so
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9
IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
IH0KKyAgICBHUFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdUaGlzKHRoaXMpOworICAgIEdQ
UlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3By
KCk7CiAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAotICAgIC8vIEZJWE1F
OiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3Ro
IHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50
IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVj
IGNvbXBsaWFuY2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBi
ZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQK
LSAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAg
ICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAgSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3Mp
OworICAgIGludDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgbm9kZSk7ICAKK30K
IAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgICAgCisgICAgSlNWYWx1
ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIEdQ
UlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7Cisg
ICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwog
CiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVl
U291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAg
ICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOworICAgICAgICBWYXJhcmdzT3ZlcmZs
b3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBWYXJhcmdzT3Zl
cmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5n
VGhpc0dQUiwKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0gICAgbV9qaXQuc3RvcmUzMihh
cmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1h
Y2hpbmVDb3VudCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBtX2ppdC5zdG9yZTMy
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRh
LT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFy
Z3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0
KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9h
ZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQu
b2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgsMTcgKzczOTcsMTkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgp
KQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOworICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpKQor
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxs
RnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7
CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5n
cHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRDb3VudC5ncHIoKTsKICAgICBK
U1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAgICAgICAKLSAgICBlbWl0R2V0
TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBpbmNsdWRlVGhpcyA9ICovIHRy
dWUpOworICAgIAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxl
bmd0aEdQUik7CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1
c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtMTI0NDcs
NyArMTI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVDYWxsRnJhbWUoKSkKICAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXI7CiAgICAgZWxzZQotICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7CiAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJl
c3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBjNjRm
OTc4YWRmODVmYmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5Li4wM2Q0ODM1YmY0YjdhOGRlMDkz
OWVmY2ZhMzcwMjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdSZWdl
eHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFy
YXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsKQEAgLTE2NjksMTUg
KzE2NzAsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJl
ZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRh
Rm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lz
dGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKKyAgICAgICAgQVNTRVJU
KCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcudmlydHVhbFJlZ2lzdGVy
KCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5lUmVnLCBmb3JtYXQpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0IGZvcm1hdCkK
ICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX2N1cnJlbnRO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFi
bGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKKyAgICAgICAg
cmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZvJiBnZW5lcmF0aW9uSW5m
b0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCmluZGV4IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2ZGJkMGQyYTA1NmRiODEuLjBhZjNm
MTcxODE1NDEwZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgyOCw3
ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSk7CiAKICAg
ICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3Vu
ZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVk
LCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnRO
b2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7
CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkT3BlcmFuZCgp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgyNCw2ICszODI0LDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1pdENhbGwobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAg
IGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAg
ICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhub2RlKTsK
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWViNWVhMjZhMzEwNWRkYjhhZmU3NjYy
MTYzMzQ0Li43YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZkYzkzYWM4NmM3YzUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAg
LTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
OwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQg
aXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBh
c3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0yMDA3LDcgKzIwMDcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9j
dXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1h
dERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQsNiArNDQ2NCwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRD
YWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewor
ICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2YWM3YTdkMzMzZTM5Njc5ZTI2NzU1
OTA3NGU0NjRjOWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2MTVmNjA0Mjc1MjIwNDc3YTIyYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdHJlYXQgYSB2YXJpYWJs
ZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2VzcyB0byBpdCAoU2V0TG9j
YWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxvY2FsKS4KICAgICAgICAg
Ci0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAgICBPcGVyYW5kczxib29sPiB1
c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3JhcGgoKS5tX3RtcHMsIGZhbHNl
KTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJl
IHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxz
ZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVz
aDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgog
ICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRhLT5jb3VudCwgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250
aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdu
bWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEt
PnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICB9IC8vIHRo
ZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAgICAgICAgICAgaGFzTm9k
ZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05
Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChzdGFjay0+bG9j
YWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJh
bmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA4LDIxICsxMDcsMjEg
QEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVn
aXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAg
ICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
V2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNl
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwotICAgICAgICAgICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2Nh
dGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2Nh
dGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9ncmFwaC5tX25leHRNYWNoaW5l
TG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRleChpKSkgewogICAgICAgICAg
ICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFi
bGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbG9j
YWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAgICAgICAgICBpZiAobG9jYWwg
Pj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gdXNlZE9wZXJhbmRz
Lm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBhbGxvY2F0
aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQorICAgICAgICAgICAg
aWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkg
PSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwg
dmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAo
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YSkgewotICAg
ICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgICAgICBk
YXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgIGlmIChkYXRhLT5v
cGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2Nh
bCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlv
bltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2NhbCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3BlcmFuZC50b0xvY2Fs
KCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5kLnRvTG9jYWwoKV0g
PT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24o
YWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2Fs
ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+b3BlcmFuZCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIo
KSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3Bl
UmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkp
KTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbih1c2Vk
T3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNp
emUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFibGVEYXRhIGRhdGEgPSBtX2dy
YXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbigK
LSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7
CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24gPSBtX2dyYXBoLm1f
YXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXJndW1lbnRQb3Np
dGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIxNSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFs
bG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPmNvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbih1
c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29u
c3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
YWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwo
KV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlv
bik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVy
YW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9j
YXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01B
WCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CiAgICAgfQogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAKaW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMyY2U5NjFmZjlhMDcxMmExYTA1MS4u
YjQ4YzZmN2YxOTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4YTcyNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGktLTspIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+b3BlcmFuZCgpID09
IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWwgPSBub2RlOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywg
bG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5v
ZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIwNzBiNmVlNmY0ZjhiZjkuLmYxYjFm
ZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQo
bnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCAmdm0pOwot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1Ig
ZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAppbmRl
eCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4MjA1ZDllLi44YjVjM2YwMWE0ODUy
MGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVy
YXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAK
aW5kZXggNjBmYmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1ZjU3MTNmMWQ3ZS4uNzk2NjVmOGFi
ODVmYzExMTZkNjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0xNDYs
NyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUu
bV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY2hlY2tPcCA9IENo
ZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNwZWNDZWxsQ2hlY2sg
JiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0aGUgVERaIHZhbHVlLiBUaGUgY2Fs
bCBlbnRyeXBvaW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFREWiwKQEAgLTE2OCw4ICsxNjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOworICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkp
ID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpi
bG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAg
ICAgICAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0
SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDllZTVlMDA3NDA5ZGY1Mjk0YmZj
ZjUxYjc3NmViOGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUzZGMzYzQ2YzBlMjRkNGRhMWNlMWIw
Y2Y1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC00
ODMsNyArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnBoaXNbaV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250
YWlucyhub2RlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgp
ID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+
bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5k
KCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVt
Q2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRy
ZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCkBA
IC01MTksMTAgKzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRl
Y2Vzc29yc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJl
ZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhl
biBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUg
dGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChw
cmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMsMTEgKzUzMywxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9j
YWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJl
dk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2Nh
bCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dERlZmluaXRlbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBTZXRBcmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0NywxNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVm
ZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxv
Y2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5C
bG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9w
ZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJ
bkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91
bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAg
ICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAg
ICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAg
ICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExv
Y2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBW
QUxJREFURSgodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2NrKSwgIWJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1
bWVudChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBAIC02NjgsMjQgKzY2NCwyNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3VudHMuZ2V0KG5vZGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxv
Y2spLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBibG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5p
dGVseSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5
IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBTZXRMb2Nh
bHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBmbHVzaGluZy4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
IT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sgdG8gaGF2ZSBhIHNl
Y29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAgICAgICAgICAgICAg
ICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERlZmluaXRlbHkgZm9yIHRoYXQgbG9j
YWwuCi0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm90U2V0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBj
YXNlIFNldEFyZ3VtZW50TWF5YmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTY4
LDI2ICs5NjQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVk
Z2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCisgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsK
ICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBu
dWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIG51bGwgQmxv
Y2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhTG9n
KGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwg
IiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sq
IHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQorICAgICAgICBPcGVy
YW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5h
dGlvbkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAq
c291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOworICAgICAgICBkYXRhTG9n
KG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlv
bkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywg
Tm9kZSogcHJldk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291
cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhwcmV2Tm9k
ZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKKyAgICAgICAg
ZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNl
QmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5v
ZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggMjZmMDMyOWQ1
NDMwNDE1NzIwNWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVjZGM5MmUyYzI0MTBhMzVjMDEzMTMx
ZmRjM2I3Y2NjMjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC00MSwxMSArNDEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IHB1YmxpYzoKICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAg
ICAgOiBQaGFzZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGluZyIpCkBAIC01Niw3ICs1NCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9n
cmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsK
ICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2YXJhcmdzIGZvcndhcmRpbmc6XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCw3ICs4Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBjYWxscyBpbnRvIHRoaXMgZnVuY3Rp
b24gdG8gYmUgcmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBpbiBhIHNpbXBsZSBPKG4pIG1hbm5l
ci4KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGJsb2NrLT5hdChjYW5kaWRh
dGVOb2RlSW5kZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2co
IkhhbmRsaW5nIGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJcbiIpOwogICAgICAgICAKICAgICAg
ICAgLy8gV2UgZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVyIENyZWF0ZUNsb25lZEFyZ3VtZW50
cyBpZiB0aGUgYnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3ICsxMDMsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBbJl0gewogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNyw5ICsxMTUsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2RlLT51bmxpbmtlZE9wZXJhbmQoKS5p
c1RtcCgpLCAiV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYSB0bXAgcmVmZXJyaW5nIHRvIGFu
IGFyZ3VtZW50cyBvYmplY3QuIik7CiAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5v
ZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxz
LmFwcGVuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICghcmVs
ZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lz
dGVyKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja1ZhcmFyZ3M6CkBA
IC0xNDAsMTMgKzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgc2F3
RXNjYXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
aWYgKHNhd0VzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwg
bm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlk
YXRlKSkKICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSB8fCBub2RlLT5jaGls
ZDIoKSA9PSBjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSA9PSBjYW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzTG9hZGVk
RnJvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAg
LTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2YWxpZEdldEJ5T2Zm
c2V0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBidXR0ZXJmbHkgOiBjYW5kaWRhdGVC
dXR0ZXJmbGllcykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUs
IGJ1dHRlcmZseSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQnV0
dGVyZmx5IGVzY2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNSwxMSArMjM1LDExIEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwKLSAgICAgICAg
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIHJlZywgIiB3aGlsZSB3ZSBh
cmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOworICAg
ICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxp
bmcgIiwgb3BlcmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChy
ZWxldmFudExvY2FscyksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9jYWxzW2ldKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0tXSA9IHJlbGV2YW50TG9jYWxzLmxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5yZW1vdmVM
YXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJ
bmRleDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNlckluZGV4ID0gIiwgbGFzdFVzZXJJ
bmRleCwgIiwgIiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgpLCAiXG4iKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBEZXRlcm1pbmUgaWYgYmV0d2VlbiB0
aGUgY2FuZGlkYXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJlIGlzIGFueQpAQCAtMjYzLDE2ICsy
NjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAg
IGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPmxv
Y2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5kKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxMyArMjk3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1Rv
cCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgaGVhcC5vcGVyYW5k
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNJbnRlcmZlcmUgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6
ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9lc0ludGVyZmVyZSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTEsNyArMzEwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2UgY2FuIG1ha2UgdGhp
cyB3b3JrLgotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBX
aWxsIGRvIGZvcndhcmRpbmchXG4iKTsKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgCkBAIC0zNDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0aGVzZS4KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNhbmRp
ZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChp
bnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIC8qIGFkZFRo
aXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndhcmRWYXJhcmdzKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4ZWJmZmI0MzVlZDRkYmY2MDJiZDYy
YWVkNGMzNDMyZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMwODEyNWI0ZTZlY2M4OGE4N2M3ZDE3
OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKLSAgICA6
IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICA6IG1fcHJl
ZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2UpCkBA
IC00NSwxMCArNDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEo
KQogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFj
Y2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgIDogbV9sb2NhbChsb2NhbCkKLSAg
ICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
ICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChm
YWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChmYWxzZSkKQEAgLTg3
LDcgKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZhY2ls
aXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgZm9y
IGFyZ3VtZW50cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJh
bmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
Ly8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVkaWN0aW9uLCB0aGVuIHRoaXMg
ZG9lc24ndApAQCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxs
eVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsKICAgICBBU1NFUlQoaXNSb290KCkp
OwogICAgICAgICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJV
bmJveCgpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJv
eCgpCiAgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzQXJyYXlJbmRleCkp
CiAgICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUobV9kb3VibGVGb3Jt
YXRTdGF0ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgIApAQCAtMTc2LDcgKzE3NSw3IEBA
IGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUySW1wbCgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXZSBwdW50IGZvciBtYWNoaW5lIGFyZ3Vt
ZW50cy4KLSAgICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJhbmQoKS5p
c0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgYXJn
dW1lbnQtYXdhcmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJnZXMgYWxsIG9mIGFuIChpbmxpbmVk
IG9yIG1hY2hpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEyMDQzZmEyNTRlNjA5NDIzMjAxNGEy
ODRlLi5iZTJmYjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1NTczZmNlZmY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKQEAgLTQ4
LDEyICs0OCwxMiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJsaWMgVW5pb25GaW5k
PFZhcmlhYmxlQWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhcmlhYmxl
QWNjZXNzRGF0YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgVmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCk7CisgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKE9wZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAg
T3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQo
KS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOworICAgICAgICBBU1NFUlQobV9v
cGVyYW5kID09IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsK
ICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBtYWNoaW5lTG9jYWwoKQpAQCAtMjA4
LDEwICsyMDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlm
aWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQogICAgIC8vIHVzYWdl
IGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCiAKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7
CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1f
YXJndW1lbnRBd2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFuZCBtX29wZXJhbmQ7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5vZGVGbGFncyBtX2ZsYWdzOwogCiAg
ICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50LmNwcAppbmRleCAyOGU0MzdmZDUxZmVhNDk2OWViNDhlY2YwYzA1
MDhmMGEzN2RmODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBjNDNiZDM2ZWQ3MmUzZjljZmJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKQEAg
LTU5LDExICs1OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgiLCBpZCgpLCAiKSIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgb3V0LnByaW50KCJNb3ZI
aW50KCIsIGlkKCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwgIikiKTsKKyAgICAgICAgb3V0
LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJhbmQoKSwgIikiKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAgICAgICBvdXQucHJpbnQoCi0gICAg
ICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRl
Y29kZToiLCBieXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAgICAgICAiU2V0TG9jYWwobWFjaGlu
ZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBvcGVyYW5kKCksCiAgICAg
ICAgICAgICAiLCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgpKSwgIikiKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3MjIzZGQ2ZjY5OWM2ZGJhZDZkMjI0
NjdjOTgzNC4uYzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFhYzQ4MTM4ZDM0ZTNmZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKQEAgLTY4LDYgKzY4
LDEwIEBAIGVudW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50OF90IHsKIH07CiAKIHVuaW9uIFZh
cmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24oKSAKKyAg
ICAgICAgOiBvcGVyYW5kKCkgCisgICAgeyB9CisKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBncHI7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5pb24gVmFyaWFibGVSZXByZXNlbnRh
dGlvbiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CiAg
ICAgfSBwYWlyOwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0dWFsUmVnOworICAgIE9wZXJhbmQg
b3BlcmFuZDsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQgewpAQCAtMTYyLDcgKzE2Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC5pZCA9IGlk
LmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsK
LSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3Rlci5vZmZz
ZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlcjsK
ICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0
ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7CkBAIC0x
ODEsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBWYXJpYWJs
ZUV2ZW50IHNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3Bl
cmFuZCBieXRlY29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9y
bWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAg
IFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2gudmlydHVhbFJlZyA9IG1hY2hpbmVSZWcu
b2Zmc2V0KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247
Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQo
KTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlT3BlcmFuZDsKICAg
ICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAgICAgICAgZXZlbnQubV9kYXRh
Rm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7
CkBAIC0xOTUsMTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBldmVudDsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlk
LCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQg
bW92SGludChNaW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVjb2RlUmVnKQogICAgIHsKICAgICAg
ICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAg
ICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiBy
ZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVj
b2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNv
ZGVSZWc7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnRFdmVudDsKICAgICAgICAgZXZl
bnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwogICAgICAgICBldmVudC5tX3JlcHJlc2VudGF0
aW9uID0gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0yNjUsMTMgKzI2OSwxMyBAQCBwdWJs
aWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsKTsK
LSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZp
cnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0
ZWNvZGVSZWdpc3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8IG1fa2luZCA9PSBN
b3ZIaW50RXZlbnQpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVzZW50
YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9u
LmdldCgpLm9wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5l
UmVnaXN0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQzOWJiMDk0YzRiODY2ZTY3ZWQzZTJl
ZTFiNDg5NmFiYjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIxYTM1YWY4ZDIxZGUzMmI1ZGRhMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6bG9n
RXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7CiAgICAgZGF0YUxvZ0YoInNlcSMl
dToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CiAgICAgZXZlbnQuZHVtcChXVEY6
OmRhdGFGaWxlKCkpOwotICAgIGRhdGFMb2dGKCIgIik7CisgICAgZGF0YUxvZ0xuKCIgIik7CiB9
CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFwaCwKICAgICB1bnNpZ25lZCBpbmRl
eCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVjb3ZlcmllcywgVmVjdG9yPFVuZGVm
aW5lZE9wZXJhbmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNwYW5zKSBjb25zdAogeworICAgIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZh
cmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIGJvb2wg
Zmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBAIC0xMzAsMzcgKzEzMiw0MiBAQCB1
bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBhdXRvIGZsdXNo
VW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgaWYgKGZp
cnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvcklu
ZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2
YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSAtIDEpLm9mZnNldCgpOwor
ICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKKyAgICAgICAgaW50
IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkgLSAxKS52aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50IG1pbk9mZnNldCA9IHN0ZDo6bWlu
KGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAgdW5kZWZpbmVkT3BlcmFuZFNwYW5z
LT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0LCBpIC0gZmlyc3RVbmRlZmluZWQg
fSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIH07CiAgICAg
YXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAg
IC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2YgYXJndW1lbnRzIGZyb20gdGhlIHNw
YW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFjZW50IG9wZXJhbmRzIGluZGV4ZXMu
Ci0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRl
ZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpKQorICAgICAg
ICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNB
cmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4oaSk7CiAKICAgICAgICAg
aWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkgewogICAgICAgICAgICAgZmlyc3RV
bmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFs
dWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZElz
QXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQo
KTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlu
bGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7Ci0gICAgZWxzZQorICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7CisgICAg
ICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAgIC8vIENyYXp5IHNwZWNpYWwgY2Fz
ZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMgbXVzdCBiZSBhbiBhcmd1bWVudCBj
aGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxy
ZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAogICAgIC8vIHJlZmxlY3QgdGhpcy4K
ICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZh
bHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOwor
ICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3Qg
YmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMsIDApOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292
ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBE
YXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudW1WYXJpYWJsZXM7CiAg
ICAgfQpAQCAtMTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6
cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAgICAKICAgICAvLyBTdGVwIDI6
IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVu
dHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9wZXJhbmRzPFZhbHVlU291cmNl
PiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVz
LCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVyYW5kU291cmNlcy5zaXplKCk7
IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNE
ZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+IGdl
bmVyYXRpb25JbmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgaW5k
ZXg7ICsraSkgewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCA9IGF0KGkpOwor
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBldmVudCAiLCBldmVudCk7
CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVzZXQ6CiAg
ICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4LDIxICsyMDYsMjMgQEAgdW5zaWdu
ZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgICAgIGlmIChv
cGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAg
ICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lz
dGVyKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5k
U291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3Bl
cmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlKGV2ZW50
LmlkKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldExvY2FsRXZlbnQ6
Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29k
ZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQo
ZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVu
dC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNv
dXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZv
cm1hdCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kIHNvdXJj
ZXM6ICIsIG9wZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAvLyBTdGVwIDM6IENvbXB1dGUgdmFs
dWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICB2YWx1
ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PihPcGVyYW5kc0xpa2UsIG9wZXJh
bmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3Vy
Y2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoKSkgewpA
QCAtMjMwLDYgKzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWN0KAogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChzb3VyY2UuaWQoKSk7
CiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5n
ZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAoIWluZm8uYWxpdmUpIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5k
Rm9ySW5kZXgoaSksICIgaXMgZGVhZC4iKTsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tp
XSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAg
aWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgICAg
ICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjM3LDYgKzI0OCw3IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIG5vZGUp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJl
Y292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNvbnN0YW50LiIpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkgewogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIG5vZGUtPmNvbnN0YW50KCkgPT0g
anNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFu
ZChpKTsKQEAgLTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFsdWVSZWNvdmVyaWVz
W2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQp
OworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKGluZm8udS5v
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7CiAgICAgfQogICAgIGlmIChz
dHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgIGZsdXNoVW5k
ZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKaW5kZXggMDE1NzMw
MDdlZGRkZDcwZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4uZTllNDNhYmZlYzQ4NWZlYzdlNjYz
MTUxYzFjMjJlYzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkgKzQyLDEyIEBAIHN0cnVjdCBVbmRl
ZmluZWRPcGVyYW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50U3RyZWFtIDogcHVi
bGljIFZlY3RvcjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEFuZExvZyhjb25zdCBWYXJp
YWJsZUV2ZW50JiBldmVudCkKICAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgbG9nRXZlbnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQoZXZlbnQpOwogICAgIH0KICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA3
ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEwNzZkZTU5ZGFh
NGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNl
IEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1NGYwOGVkYWYx
M2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCkBA
IC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIEZvck9T
UkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0ZWNvZGVJbmRl
eChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6IG1fZW50cnlG
YWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNiNzgxY2ZiODliMTFjMzlmOThmN2E5
YWJhM2QuLmQzNTkxMzU0ZjE1YTAyZWZiMTdmNzg5Zjk3ZTk4NTljMTZiOWJmODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTIwOCw3ICsy
MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY2xlYXJTdGFja0Zy
YW1lKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFtZVNpemUoKSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRM
aXN0KCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KGNvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9l
bnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsKQEAgLTI3NCw3ICsy
NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBD
b2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVzZQogICAgICAg
ICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVkLgotICAgICAg
ICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENoZWNrLgog
ICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVy
Q291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7
IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1
bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBAIC0xMjgxLDYg
KzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAgICAgICAgICAg
Y29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgY29tcGls
ZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyArMTk1Niw3IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51
bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZp
cnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVF
eHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIAogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQp
LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYsMTMgKzc5MjksMTMgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkp
OworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBp
bGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwg
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
CkBAIC03OTQ3LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlU2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmUzMiht
X291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBtX291dC5z
dG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQpAQCAtOTU0
Miw1MSArOTU0NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgdm9pZCBj
b21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNW
YWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1ZSBsZW5ndGgg
PSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRo
ZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJv
cGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50
IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVj
IGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291
bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJp
Z2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwogICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMy
T25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aCwgbGVu
Z3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNsdWRpbmdUaGlz
KTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAgIExWYWx1ZSBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFs
dWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAorICAgICAgICAg
ICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhpcyksIG1fb3V0
LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQp
KSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxv
YWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdz
IGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21w
dXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdzIGp1c3QgdG9v
ayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ug
d291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQg
PSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFj
aGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBt
X291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCksIG1fY2FsbEZy
YW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAgICAgCiAgICAg
ICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJhcmdzLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFj
aGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwK
LSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5p
bXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMy
KGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Rm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpIHsK
LSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAgICAgICBOb2Rl
KiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFy
Z3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU5NSw1MCArOTU5
OCwyNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
IAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExWYWx1ZSBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3Vt
ZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAg
ICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtu
b3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAgaWYgKGtub3du
TGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtu
b3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50
MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0
aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgotICAgICAgICAg
ICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRz
TGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihh
cmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOwot
ICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQs
IGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxKSk7Ci0g
ICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRh
dGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXMgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGlu
Z1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKKyAgICAgICAg
ICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1YihjYWxsZXJMZW5ndGhJbmNsdWRpbmdU
aGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CisgICAgICAg
ICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFu
T3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0
LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKKyAgICAgICAg
fSBlbHNlIAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNhbGxlckxlbmd0aElu
Y2x1ZGluZ1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJ
bmNsdWRpbmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAg
ICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAg
bV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5s
aW1pdCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5n
VGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAg
ICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUs
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0g
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk2OTcsNjUgKzk2
NzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1l
IGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWlj
IG9wZXJhdGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAgICAKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSU5UMzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGggPSBtX291dC5zdWIoYXJndW1l
bnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KSk7CiAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5j
aCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1
bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRz
TGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkp
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGko
SW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOwor
ICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhl
ZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybywg
U2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKICAgICB9CiAKICAgICB2b2lkIGNv
bXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxJ
bmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1l
Kj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNo
ZWRTcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKIAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7Ci0gICAgICAgIFZl
Y3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgYXV0byBjb2xsZWN0QXJn
dW1lbnRDb3VudCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0
KSAtPiB2b2lkIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkgewotICAgICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRh
cmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgICAgICAg
ICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3RvcigpOwotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNoaWxkcmVuKCk7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFyZ2V0LCBpKS5ub2Rl
KCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAr
K251bWJlck9mU3RhdGljQXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZT
dGF0aWNBcmd1bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSo+KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCk7Ci0gICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRTcHJlYWRMZW5ndGhz
LmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMtPmdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1l
LCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0QXJndW1lbnRDb3VudChhcmd1bWVu
dHMpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50
MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAgICAgICAgZm9yIChMVmFsdWUgbGVu
Z3RoIDogc3ByZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBt
X291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGxl
bmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAg
ICAgICBzcGVjdWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1
ZSgpOwogCi0gICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3Ro
aXMsICZjYWNoZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSog
dGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAgICAgYXV0byBmb3J3
YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJnRhcmdldFN0YXJ0XShhdXRvIHNl
bGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CiAgICAgICAg
ICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0b3JlSW5kZXgpOwogCkBAIC05
Nzk4LDggKzk3MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFy
Z2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0
UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOworICAgICAgICAg
ICAgYXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwor
ICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoZ2V0U3By
ZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQu
bmV3QmxvY2soKTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgTFZh
bHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX291dC5z
dG9yZVB0cihtX2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0
X2ZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KDApKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsK
LSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2Fs
bGVlKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRf
Y2FsbGVyRnJhbWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgcGFja2V0LCBt
X2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CiAgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKHNjb3BlLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfc2NvcGUpOwog
ICAgIH0KICAgICAKQEAgLTEyMzQ2LDcgKzEyMjgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5jYWxsZWVSZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKGZy
YW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBn
ZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWdu
ZWQgb2Zmc2V0ID0gMCkKQEAgLTE3NjExLDcgKzE3NTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24u
YWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAg
ICAgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIHRh
Z0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICNp
ZiAhVVNFKEJVSUxUSU5fRlJBTUVfQUREUkVTUykgfHwgIUFTU0VSVF9ESVNBQkxFRAogICAgICAg
ICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJzb2x1dGUoJnZtKCkudG9wQ2Fs
bEZyYW1lKSk7CiAjZW5kaWYKQEAgLTE3NzE5LDcgKzE3NjU1LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5hbGxvYygK
ICAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9maWxlLAogICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwKKyAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mVG1wcygpKTsKICAgICB9CiAK
ICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0xNzgyNCwxNSArMTc3NjEsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdERlc2NyaXB0b3ItPm1fdmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQXZhaWxh
YmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tpXTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVu
ZXNzKCkKICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fcGxhbi5tb2RlKCkgIT0gRlRMRm9y
T1NSRW50cnlNb2RlKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5LmlzRGVh
ZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCks
IGV4aXRPcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWlsYWJsZTogb3BlcmFu
ZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwgYXZhaWxhYmlsaXR5ID0gIiwgYXZh
aWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVj
b2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWls
YWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJp
bGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxp
dHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICBpZiAoZXhpdFZh
bHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQpAQCAtMTgxMzIsMzkgKzE4MDY5LDM5
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5hbHJlYWR5UmVnaXN0ZXJlZFdlYWtQ
b2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgfQogICAgIAotICAgIFR5cGVk
UG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9m
ZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIE9wZXJh
bmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4g
bV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNbb3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7CiAgICAgfQotICAgIFR5
cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBl
ZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7
CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5k
KQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQsIFRhZ09mZnNl
dCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKGludCBvcGVyYW5kLCBwdHJk
aWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihPcGVyYW5kIG9w
ZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBvZmZzZXQpOwogICAgIH0KICAg
ICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlm
Zl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLm9mZnNldCgp
LCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFu
ZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fw
dHVyZWQsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fs
bEZyYW1lLCBvcGVyYW5kLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9h
ZEZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLCBQ
YXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihpbnQgb3BlcmFu
ZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0
dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQ
b2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4IDkzMzE3NzEwZjZkMDY4NjA5MTli
YzAwMjUzMTNhMTMyMTkwNDQ5MTkuLjA5MWU3ZjNjOWI0OTgzNDA3NmE4ZDZmOTE3NDJjY2I1Y2Fk
NWVhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnku
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCkBAIC03
NSw3ICs3NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAgZGF0YUxvZygiICAg
IFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsKICAgICAKICAgICBmb3IgKGludCBh
cmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewotICAg
ICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KSkuYXNhblVuc2FmZUpTVmFsdWUoKTsKICAgICAgICAgT3B0aW9u
YWw8SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50
KTsKICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFsdWUgJiYgdmFsdWVPblN0YWNrID09IHJl
Y29uc3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJndW1lbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCmluZGV4IDA5OTU4
ZDJjNGY5YTVkODliNWZiYmI2NWY4NmJiNmRhYmNkZjE4ZTMuLjA0Yzg1Nzk5ZTRkNDY5MjNhMzE4
NjcxOGUxOWYyNGJkZmZkYWJhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmNwcApAQCAtNDcsMTAgKzQ3LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIE9TUkV4
aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcigKICAgICBEYXRhRm9ybWF0IHByb2ZpbGVE
YXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwKLSAg
ICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpCisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzLCB1
bnNpZ25lZCBudW1iZXJPZlRtcHMpCiAgICAgOiBtX3Byb2ZpbGVEYXRhRm9ybWF0KHByb2ZpbGVE
YXRhRm9ybWF0KQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQotICAgICwgbV92
YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzKQorICAgICwgbV92YWx1ZXMo
bnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzLCBudW1iZXJPZlRtcHMpCiB7CiB9CiAK
QEAgLTExNyw1ICsxMTcsMyBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IE9T
UkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAppbmRleCBkYTg3Y2NmMzI3M2ZlNGJlMzYwNjgzYjhh
ZjNiYmY1MTZkNjIyNWViLi5mZDdmOWYwNWJjNDg5YzFmNmFlY2UwOTdhZDhhNGQxZTI3YjgwMzIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaApAQCAtNjksNyArNjksNyBA
QCBzdHJ1Y3QgT1NSRXhpdEhhbmRsZTsKIHN0cnVjdCBPU1JFeGl0RGVzY3JpcHRvciB7CiAgICAg
T1NSRXhpdERlc2NyaXB0b3IoCiAgICAgICAgIERhdGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQs
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVy
T2ZUbXBzKTsKIAogICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZXhpdCBjYWxsIG1h
eSBiZSBhIHZhbHVlIHdlIHdpc2ggdG8gcHJvZmlsZS4KICAgICAvLyBJZiB0aGF0J3MgdGhlIGNh
c2UsIHRoZSBmb3JtYXQgd2lsbCBiZSBub3QgSW52YWxpZCBhbmQgd2UnbGwgaGF2ZSBhCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKaW5kZXgg
NjY0ZDNiOTg4YWY3ZWE4M2Y2ZmI4MmJjYjNhOGMwYTg4MTc2ZWU3Mi4uYTM3ODQxMGRhOWI4MDE1
NzI0YTlkYzE2YzNmZTFhZWMwODA1NWQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShGVExfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uaCIKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgiCiAjaW5jbHVk
ZSAiRlRMSklUQ29kZS5oIgpAQCAtMzcsMTAgKzM4LDExIEBACiAjaW5jbHVkZSAiRlRMT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMU2F2ZVJlc3RvcmUu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiT3BlcmFu
ZHNJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlByb2JlQ29u
dGV4dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTQ3NCwxNiAr
NDc2LDUyIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQgZXhpdElE
LCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAKICAgICBzaXplX3QgYmFzZWxpbmVW
aXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmln
aW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgeworICAgICAgICBhdXRv
KiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy50bXBJ
bmRleCgwKTsKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBqaXQucHJvYmUoWz1d
IChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0byBhZGRTaWRlU3Rh
dGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0
bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJ
bmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4
TnVtQ2hlY2twb2ludFRtcHM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50
bXBzW2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKworICAgICAgICAgICAgICAgIHZt
UHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkp
OworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9y
aWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2Fs
bEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChj
b2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4t
PmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBC
eXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpOworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8q
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAg
ICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBD
T2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGlu
ZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgo
KTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0
YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwog
ICAgIC8vIE5vdyBnZXQgc3RhdGUgb3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBhbmQgcGxhY2Ug
aXQgYmFjayBpbnRvIHRoZSBzdGFjay4gVGhlIHZhbHVlcyBhcmUKICAgICAvLyBhbHJlYWR5IHJl
Ym94ZWQgc28gd2UganVzdCBtb3ZlIHRoZW0uCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4
aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZWcgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudmlydHVhbFJl
Z2lzdGVyRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBleGl0Lm1f
ZGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKworICAgICAgICBp
ZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYg
KHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxp
bmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQorICAgICAgICBpZiAob3BlcmFuZC5p
c0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5l
VmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IocmVnKSk7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgIH0K
ICAgICAKICAgICBoYW5kbGVFeGl0Q291bnRzKHZtLCBqaXQsIGV4aXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKaW5kZXggN2Y3Y2QzODMyNDk2MWE4ZmY0
ZTQ3MjU5YTg4NGRlODZkNTY0YjExNy4uMTAyYzFlNmExYmQ5ZWIzYjQ3MTMzNzQ0Zjg0M2VjNjRk
NjNhMThmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
CkBAIC01MDUsNyArNTA1LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUihKU0dsb2JhbE9iamVjdCoKICAgICAgICAgICAg
IC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0
aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAg
ICAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihu
ZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2Rl
QmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwg
Y29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5jcHAKaW5kZXggNzQ5MzNkYzYwNTE1YzVkYTAwZWExOGZjN2Q1ZGIzYWQ5Y2U1ZTljZi4uZDU3
ZmIxZWVhODA0NGEzNGI3OTE3NjhhOTA5NzY5ODk5OGFjMzM5MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1NSwxNSArNjU1LDM3IEBAIExWYWx1ZSBPdXRw
dXQ6Om5vdFplcm82NChMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDY0
WmVybyk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0
YWtlbiwgTFZhbHVlIG5vdFRha2VuKQorTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1
ZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgU2VsZWN0UHJlZGljdGFiaWxpdHkgcHJlZGlj
dGFiaWxpdHkpCiB7CiAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKSB7CiAgICAgICAgIGlmICh2
YWx1ZS0+YXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHRha2VuOworICAgICAgICAgICAg
cmV0dXJuIGxlZnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub3RUYWtlbjsK
KyAgICAgICAgICAgIHJldHVybiByaWdodDsKICAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZhbHVlLCB0
YWtlbiwgbm90VGFrZW4pOworCisgICAgaWYgKHByZWRpY3RhYmlsaXR5ID09IFNlbGVjdFByZWRp
Y3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSkKKyAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZhbHVlLCBsZWZ0
LCByaWdodCk7CisKKyAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBuZXdCbG9jaygpOwor
ICAgIExCYXNpY0Jsb2NrIGxlZnRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsKKyAgICBMQmFzaWNC
bG9jayByaWdodFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworCisgICAgbV9ibG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAorICAgICAgICBtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCB2
YWx1ZSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGxlZnRUYWtlbkJsb2NrLCBwcmVkaWN0YWJp
bGl0eSAhPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UmlnaHRMaWtlbHkgPyBGcmVxdWVuY3lDbGFz
czo6Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBGcmVxdWVudGVkQmxv
Y2socmlnaHRUYWtlbkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQcmVkaWN0YWJpbGl0
eTo6TGVmdExpa2VseSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6
UmFyZSkpOworCisgICAgTFZhbHVlIHBoaSA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6UGhpLCBsZWZ0LT50eXBlKCksIG9yaWdpbigpKTsKKworICAgIGxl
ZnRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgbGVmdCwgcGhpKTsKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVh
dGlvbikpOworCisgICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2lsb25WYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgcmlnaHQsIHBoaSk7CisgICAgcmlnaHRUYWtlbkJsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVx
dWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICBtX2Jsb2NrID0gY29udGludWF0aW9u
OworICAgIHJldHVybiBwaGk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21pY1hjaGdBZGQoTFZh
bHVlIG9wZXJhbmQsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0aCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5MzYyYjNiZGNhMGZk
NDZhMDNhYTU3MGNhMmUuLjRjMDJiMzQwODUxNDZmN2RmMDI1NjI3ZDVmZjMxYzc4MTBkOGZiNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMQ29tbW9uVmFsdWVzLmgiCisjaW5jbHVkZSAi
RlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1
ZGUgIkZUTFN3aXRjaENhc2UuaCIKICNpbmNsdWRlICJGVExUeXBlZFBvaW50ZXIuaCIKQEAgLTM2
NSw3ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHRlc3RJc1plcm9QdHIoTFZhbHVlIHZh
bHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNOdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9
CiAgICAgTFZhbHVlIHRlc3ROb25aZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsg
cmV0dXJuIG5vdE51bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KIAotICAgIExWYWx1ZSBzZWxl
Y3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbik7CisgICAgTFZh
bHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuLCBT
ZWxlY3RQcmVkaWN0YWJpbGl0eSA9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJs
ZSk7CiAgICAgCiAgICAgLy8gVGhlc2UgYXJlIHJlbGF4ZWQgYXRvbWljcyBieSBkZWZhdWx0LiBV
c2UgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZWRBY2Nlc3MoKSB3aXRoIGEK
ICAgICAvLyBub24tbnVsbCBoZWFwIHRvIG1ha2UgdGhlbSBzZXFfY3N0IGZlbmNlZC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMTg1M2JhOTg1MjJhYWFjNjFiODQ5OTU1Mjc5NGE1MDkzMGM3ZDZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0
YWJpbGl0eS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
bmFtZXNwYWNlIEpTQzo6RlRMIHsKKworZW51bSBjbGFzcyBTZWxlY3RQcmVkaWN0YWJpbGl0eSA6
IHVpbnQ4X3QgeworICAgIE5vdFByZWRpY3RhYmxlLAorICAgIFByZWRpY3RhYmxlLAorICAgIExl
ZnRMaWtlbHksCisgICAgUmlnaHRMaWtlbHksCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2OTM0YzNmMGQzNzkxZjY0YmE0Mjk2M2UwNTU2M2Ri
YmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3YTY3MGQyNTgwNGFhOGNhZTIyYjNhMGRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3ICsx
MDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBpZiAoY2FsbFNpdGVJbmRl
eCkgewogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSkpOwogICAgIH0KICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih2bSwgdXNlZFJlZ2lz
dGVycywgaml0LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50
cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0No
ZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50
cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdkZDYzMWFjZDRjY2JlY2QxNGIyNGNjNWQ0YTM5YTI1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVj
a3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50CisgICAgYXR0cl9yZWFkZXIgOnVzZXMKKyAgICBh
dHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9yZWFkZXIg
OmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBpbmRleCwgdG1wcykKKyAgICAgICAg
QG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRleCA9IGluZGV4CisgICAgICAgIEB1c2VzID0gdG1w
cy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDp1c2UgfQorICAgICAgICBAZGVm
cyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9PSA6ZGVmaW5lIH0KKyAg
ICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhuYW1lc3BhY2UpCisgICAgICAgIEVPRjwtLQorICAg
IGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9OgorRU9GCisgICAgZW5kCitlbmQKKworY2xhc3Mg
Q2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlhbGl6ZShvcGNvZGUsIHRtcHMsIGNoZWNrcG9pbnRz
KQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEB0bXBzID0gdG1wcworICAgICAg
ICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXBfd2l0aF9pbmRleCB7IHwobmFtZSwgdG1w
cyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhuYW1lLCBpbmRleCwgdG1wcykgfQorICAgIGVuZAor
CisgICAgZGVmIGxpdmVuZXNzCisgICAgICAgIEBjaGVja3BvaW50cy5lYWNoIGRvIHxjaGVja3Bv
aW50fAorCisgICAgICAgIGVuZAorICAgICAgICBFT0Y8LS0KK0JpdE1hcDxtYXhOdW1UbXBzPiB0
bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBpdGFsaXplZF9uYW1lfSh1aW50OF90IGNoZWNrcG9p
bnQpCit7CisgICAgc3dpdGNoIChjaGVja3BvaW50KSB7CisKKyAgICB9Cit9CitFT0YKKyAgICBl
bmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNv
ZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgppbmRleCBk
YWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNlYmI0ZjBhYjI0NDg1Li5jZmQ5ZGYxNTExNDdhODZk
YTRiYzc1YmU0NmE2NzgyNWUyNTM3NWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBPcGNvZGUKICAgICBhdHRyX3Jl
YWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVyIDptZXRhZGF0YQogICAgIGF0dHJfcmVhZGVyIDpl
eHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hlY2twb2ludHMKIAogICAgIG1vZHVsZSBTaXplCiAg
ICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXplOjpOYXJyb3ciCkBAIC00NSwxMiArNDYsMTQgQEAg
Y2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAogICAgIGVuZAogCi0gICAgZGVmIGluaXRpYWxpemUo
c2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6
ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0
YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycywgdG1wcywgY2hlY2twb2ludHMpCiAgICAgICAg
IEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAgICBAbmFtZSA9IG5hbWUKICAgICAgICAgQGV4dHJh
cyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBAbWV0YWRhdGEgPSBNZXRhZGF0YS5uZXcgbWV0YWRh
dGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwogICAgICAgICBAYXJncyA9IGFyZ3MubWFwLndpdGhf
aW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwgaW5kZXh8IEFyZ3VtZW50Lm5ldyBhcmdfbmFtZSwg
dHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFyZ3MubmlsPworICAgICAgICBAdG1wcyA9IHRtcHMK
KyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwIHsgfChjaGVja3BvaW50LCBf
KXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5uaWw/CiAgICAgZW5kCiAKICAgICBk
ZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEyMSw4IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8
PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVibGljIEluc3RydWN0aW9uIHsK
ICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9CisgICAgI3tjaGVja3BvaW50VmFsdWVzfQog
CiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTEzMiw2ICsxMzcsMTggQEAgRU9GCiAgICAgICAg
ICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBvcGNvZGVJRCA9ICN7bmFtZX07Igog
ICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMKKyAgICAgICAgcmV0dXJuIGlmIEBj
aGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJlbnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7
Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2tw
b2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9mQ2hlY2twb2ludHMsIiwgIiAgICB9
OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAgICBkZWYgdGVtcHMKKyAgICAgICAgcmV0dXJu
IGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVudW0gVG1wcyA6IHVpbnQ4X3QgeyJdLmNvbmNh
dChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAgI3t0bXB9LCJ9KS5wdXNoKCIgICAg
fTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYgZW1pdHRlcgogICAgICAgICBvcF93
aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJRFR5cGUsIDApCiAgICAgICAgIG9w
X3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29kZUlEVHlwZSwgMCkKQEAgLTIwMCw2
ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wY29kZVNpemUgX19zaXplLCBib29s
IHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5lcmF0b3I+CiAgICAgc3RhdGljIGJv
b2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7dHlwZWRfYXJnc30je21ldGFkYXRh
X3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3BvaW50cy5uaWw/ID8gImdlbi0+c2V0
VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBpZiAoX19zaXplID09IE9wY29kZVNp
emU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25XaWRlT3Bjb2RlMTYoKTsKICAgICAg
ICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUzMikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAyMDRhYzc1OWUxM2VmZjE1MWY4Y2Qx
NzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRjMjNjYzBlYmVjMTBlNzk0OWNkZTc2
OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24u
cmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCkBAIC00
Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAKICAgZGVmIGNyZWF0ZV9vcGNvZGUo
bmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJh
c10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2lu
aXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFz
XSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5p
dGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpjaGVja3BvaW50c10pCiAgIGVuZAog
CiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29kZXMsIGNvbmZpZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggZjYzOTRh
YzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5NTM2YTYwMC4uZWY3ZjZjOTRmNDE2OGI0YTI4NDYw
NTNhNWQwMTNiZTExMjIwZGVmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBDYWxsRnJhbWU6Omlu
aXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBK
U0NhbGwKICAgICBBU1NFUlQoZ2xvYmFsRXhlYy0+aXNEZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVi
dWdnZXIoKSk7CiB9CiAKLWJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9m
ZnNldCgpIGNvbnN0Citib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRl
eCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBzd2l0Y2ggKGNvZGVC
bG9jaygpLT5qaXRUeXBlKCkpIHsKQEAgLTkwLDEyICs5MCwxMiBAQCBib29sIENhbGxGcmFtZTo6
Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIAogdW5zaWduZWQgQ2FsbEZy
YW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFnKCk7CiB9CiAKIFNVUFBS
RVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udW5z
YWZlVGFnKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KV0udW5zYWZlVGFnKCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ2FsbEZy
YW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKQEAgLTEwNSw3ICsxMDUsNyBAQCBDYWxsU2l0ZUlu
ZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CiAKIFNVUFBSRVNTX0FTQU4gQ2Fs
bFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAg
IHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0Jp
dHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMoKSAmIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkg
Pj4gQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0KSkpOwogfQogCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKQEAgLTExNywzMyArMTE3LDM0IEBAIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJh
bWU6OmN1cnJlbnRWUEMoKSBjb25zdAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29u
c3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKEJ5dGVj
b2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2cGMpKSk7Ci0gICAgdGhpc1tDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKKyAgICB0aGlz
W3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnRhZygpID0g
Y2FsbFNpdGUuYml0cygpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0Fz
Qnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAg
QVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxs
U2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxvY2soKS0+Ynl0
ZWNvZGVPZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQogCiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTMyXzY0KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFT
U0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjb2RlQmxv
Y2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKS5w
dHIoKTsKIH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rp
b24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRl
Y29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0u
dGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOworICAgIHRoaXNb
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFnKCkgPSBj
YWxsU2l0ZS5iaXRzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMpOwogfQogCiB1
bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAog
ewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5
dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4
KCkpOwogICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOwogfQogCkBAIC0xNjUsOCAr
MTY2LDggQEAgQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKQogICAgICAg
ICByZXR1cm4gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgfQogI2VuZGlmCi0gICAg
QVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIHJldHVybiBCeXRl
Y29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNh
bGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgo
KS5ieXRlY29kZUluZGV4KCk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2lu
KCkKQEAgLTE4MCw3ICsxODEsNyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigp
CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQog
I2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNB
c0J5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KCkuYnl0ZWNvZGVJbmRleCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFt
ZUludGVybmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAppbmRleCBjZmI3NzE4NTYwMzk5MzM5MTAwNGZjMTMyMTE4Mzg0MjNjNWRjNmE5Li42NDQ5
MGU3YTcwN2VlYjAxYmEwN2FjYTMzMjYyM2FkZTEzZTBjOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJWTUVudHJ5
UmVjb3JkLmgiCisjaW5jbHVkZSA8d3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtNDYsMTggKzQ3LDI0IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKICAgICAgICAgCiAgICAgICAgIGV4
cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotICAgICAg
ICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgeyB9CisgICAg
ICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQorICAgICAgICB7IAorICAg
ICAgICAgICAgQVNTRVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisgICAgICAgIH0K
IAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2J5
dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5k
ZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRl
Y29kZUluZGV4OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhIW1fYml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJ
bmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAot
ICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFz
Qml0cygpOyB9CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7
IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRzKCkpOyB9CiAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKKyAgICAgICAgICAgIDog
bV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQogICAgIHByaXZhdGU6Ci0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBCeXRlY29k
ZUluZGV4KCkub2Zmc2V0KCkgfTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC02NSw3ICs3Miw3IEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7
CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0
cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4Ojpmcm9tQml0cyhi
aXRzKSkKKyAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChiaXRzKQogICAgICAgICB7CiAgICAg
ICAgIH0KIApAQCAtNzgsMjQgKzg1LDI3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02
NF8zMiBleHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAog
ICAgIHN0cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rl
cikgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikg
Y29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVyblBDOworICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVy
KSB2b2lkKiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVn
aXN0ZXJzID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAg
IH07CiAgICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMg
PT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZy
YW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAKLSAgICBzdHJ1Y3Qg
Q2FsbEZyYW1lU2xvdCB7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNvZGVCbG9jayA9
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgY2FsbGVlID0gY29kZUJsb2NrICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgYXJndW1lbnRDb3VudCA9IGNhbGxlZSArIDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQgKyAxOwotICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGludCBmaXJzdEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsgMTsKKyAgICBlbnVt
IGNsYXNzIENhbGxGcmFtZVNsb3QgOiBpbnQgeworICAgICAgICBjb2RlQmxvY2sgPSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsCisgICAgICAgIGNhbGxlZSA9IGNvZGVCbG9jayAr
IDEsCisgICAgICAgIGFyZ3VtZW50Q291bnQgPSBjYWxsZWUgKyAxLAorICAgICAgICB0aGlzQXJn
dW1lbnQgPSBhcmd1bWVudENvdW50ICsgMSwKKyAgICAgICAgZmlyc3RBcmd1bWVudCA9IHRoaXNB
cmd1bWVudCArIDEsCiAgICAgfTsKIAorICAgIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9F
TlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisgICAgT1ZFUkxPQURfUkVM
QVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoQ2FsbEZyYW1l
U2xvdCkKKwogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2NyaXB0IGV4
ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVu
Y3Rpb25zLgogICAgIGNsYXNzIENhbGxGcmFtZSA6IHByaXZhdGUgUmVnaXN0ZXIgewogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJz
ID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIDE7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkgKyAxOwogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24g
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcwogICAg
ICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBjYWxsZWUgY2FuJ3QgYmUgYSBXYXNt
IGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMTYsMTAgQEAgbmFtZXNwYWNlIEpTQyAgewog
ICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFuZCBpZiBpdCdzIG5vdCwgd2UgdGhy
b3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBndWFyYW50ZWVkSlNWYWx1
ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNPYmplY3QqIGpzQ2FsbGVlKCkgY29u
c3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0
cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRlcigpKTsgfQotICAgICAgICBTVVBQ
UkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVl
Qml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNhblVuc2FmZVBvaW50ZXIoKSk7IH0K
KyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRo
aXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5wb2ludGVyKCkpOyB9
CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBjb25zdCB7
IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIHN0YXRp
Y19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7IH0KICAgICAgICAgaW5saW5l
IFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2RlQmxvY2soKSBjb25zdDsKICAgICAg
ICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0KSBjb25zdDsK
IApAQCAtMTQ2LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsZXJG
cmFtZUFuZFBDLCByZXR1cm5QQyk7IH0KICAgICAgICAgQWJzdHJhY3RQQyBhYnN0cmFjdFJldHVy
blBDKFZNJiB2bSkgeyByZXR1cm4gQWJzdHJhY3RQQyh2bSwgdGhpcyk7IH0KIAotICAgICAgICBi
b29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3Q7CisgICAgICAgIGJvb2wg
Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0OwogICAgICAgICBib29sIGNhbGxT
aXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0OwogCiAgICAgICAgIHVuc2lnbmVkIGNh
bGxTaXRlQXNSYXdCaXRzKCkgY29uc3Q7CkBAIC0xODIsMTUgKzE5MiwxMyBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVi
dWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxlZSogZ2xvYmFsQ2FsbGVlKTsKIAog
ICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZyYW1lIChvciBjb25zdGFu
dCBmcm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdpc3RlciYgcihpbnQpOwogICAgICAg
ICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAvLyBSZWFkIGEgcmVnaXN0
ZXIgZm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKGludCk7
CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBrbm93biBub24tY29uc3RhbnQKICAg
ICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICAv
LyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNhcHR1cmUsIGFyZ3VtZW50
cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCiAgICAgICAgIHNpemVfdCBhcmd1
bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSAt
IDE7IH0KLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3Qg
eyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5wYXlsb2FkKCk7IH0K
KyAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1
cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS5w
YXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldChpbnQgYXJndW1l
bnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICsgYXJndW1lbnQpOyB9
CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGludCBhcmd1
bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3VtZW50KTsg
fQogCkBAIC0yMzksNyArMjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAgIEpTVmFs
dWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKIAotICAgICAgICBzdGF0
aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0
dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAr
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogCiAgICAgICAgIHN0YXRpYyBDYWxs
RnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICAgICBib29sIGlzRGVw
cmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QKQEAgLTI1MSwxMCArMjU5LDEwIEBA
IG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0YWNrT3ZlcmZsb3dGcmFtZSgpIGNv
bnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBz
ZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVn
aXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5wYXlsb2FkKCkgPSBj
b3VudDsgfQorICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBj
b3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnBheWxvYWQoKSA9IGNvdW50OyB9CiAgICAgICAg
IGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwogICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9pZCog
dmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAgICB2b2lkIHNldFJldHVyblBDKHZv
aWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZhbHVlOyB9CiAKICAg
ICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCmluZGV4IGE5N2Rl
Y2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEuLmVlN2VjMmFiMTA0YTdhMzRkOThi
MGY0MzhmNjQ0YzJkY2ExYzUxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAtMzIsNTAgKzMyLDM5IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihpbnQgaW5kZXgp
Ci17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKLSAgICBp
ZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0KIGlubGluZSBSZWdp
c3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHIo
cmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tl
ZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKKyAgICBpZiAocmVnLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4o
JnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOworICAgIHJldHVybiB0
aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNo
ZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHVuY2hlY2tlZFIocmVn
Lm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOworICAgIHJldHVybiB0
aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1ZhbHVlIENhbGxGcmFtZTo6Z3VhcmFu
dGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNt
KCkpOwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uanNWYWx1ZSgpOwor
ICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0u
anNWYWx1ZSgpOwogfQogCiBpbmxpbmUgSlNPYmplY3QqIENhbGxGcmFtZTo6anNDYWxsZWUoKSBj
b25zdAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOwotICAgIHJldHVybiB0aGlz
W0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5vYmplY3QoKTsKIH0KIAogaW5saW5l
IENvZGVCbG9jayogQ2FsbEZyYW1lOjpjb2RlQmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0
aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOworICAg
IHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0u
UmVnaXN0ZXI6OmNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUgU1VQUFJFU1NfQVNBTiBDb2RlQmxv
Y2sqIENhbGxGcmFtZTo6dW5zYWZlQ29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhp
c1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjphc2FuVW5zYWZlQ29kZUJsb2Nr
KCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUgSlNH
bG9iYWxPYmplY3QqIENhbGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdChWTSYgdm0pIGNvbnN0
CkBAIC0xMDIsMTIgKzkxLDEyIEBAIGlubGluZSBib29sIENhbGxGcmFtZTo6aXNXYXNtRnJhbWUo
KSBjb25zdAogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNldENhbGxlZShKU09iamVjdCogY2Fs
bGVlKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlXSA9IGNhbGxlZTsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRp
Y19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBjYWxsZWU7CiB9CiAKIGlubGlu
ZSB2b2lkIENhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQogewot
ICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
XSA9IGNvZGVCbG9jazsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19j
YXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0gPSBjb2RlQmxvY2s7CiB9CiAKIGlu
bGluZSB2b2lkIENhbGxGcmFtZTo6c2V0U2NvcGUoaW50IHNjb3BlUmVnaXN0ZXJPZmZzZXQsIEpT
U2NvcGUqIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjA5
YzNhMWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZmNDZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBvZmZzZXQpIAorICAgIHsKKyAgICAgICAg
aWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkKKyAgICAgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZzZXRdKTsKKyAgICAgICAgZWxzZSBpZiBj
b25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDMyX3QpKQorICAgICAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50MzJfdD4odG1wc1tvZmZzZXRdKSk7
CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQxNl90
KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDE2
X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90KSk7CisgICAgICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIHZv
aWQqIG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7CisgICAgdWludDY0X3QgdG1wc1ttYXhOdW1D
aGVja3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBkYWE5NGM4OWY5MDA1YTk5NzJmYzBlM2Iw
MmViODkzZDIxMWNkZDk3Li4xZDlkZGMzYjUzNGU5MDkyZThlMTE3OGIzYTE2ODE1ZGY2OTk2NTk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZXMuaCIKICNpbmNsdWRl
ICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorI2luY2x1ZGUg
IkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCkBAIC0x
MjMsNyArMTI0LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsZXJDYWxsU2l0ZUlu
ZGV4ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKICAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBKU1Njb3BlKiBjYWxs
ZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5z
Y29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUq
IGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2VkUihjYWxsZXJDb2RlQmxv
Y2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0gY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtl
ZENvZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0gY2FsbGVy
VW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpIHx8IGNhbGxlclVubGlua2VkQ29k
ZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7CkBAIC0yMTMsNiArMjE0LDkgQEAgdW5z
aWduZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGFyZ3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+IG1heEFyZ3VtZW50cykKKyAgICAgICAgdGhy
b3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisKICAgICBpZiAobGVu
Z3RoID49IGZpcnN0VmFyQXJnT2Zmc2V0KQogICAgICAgICBsZW5ndGggLT0gZmlyc3RWYXJBcmdP
ZmZzZXQ7CiAgICAgZWxzZQpAQCAtMjQ5LDcgKzI1Myw3IEBAIHVuc2lnbmVkIHNpemVGcmFtZUZv
clZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCkKK3ZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQz
Ml90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIGlmIChVTkxJS0VMWSghYXJndW1l
bnRzLmlzQ2VsbCgpKSB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1cm47CkBAIC0yNjEsMzEgKzI2
NSwzMSBAQCB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaQogICAgIHN3aXRjaCAoY2VsbC0+dHlwZSgp
KSB7CiAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1l
bnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKS0+Y29weVRvQXJn
dW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTY29wZWRBcmd1bWVudHNUeXBlOgogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKS0+
Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxs
KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0ltbXV0YWJsZUJ1dHRlcmZs
eVR5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PEpTSW1tdXRh
YmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8
SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVj
dCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47IAog
ICAgIGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy5pc09iamVjdCgpKTsKICAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgICAg
ICBpZiAoaXNKU0FycmF5KG9iamVjdCkpIHsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRzKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7
CisgICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBpOwogICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbGVuZ3RoICYmIG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGkgKyBvZmZz
ZXQpOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkp
ID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJz
dEVsZW1lbnREZXN0W2ldID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAg
ICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgICAgIGNhbGxGcmFt
ZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB2YWx1ZTsKKyAgICAgICAgICAgIGZpcnN0RWxl
bWVudERlc3RbaV0gPSB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfSB9
CkBAIC0yOTcsOCArMzAxLDcgQEAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbEYKICAgICAKICAgICBs
b2FkVmFyYXJncygKICAgICAgICAgZ2xvYmFsT2JqZWN0LAotICAgICAgICBjYWxsRnJhbWUsCi0g
ICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSwK
KyAgICAgICAgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yKGNhbGxlZUZyYW1l
T2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSkpLAogICAgICAgICBhcmd1bWVu
dHMsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAKICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGxlbmd0aCArIDEpOwpAQCAtNTM4LDggKzU0MSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CiAKICAgICAg
ICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsK
LSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICBpZiAobV9jb2RlQmxvY2sp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBleGNlcHRpb24gaGFu
ZGxpbmcgaW4gY2hlY2twb2ludHMuCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICBp
ZiAobV9yZXR1cm5QQyA9PSAmY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9l
bnRyeXBvaW50KQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT52bSgpLmZpbmRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKG1fY2FsbEZyYW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFt
X2lzVGVybWluYXRpb24pIHsKICAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0
aW9uSGFuZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5k
bGVyKTsKICAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKHNob3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gU3Rh
Y2tWaXNpdG9yOjpEb25lOwogCisgICAgICAgIG1fcmV0dXJuUEMgPSBtX2NhbGxGcmFtZS0+cmV0
dXJuUEMoKS52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsK
ICAgICB9CiAKQEAgLTU5Nyw2ICs2MDYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Rlcm1p
bmF0aW9uOwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYg
bV9oYW5kbGVyOworICAgIG11dGFibGUgY29uc3Qgdm9pZCogbV9yZXR1cm5QQyB7IG51bGxwdHIg
fTsKIH07CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChW
TSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCkBAIC04
NjYsNyArODc2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgIH0KIAogICAgIFZNRW50
cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSgh
dm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRv
UmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJl
dHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSkpOwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAg
SlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlT
Y29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVj
dXJzZVNvZnQoKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQo
KSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2Ew
Li5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1
bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2Fk
VmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNl
dCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1l
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1
ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIw
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxp
bmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAg
ICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5t
X2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1f
ZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7
CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxs
RnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJ
bnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRv
cjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1
bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAgICAgICAg
ICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDIyMDA5YzVmZDJi
YTIyN2Q0N2NmZTg1NDkzOWY1MmRlZjJkNzFiYzIuLmUwNmNiNDliMjk1ZGU1ZWM3YzE5ZGIyNGU3
MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaApAQCAtNjQ3LDI4ICs2NDcsMjggQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi0g
ICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIEdQUlJlZyB0
bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVn
IHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRv
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHRvKTsKICAgICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcjMyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihWaXJ0
dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwg
ZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChpbnQgZW50
cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikK
KyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
CiAgICAgewotICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdp
c3RlcikpLCB0byk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgaW50IGVu
dHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICB2
b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVy
IGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKFJlZ2lzdGVySUQgdG8pCkBAIC02OTYsMTkgKzY5NiwxOSBAQCBwdWJsaWM6CiAgICAg
Ly8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlci4gT24gc29tZSBwbGF0Zm9ybXMsIHRoZSBjYWxsZWUg
aXMgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgdGhlCiAgICAgLy8gImxpbmsgcmVnaXN0ZXIiIGNv
bnRhaW5pbmcgdGhlIHJldHVybiBhZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3Jl
UHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
LSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwg
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0
YSgpKSk7CiAgICAgfQogI2Vsc2UKLSAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVI
ZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1p
dFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAg
ICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9m
ZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xv
Z3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUYWdU
b0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIGludCBlbnRy
eSkKKyAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRy
dXN0ZWRJbW0zMiB0YWcsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0
b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJE
ZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7CisgICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rl
cikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBA
IC0xMTQ4LDkgKzExNDgsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lz
dGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsK
ICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBz
dGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkp
OworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBB
ZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFz
ZUdQUikKQEAgLTExNjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0
dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikgKyBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50
IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihv
cGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0
dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0
aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyBiYXNlR1BSKQpAQCAtMTE3OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJl
c3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9y
KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJl
Z2lzdGVyKCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENh
bGxGcmFtZS4KLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCisg
ICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVn
aXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNp
emVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cykpOworICAgICAgICBBU1NFUlQoc2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJGcmFtZUFuZFBDOjpz
aXplSW5SZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzKS5vZmZzZXQoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhl
ZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xv
dChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CisgICAgICAgIHJl
dHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNs
b3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZpcnR1YWxSZWdpc3Rl
ciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRo
T2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJh
bWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBh
eWxvYWRTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNh
bGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KQEAg
LTEyMTgsNyArMTIyMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZy
YW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgw
KS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CisgICAgICAgIHJl
dHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJlZ2lzdGVyKDApKS53aXRoT2Zmc2V0KENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEdQUlJlZyBz
ZWxlY3RTY3JhdGNoR1BSKFJlZ2lzdGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1MjcsNyArMTUzMCw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lIHx8IGlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudDsKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAppbmRleCA5NjkwZTA5YzhiNTcyNzBkZWY3Zjg3YTQ2Y2MyYjU3ZTRmNzYyMDNl
Li4zOTVkOTEzM2JjZDk0MDc1M2Y4ODgwYjk4MzdiNWM2NGQ0YzU2NDIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcApAQCAtNjEsNyArNjEs
NyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlmCiAKICAgICBBU1NFUlQoIWRhdGEu
Y2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJlZ2lzdGVyKCkuaXNM
b2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBkYXRh
LmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJncy5zaXplKCk7
ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFjaygpIHx8IGRh
dGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmluZGV4IDYyNDM5YmRmMzQ0M2I4N2Jl
OTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUuLjRjNmFhMzJmNGY1ODc2MzgzMTA5MzhmMDBmOTJjMDk5
OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0g
ICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2FjaGVkUmVjb3Zlcnkq
IGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgfTsKICAgICAg
ICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBj
YWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9
ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAg
ICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAg
IHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggMjgwMzJhMjFhYWNi
OWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEyYTczYzU3MGFlZjkx
MjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwx
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVt
IGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9pZCBjb21waWxl
T3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BF
cVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERv
dWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQg
aW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRv
RG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAg
IHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklE
IHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRl
IGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8v
IHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lz
dGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNp
Z25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Cisg
ICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7
CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMg
aW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQs
MzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBN
YXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lk
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3Mg
ZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
Ym9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50
MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBj
b25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3Rl
cklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25z
dCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxv
YWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwor
ICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwor
ICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwg
UmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJl
Z2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0
IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50
MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBm
YWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0g
ZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNv
bnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVy
KTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1p
dFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBp
bmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsK
KyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9y
ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4
KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogCiAg
ICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApA
QCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJp
bmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3Qm
IG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVy
cyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNy
YywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBS
ZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZp
cnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMy
LCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVn
VDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwot
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpT
VmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5LDI5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhS
ZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3Rl
cklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZO
b3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihS
ZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNv
bXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKKyAg
ICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcs
IGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxD
b25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1
Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0
aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3OCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSog
b3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCArNjg3LDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAg
IHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcs
IEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFy
KGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAg
ICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2
b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAgICAgICAgdm9p
ZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgdm9pZCBlbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAg
ICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZp
cnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoaW50
IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAg
ICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBKU1ZhbHVl
IGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3Qo
SklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRG
dW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAg
ICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdp
c3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9p
ZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4m
IHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEzICs3NDcsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNS
ZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNh
bGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8
T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAt
ODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpo
YXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50
IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFy
Z3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFk
YXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2Rl
T3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRl
Y29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNy
YzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2FjZjlh
NDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMx
MDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAK
QEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGludCByZXN1
bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRl
Y29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGlu
IHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBp
bW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2
LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBv
cDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
SW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4
NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNv
bmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3Ig
dGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5t
X3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
Yyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0
IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lz
dGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0
aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kg
cHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5
dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAg
LTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRf
b3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAg
aW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBw
ZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0
LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24s
IE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVz
aW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxl
ZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAg
ICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2
LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rp
dihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVhYzMuLmFmOWVlYjYy
NzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0
YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQg
PT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFk
YXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBK
SVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQo
KTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Ci0g
ICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKKyAg
ICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBuZXZlciB1c2Ug
aXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJz
dFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7
CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNv
ZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAK
ICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0
ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4
Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhmZmY1
MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2
b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAo
T3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwg
ZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwg
Y29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgV1RGQnJlYWtwb2lu
dFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5z
aGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4
IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLmM2NmMxYjExOTAzNjg1
MWMyNzJkMGQ4YTI0ZWJlMzllMzExNzY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKQorQUxX
QVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5Lmlz
SGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20s
IHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Myw3ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkK
K0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU1LDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAg
LTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxs
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKKyAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBs
ZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKQorQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVy
biBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkg
JiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9
PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjMsMjYgKzM2NCwyNiBAQCBpbmxpbmUgSklUQXJy
YXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICBy
ZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRv
dWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElO
RSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0
KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJl
Zy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQo
aW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5MCw5ICsz
OTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJ
RCB0YWcpCiAgICAgbG9hZDMyKHRhZ0ZvcihpbmRleCksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92
ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA2LDEzNiArNDA3LDEzMyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3Rl
cklEIHBheWxvYWQpCiAgICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVl
UmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0KFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIo
KSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
SlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBm
cm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2Up
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7CiAKICAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVS
ZWdpc3RlcikgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAg
ICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRh
ZyhpbmRleCwgdGFnKTsKKyAgICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7Cisg
ICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwogICAgIGlmIChwYXlsb2FkID09
IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAgICAgICBsb2FkMzIodGFnRm9yKHRh
cmdldCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFz
ZSksIHBheWxvYWQpOworICAgICAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7Cisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5
bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgIGxvYWQz
MihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOworICAgIGxvYWQzMih0YWdGb3IocmVn
LCBiYXNlKSwgdGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoaW50IGluZGV4
MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdp
c3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBh
eWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklE
IHBheWxvYWQyKQogewotICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwotICAg
IGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOworICAgIGVtaXRMb2FkKHJlZzIsIHRh
ZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0TG9hZChyZWcxLCB0YWcxLCBwYXlsb2FkMSk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQg
dmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwor
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwog
ICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUp
OwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1
ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3Rl
cklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7CiAgICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oJmluQ29uc3RhbnRQb29sKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoQWJz
b2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShwYXlsb2FkRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJh
c2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUz
MihwYXlsb2FkLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIodGFnLCB0
YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJl
ZywgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMy
KQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3Jl
MzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5k
ZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0
YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGlu
ZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxv
YWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAg
ICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5k
ZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVy
IHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQogewotICAgIHN0b3Jl
MzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wp
CiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUz
MihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0Jvb2wpCi0gICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoaW5k
ZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoaW50
IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgc3Rv
cmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsKKyAgICBzdG9yZURvdWJsZSh2YWx1
ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50
IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNv
bnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7
IGluZGV4IH07Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2Fk
Rm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0
YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2Fk
KCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQu
dGFnKCkpLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcp
CiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVn
aXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcp
KTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7
CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElu
dChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigp
OworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQorQUxX
QVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQog
ewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CiAgICAgICAgIGNvbnN0YW50
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwpAQCAtNTU1LDExICs1NTMsMTEg
QEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEs
IGludCBvcDIsIGludCYgb3AsIGludDMyX3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBh
IGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAg
IGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwpAQCAtNTcxLDQ3ICs1NjksMzIgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKICAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVS
ZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdp
c3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYy5vZmZzZXQoKSwg
ZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxS
ZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdp
c3RlcklEIGRzdDIpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3Qy
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNy
YzIub2Zmc2V0KCksIGRzdDIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20pCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50
IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJ
VDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcy
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTYy
OSwyOCArNjEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxS
ZWdpc3RlciB2UmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlh
dGUodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklE
IHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsK
KyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsK
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVl
KTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFs
dWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNP
cGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgpKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
SW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5hc0ludDMyKCkpLCB2YWx1ZSk7CisgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50
SW50KHJlZykpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFu
dE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCiBBTFdBWVNf
SU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVtcCBKSVQ6OmVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQo
UmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApp
bmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0MTFiZTljZmI4MGY4MDgwNmY3ODhmNmMxLi42MjYzMmRhODRh
ZmVmOTc4MjExOTAzYzQ4NmQyMTlhMWU5YTdlNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92Pigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0g
Ynl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAot
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAg
IGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQog
ICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSks
IGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNT
RVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFu
dChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CiAgICAgfQogfQogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9j
b25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2Rl
Lm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNv
ZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9
IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCkBAIC0xNTUsOSArMTU1LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8g
PSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAogICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNl
VmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCiAgICAg
Ly8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRo
aXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODYs
NyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1tt
X2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
VW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwpAQCAt
MjQ2LDggKzI0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JO
dWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKIApAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xl
YW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19u
dW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVz
dDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMjg2LDgg
KzI4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTMwNyw4ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4g
JWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCks
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwogICAgIApAQCAtMzYwLDE1ICszNjAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJp
bWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CiAKICAgICAvLyBJbnZlcnQgYWdh
aW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFu
LCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cg
Yml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVj
dGl2ZWx5KS4KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSkpOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0zOTAsMTQgKzM5MCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNl
dCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJl
Z3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAg
ICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDcwLDggKzQ3MCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
UHRyPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIEpTVmFs
dWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFs
UG9pbnRlci5vZmZzZXQoKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dmFsdWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChi
eXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXND
ZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKQEAgLTQ4NSwxOCArNDg1LDE4IEBA
IHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJl
Z1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUx
MCwyNiArNTEwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAg
QVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwogICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKHZtKCkpOwogfQpAQCAtNTQ4LDkgKzU0OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9m
ZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29k
ZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMy
LCByZWdUMSk7CiAgICAgCkBAIC01OTIsOCArNTkyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxl
T3AKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7
Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdU
MCwgc3JjMiwgcmVnVDEpOwogCkBAIC02NTAsOCArNjUwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QwKSk7CkBAIC02NjQsOCArNjY0LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b051bWVyaWM+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwpAQCAtNjg0LDIwICs2ODQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVt
ZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4o
KTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJl
Z1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKQEAgLTcyOCwxMCArNzI4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0
KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24pOwog
CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUu
b2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25W
YWx1ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5s
aW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAg
LTczOSw3ICs3MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1
ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8
fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAg
ICAgZWxzZQpAQCAtNzQ5LDcgKzc0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhp
cyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAg
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewor
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwogICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7
CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJv
ZmlsZSY+KHByb2ZpbGUpKTsKQEAgLTc2NiwxMCArNzY2LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
YXJlbnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKICAgICBzaXplX3QgdGFibGVJbmRl
eCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7
Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9
ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtNzk0LDcgKzc5
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTd2l0Y2hDaGFyPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUu
bV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25l
ZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dp
dGNoU3RyaW5nPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUlu
ZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGlu
ZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0
YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50
LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MzQsOCArODM0LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
TnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7
CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04Njcs
OCArODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW9uKikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3Jl
YXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZh
cnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBl
bWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKKyAg
ICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtOTEzLDcgKzkxMyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0
X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC05MjQsNyArOTI0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0
cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0
KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0
LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBA
IC05MzcsNyArOTM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVj
b2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRl
Y29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0
aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVn
ID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtOTY1LDEz
ICs5NjUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywg
U3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1p
dEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVn
VDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIApAQCAtOTg1
LDcgKzk4NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtOTk2LDcgKzk5Niw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJv
b2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMTAyNCwxMCArMTAyNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rv
ci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5z
dGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0
YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKQEAgLTExMDQs
OCArMTEwNCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCByZWdleHAgPSBi
eXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVn
ZXhwOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CkBAIC0xMTE1LDEyICsxMTE1LDEyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVu
Y0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEp1
bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNl
bmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIApAQCAtMTE2MSwxMSArMTE2MSwx
MSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpOwpAQCAtMTIwNywxMCArMTIwNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVzSW5kZXggPSBieXRl
Y29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJn
djsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKIH0KQEAgLTEyMTksOCArMTIxOSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKQEAgLTEyMzYsOSArMTIz
Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVBy
b3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEyODIsOSArMTI4
Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9j
b2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAgIApAQCAtMTMzMCw5ICsxMzMwLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVy
dHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
CkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAg
IC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKQEAgLTEzOTAsOSArMTM5MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDE0LDkgKzE0MTQsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQ0MCw3ICsxNDQwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9
IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVj
b2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCkBAIC0x
NTA5LDcgKzE1MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogICAgIEdQUlJlZyBzY3Jh
dGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdp
c3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dD
aGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gy
UmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQogCkBAIC0xNTIzLDggKzE1MjMsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwog
ICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJl
Z3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSk7CiB9CiAKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2Zp
bGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CkBAIC0x
NTU2LDcgKzE1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lw
ID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
LCByZWdUMik7CiAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdz
KTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogCiAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNh
ODEzNmVjYWMxYjY0MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgw
ODU1MWZlYmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAg
ICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRl
eC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRo
aXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsK
KyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdU
MCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5k
LCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8
VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0
MzkzZC4uOGNiNTVmYjViN2VmODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0
LDE4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXpl
KFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlT1NSKCkpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRp
bWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5z
aWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFs
dWVzID0gMDsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBudW1WYXJz
V2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKworICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1Zh
bHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFy
c1dpdGhWYWx1ZXMsIDApOwogICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0g
c3RhdGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVz
dEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBt
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVy
YW5kSXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgp
IDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JD
YWxsZWVTYXZlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11c3RI
YW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgp
OworICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBs
YWNlbWVudCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkK
ICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9i
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7Cisg
ICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1Zh
bHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1Zh
bHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJf
dCBzY29wZQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihz
Y29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNj
b3BlUmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9
IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpz
Q2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVj
dCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwog
ICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRv
IENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgSW5zdHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganND
YXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0g
anNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUp
LmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5t
X3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29w
ZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2My
OGJlOGM0ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogewogICAg
IGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8o
KTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAg
LTIwOCw3ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3Vz
UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNl
IENvbnRpZ3VvdXNTaGFwZToKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1p
dFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUs
NyArMjM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlT
dG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAg
TGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5r
KHRoaXMpOwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAg
Ly8gcHJvcGVydHk6IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAotICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFs
SWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNs
b3dDYXNlcyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGludCBiYXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAg
ICBpbnQgdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9h
ZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQo
KTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAg
aWYgKGlzRGlyZWN0KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
ICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmli
dXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0
NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0Pigp
OwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlk
SXNEaXJlY3QpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRo
ZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIs
CkBAIC02MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjpl
bWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7
Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5k
ZXgrK107CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVj
ayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhcklu
amVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3Qs
IGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
Cit2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQg
ZGVwdGgpCiB7CiAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAs
OCArNjcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1l
dGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGlu
dCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZv
aWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwg
R1BSUmVnIHJlZykKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1p
dEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lk
IEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwg
V2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1Zh
bHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5v
dGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBK
SVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NP
Zk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0
V2F0Y2hwb2ludFNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3
ICs5MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCBy
ZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7CkBAIC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3Rvcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsK
ICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIGludCBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVk
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsK
ICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CkBAIC0xMTUwLDggKzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmll
bGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1
bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3Zv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5v
dENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAg
ICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUp
IHsKQEAgLTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRB
cnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VS
VChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1
MDEsNyArMTUwMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0
KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYx
ZGJmMzM5MGE2YzdkYjI4NmE1YzEuLmZhNWQwYWFiNGE1ZDgxMmRlMDExYjM2ZDU0YzMzYzA4MGQ3
ZDlkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VK
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAg
LTQ1LDE4ICs0NSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAK
LSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lz
dGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRM
b2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsK
LSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lz
dGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAg
IGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBw
YXlsb2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgZHN0KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUo
VmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwog
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5v
dEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBK
dW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAg
ICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3Rl
cklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZv
aWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsK
LSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBl
bnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklE
IGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAg
ICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdp
c3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CiAKICAgICAgICAgVk0qIHZt
KCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBAIC02NCwzNiArNjQsMzYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaW5saW5lIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAgIGlubGluZSBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIHsKLSAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgcGF5bG9hZCk7Ci0g
ICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBheWxvYWQpOwor
ICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXIpOwogICAg
IH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKKyAgICBpbmxp
bmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Io
dmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwor
ICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIH0KICAgICAKLSAg
ICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50
MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlu
bGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZp
cnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdp
c3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihO
b3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgs
IEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cih0
YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKHZp
cnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9h
ZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgaXNE
b3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgbG9hZFB0cihw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQ
dHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAgICAgICBsb2FkRG91YmxlKGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAgLTEwMSwyMyArMTAxLDIzIEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlubGluZSBK
U0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWdu
ZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHJldHVybiBi
cmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNl
SklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6
Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIEp1bXAgbm90SW50MzIgPSBicmFu
Y2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKGRzdCwgZHN0KTsK
ICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFj
ZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVh
bFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAg
ICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51bWJlciA9IGJyYW5j
aElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90
SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRz
dCk7CkBAIC0xMjksMjYgKzEyOSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYK
IAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20p
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lz
dGVySUQgZnJvbSkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAq
IHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBl
bnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50
ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
IHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJv
bSwgcGF5bG9hZEZvcihlbnRyeSk7CiAjZWxzZQogICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJl
c3NGb3IoZW50cnkpKTsKICNlbmRpZgogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBK
U0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQg
ZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7
CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBhZGRyZXNzRm9yKGVudHJ5
KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCAzODg3MzA1MmQxMjg1MmZjNmJiOTE0MmQ0
NTYwN2FlOGUxOWE2NzBhLi4wYmE3M2VmOGMxMzRlYmJiZDFkMDRhNGIxNzIxNGY0ZmE3MzUxODNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uo
Vk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90CiAgICAgICAgICAg
ICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
SlNTdGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQsIERhdGFGb3JtYXRJbnQzMik7CiAgICAgICAgIGZpcnN0QXJndW1lbnRS
ZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSk7CiAgICAg
fQogICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtLCBqaXQsIG51bVVzZWRTbG90
c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgYXJndW1lbnRDb3Vu
dFJlY292ZXJ5LCBmaXJzdEFyZ3VtZW50UmVnLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5r
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApp
bmRleCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEzZGYzNmE3MjQ5YjZjMzQzLi45MzNjYTliZTEw
MmUwZWRmOTRiYjRlYWU4MjgyMTQ4MjI5YzgyNmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50
IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
YXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5k
KGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBzY3JhdGNoKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQg
ZHN0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2Zh
aWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChzcmMsIGRzdCkpOwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVt
cCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAg
ICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2FkSW50MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAg
ICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CmluZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRlNmRiNDRiZGFmOWU4ZTgwZjIyYWEuLmMzNzZkYmUy
Y2Q3ZDZkZDNmYTU0ODdiNTdiNTg5NDdmNmRmYmEzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZt
KQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4
ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMCk7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdl
ciA9IGppdC5icmFuY2hJZk5vdEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJ
bnQzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAppbmRleCBhZThkZWUy
OWY5ODljNmEwMjU1MDE1ZjVmYWE2MTU2NmQ2MTk2MDAzLi5kNTE3MDFmMjMwMTc0ZjRiNjM1YTc1
MzY2NmEyZGViMWRmYTEyNzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5oCkBAIC00Myw5ICs0MywxNCBAQCB0eXBlZGVmIHZvaWQgKCpMTEludENvZGUpKCk7CiAKIG5h
bWVzcGFjZSBMTEludCB7CiAKLWV4dGVybiAiQyIgSlNfRVhQT1JUX1BSSVZBVEUgT3Bjb2RlIGdf
b3Bjb2RlTWFwW251bU9wY29kZUlEcyArIG51bVdhc21PcGNvZGVJRHNdOwotZXh0ZXJuICJDIiBK
U19FWFBPUlRfUFJJVkFURSBPcGNvZGUgZ19vcGNvZGVNYXBXaWRlMTZbbnVtT3Bjb2RlSURzICsg
bnVtV2FzbU9wY29kZUlEc107Ci1leHRlcm4gIkMiIEpTX0VYUE9SVF9QUklWQVRFIE9wY29kZSBn
X29wY29kZU1hcFdpZGUzMltudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXTsKKworZXh0
ZXJuICJDIiB7CisgICAgdm9pZCBKU0NfSE9TVF9DQUxMIGNoZWNrcG9pbnRfb3NyX2V4aXRfZW50
cnlwb2ludCgpOworICAgIHZvaWQgSlNDX0hPU1RfQ0FMTCBjaGVja3BvaW50X29zcl9leGl0X2Zy
b21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBPcGNv
ZGUgZ19vcGNvZGVNYXBbbnVtT3Bjb2RlSURzICsgbnVtV2FzbU9wY29kZUlEc107CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgT3Bjb2RlIGdfb3Bjb2RlTWFwV2lkZTE2W251bU9wY29kZUlEcyArIG51
bVdhc21PcGNvZGVJRHNdOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE9wY29kZSBnX29wY29kZU1h
cFdpZGUzMltudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXTsKK30KIAogY2xhc3MgRGF0
YSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CmluZGV4IDM1N2E0NmU4ZTU3ODk3ZjI3ODVjZDMzOWZjYmUyYmMwYzkwY2VkYjIuLmY2MjEzMWM3
MzcxZDYzNDUxYWQ5ZWE5ODAyZmMyNmVjYjZmODgwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlu
bGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Y29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRP
cGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJh
bmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0K
K2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJh
bWUtPnIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhm
aXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChm
aXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFt
ZSogY2FsbEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5
dGVjb2RlLm1fYXJndjsKICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2Vk
UihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFt
ZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBj
YWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUp
OwogICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKQEAgLTE2ODksNyArMTY5MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJn
c1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAg
c2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJh
bWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwog
ICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVl
KSk7CkBAIC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1v
bkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAog
ICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5t
X2FyZ2MpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVB
c1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNl
dFJldHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZy
YW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBD
KHBjKTsKQEAgLTE5MzAsNyArMTkzMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAg
ICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQm
IHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVj
a2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5t
X29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NjEsMTEgKzE5NjIsMTI0IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkK
ICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+Citz
dGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVj
b2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS5nZXRUbXA8SlNWYWx1ZT4oT3Bjb2RlOjphcmdD
b3VudCkuYXNVSW50MzIoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAg
YXJncy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBi
dWZmZXIpIHsKKyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxG
cmFtZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCAwLCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0pOworICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQo
KSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwo
Z2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBn
ZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7Cisg
ICAgZWxzZQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVy
YW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwg
Ynl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5t
X2RzdCkgPSByZXN1bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hO
ZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpS
ZWYgcGMpCit7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bmspIHsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG5leHRQQyA9IHBjLm5l
eHQoKS5wdHIoKTsKKyAgICAgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBMTEludDo6Z2V0Q29kZVB0
cjxKU0VudHJ5UHRyVGFnPigqcGMubmV4dCgpLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChuZXh0UEMsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9
CisKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQnl0ZWNvZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRl
eCA9IHBjLm5leHQoKS5pbmRleCgpOworICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChudWxscHRyLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisjZW5k
aWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIFNs
b3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGlu
ZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlKTsKK2V4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0
X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCB2b2lkKiwgRW5jb2RlZEpT
VmFsdWUgcmVzdWx0KQoreworICAgIC8vIFNpbmNlIGFsbCBvdXIgY2FsbGluZyBjaGVja3BvaW50
cyBkbyByaWdodCBub3cgaXMgbW92ZSByZXN1bHQgaW50byBvdXIgZGVzdCB3ZSBjYW4ganVzdCBk
byB0aGF0IGhlcmUgYW5kIHJldHVybi4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNs
b3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hl
Y2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBhdXRvIHBjID0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2Rl
ID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2Nh
bGxfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ2Fs
bFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLm1fZHN0KSA9
IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3Mgc2hvdWxkIG5ldmVyIHJldHVybiBpZiB0aGUgdGhpbmcgaXQg
d2FzIGNhbGxpbmcgd2FzIGlubGluZWQuCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCitleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJh
bWUqIGNhbGxGcmFtZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhf
Y2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29k
ZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3Rh
dGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBB
U1NFUlQoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworCisgICAgYXV0byBwYyA9IGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29k
ZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJh
bWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAg
ICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3Qs
IHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9yZXQsICJXZSBzdHJvbmds
eSBhc3N1bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2VkIGJ5IGFuIG9wX3JldC4iKTsKKyAg
ICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0
LCBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAg
ICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHJldHVyblRvVGhyb3codm0p
LCAwKTsKKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBj
KTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tf
b3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKIHsKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJhbWUpCiAgICAgICAgIGdsb2JhbE9i
amVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgqdm0pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGUx
NzM0ZGNmNjFiNGNmYzU1MTJmYTI4NTYwMWJjYWIzMGM4OGYyZTQuLjQwZjkyZTMxMmE0MDBkODg0
YzAzMmFkOGFkNDk4MzRjNmVhNzgyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTEwOTEsNyArMTA5MSw3IEBAIG1h
Y3JvIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcE5hbWUsIHNpemUpCiAgICAgZGVm
aW5lT1NSRXhpdFJldHVybkxhYmVsKG9wTmFtZSwgc2l6ZSkKIAogICAgIHJlc3RvcmVTdGFja1Bv
aW50ZXJBZnRlckNhbGwoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2Zy
XSwgUEMKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gYXJy
YXlQcm9maWxlKG9mZnNldCwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gp
CkBAIC0xODM5LDEzICsxODM5LDE3IEBAIGVuZCkKIGNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3Ry
dWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQog
CiAKLW1hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBk
aXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQotICAgIGNhbGxT
bG93UGF0aChmcmFtZVNsb3dQYXRoKQorbWFjcm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9u
VGFyZ2V0KQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MwogICAgIGxvYWRwIENvZGVCbG9j
azo6bV92bVt0M10sIHQzCiAgICAgYnRweiBWTTo6bV9leGNlcHRpb25bdDNdLCAubm9FeGNlcHRp
b24KLSAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKLS5ub0V4
Y2VwdGlvbjoKKyAgICBqbXAgZXhjZXB0aW9uVGFyZ2V0Cisubm9FeGNlcHRpb246ICAgIAorZW5k
CisKK21hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBk
aXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgIGNhbGxT
bG93UGF0aChmcmFtZVNsb3dQYXRoKQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJv
d19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKICAg
ICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbW92ZSByMSwgc3AKQEAgLTE5OTksNyArMjAwMyw2IEBA
IG9wKGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAo
KQogICAgIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShJbnRlcm5hbEZ1bmN0aW9uOjpt
X2Z1bmN0aW9uRm9yQ29uc3RydWN0KQogZW5kKQogCi0KICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhh
dCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgog
IyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVp
dGhlciBKSVQuIFdlIGFzc2VydAogIyBhcyBtdWNoLgpAQCAtMjA0NSwzICsyMDQ4LDIwIEBAIG9w
KHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzLCBtYWNybyAoKQogZW5kKQogCiBlbmQKKwor
aWYgbm90IENfTE9PUCBhbmQgbm90IENfTE9PUF9XSU4KKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludAorICAgIF9jaGVja3BvaW50X29z
cl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQ6CisgICAgICAgIG1vdmUgcjAsIGEy
CisgICAgICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGwpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19m
cm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEKKworICAgIGdsb2JhbCBf
Y2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50CisgICAgX2NoZWNrcG9pbnRfb3NyX2V4aXRf
ZW50cnlwb2ludDoKKyAgICAgICAgIyBGSVhNRTogV2UgY2FuIHByb2JhYmx5IGRpc3BhdGNoIHRv
IHRoZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0bHkgYnV0IHRoaXMgd2FzIGVhc2llciAKKyAg
ICAgICAgIyBhbmQgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAg
ICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KQorICAgICAg
ICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGlu
ZSkKKyAgICAgICAgam1wIHIxCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggM2RkMmViNDhjYmJhNmVmNWNk
OTg4NjM5Yzc5MTFlMjJhNzEzMzE0OC4uNDExZGYyYzY3NTIzMzBiMzdiOTZhYmNlZDg3YTg0NDZh
ODc1Njk5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTQyLDYgKzQyLDE0IEBAIG1hY3JvIG5leHRJbnN0cnVj
dGlvbldpZGUzMigpCiAgICAgam1wIFt0MSwgdDAsIFB0clNpemVdLCBCeXRlY29kZVB0clRhZwog
ZW5kCiAKK21hY3JvIHN0b3JlUEMoKQorICAgIHN0b3JlaSBQQywgTExJbnRSZXR1cm5QQ1tjZnJd
CitlbmQKKworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBD
CitlbmQKKwogbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3Bjb2RlU3RydWN0LCBmaWVsZE5hbWUs
IGRzdCkKICAgICBsb2FkYiBjb25zdGV4cHIgJW9wY29kZVN0cnVjdCVfJWZpZWxkTmFtZSVfaW5k
ZXhbUEIsIFBDLCAxXSwgZHN0CiBlbmQKQEAgLTkyLDcgKzEwMCw3IEBAIGVuZAogCiAjIEFmdGVy
IGNhbGxpbmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVnaXN0ZXJzIGFy
ZSBub3QgdXNlZC4KIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKHNpemUsIG9wY29kZVN0cnVjdCwg
ZGlzcGF0Y2gpCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwor
ICAgIGxvYWRQQygpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29k
ZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIGdldChzaXplLCBv
cGNvZGVTdHJ1Y3QsIG1fZHN0LCB0MSkKQEAgLTM5MCw3ICszOTgsNyBAQCBlbmQKIAogIyBDYWxs
IGEgc2xvdyBwYXRoIGZvciBjYWxsIG9wY29kZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNs
b3dQYXRoLCBhY3Rpb24pCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0
W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92
ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTM5OSwyMCArNDA3LDIwIEBAIG1hY3JvIGNh
bGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBjYWxsVHJhcEhh
bmRsZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09m
ZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAg
IG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCiAgICAgY0NhbGwyKF9sbGludF9zbG93X3Bh
dGhfaGFuZGxlX3RyYXBzKQogICAgIGJ0cG56IHIwLCB0aHJvd0hhbmRsZXIKLSAgICBsb2FkaSBB
cmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5Q
Q1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICBj
aGVja1N3aXRjaFRvSklUKAogICAgICAgICAxLAogICAgICAgICBtYWNybygpCi0gICAgICAgICAg
ICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICAgICAg
c3RvcmVQQygpCiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAgICAg
ICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00MjEsNyArNDI5LDcg
QEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSByMSwg
c3AKICAgICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3ZlcjoK
LSAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAg
ICAgICAgICAgIGxvYWRQQygpCiAgICAgICAgIGVuZCkKIGVuZAogCkBAIC0xNzY4LDYgKzE3NzYs
OCBAQCBtYWNybyBwdXRCeVZhbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgb3NyRXhpdFBv
aW50KQogICAgIGVuZCkKIGVuZAogCisKKwogcHV0QnlWYWxPcChwdXRfYnlfdmFsLCBPcFB1dEJ5
VmFsLCBtYWNybyAoc2l6ZSwgZGlzcGF0Y2gpCiAub3NyUmV0dXJuUG9pbnQ6CiAgICAgZ2V0dGVy
U2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX3B1dF9ieV92YWwsIHNpemUpCkBAIC0yMDU3LDcg
KzIwNjcsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29k
ZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBhZGRwIGNmciwgdDMKICAg
ICAgICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCBtX2FyZ2MsIHQyKQotICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdP
ZmZzZXRbY2ZyXQorICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVu
dENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAgICAg
cHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21h
Y2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCA4NDBmODliODhkNDIwY2MzYjc1Yzgz
ZDZjNTc4MjQxNTQwMmYzMzY2Li44ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1MDBmZGZiZTY5OTk4MDdj
ZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCkBAIC0xMzMsNiAr
MTMzLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3ZlcmZsb3dDaGVja05vdE5lZWRlZCgpIHsg
Y2xlYXJOZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50LCBjb25zdCBGdW5jdG9yJiBmdW5jKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAgICAgICBlbnN1cmVDYXBhY2l0eShj
b3VudCk7CisgICAgICAgIGlmIChCYXNlOjpoYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fc2l6ZSA9IGNvdW50OworICAgICAgICBmdW5jKHJlaW50ZXJwcmV0
X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZv
aWQgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCBuZXdDYXBh
Y2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAK
aW5kZXggZjhkOTc5OTU4NzQ1MjI2YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNlODdhMS4uZmZiNzQ1OWE2
YWRjY2JhYjE2ZGE4YTRlZjhiMTcxMWQ4NzJhMWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMTc4OCw2ICsxNzg4LDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVy
aXZlZENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgZXZhbENvbnRleHRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMo
KSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxDYWxsczsgfQorICAgIHVuc2lnbmVkIGhhc0NoZWNr
cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQogICAgIHVuc2lnbmVk
IGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CiAgICAgdW5zaWduZWQg
ZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KIApAQCAtMTgyMCw2ICsx
ODIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0VHlwZSA6IDI7CiAg
ICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOwogICAgIHVuc2lnbmVkIG1fY29kZVR5cGUg
OiAyOworICAgIHVuc2lnbmVkIG1faGFzQ2hlY2twb2ludHMgOiAxOwogCiAgICAgQ29kZUZlYXR1
cmVzIG1fZmVhdHVyZXM7CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtMjAx
OCw2ICsyMDIwLDcgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRD
b2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKgogCiAgICAgLCBtX2RpZE9wdGlt
aXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDAp
CisgICAgLCBtX2hhc0NoZWNrcG9pbnRzKGNhY2hlZENvZGVCbG9jay5oYXNDaGVja3BvaW50cygp
KQogCiAgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcygpKQogICAgICwg
bV9wYXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQpAQCAtMjIwNiw2ICsyMjA5
LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAgICBtX3BhcnNlTW9kZSA9IGNvZGVCbG9j
ay5tX3BhcnNlTW9kZTsKICAgICBtX2NvZGVHZW5lcmF0aW9uTW9kZSA9IGNvZGVCbG9jay5tX2Nv
ZGVHZW5lcmF0aW9uTW9kZTsKICAgICBtX2NvZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7
CisgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwogCiAg
ICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkp
OwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdl
dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCmluZGV4IGYzNThkNDhhNTBkZTczZWFiMzg1Njk5YjNhNmY1MTEzYmJiZTliYmEuLmUy
N2ZlM2NhOTc4YjM5NDQ4MjYxNjdkNGEwNjFhMmVhZDRmOTI2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtOTgsOCArOTgs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBCRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAg
ICAgICAgIFwKICAgICBTRVRfUENfRk9SX1NUVUJTKCkKIAotI2RlZmluZSBHRVQob3BlcmFuZCkg
KGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKSkKLSNkZWZpbmUgR0VUX0Mo
b3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKSkKKyNkZWZpbmUgR0VUKG9w
ZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkpCisjZGVmaW5lIEdFVF9DKG9w
ZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZCkpCiAKICNkZWZpbmUgUkVUVVJOX1RXTyhmaXJz
dCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJz
dCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTExMzksOCArMTEzOSw3IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKIHsKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7
Ci0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAgICBKU1Nj
b3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lz
dGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihHRVRfQyhieXRlY29kZS5t
X3N5bWJvbFRhYmxlKS5qc1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gR0VU
X0MoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoaW5pdGlh
bFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpzVERaVmFsdWUoKSk7
CkBAIC0xMTU1LDggKzExNTQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF93aXRo
X3Njb3BlKQogICAgIEpTT2JqZWN0KiBuZXdTY29wZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2Nv
cGUpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElP
TigpOwogCi0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUub2Zmc2V0
KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNj
b3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUpLlJlZ2lzdGVyOjpz
Y29wZSgpOwogICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IGN1cnJlbnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIApAQCAtMTE2NSw3ICsxMTYzLDcgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVj
bF9pbl9ldmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJl
c29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7CiAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7
Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7
CiAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9p
c3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAKICAgICBD
SEVDS19FWENFUFRJT04oKTsKQEAgLTExNzksNyArMTE3Nyw3IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNv
bHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAg
ICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3Bl
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2Nv
cGU6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwogICAgIC8vIFByb3h5IGNh
biB0aHJvdyBhbiBlcnJvciBoZXJlLCBlLmcuIFByb3h5IGluIHdpdGggc3RhdGVtZW50J3MgQHVu
c2NvcGFibGVzLgogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTQyNCw3ICsxNDIyLDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiB7CiAgICAgQkVHSU4o
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCk7Ci0gICAg
QVNTRVJUKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoYnl0ZWNvZGUubV9pbW11
dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGUubV9pbW11dGFi
bGVCdXR0ZXJmbHkuaXNDb25zdGFudCgpKTsKICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogaW1t
dXRhYmxlQnV0dGVyZmx5ID0gYml0d2lzZV9jYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oR0VU
X0MoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAg
ICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlOwogCkBAIC0xNDQzLDcgKzE0NDEsNyBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxs
b2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdz
IGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAvLyBhIGNvbXBpbGF0aW9u
IHRocmVhZC4KICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNl
dCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5z
ZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKICAgICB9CiAKQEAgLTE0ODgsNCArMTQ4NiwxNiBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfc3ByZWFkKQogICAgIFJFVFVSTihKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
Y3JlYXRlRnJvbUFycmF5KGdsb2JhbE9iamVjdCwgdm0sIGFycmF5KSk7CiB9CiAKK2V4dGVybiAi
QyIgdm9pZCBkdW1wUmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKTsKK2V4dGVybiAiQyIgdm9p
ZCBkdW1wUmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKQoreworICAgIGRhdGFMb2dMbihSYXdQ
b2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpKSk7Cit9CisKKy8vIGV4dGVybiAiQyIg
U2xvd1BhdGhSZXR1cm5UeXBlIFNMT1dfUEFUSCBjaGVja1BDKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpOworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5
cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0
aW9uKiBwYywgKQorLy8geworCisvLyB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCA0YmQxOTJh
NmM3N2VmYzAyNmU3YTk1YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0MThjYTg4ZWZkMWI3OGU2
MzExYjY3NWQxZWZhNWE1ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zdHJ1Y3REYXRhLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVy
cm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3JPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQor
CitKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgY29uc3RydWN0b3JPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBh
cmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTQ2LDEwICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0
KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVj
dERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3Ry
dWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAKIH0KIAotCiBKU09i
amVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29u
c3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3Ry
dWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBuZXdU
YXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4IGQwYWUwMGJhMTFkN2Nl
ZTI0ZGZmYWU5MTkxMTk2N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzljNDkxZjlmOTNiYWViNmNh
YzEyNjIxZjNiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnN0cnVjdERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1
Y3REYXRhLmgKQEAgLTYwLDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVjdERhdGEgewogCiAvLyBD
b252ZW5pZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0
YSBhbmQgQ2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCiBKU19FWFBP
UlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBm
dW5jdGlvbk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7
CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3Qm
LCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3Ry
dWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlIG5l
d1RhcmdldCk7CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RU
eXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEwMjJhYzJkZDlhZWZhZmQ0
M2EwMWE1Yzg1Li40YjM0NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1MDlmMzg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAK
QEAgLTEzNywyMCArMTM3LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50
KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgs
IGludGVybmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fbWFwcGVk
QXJndW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVuZ3RoICsg
b2Zmc2V0LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAgICAgIGZvciAo
aSA9IG9mZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3Rh
cnQgKyBpKSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERl
c3RbaSAtIG9mZnNldF0gPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IGdldChn
bG9iYWxPYmplY3QsIGkpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0
XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
R2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50
czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOwogfQogCiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50
c1NpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAppbmRleCAwYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNlNzcyZTBhLi44ZDk2
NDJhMmM5NDA0MDgwYjkxM2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0LDcgKzE0NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRz
Pjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9sZW5ndGgpOwogICAgIH0K
IAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwg
VmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBhYmQwMGNlZWFmNWViYjdl
ZTFkNDY3ZGE0ODg3MGQ1MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJkYWIzZGFlZWIyNzJj
YmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCkBAIC01OSw3ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1vZGlmaWVk
QXJndW1lbnREZXNjcmlwdG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgYm9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1
bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1bWVudHNQdHIgPSBD
YWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47CiAgICAgTW9kaWZpZWRB
cmd1bWVudHNQdHIgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApp
bmRleCAyMTgyYTYyYjEzMDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZmLi5lMGFhYmY1ZjJl
ZTE4NWI3ZDEzMzE2MDM3ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKQEAgLTI5Nyw3
ICsyOTcsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVu
dERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMDUs
OSArMzA1LDkgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBUeXBlKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVu
dChpICsgb2Zmc2V0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0
ICsgaSkgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAg
ICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkg
KyBvZmZzZXQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJz
dEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmlu
ZGV4IDQ0YzdlNTIwZjFjMGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAuLjZkMDc1OTE3MTFl
ZWRiYzI4ZTBlNGRhNzg0OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIEpTQXJyYXk6OmZp
bGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyJiBhcgogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0LCBpKSk7CiB9CiAK
LXZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVz
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUK
ICAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQo
dGhpcywgaSk7CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0
KSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAgICAgZmly
c3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIHYpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTQsMTEgKzEy
OTQsMTEgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9
IHYuZ2V0KCk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgp
OwogICAgIH0KICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xvYmFsT2Jq
ZWN0LCBpKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9i
YWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCAz
MTc5NDljNTcyYTExYjc1YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2NWI1ZmY0OTI1NGNj
MWE2YzQ3OTAyYjc5MTBhYzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJrZWRBcmd1
bWVudEJ1ZmZlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2Vy
dmFibGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAzM2RhYTk5YTU5MzZk
ZWExOWExYzQ5YzAuLmU0OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEyYzE5MTFjMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgp
LCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRl
cmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVibGljTGVuZ3RoKCkp
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGkg
KyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zm
c2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0
W2ldID0ganNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4IGFjYjY4NDgxOTFh
MTkwMzUyMmI5YjNlNGQwMGY5NjllNDBiNzgxNWEuLjA3ZTFhOGExMGMzY2RjNzExN2FjYTNkYzU0
M2VkN2RkYjBkNDFmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAot
ICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29t
cGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgx
NjgzNDk3ZS4uMTZhYTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAg
dm9pZCBKU0xvY2s6OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9
IG1fdm07CiAgICAgaWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RSghdm0tPmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0
IHBlbmRpbmcgY2hlY2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAg
ICB2bS0+ZHJhaW5NaWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1l
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFk
NmRlMzdiYTAuLjU5NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRh
YmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUq
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8K
IAogICAgIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChn
bG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUp
OwogCi0gICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChn
bG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZz
ZXQoKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBl
eGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVj
dC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0
ZXJPZmZzZXQoKSkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7
CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKaW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEwNTBjZGU4NmNiMjUyMWU1
NDExNi4uOTFlZDczOWUyNWY0OTM4ZWY1MDI3MjdkZjUxNjgwZDg2Y2EyMDg3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMSArNTA5LDkgQEAg
c3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6
OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBt
aW5pbXVtUmVzZXJ2ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9u
ZVNpemUoKSA9IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpv
bmVTaXplOwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBGSVhNRTogTWFrZSBwcm9i
ZSBPU1IgZXhpdCB3b3JrIG9uIDMyLWJpdDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkg
PSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAg
ICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4MWQ5Nzhh
N2IyYTYyNjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2MDVmYmY1
MjViZGRmMjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2NvcGVkQXJn
dW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAgc3RvcmFn
ZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5lcmljQXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9B
cmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYyOWVkNGNi
MWI0ZTk3MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUwODRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaApA
QCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVu
dHM8U2NvcGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwg
bV90YWJsZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA2NGRkZmNiMWEyNTYwZTZmZTFi
NDU0ZTRmZWUxNDg5MmFkYzA4YTlmLi44ZjZlNTY1ZTI0N2U1YTIzMTkzMzE5ODgyODY3MmUyMTA0
ODgxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5FeGVjdXRh
Ymxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAt
MTAyNyw2ICsxMDI4LDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYKIAordm9pZCBWTTo6
YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc3RkOjp1bmlx
dWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxvYWQpCit7CisgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdURk1vdmUocGF5bG9hZCkp
OworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gVk06OmZpbmRD
aGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIHNpZGVTdGF0ZSA9
IG1fY2hlY2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHNpZGVT
dGF0ZTsKK30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJhbWUpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDI4MDg2YzRlZDkxNjA2YzI4MWIxYTFkNWI3YTFk
YWIwNjA4ODA3MGEuLjI1YzRhNTE0YTE4YzY3MGU2NTQzMWFiOTY4Nzg4MzM4MWQ3MWVjMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5z
aWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1v
bklkZW50aWZpZXJzOwpAQCAtOTQ5LDYgKzk1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogCisgICAgdm9pZCBh
ZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUq
KTsKKyAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVudHJ5U2NvcGUqIGVudHJ5
U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7
IG51bGxwdHIgfTsKQEAgLTEyMDAsNiArMTIwNSw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX3Nj
cmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gbV9zY3JhdGNoQnVm
ZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsKKyAgICBI
YXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1f
cHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBt
X2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZs
b3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggODFjOWYxZjY3NDcwNzllZDgzMTI2NjJjMDgz
MDBjNmNjMzYyOGUzNy4uZTE0ODQwMGQ0ODdkZmM2NGU0NDA1NGRkYWRiMDg1ODk3MmUzOWEyNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBAIC0zOTcs
OCArMzk3LDggQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAgY29uc3QgUmVnaXN0ZXIqIGVu
ZDsKIAotICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGVuZCA9IGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxOworICAg
IGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgZW5kID0gY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxKTsKICAgICB3aGls
ZSAoaXQgPiBlbmQpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAg
ICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApp
bmRleCBmNjg4YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2
YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBA
IHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFM
V0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFM
V0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFM
V0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVj
b2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcu
dG9Db25zdGFudEluZGV4KCldOwogICAgIH0KIAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0
ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggYWIxNzQwNmFmYjczNGE3
MDhkZjExZGJiNjgwMTUxOGI3NjY1ZmI0Mi4uZWUyYjMyN2QyYWY1NDcxOTY4Nzk2OWFjMjUyYTg0
Yzc4OGVmNmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsNiArMjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJz
ZXIgPSBwYXJzZXI7IH07CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQg
dGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9p
bnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBk
dW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggZTJh
NGM0MjUzM2EyZjQ0N2RkMzIwMjA1Yjc3N2I3OGIwMzljMGI2OC4uMjA2OWFkOGIyNGI3MzY5ZGNk
OWQ1ZjBjN2Y1OGVlYzkyYjM1Yzc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PcGVyYXRpb25zLmNwcApAQCAtNzQzLDcgKzc0Myw3IEBAIHZvaWQqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206
OkV4Y2VwCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRj
aCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0
ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW0NhbGxG
cmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1
bGUoKSk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihp
bnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQ
YXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApp
bmRleCA5MjdhNjk4NGEzYmUwMTRjZjNlYTdkNjdmMDM0NTg0ZWViZWI2MGNlLi41NGY2MzZhYzFi
NTA3NWQxYzY2N2IzOGE5MDMxMzI5MGQ1ZjMzM2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3RlcikgXAog
ICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1ZhbHVlOjpk
ZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkp
KSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQo
dmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpMTElu
dENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNt
OjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAu
aCBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYzMmMzZWZjMDAwYmQx
OGU5ZTM2OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUzNjZhNzUwNTRkY2M2
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0JpdG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbmV4dFBv
c3NpYmx5VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFyKHNpemVfdCk7CiAgICAg
dm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50NjRfdCBmaW5kUnVu
T2ZaZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXplX3QgY291bnQoc2l6ZV90
IHN0YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKQEAgLTEwMiw2
ICsxMDMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yPShib29sIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5kZXgsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgY29uc3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CkBAIC0x
MTEsNiArMTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUpOyB9CiAgICAgCisg
ICAgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJh
dG9yW10oc2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRDbGVhcihCaXRtYXAmKTsK
ICAgICB2b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAtMjI0LDYgKzIzNCwxMyBA
QCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpjbGVhckFsbCgpCiAg
ICAgbWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwogfQogCit0ZW1wbGF0ZTxz
aXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8
Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRzW2ldOworfQorCiB0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgc2l6ZV90
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0KHNpemVfdCBz
dGFydCkgY29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5lIGJvb2wgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAmIG90aGVyKSBjb25z
dAogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJp
dG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0ZXJhdG9yCit7Cisg
ICAgQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGlu
ZGV4KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBl
PgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShz
aXplX3QgaW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuICgqY29u
c3RfY2FzdDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhpcykpW2luZGV4XTsKK30K
KwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5l
IHVuc2lnbmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhhc2goKSBjb25zdAogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBkYWU0YTcxYjI4ZDEzMDQyNGMwYmQ3MzFiZTQxNjQzZjA1
MmIzZWE5Li4yYTMyNjJjOWI4YjZkNTZkZTNjYTRkYTAxNTY5NmQ3NTI3YWE0YjkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dApAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAg
ICAgRHVtYlB0clRyYWl0cy5oCiAgICAgRHVtYlZhbHVlVHJhaXRzLmgKICAgICBFbnVtVHJhaXRz
LmgKKyAgICBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCiAgICAgRXhwZWN0ZWQuaAogICAg
IEV4cG9ydE1hY3Jvcy5oCiAgICAgRmFzdEJpdFZlY3Rvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oIGIvU291cmNlL1dURi93dGYvRW51
bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmRlNzNmNWIyZDdkNTc0NGEz
ZDA4NTc3Y2M3MjQ4NzFlOTNlNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
RW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8dHlwZV90cmFpdHM+CisKKyNkZWZpbmUgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1f
Q0xBU1NfV0hFTihlbnVtTmFtZSwgb3AsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoZW51bU5hbWUg
ZW51bUVudHJ5LCBUIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9u
KSwgVD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5
KSBvcCB2YWx1ZTsgXAorICAgIH0gXAorICAgICAgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFwKKyAgICBjb25zdGV4cHIgYXV0byBvcGVyYXRvciBvcChUIHZhbHVlLCBlbnVtTmFtZSBlbnVt
RW50cnkpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAg
eyBcCisgICAgICAgIHJldHVybiB2YWx1ZSBvcCBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpOyBc
CisgICAgfSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJB
VE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICssIGVuYWJsZUV4cHJlc3Npb24pIFwK
KyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAtLCBl
bmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1Nf
V0hFTihlbnVtTmFtZSwgKiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJB
VE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC8sIGVuYWJsZUV4cHJlc3Npb24pIFwK
KyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAlLCBl
bmFibGVFeHByZXNzaW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX01BVEhfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikK
KworI2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19X
SEVOKGVudW1OYW1lLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAg
ICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAhPSwgZW5h
YmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dI
RU4oZW51bU5hbWUsIDwsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRP
Ul9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8PSwgZW5hYmxlRXhwcmVzc2lvbikgXAor
ICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID4sIGVu
YWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19X
SEVOKGVudW1OYW1lLCA+PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FE
X1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1O
YW1lKSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVu
dW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAppbmRl
eCA4ODViN2IxNzNiMTFhNjAxYmUyOWEzMzJhYjlkMmE0MTRkNTYyMTIyLi45MjA4OTVmYzQ5ZTcx
YmY5NjY5MjIxYzEzMWExNzQyZmI3NThmZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9G
YXN0Qml0VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCkBAIC00
NTAsNyArNDUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiAhISgqbV93b3JkICYgbV9tYXNrKTsKICAgICB9CkBAIC00NjQsNiArNDY0LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgRmFzdEJpdFJl
ZmVyZW5jZSYgb3BlcmF0b3J8PShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzID0g
dmFsdWUgOiAqdGhpczsgfQorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yJj0oYm9vbCB2
YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA6ICp0aGlzID0gdmFsdWU7IH0KKwogcHJpdmF0
ZToKICAgICB1aW50MzJfdCogbV93b3JkIHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fbWFz
ayB7IDAgfTsKQEAgLTUwOSw3ICs1MTIsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93
b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KLSAgICAKKworICAgIC8vIEZvciB0ZW1wbGF0aW5nIGFz
IFZlY3Rvcjxib29sPgorICAgIHZvaWQgZmlsbChib29sIHZhbHVlKSB7IHZhbHVlID8gc2V0QWxs
KCkgOiBjbGVhckFsbCgpOyB9CisgICAgdm9pZCBncm93KHNpemVfdCBuZXdTaXplKSB7IHJlc2l6
ZShuZXdTaXplKTsgfQorCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJSYW5nZShz
aXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
b250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgpAQCAtNTg5LDQgKzU5Niw1IEBAIHB1
YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6RmFzdEJpdFJlZmVyZW5j
ZTsKIHVzaW5nIFdURjo6RmFzdEJpdFZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1VuYWxpZ25lZEFjY2Vzcy5oIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKaW5k
ZXggNWE0ZTllZjQ0OTRlZjQ2Y2E5ZTRlZWY3N2ZkY2MwZDYwZmFhNGExMS4uM2EzNWIzOGY0YzAy
MzY3OWFjN2NmYzljNDY1NjA4NGEzOTE0ODNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
VW5hbGlnbmVkQWNjZXNzLmgKKysrIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgogaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lkKiBwb2ludGVyKQogewotICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7
CiAgICAgVHlwZSByZXN1bHQgeyB9OwogICAgIG1lbWNweSgmcmVzdWx0LCBwb2ludGVyLCBzaXpl
b2YoVHlwZSkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBU
eXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+CiBpbmxpbmUgdm9pZCB1bmFsaWduZWRTdG9yZSh2b2lkKiBwb2ludGVyLCBUeXBlIHZh
bHVlKQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwg
IiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46
OnZhbHVlLCAiIik7CiAgICAgbWVtY3B5KHBvaW50ZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsK
IH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGEwZDhlNzVkN2VlZTJkNmFjNThlMDY4ZWUxODI2NGQ0OGRhZjZkMTMuLmM5ODlkMDRiOTI4NTVk
NTk2ZjljNzA0MTkwMTU0OTVjMjYxYmVjYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMi0xOCAgS2VpdGgg
TWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3Vs
ZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBS
ZW1vdmUgcHJvYmUgT1NSIGV4aXQgb3B0aW9uIHNpbmNlIHdlIGFyZSBub3QgdXNpbmcgdGhhdCBh
bnltb3JlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0xMi0xNyAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBH
VEsgZ2FyZGVuaW5nLiBNYXJrIFdlYktpdC5Gb2N1c2VkRnJhbWVBZnRlckNyYXNoIGFzIHRpbWVv
dXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGNkYmY5YzBkYmY5MzJlMjhjNmQ1
YTgyMDhhMGE5OGNjZWU2YWVkOWYuLjVmYmMyMDllZGU0ZDM0NWE0NjA1YjAwZDI3MTcyMDQ1ZDA0
OTJjZTYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysr
IGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNDk4LDcgKzQ5OCw2IEBA
IE5PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhyZXNo
b2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAwCiBCM08xX09QVElPTlMgPSBbIi0tZGVmYXVsdEIzT3B0
TGV2ZWw9MSJdCiBCM08wX09QVElPTlMgPSBbIi0tbWF4REZHTm9kZXNJbkJhc2ljQmxvY2tGb3JQ
cmVjaXNlQW5hbHlzaXM9MTAwIiwgIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MCJdCiBGVExfT1BUSU9O
UyA9IFsiLS11c2VGVExKSVQ9dHJ1ZSJdCi1QUk9CRV9PU1JfRVhJVF9PUFRJT04gPSBbIi0tdXNl
UHJvYmVPU1JFeGl0PXRydWUiXQogRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyItLWZvcmNl
T1NSRXhpdFRvTExJbnQ9dHJ1ZSJdCiAKIHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1YnkvanNj
LXN0cmVzcy10ZXN0LXdyaXRlci0jeyR0ZXN0V3JpdGVyfSIKQEAgLTcxMyw3ICs3MTIsNyBAQCBk
ZWYgcnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAK
IGRlZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQot
ICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxp
ZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3Jj
ZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIFBS
T0JFX09TUl9FWElUX09QVElPTiArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAg
cnVuKCJmdGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRl
R3JhcGg9dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJD
QWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUTm9QdXRTdGFj
a1ZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MjksNyArNzI4LDcg
QEAgZGVmIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKIGVuZAogCiBkZWYgcnVuREZHRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKLSAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElO
VU9VU0xZX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBGT1JDRV9MTElOVF9FWElU
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZGZnLWVh
Z2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIEZP
UkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBl
bmQKIAogZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggN2M1YWY0NGJiM2M0ZmNjMzc5OGZhZDQzNmNjYjFkODgzYjUxOWZhMS4uMWMxMDAw
YjI5NjM4Yzk1NGM5ODJhMDU4YTNjZDgzMjMyZjNiNmMxMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxOS0x
Mi0xOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVz
cy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNp
b25hbGx5LmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAo
Y2FsbGVlKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgp
OgorICAgICAgICAqIHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNl
LmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVl
KToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAg
ICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3Ry
aWN0LmpzOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICogc3RyZXNzL3JlY3Vyc2l2
ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanM6CisKIDIwMTktMTIt
MTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBS
ZW1vdmUgSlNGaXhlZEFycmF5LCBhbmQgdXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5IGluc3RlYWQK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVu
Z3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBs
eS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJjNTBhYzBhMjMK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQt
Z2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCkBAIC0wLDAgKzEsMzYg
QEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7
CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291
bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0g
ZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVu
Y3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsK
K30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0Nv
dW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsKKyAgICBp
ZiAobGVuZ3RoQ2FsbHMrKyAlIDEwID09IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigidGhy
b3dpbmcgYW4gZXhjZXB0aW9uIGluIGxlbmd0aCIpOworICAgIHJldHVybiBjdXJyZW50QXJnQ291
bnQKK30gfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTY7IGkrKykgeworICAgIHRyeSB7CisgICAg
ICAgIHRlc3QoYXJyYXkpOworICAgIH0gY2F0Y2ggeyB9Cit9CisKK2N1cnJlbnRBcmdDb3VudCA9
IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVuZ3RoQ2FsbHMg
IT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMgYi9K
U1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhiZWU0NWNlMWM3MjgzNjUzODI3MDVkOTlkMzAxYWU2YmNiOGQ4N2EKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxl
bmd0aC1vbmNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1
bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsK
K30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7Cisg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxl
ZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVu
Z3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwg
MTogMiwgZ2V0IGxlbmd0aCgpIHsgbGVuZ3RoQ2FsbHMrKzsgcmV0dXJuIGN1cnJlbnRBcmdDb3Vu
dCB9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdChhcnJheSk7CisK
KwordGVzdChhcnJheSk7CitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7
Cit0ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBF
cnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFy
Z3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9zdHJlc3Mv
bG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwppbmRleCAz
NjE4ZjhjYmIzZDMyMTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBjZjQ5ZDg4
ZTNmZmU5MTJiMWUxNmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9sb2Fk
LXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3Qu
anMKQEAgLTE4LDggKzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5h
OwogICAgIGlmIChhLmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0aCAhPSBi
LmMubGVuZ3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGgg
bWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMubGVuZ3Ro
ICE9PSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBs
ZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5sZW5ndGg7
CiAgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYgKGEuY1tp
XSAhPSBiLmNbaV0pCiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBt
aXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJl
bnQtYXJndW1lbnQtY291bnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxs
LXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCmluZGV4IDA0N2ZiMDFmODgzMTQ1Y2M3
NTU0ZjVjZjcwMWE3MDc0ZjI2N2RlZWUuLjUzZDc1MmRlY2Q3ZDBmMzFiYzJmMWQ3ODk5MWM2OTEw
MWYwOGJmZjMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwt
d2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvcmVj
dXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwpAQCAtMTgs
OCArMTgsOCBAQCBub0lubGluZShiYXIpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyg0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIp
Ci0gICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAi
ICsgcmVzdWx0OworICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4
cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CiAgICAgcmVzdWx0ID0gYmFyKDQwLCAyKTsKICAg
ICBpZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBmb3IgYmFy
LCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IEVycm9yKCJXcm9u
ZyByZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386034</attachid>
            <date>2019-12-18 16:52:39 -0800</date>
            <delta_ts>2019-12-18 17:23:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218165224.patch</filename>
            <type>text/plain</type>
            <size>656571</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi41YWZiZjFhODU4NGI0MzMx
OTIzMjZjNjZhYjJiOTU5N2QzNDU3ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGlu
ZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludERhdGEuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlND
OjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6ZHVtcFJlZ2lz
dGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAoSlND
OjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0
b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFu
dFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25z
dCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0ganNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2Jq
ZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBiZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29w
ZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdiMGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJl
Li41OWEwMDQzNDgyYWMyM2UwMmI4NmEzOTY5OThhM2IwNTg1MWIyNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxl
IG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJl
bmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0
b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RG
OjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGlnbmVkQWNjZXNzLmg6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRT
dG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQu
eGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CmluZGV4IGY4YzFiNGFlNTU2YjUzNGMyYWIxMDFhYzM5MGJhNzExYjQ1Y2JhZWEu
LjllYWQ2NTNmYWFhYjE4OTNlYjkyZGQwMmU5NzU3OTY2ZGZhOTlhYzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBA
IC02NCw2ICs2NCw3IEBAICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvb3B0YWJs
ZS54bWwKICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfaXRhYi5weQogJChQ
Uk9KRUNUX0RJUikvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0
b3IvQXNzZXJ0aW9uLnJiCiskKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIK
ICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9EU0wucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRv
ci9GaXRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvR2VuZXJhdGVkRmlsZS5yYgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkYmNlNWJhY2VkYzA1YzNkYzBlYThiMDQzMzQ2
ZDE1MWQwZGVmNDQxLi5jYmNlOGFjYWJkNDk2Y2Y0NDUwZmFmZjkyZjUzMmFkNTY5ZGQ3YTljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTMxLDYgKzkzMSw3IEBACiAJCTUzMzNC
QkRCMjExMEY3RDIwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFCMTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsKIAkJNTMzM0JCREMy
MTEwRjdEOTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMyMTMyOERGODIwMDJCMkFENyAv
KiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi87IH07CiAJCTUzMzNCQkREMjExMEY3RTEwMDc2MThF
QyAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCAqLzsgfTsKKwkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4
aXRTaWRlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0MUZD
NzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsgfTsKIAkJ
NTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJB
QzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3
NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1OTcsNiArMzU5OCw3IEBACiAJCTUzMTgw
NDVEMjJFQUFGMEYwMDRBNzM0MiAvKiBCM0V4dHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0V4dHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0V4dHJhY3RWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMUQ0RTE5MUY1OUNERDIwMEVDODM2QyAvKiB0
ZXN0YXBpLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhcGkuY3BwOyBwYXRoID0gQVBJL3Rl
c3RzL3Rlc3RhcGkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzI2MzFCMzIx
ODc3N0E1MDA3QjgxOTEgLyogSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gInNv
dXJjZWNvZGUubW9kdWxlLW1hcCI7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTEsNiArMzYxMyw5IEBACiAJCTUz
NEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0b3IuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBUeXBlZEFycmF5Q29uc3RydWN0b3Iu
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0NzZB
NyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0SXRlcmF0b3JQcm90
b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkY5MjM2M0M1NUQw
MDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBJdGVyYXRvckhlbHBlcnMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5q
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM0RDFFNEQ0QjE2
MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzRGMUU0
RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTQ3LDYgKzU5NTIsNyBAQAog
CQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJCQlBN0Y4
NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJCUZFQTNC
QkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJNTMzOEUy
QTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8sCiAJ
CQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAogCQkJCTE0
RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdDMUVBRUIx
Nzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2LDcgKzg1
ODIsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVyYXRpb25z
LmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIElu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1NUQwMDU0
NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURC
MUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0
NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5
MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNG
ODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3
IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk1LDcgQEAKIAkJCQk3
Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJCQk2NTQ3
ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJCTg0OTI1
QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAq
LywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5qcyAq
LywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0b3IuanMg
Ki8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90
eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk2LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIwMjc5MDAx
MzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMyMjMzOUU5
RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNEREExQkJD
RTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEUyQTcy
Mzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BT
dGFjay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2RlZmRl
Yzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRiMmY0
ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAg
IHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5j
dGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRh
Zz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NFUlRf
VkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQqIHZh
bHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBmM2I0
Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBmMTY1
NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1By
b2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJh
bWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxUPihD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3RlcikpOwog
ICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQo
aW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9w
ZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBnZXQ8
VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQsIHB0
cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBw
dHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUp
OwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFuZChp
bnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVl
KTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2
YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVy
YW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQgc2V0
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9w
ZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOworICAg
ICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQs
IHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNlZjdh
NTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxpbmUg
dm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRpb24s
IGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IE9w
ZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICBU
eXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsK
LXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8
aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9wZXJh
bmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVmIEIz
T3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQxNl90
PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwog
Ci0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsg
I3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5kPGRl
Y2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxv
YXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFu
ZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFs
dWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9wZXJh
bmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAgIG9w
ZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7CkBA
IC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0
b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVy
YW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5k
cygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAgVmVj
dG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJbnRl
cmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCA2MDA2MmY5
ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFiNGRiZDI2M2Y0OGI1
YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5z
dG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2Fs
bFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAgaWYg
KG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAgICAgICAgICAgYXV0
byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKQEAgLTE3OTcs
NyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgp
LmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5t
YWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJh
bXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMwZWU1OGY1ODguLjQ1
MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1z
LmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4
Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBqaXQubWFrZVNwYWNl
T25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4Mzg3
OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNw
cApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlv
bkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0ZWNv
ZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBtX291
dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2VuZXJh
dG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFzcyBC
bG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50IHIp
IGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZpcnR1
YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChy
KSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUo
cik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAgcmV0
dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgsMTAg
Kzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZzZXQo
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJs
b2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQgaW5k
ZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lKFZp
cnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZpcnR1
YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENv
bnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIpIik7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgQnl0
ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRlY29k
ZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVE
dW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAgICAg
RnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZhbHVl
ID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2NrLT5n
ZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEwNzVl
ZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAtNjEs
NyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnByaW50
KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGlu
dCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVhbFJl
Z2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1bXBl
ckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwg
Y29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBj
b25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIp
IGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVh
bCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAgQmxv
Y2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcg
SlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVyOwog
CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50
IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29uc3Rh
bnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3ZGMw
ZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1MDg3
MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEJ5
dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91
dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAgICAg
IG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAppbmRl
eCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4ZWM5
ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQgKzM4
LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5kZXgo
KSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisgICAg
ICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAgICB9
Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkKLSAg
ICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQzMl90
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNCaXRz
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4
KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAgICAg
ICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhhc09u
ZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hvdWxk
IGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2tw
b2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51bWJl
ck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2twb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9CisgICAg
dWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsgfQor
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNrZWRC
aXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJu
IGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQogCiAg
ICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAgICAv
LyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBkZWxl
dGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJpdHMg
IT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNvbnN0
IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhlci5h
c0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3OSwy
MiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgaW52
YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAotICAg
IHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50MzJf
dCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisKKyAg
ICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxpbmUg
dWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50
OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNoZWNr
cG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0KSA+
PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVjb2Rl
SW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5dGVj
b2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAgICBC
eXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAgIHJl
c3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDcxYmY2
YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLmRmMGJkZWIxY2IwZjA1NDA4MDdl
OWFmYTdlMjkzMTRhMTcwYzI3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldhdGNo
cG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIsCiAg
ICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkFy
cmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAgICBt
ZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdD
b3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBkZXRl
cm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBv
cCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9wIDp0YWlsX2NhbGxf
dmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJv
ZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczog
eworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7
CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5p
bCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBAIC04NDUsNiAr
ODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAg
ICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5p
bCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTIsNyAr
MTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhiNDNmNDQwLi43ZGEy
MmMyZDJjYzdiZmMxMWQxZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6
ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0ZXhwciBib29sIGVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCit7Cisg
ICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlw
ZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5n
X3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNpemVvZihJbnRUeXBl
MSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlw
ZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTI+
KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNo
ZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKKyAg
ICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKKworICAg
IGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN3aXRjaCAo
Y29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5vcGNvZGVJRCgpKSB7
CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BU
YWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9w
Q2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFy
Z3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVz
RXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENvbnN0cnVjdFZhcmFy
Z3M6OmFyZ0NvdW50KSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFyZ3M6
Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3Vu
dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIzMjU5
MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0Mjdl
ZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3
dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDggQEAg
cHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4TnVt
Q2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
LCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJh
bmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3NGU3
OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4MjgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQgb3Bl
cmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9j
YWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50
IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCk7
CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+PSBv
dXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFtsb2Nh
bF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYg
b3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShjb25z
dCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAgIHJl
dHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdh
eXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcklz
QWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBkMDc2MTA5YTFmZGE1
Zjk0N2Y1MjBmZTUxNGRkLi42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVjYzYzNmVhMWViNWNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMu
aCIKQEAgLTQwNyw3ICs0MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2NrKTsK
ICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhs
b2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJl
Z2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNvbnN0
YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9uZWRT
eW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2ZpbGVy
T3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxvd1By
b2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkg
PT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRjaGlu
ZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgogICAg
ICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUq
PihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRh
YmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1i
b2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CiAg
ICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5m
aW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0gICAg
ICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRhYmxl
T3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQo
c3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9s
VGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIpOwog
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1f
bG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRl
ZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVk
IGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0YXRpYyBib29sIHNo
b3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYg
dHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXggQ29k
ZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkgY29u
c3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25zdCBh
dXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAgICAg
IGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICByZXR1
cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZvaWQgQ29kZUJsb2Nr
OjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNvbnN0
IE9wQ2F0Y2gmCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0ZXJzKCk7ICsraSkK
ICAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSk7CiAKLSAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHByb2ZpbGVzID0gbWFr
ZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+KGxpdmVPcGVyYW5k
cy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3NpemUgPT0gbGl2ZU9w
ZXJhbmRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGVzLT5t
X3NpemU7ICsraSkKLSAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3BlcmFu
ZCA9IGxpdmVPcGVyYW5kc1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVy
LmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25l
ZCYgbnVtYmUKIAogICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsK
ICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9m
aWxlcykgewotICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAg
ICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAppbmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1NmNlNTgxNTBmNTM0
MjY2Li4yNTA2NzI2M2UyNDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2MzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEsNiArMTYxLDcgQEAg
cHVibGljOgogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNh
bGxlZUxvY2FsczsgfQogCiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KKyAgICBpbnQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5o
YXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAogICAgIGludCogYWRk
cmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIyOSwyMCArMjMwLDIw
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29u
c3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBi
b29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGluZSBib29sIGlzS25v
d25Ob3RJbW1lZGlhdGUoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIGlmIChp
bmRleCA9PSB0aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCisgICAg
ICAgIGlmIChyZWcgPT0gdGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9kZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRleCkuaXNDZWxsKCk7
CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KHJlZykuaXNDZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGluZGV4
KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOworICAg
ICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9CiAKICAgICBIYW5k
bGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRI
YW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4MSwxMCArNTgyLDkg
QEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0K
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25z
dGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
IAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1
cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0
aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC03NzQsNiAr
Nzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAgIAorICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkgY29uc3Q7CiAgICAg
dWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVy
OyB9CiAKICAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9CkBA
IC04NzQsNyArODc1LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CisgICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxDb2RlQ2FjaGUgbV9k
aXJlY3RFdmFsQ29kZUNhY2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0MiwxMCBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRh
YmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50
IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7
Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChyZWcuaXND
b25zdGFudCgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3RhbnRJbmRleCgpKSA8
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwogICAgIH0K
IAogICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4IDIx
MDY4MTNmMGExZWFhNTEzNGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5YTI4NmY4YWFiZjRk
MzMyZmZmMWU3MWVhM2M4M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uaApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBhcHByb3hpbWF0ZUhhc2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9IG51bGxwdHIpIGNv
bnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAgIHZvaWQgd2Fsa1Vw
SW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtVcElubGluZVN0YWNr
KGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBpbmxpbmVTdGFja0Nv
bnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0aGUgaW5s
aW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9u
bHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
CmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLjQ3YzY1N2M4
ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiAr
MjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNzIGRv
ZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVtcHMu
CisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1wTGl2
ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29sIHZp
cnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50
KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUo
cmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVu
ZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAgLy8g
RklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVtIGNv
bXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5pc20g
dG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxGYXN0
Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAppbmRl
eCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5hMGFhN2MwOTI0NGY5
OTU2YmVmMWZiOTgzOGI1NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3RydWN0
IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVD
b2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25lZCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBz
LgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERvIG5v
dCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBzaWdu
ZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0eXBl
IGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdl
IGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0
cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1h
bnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAg
IC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1
c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFsaXpl
IGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09mZnNl
dCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAgICwg
dG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5kKENh
bGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiArMjIy
LDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAorICAg
IHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRtcE9m
ZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2FsbGVy
RnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3Rl
cikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3QgcmV0
dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3Rl
cikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3LDkgKzI1Niw5IEBA
IGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrOwog
fQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVPcmln
aW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBpbiBJ
bmxpbmVDYWxsRnJhbWUKKy8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90
IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxl
ciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4K
LWlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9u
JiBmdW5jdGlvbikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSAqdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMzggQEAgaW5s
aW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1
bmN0aW9uKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBP
cGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNo
ZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1Vw
SW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVl
OworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3BlcmFu
ZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQg
b3BlcmFuZCkKK3sKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gb3Bl
cmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBpbmxp
bmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKworQUxX
QVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVyYW5k
KGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBPcGVy
YW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFu
ZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9w
ZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FMV0FZU19JTkxJ
TkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1ZWIxYzY0YTU5Li5l
MDNmYTM5Mzk1OTU1NTJlYmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
aApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25jdXJyZW50
SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICA6IG1fYnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQog
ICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBt
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgp
ICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAgIH0KICAgICAKICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgsNyArNzksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogCi0gICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJldHVybiBtX29wZXJh
bmQ7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRlOiAKICAgICBCeXRl
Y29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5SGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggMmI2OWYz
NmM3ZmJkYTEwNTU3ODlkZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5Yjk1NmY3OTc4NmVj
ODdhYTJjNjlhOGJjMDY3MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApAQCAt
NDIsNyArNDIsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQubV9raW5kID0gTGF6
eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2NrID0gY29kZUJsb2Nr
OwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0ga2V5LmJ5dGVjb2Rl
SW5kZXgoKTsKLSAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJhbmQo
KS5vZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJh
bmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKENDYWxsSGVscGVycyYg
aml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXp5
T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5
T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3Bl
cmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3Bl
cmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKICAgICAgICAgCiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpyZXBvcnRW
YWx1ZShKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIExhenlPcGVy
YW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVy
YW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5k
KSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5k
LmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7CiAg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5oCmluZGV4IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEyZGNmMzM1ZWM4OGQu
LjM2ZDM2OWYwYzAwZmJkNDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0cnVj
dCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAgICAgICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZDsKKyAgICAg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9IHU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCBmMjlm
ZjlmOTczNmFlYjM3MzQ1OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li5jY2UwODAyZjg5ZDE3ODg2ODA0
NjA5MDdlOTg2YTcwNGJhNmUxZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDExMSArMzUsMjE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9wZXJh
bmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1bnNp
Z25lZCBtYXhOdW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBvbmUg
dGhhdCBleGlzdHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBleGlz
dCBiZXR3ZWVuIGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQs
IExvY2FsT3BlcmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1YmxpYzoK
KyAgICBPcGVyYW5kKCkgPSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3QgT3BlcmFuZCYpID0g
ZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1lbnRPcGVy
YW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsgfQorCisg
ICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAgOiBtX2tp
bmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAgICAgICBB
U1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0xv
Y2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3BlcmFuZEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVyYW5kKTsK
KyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0KKyAgICB1
aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWludDY0X3Qg
dmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBUbXBP
cGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09
IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9Cisg
ICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVyYW5kICYm
IHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50KCkg
Y29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRv
QXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgp
KTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5lIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBP
cGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBBcmd1bWVudE9wZXJhbmQgfTsKKyAg
ICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lzdGVy
IH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25zdCBP
cGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4g
dmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKSA9
PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6aXNW
YWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgp
ID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKworaW5s
aW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAgT3Bl
cmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VSVChy
ZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNzZXJ0
KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRzKCkg
cmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtl
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0g
ICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAotICAg
IGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMp
CisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxU
LCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVf
djxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVmVHlw
ZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29u
c3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9u
dW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNpemUo
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9
CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1w
czsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZlY3Rv
clRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVzLmZp
bGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1l
bnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGlj
aXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90
IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50
cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsK
LSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51bUxv
Y2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVy
YW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYg
aW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJl
ck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2Nh
bHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFy
Z3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVzLmdy
b3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwog
ICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQorICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90IHRt
cEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVt
YmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVudHMp
OworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJl
dHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CisgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJl
ck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlk
eCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUg
dG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9
CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBhcmd1
bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2Fy
Z3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlk
eCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVm
VHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVu
dEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBp
ZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3Bl
cmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJu
IG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAg
ICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1wbGF0ZTxPcGVyYW5k
S2luZCBvcGVyYW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQorICAgIFJlZlR5cGUg
YXRGb3Ioc2l6ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1
bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBjYXNl
IEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwotICAg
ICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAg
ICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1wbGF0
ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZvcihzaXplX3QgaWR4
KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dp
dGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAg
ICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgpOwor
ICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgp
OworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBz
aXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3Vy
ZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMu
c2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsK
LSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVt
YmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAg
ICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOworICAgICAgICBzaXpl
X3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5l
d1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFs
dWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gVCgpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkKKyAgICAgICAgICAg
IG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRleChvbGROdW1UbXBz
IC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7CisgICAgICAgIGlmIChl
bnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplIC0gb2xk
TnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9jYWxJbmRleChvbGRO
dW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2
b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlKQorICAg
IHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgp
KQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBpZiAo
bmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZlRtcHMoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVz
LnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsg
bnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKworICAgICAgICBp
ZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5p
dGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwg
bmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVl
OworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlkeCwg
Y29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3Miw3NiBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09IFQoKSk7CiAgICAg
ICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzaXplX3Qgb3BlcmFu
ZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRGb3JPcGVyYW5kSW5k
ZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJl
ZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgoaW5kZXgpOyB9CisK
KyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAog
ICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1l
bnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCi0gICAg
c2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBjb25z
dAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAg
ICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmRJbmRleChvcC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChvcC52YWx1ZSgpKTsK
ICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBSZWZUeXBlIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbChW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1
bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAg
UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICByZXR1cm4gb3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlzVG1wKCkpCisg
ICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
IHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3QgVCYgb3BlcmFuZChp
bnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2Fz
dDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAgIGNvbnN0IFQmIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7
IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQp
OyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KICAg
ICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgYm9vbCBoYXNP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYg
KG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSkgPCBudW1iZXJP
ZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRv
TG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29sIGhhc09wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBv
cCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJlZy5vZmZzZXQoKSk7
CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AudmFsdWUo
KSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wLnZhbHVl
KCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc09wZXJh
bmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE9wZXJh
bmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChPcGVy
YW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy0+b3BlcmFu
ZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAg
ICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFsdWUpOwotICAgIH0K
IAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9Ci0g
ICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRl
eF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsg
fQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBh
dChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQo
aW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xvY2FsKHNpemVfdCBp
bmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IG9wZXJh
bmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZUeXBlIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgUmVmVHlwZSBh
dChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVm
VHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiAg
ICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQotICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZzZXQoKTsKLSAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1
bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgZWxzZSBpZiAo
aW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1l
bnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBpbmRleCAtIChudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAgICB2
b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAg
ICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVu
dCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCkBA
IC0yNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9m
QXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFTU0VS
VChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBB
U1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAgLTI2
NSw5ICszNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9m
IG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVjdG9y
PFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBtX251
bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMg
YXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSBy
ZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2YWY5
MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBAIC0z
MCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFuZDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAg
ICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgT3Bl
cmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxv
Y2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7CiAg
ICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRt
cHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgs
ICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2NhbElu
ZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBu
dW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwg
dG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJjMTI2
NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApA
QCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2RlVHlw
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6ZShz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQorICAg
ICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VN
b2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAg
ICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4
IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMwODJiMGEyNjNjMzA2
NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhw
cmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29sIGhh
c0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAgIHZv
aWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisKICAg
ICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0K
ICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIp
IHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0g
ICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50
SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQxOSw2ICs0MjEsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2lnbmVk
IG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhBZ2Up
OworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTExODMz
ZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5YTY5ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3Niwy
OCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVj
b2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVDYXNl
UHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1Y3Qg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3NpemUo
c2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUgc3R1
ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxlcwog
ICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1ZmZl
ciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1fc2l6ZSAqIHNp
emVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVmZmVyID0gTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyhtX3NpemUgKiBzaXpl
b2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZtX2J1
ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQog
Ci0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5W
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICBN
YWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7CisgICAgTWFsbG9jUHRy
PFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJl
Y292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVmM2U5
Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCkBAIC0zNSwyMiAr
MzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxGcmFtZSogY2FsbEZy
YW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSk7CiAgICAgY2Fz
ZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOworICAg
ICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJv
eGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CiAgICAg
Y2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihw
dXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVk
RG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAgIGNhc2UgQ2VsbERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBjYXNlIEJvb2xlYW5E
aXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAjZWxz
ZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4o
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKICNlbmRp
ZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZDhmMThj
M2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJiYmNjNGZmOTdhNjhm
ODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4NmJhYjEyZjZjY2M3
Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRkZjRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lz
dGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rl
ci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29s
IG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8IDA7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmly
dHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFu
ZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGludCk7CiAKKyAgICBz
dGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsK
KyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVy
SUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+KTsKIAogICAgIFZp
cnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50IHZp
cnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0
dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNM
b2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3VtZW50
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50PihzbG90
KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1
YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNMb2Nh
bCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0
ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lz
dGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzSGVhZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3Rl
ciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wgaXNDb25zdGFudCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xv
Y2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQo
aXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVy
KTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50
KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3Rh
bnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVy
OyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdp
c3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZm
ZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMgaW50IGxvY2FsVG9P
cGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAgIHN0YXRpYyBpbnQg
b3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAg
IHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJh
bmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmlu
ZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMuLjhkMmE3ZmI4MjQ3
NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xMTg3
LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5l
eHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAgICBtX3BhcmFtZXRl
cnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1ldGVyID0g
cmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgpKTsK
KyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1l
dGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb2RlIGJsb2NrIGtu
b3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IHBhcmFt
ZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgotICAgIG1fdGhp
c1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpOyAv
LyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAgICAgYm9vbCBub25T
aW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4o
KSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigp
OwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAg
ICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYm
IHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewot
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAg
ICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAg
ICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lz
dGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFs
dWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFs
UmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVl
ID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAg
ICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIy
OSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFy
YXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwu
CiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1p
dCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDog
VmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQp
OworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpKTsK
ICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMxZmUw
N2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZmZWMw
NjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0aW9u
TW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNT
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9
CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFz
Q2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4IDM1
NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTliMTIzZDRkODliYTA1
OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50IGlu
ZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBpbmRleCkKICAgICAg
ICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVlOwog
I2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rlcihp
bmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUz
ZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAg
LTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBB
YnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBl
bHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisK
IHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
b3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01K
SVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91
dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAg
ICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5w
cmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2Zjcz
OTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2Uu
aCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVl
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAg
ICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxz
ZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAg
LCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxv
YWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQ
cmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29s
IG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNT
RVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQg
IT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUo
a2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0
aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVh
cChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxp
ZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAg
ICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6
ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhl
YXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRhY2I1
NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uYzQ0MTBiMjU4YTYyMDlmODU3Njc2
YjY2MDM4NjYwZGE3MGQ0NjQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4MSw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExv
Y2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwg
c2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNo
Rm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5Miw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6
IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+
bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRh
dGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBh
bHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFs
dWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFs
dWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6
IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBv
ZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1l
bnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2
YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGlu
ZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0
YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1OCw2
ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwor
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYg
dGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpA
QCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRv
cCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFrZUhl
YXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCmluZGV4IGQ3MzI0N2I5M2M1ZGM3ODZiNjE3
YWE1YWFkYzJiMGY2MTUyODZiNWYuLjg5YzA4ZmEwODBjZWEzMmZkOWM1OTFmMzBmMWU3ZGQ0NmYx
ZDEyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQ
b3NpdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3Np
dGlvbi5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZXNbaV0tPmZpbmQoKTsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOwogCiAg
ICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAiKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCmluZGV4IGFmMmVkYTRhZDg4ZTliOTdhYWQ1ZjRmOTM5MjM3NjIxOTUyYWVm
ODQuLmZhMjRjNjlkMGZlY2I3YmFmYzcwNWQ4NWMzYzVhZDBjNjUzOTFlOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcApAQCAtMzU4LDkgKzM1OCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZz
ZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2Rl
LT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3
QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxk
MSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlX
aXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5v
ZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCksIG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTQ5MywxMCArNDk2LDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1Rv
cCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IGhlYXAub3BlcmFuZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJl
Z2lzdGVyIG1heSBub3QgcG9pbnQgdG8gYW4gYXJndW1lbnQgb3IgbG9jYWwsIGZvciBleGFtcGxl
IGlmIHdlIGFyZSBsb29raW5nIGF0IFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNIZWFkZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKHJlZykgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZChvcGVyYW5k
KSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5v
T3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgfQpAQCAtNTYwLDEyICs1NjMsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sg
fD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrIHx8IGlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9j
aykgewpAQCAtNjI3LDcgKzYzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoQWJzdHJhY3RIZWFwIGhlYXApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFwLmtpbmQoKSA9PSBTdGFjayAmJiAhaGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlu
bGluZUNhbGxGcmFtZSwgaGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0su
CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3Jp
Z2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9k
ZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChp
bnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8qIGFkZFRoaXMgPSAq
LyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0
ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
CkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtl
VmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5F
eGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNv
dW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSwgRWRn
ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhj
YW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKQEAg
LTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgYXV0byBz
dG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJbmRleCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRhLT5z
dGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVnLmlz
TG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9y
aWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNldCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBu
b2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZykpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2lu
LnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4
aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1
ZSkpOwpAQCAtMTAxOSw5ICsxMDM3LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4g
dmFyYXJnc0RhdGEtPm9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKQEAgLTEwMzAs
NyArMTA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJn
c0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEg
Pj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIHZhcmFyZ3NEYXRhLT5saW1pdCwgdmFy
YXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCmluZGV4IDYyNjExMjNjYmZlYzNlYmEx
OTVkMDliOTMxMDI2ZjI2YzcyNTg0NzYuLjIwNmQ2ZmJkYzU0YTM2Y2I4NDE4YThiMzg1NDZkODc1
Nzc5OTAxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1V0aWxpdGllcy5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJn
dW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
T3BlcmFuZCBvcGVyYW5kKQogeworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gKHJl
Zy5pc0FyZ3VtZW50KCkgJiYgcmVnLnRvQXJndW1lbnQoKSkgfHwgcmVnLmlzSGVhZGVyKCk7Ci0g
ICAgCisKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCiAgICAgICAgICYm
IHJlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTIsMTMgKzU2
LDEzIEBAIGJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgcmV0dXJuIHJlZyA+PSBhcmd1bWVu
dFN0YXJ0ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9CiAKLWJvb2wg
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBP
cGVyYW5kIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3Qo
Y2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIHJlZyk7CisgICAg
cmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBlbWl0Q29kZVRvR2V0
QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5v
ZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbikKKyAg
ICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBu
b2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7CiAgICAgR3JhcGgm
IGdyYXBoID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3MywxNCBAQCBOb2Rl
KiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8IGFyZ3VtZW50
cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25l
ZEFyZ3VtZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJl
c3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgotICAgICAgICB8
fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwKKyAgICAgICAg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSk7CiAK
KyAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisgICAgICAgIHJldHVy
biBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBhcmd1bWVu
dHMtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMpOworCiAgICAg
aWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsKKyAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwogICAgICAgICBCaXRW
ZWN0b3IqIGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAgICAgIE5vZGUq
IGN1cnJlbnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXJndW1lbnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsxMTAsNyBAQCBOb2Rl
KiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAoYXJndW1lbnRz
LT5vcCgpID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3
QXJyYXlCdWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNh
c3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAg
ICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpT
SW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CiAgICAgfQogICAg
IAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIwLDcgQEAgTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAK
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRz
U2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAhYWRk
VGhpczsKICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApCiAgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OwogICAgICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0
QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwg
QXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAgICAgICBFZGdl
KGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDEg
KyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBub2Rl
SW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgKyAhYWRkVGhp
cyksIEludDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAg
ICAgICAgLy8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVnYXRpdmUgbnVt
YmVyIGlmIHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQgaGVyZS4KICAg
ICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAgICAgICAgRWRn
ZShyZXN1bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29u
c3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQzMlVzZSkpOwor
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwg
b3JpZ2luLCBqc051bWJlcihhZGRUaGlzKSwgSW50MzJVc2UpKTsKICAgICAgICAgcmVzdWx0LT5z
ZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCmluZGV4IDlhNzcxOGZiYmY1NDdi
MmY2YWUxMDFkYWYzNzRhMDZhMmMzZGRmMTIuLjc0ZjkzOWU4MTYyMmQ0MDI0NmUyMzU1ZDUwOThh
OWVkMmE4NTIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNVdGlsaXRpZXMuaApAQCAtMzEsMTEgKzMxLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNh
bGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rlcik7Ci1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQpOworYm9vbCBhcmd1bWVudHNJ
bnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCk7CiAKIE5vZGUqIGVtaXRD
b2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBh
cmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbik7CisgICAgSW5zZXJ0aW9u
U2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIGJv
b2wgYWRkVGhpcyA9IGZhbHNlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCmlu
ZGV4IDk2ZGFjMzlhNDQ0ZmZiZDNjZTU0M2Y1N2YzNmNkNjFkZWNjMjhiZDQuLjg5N2M3MGRmZmJh
MDY2YjY0OWNhZmRjYzFlZjA5MzM3NjgxMDRkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCkBAIC0xMzksOCArMTM5LDcgQEAg
cHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IH0KICAgICB1
bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0
VGFpbC5udW1iZXJPZkxvY2FscygpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQg
b3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7
IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFi
c3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52
YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGxvY2Fs
KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4
KTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4g
bV9ibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsgfQogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCmluZGV4IDc3NDNl
N2QwMWYxY2FkNzgxZDg0YWIwM2QzYzA5Yzc3ZjgwMjliYTUuLmMyYjU1YWE1YzRhNTIyOWIxYjFh
NDQzMWMxODdhZGVmNDZjM2RiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCB2b2lkIEF2YWlsYWJp
bGl0eU1hcDo6cHJ1bmVIZWFwKCkKIAogdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lQnlMaXZl
bmVzcyhHcmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4gd2hlcmUpCiB7Ci0gICAgT3BlcmFuZHM8QXZh
aWxhYmlsaXR5PiBsb2NhbHNDb3B5KG1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksIG1fbG9j
YWxzLm51bWJlck9mTG9jYWxzKCksIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CisgICAg
T3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KE9wZXJhbmRzTGlrZSwgbV9sb2NhbHMs
IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoCiAgICAgICAgIHdoZXJlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcp
IHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgbG9jYWxzQ29weS5v
cGVyYW5kKHJlZykgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAgICAgICAgIH0pOwogICAgIG1f
bG9jYWxzID0gV1RGTW92ZShsb2NhbHNDb3B5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCmluZGV4IDUzNTUyNTYwMjNkZGNmMjgwZGM1OTViMzNh
N2M3ZmRlYzU0ZTY0ZjAuLjgwYzEyYmYxODAyNWE1NjEwNTk2ZGEyNGUyM2MwMjVmMmFiZTRmMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaApA
QCAtNjYsOSArNjYsOSBAQCBzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzRnVuY3RvciwgdHlwZW5hbWUgQWRkRnVuY3Rvcj4KLSAg
ICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3Qg
SGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCisgICAgdm9pZCBjbG9zZVN0
YXJ0aW5nV2l0aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3Qg
QWRkRnVuY3RvciYgYWRkKQogICAgIHsKLSAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0
eSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJp
bGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQob3ApOwogICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5o
YXNOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXggMDU4NDQ5NjNlNjEwZWQyOTNjNTYw
ZmFiZmQzODlhOWYzOTc4MGEwNy4uZTIxYjI4YjUyMjFmMTU2MThiODA2NGEzYTdiMmQ3ODY5MTM4
NDIxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotQmFz
aWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVk
IG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkK
K0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNp
Z25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywg
ZmxvYXQgZXhlY3V0aW9uQ291bnQpCiAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4p
CiAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICwgY2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRI
ZWFkKFN0cnVjdHVyZXNBcmVXYXRjaGVkKQpAQCAtNDgsMTEgKzQ4LDExIEBAIEJhc2ljQmxvY2s6
OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1
bWVudHMsIHVuc2lnCiAgICAgLCBpc0xpbmtlZChmYWxzZSkKICNlbmRpZgogICAgICwgaXNSZWFj
aGFibGUoZmFsc2UpCi0gICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMpCi0gICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdFRh
aWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3Ao
KSkKKyAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykK
KyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAg
ICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291
bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkBAIC03MCw2ICs3MCwxNSBAQCB2b2lkIEJhc2ljQmxv
Y2s6OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAgaW50ZXJzZWN0aW9u
T2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFs
dWU6OmZ1bGxUb3AoKSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25l
ZCBuZXdOdW1UbXBzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRt
cHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZh
bHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1
cmVUbXBzKG5ld051bVRtcHMpOworICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5l
bnN1cmVUbXBzKG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Cit9CisKIHZv
aWQgQmFzaWNCbG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
IHsKICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IGI1YWRmMDkxMmQwOTQyYmU5N2U5
ODdjZGM4OWY0YWUzNGQwYzBiYzguLjFkZDM4Yzc5MDhkYzZmNGQxYjA4NWJjOGUwNjI1NDgwZGI0
NDk3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00
NiwxMSArNDYsMTIgQEAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAK
IHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNC
bG9jaygKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1B
cmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5z
aWduZWQgbnVtVG1wcywKICAgICAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwogICAgIH5CYXNp
Y0Jsb2NrKCk7CiAgICAgCiAgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9j
YWxzKTsKKyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcyk7CiAgICAgCiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5kZXggNzUwOGUyMTlk
YzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOS4uMDA4Y2Y1MjI2OTU3YzlhODM1ODVjNWU1
ZTJjMTI1ZjJmOGNlNGIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBCbG9ja0luc2Vy
dGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+JiYgYmxvY2spCiAK
IEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9h
dCBleGVjdXRpb25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJl
ZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7CisgICAgUmVmPEJh
c2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgo
KSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCks
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCksIGV4ZWN1dGlvbkNv
dW50KSk7CiAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKICAgICBhdXRvKiByZXN1bHQg
PSBibG9jay5wdHIoKTsKICAgICBpbnNlcnQoaW5kZXgsIFdURk1vdmUoYmxvY2spKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggN2U0
YTlmZTYyMzNiNzQ0OWU4Mjg2NjJjMWU0OTlkYzllODQ0MDhiNy4uZDA2NDdjZjVkOTg2ZTBhOWRl
N2ZiNTQ0ZGVjZWE0MjI1NDY1YjBkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkpKQogICAgICAgICAs
IG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwg
bV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQorICAgICAgICAsIG1f
bnVtVG1wcyhtX2NvZGVCbG9jay0+bnVtVG1wcygpKQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xv
dHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGlu
ZVN0YWNrVG9wKDApCkBAIC0xMzksNiArMTQwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAKKyAg
ICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKKyAgICB7CisgICAgICAgIFZF
UkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20g
IiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOworICAgICAgICBpZiAobmV3
TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbnVt
VG1wcyA9IG5ld051bVRtcHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJl
VG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBt
YXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRs
ZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0
b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzAsMjUgKzI4MiwzMyBAQCBwcml2YXRlOgogICAgIHZv
aWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRh
cmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtl
ZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2twb2ludCgpCisgICAgeworICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCks
IG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7
CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxR
dWV1ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5p
c0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJu
ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCiAgICAg
Ly8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24u
Ci0gICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUq
IGdldERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgIC8vIElzIHRo
aXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKIAotICAgICAgICAvLyBNdXN0
IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBnZXRMb2NhbChvcGVyYW5kKTsKKyAgICAgICAg
cmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAtMjk4LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAg
ICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJ
bmRleF0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICpt
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOwotICAgICAgICAg
ICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
PSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25z
dGFudChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
c291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4
ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhjb25z
dGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9s
ZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM1OCw5ICszNzgsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9mIGEg
ZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsKLSAgICBOb2RlKiBz
ZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNl
dE1vZGUgPSBOb3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5k
LCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAg
ICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsK
KyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKIAog
ICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3Rh
dGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CkBAIC0zNzQsNyArMzk1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUo
dGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNp
emUoKTsgKytpKQpAQCAtMzkyLDE4ICs0MTMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50
SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVk
aWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAg
IC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFu
ZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFuZCBvcGVyYW5kKQogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLQotICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2Nh
bCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkp
OworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2Fs
czogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAg
ICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJl
cXVpcmVkIGZvcgpAQCAtNDI4LDIwICs0NDgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZh
cmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAg
ICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0K
LSAgICBOb2RlKiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3Jt
YWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRp
Y09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0g
Tm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVy
YW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNo
YW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAg
IHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewotICAgICAgICAgICAgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwo
b3BlcmFuZCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG9wZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7CisgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxs
RnJhbWUoKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5k
LCAiIGJ1dCBjdXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBi
bG9jayBoYXM6ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAiIHRtcHMuIik7CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1t
ZWRpYXRlTmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBB
cmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25G
b3JMb2NhbChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAg
ICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0g
bV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3Jh
cGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lz
dGVyKCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAt
NDUxLDcgKzQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVy
Z2VDaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KSwgQmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNl
dExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7
CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDksMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSog
c2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQor
ICAgIE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBP
cGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQp
CiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9j
dXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnQgPSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251
bUFyZ3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEocmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQg
Zm9yICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4g
bWFrZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQg
fHwgbV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2Rl
ICE9IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJh
bmQpOworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9u
S2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OSwxNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zm
c2V0KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAg
ICAgICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9z
aXRpb24oT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAo
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1
bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQ
b3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9z
aXRpb25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NTAsOSArNTc5LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1Z2dlckVuYWJsZWQo
KSk7CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
c1dpdGhGaXh1cC5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFt
ZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVD
YWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0g
ICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJh
bmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJh
bWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBtX2dy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51bVBhcmFtZXRlcnMo
KTsKIApAQCAtNTc1LDYgKzYwNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVu
ZXNzID0gbV9ncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIC8v
IE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNhdXNlIHRtcHMgYXJl
IG5vdCByZXF1aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgICAgICAg
ICBjb25zdCBhdXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5l
c3MoYnl0ZWNvZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Q
b2ludChvcmlnaW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBsb2NhbCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9jYWxdKQpAQCAtNTg0
LDI3ICs2MTQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZv
aWQgZmx1c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaChPcGVyYW5k
IG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50
UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisg
ICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFy
Z3VtZW50UG9zaXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPEZs
dXNoPihvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxO
b2RlVHlwZSBub2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisg
ICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFu
ZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGU7CiAgICAgICAgIApAQCAtNjE0LDI2ICs2NDQsMjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJs
ZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3Bl
cmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAg
IGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2
b2lkIHBoYW50b21Mb2NhbERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lk
IHBoYW50b21Mb2NhbERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBhZGRG
bHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9z
aXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRy
eSogaW5saW5lU3RhY2tFbnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3Qg
PSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJl
Y3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAg
ICAgICBmbHVzaEltcGwoaW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZs
dXNoRGlyZWN0KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsK
LSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmly
dHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OwotICAgICAgICBhdXRvIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyIHJlZykgeyBwaGFudG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRG
bHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZs
dXNoRGlyZWN0KG9wZXJhbmQpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVj
dCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2Nh
bERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVu
dENvZGVPcmlnaW4oKSwgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAg
ICAgfQogCkBAIC03NjEsNiArNzkwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNo
aWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRv
R3JhcGgocmVzdWx0KTsKICAgICB9CisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwg
T3BlcmFuZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQob3Ag
PT0gTW92SGludCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFu
ZC5raW5kKCkpLCBPcEluZm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAg
Tm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIs
IEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkp
CiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCkBAIC0xMDkx
LDggKzExMjUsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJndW1lbnRz
IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7Ci0g
ICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBpbiB0
aGUgZnVuY3Rpb24uCisgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jh
cmllcykgdXNlZCBieSB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25l
ZCBtX251bUxvY2FsczsKKyAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1wcyB1c2VkIGZvciBm
b3J3YXJkaW5nIGRhdGEgdG8gYW4gT1NSIGV4aXQgdG8gY2hlY2twb2ludC4KKyAgICB1bnNpZ25l
ZCBtX251bVRtcHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6
ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGFy
Z3VtZW50cyB0byBvdXRnb2luZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRoaXMKICAgICAvLyBu
dW1iZXIgaW5jbHVkZXMgdGhlIENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGluaXRpYWxpemUgZm9y
IHRoZSBjYWxsZWUKQEAgLTExNTksMTQgKzExOTUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAorICAgICAg
ICBPcGVyYW5kIHJlbWFwT3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpICsgbV9p
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAr
IG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQogICAgIH07CiAgICAg
CkBAIC0xMTc1LDEzICsxMjE0LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFj
ayBtX2ljQ29udGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgewot
ICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOwotICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRNb2RlIG1fc2V0TW9k
ZTsKLSAgICAgICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQotICAgICAgICBEZWxh
eWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExv
Y2FsKGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1
ZSwgU2V0TW9kZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAg
ICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVl
KQpAQCAtMTE5NCw4ICsxMjI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJz
ZXItPnNldEFyZ3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7
Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5k
LCBtX3ZhbHVlLCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9j
YWxPclRtcChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwogICAgICAg
ICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAgT3BlcmFuZCBtX29w
ZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07CisgICAgICAgIFNldE1v
ZGUgbV9zZXRNb2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwg
Mj4gbV9zZXRMb2NhbFF1ZXVlOwpAQCAtMTIwOCw3ICsxMjQ3LDcgQEAgcHJpdmF0ZToKIEJhc2lj
QmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwotICAgIFJl
ZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUlu
ZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBi
bG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0
IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29kZUJlZ2luCiAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCkpCkBA
IC0xMjIwLDcgKzEyNTksNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVU
YXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2Nr
KiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVm
PEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5k
ZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2Nr
KiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92
ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTE0MjMsNyArMTQ2Miw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIElm
IHRoZSB0YXJnZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZhcmFyZ3MsIHdlIGRvIG5vdCBrbm93IGhv
dyBtYW55IGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgZmlsbGVkIGJ5IExvYWRWYXJhcmdzLiBWYXJh
cmdzIElubGluZUNhbGxGcmFtZSdzCi0gICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRz
IGJ5IExvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBt
YXkgYmUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGlt
dW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgeGtMb2FkVmFyYXJn
cy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCiAgICAgICAg
ICAgICAvLyBhIGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50by4KICAgICAgICAgICAgIGlmIChjYWxs
RnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OSw3
ICsxNDg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwo
Tm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgLy8gV2UgbXVzdCBz
ZXQgdGhlIGNhbGxlZSB0byB0aGUgcmlnaHQgdmFsdWUKICAgICAgICAgaWYgKHN0YWNrRW50cnkt
Pm1faW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgc2V0RGlyZWN0KHN0
YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOworICAgICAgICAgICAgICAgIHNldERp
cmVjdChyZW1hcE9wZXJhbmQoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAK
QEAgLTE2MTQsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NF
UlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAt
IG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFt
ZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFs
UmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAg
CisgICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBt
X2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpICsgY29kZUJsb2NrLT5udW1UbXBz
KCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1
bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAg
ICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAg
ICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1
YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9
IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzYsNyAr
MTY3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5
KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRy
eSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVu
Y3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFt
ZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxv
Y2spOworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAg
IC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAg
ICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBAIC0xNjcxLDkgKzE3
MTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVu
IHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3
YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwg
bG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBj
YWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3Zl
ciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAg
ICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwg
dmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRU
b0dldCksIHZhbHVlKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXll
ZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIElt
bWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxNywx
NiArMTc1OCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNo
IGNhc2VzLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lz
dGVyT2Zmc2V0QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2lu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBj
YWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlu
ZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRU
b0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwg
eyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFr
ZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKyBpbmRleCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJn
dW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFy
Z3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAg
ICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVm
aW5lZCk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2Nh
bCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRp
YXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KIApAQCAtMTg5MywxMiArMTkzNCwxMiBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlh
bnQsIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50
IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAg
IGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9M
b2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJl
bWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBw
ZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAg
ICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFy
Z3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1h
cHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKQEAgLTE5MDYsMTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0Owog
ICAgICAgICBkYXRhLT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAg
ICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0
KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50ID0gYWRkVG9HcmFwaChHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAg
ICAgICBlbHNlIGlmIChpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudCA9IGdldERpcmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZy
YW1lKCksIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIGVsc2Ug
CisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwg
T3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRW
YXJhcmdzLCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAg
ICAgICAgICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoT3BlcmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAg
ICAgICAgc2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9w
SW5mbyhkYXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQo
KTsKKworICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBn
ZXRMb2NhbE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0
byBrZWVwIGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5k
IGFyZ3VtZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5
IG5lZWQgYSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NiwxNCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1
YWxSZWdpc3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3Ro
ZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVm
b3JlIFNTQS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJp
YWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRh
dGEtPmNvdW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwg
Zm9yY2UgdGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAg
ICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50
RGVmaW5pdGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8v
IG1vc3RseSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0
KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJs
ZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dy
YXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFi
bGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRB
cmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAg
ICAgIHVuc2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDcsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49
IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0
ZWx5LCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOwor
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJn
dW1lbnRzOwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNyw3IEBAIEJ5dGVDb2Rl
UGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZygKICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwg
cmVnaXN0ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4i
KTsKICAgICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0
V2l0aEZsdXNoKTsKIApAQCAtNTEwMiw3ICs1MTU2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0
YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGgu
ZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChi
eXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZy
b3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4
cCksIGpzQ29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9uZXdfcmVnZXhwKTsKICAgICAgICAgfQpAQCAtNjE3OCw3ICs2MjMyLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSAmJiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0
KDApLT5vcCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayku
bV9idWZmZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZm
ZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAg
ICAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2Fk
IGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIy
MywxNCArNjI3NywxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkg
ewogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVy
YW5kKTsKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xv
Y2FsKCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0
Q2F0Y2hMb2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlv
bnNbbnVtYmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsK
LSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3Bl
cmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhvcGVyYW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tl
ZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTIsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0g
bV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENv
bnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAgICAgICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4
MjYsOCArNjg4MCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
TGV4aWNhbEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3Rh
bnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUq
IGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkp
OworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
Lm1fc3ltYm9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNj
b3BlID0gZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVu
dmlyb25tZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFi
bGUpLCBPcEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2OTExLDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IC8vIGxvYWRzIGZyb20gdGhlIHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0aGF0IHdvdWxkIHBy
ZXZlbnQgdGhlIERGRyBmcm9tIHRyYWNraW5nIHRoZQogICAgICAgICAgICAgLy8gYnl0ZWNvZGUt
bGV2ZWwgbGl2ZW5lc3Mgb2YgdGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICAgICAg
ICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKTsKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIGlmIChKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4o
Km1fdm0pKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9u
LT5zY29wZSgpKTsKQEAgLTcyNzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRo
ZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRo
YXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRU
bXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGlu
ZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRt
cHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVD
YWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
KTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGNhbGxlZSk7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9
IGZhbHNlOwpAQCAtNzYzOCw3ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2Uo
KQogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSht
X2dyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5s
b2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3Jj
ZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc2NTgsMjQg
Kzc3MTQsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1w
dHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhdXRv
IGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF2YXJpYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnQgPSBvcGVyYW5kIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQg
PSB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVy
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQ
b3NpdGlvbio+JiBhcmd1bWVudHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlv
bnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRzW2FyZ3VtZW50LnRvQXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2
YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBh
dXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBh
ZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQ
cmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGly
ZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxE
aXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2Vydmlu
Z09wKGlubGluZUNhbGxGcmFtZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3Jp
Z2luLnNlbWFudGljLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAg
LTc3NDAsNiArNzc5Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAg
QVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
fQogCisgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2Fs
VmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFy
YW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CmluZGV4IDhlOWJiNGFjYmU1NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNiZmQuLjNkYzc1Njhm
MWVlMmM2OTc3MjI2OGNjOTZkZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9u
YWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRs
ZVZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFs
dWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgIGlmICghdmFsdWUp
IHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4g
Ynl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGlmICghbm9kZSkgewogICAgICAg
ICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5p
bmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwg
IiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUo
bV9ncmFwaCwgdmFsdWUudmFsdWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKaW5kZXggZDk4ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0MjZhZjBmMjM4Mi4u
NTc3MGYwOTg5NDJjODk2YjdhY2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC01
Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKICAg
ICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBo
aXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPFRtcE9wZXJhbmQ+
KCk7CiAgICAgICAgIGNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFi
bGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlh
YmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9u
aWNhbGl6ZUdldExvY2FsRm9yPFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+
b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0yNzAsMTUgKzI4MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXpl
Rmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2Rl
VHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9M
b2NhbCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXpl
Rmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2
YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3Bl
cmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogewor
ICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwg
VG1wT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY2Fub25pY2FsaXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2Js
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAg
ICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
LCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2Nr
KCkKQEAgLTI4OSw2ICszMTEsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgY2xlYXJW
YXJpYWJsZXM8QXJndW1lbnRPcGVyYW5kPigpOwogICAgICAgICBjbGVhclZhcmlhYmxlczxMb2Nh
bE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJhbmQ+KCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVl
biByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJl
IGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQg
dGhlIHJlZgpAQCAtMzg4LDcgKzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09
IEFyZ3VtZW50T3BlcmFuZCA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsK
KyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tG
b3I8b3BlcmFuZEtpbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRl
bXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBA
IC00NjYsOSArNDg5LDEyIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkK
ICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAg
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2Nh
bFBoaVN0YWNrOworICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2Ug
QXJndW1lbnRPcGVyYW5kOiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNl
IExvY2FsT3BlcmFuZDogcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBUbXBP
cGVyYW5kOiByZXR1cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0Zs
dXNoZWQoKQpAQCAtNTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7
CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZl
Y3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUq
LCAxMjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5
NDcxYjVhNjE2NjdjZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsx
NDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazog
ewogICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5y
ZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNv
bnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigp
OwogICAgICAgICAgICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3Rh
Y2spIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZp
bmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0
b3ItPnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIy
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0g
bG9jYXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCku
aXNUb3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwg
bG9jYXRpb24sIG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2Fk
KCkudmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0
SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQo
KS52YWx1ZSgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3
IEltcHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
U2lkZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7
Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5k
KGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBh
eWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5r
ZXkgPT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+
dmFsdWU7CkBAIC0yOTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBp
biB0aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAg
Ly8KICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFj
a01hcCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8
aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50
MzJfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBt
X2Fic3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVf
cHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
OwogICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA4OWJjNjQxZjUyNmJi
NTNmZjAzN2Y3M2NmOTUwYmFjNjQ2ZDQ5OTU0Li44MmYzY2E2NDE4NGY5MTkzNjUwMzliMTMyMjE3
ZGQ5OWVhOTcxMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgLy8gc2Nh
biB3b3VsZCByZWFkLiBUaGF0J3Mgd2hhdCB0aGlzIGRvZXMuCiAgICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
KTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogCiAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2RlcyBjYW4gcmVhZCBm
cm9tIHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICB3cml0
ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5Nyw3ICs0OTcsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZs
dXNoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwor
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAg
ICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNzY0LDEyICs3NjQs
MTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBMYXp5Tm9kZShu
b2RlKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
TG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBT
ZXRDYWxsZWU6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7CkBAIC03ODAsNyAr
NzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3Qg
UmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAgICBjYXNlIFNldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgpAQCAtNzg4
LDM2ICs3ODgsNDMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZSkpOwor
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+
b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJh
Y3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQo
KSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7Ci0gICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
OworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPm9wZXJhbmQpOwogICAgICAgICByZWFkKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVh
cCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBB
YnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQp
OwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xv
YywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOworICAgICAgICByZXR1cm47ICAKKyAgICB9CisK
ICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3
cml0ZShIZWFwKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291
bnQub2Zmc2V0KCkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGkt
LTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9m
ZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MjYsOSArODMzLDkgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAgIAogICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkp
KTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBz
dGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAK
aW5kZXggOTU4NjZhN2Y5MWE3MTQ0MmRhMWM0ZjdlNDcwMGQwOWNkMmFjMzBmMy4uMTU3NDZjMDU0
ZjBkZjMzYmEzMmQzOWZhZmUwMmRiYmQ3ZDI5MTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCkBAIC0zOSw3ICszOSw3IEBAIHN0
YXRpYyB2b2lkIGFkZEJ5dGVjb2RlTGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlN
YXAmIGF2YWlsYWJpbGl0eU1hcCwKIHsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgK
ICAgICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lz
dGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKICAgICAgICAgICAgICAgICByZWcs
CiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IDc5ODdiODcwZmQ1MDlmOTMw
MDA3ZTM1NmFjMDU1ZWE2NmJmZTdhZGIuLjdmZmQ0ZDM1YjZjZjVjOWRlMzgxZTdkYTYxMzMyZmQ1
MjQ5NjU1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNw
cApAQCAtNTYsNyArNTYsNyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZENvZGVPcmln
aW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29k
ZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwog
ICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJu
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3Nh
YmxlQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6
YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkBAIC02NCwxMyAr
NjQsMTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4
KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdp
bik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFT
U0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2Fs
bFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6bGFzdENh
bGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5zaXplKCkp
OwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdpbnMuc2l6
ZSgpIC0gMSkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
cy5zaXplKCkgLSAxKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6
YWRkRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDg1NDEyMzE0NzQxZTZmMTEyNjFm
MmU5N2M0OWZlNjQ0ZGFlN2JhZjcuLmYzOGM4M2ZkZDMwYzJmNTNiM2Q1MDkzZjQwYjJjNzBlOTUz
MTA0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI5NCw2
ICsyOTQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0
b206CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
Y2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0
aFZhbGlkUmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAppbmRleCAxN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5Li40NWZiYzQz
OWQ1M2JhOTUwZTdhOGQ4OWFjOWVjMTk3MmJhMDkzOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw3ICs5MCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJl
c3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0
aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAv
LyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlv
biBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKTsKLSAgICB2bS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7CiAgICAgdm0u
Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgdm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFlZTFmMDA3M2IwZjRiYmNjNDczNGViNjQx
ZTQ2NDhjMzA1NWEyNDQuLmNhMzNkYjIyN2Q0YjkyNzczZmE4NmQ3MmVlM2Q0ZDFiODViZjk4M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjQz
Miw2ICsyNDMyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBu
b2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBj
YXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKQEAgLTI0NjQsOCArMjQ3Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFp
bENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
SW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgY2FzZSBG
b3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNl
IFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNh
c2UgTmV3UHJvbWlzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aAppbmRleCAwYmYxYzNmYmJhYzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUyOGI5Li45MzNhMmJk
ZTIyZTE2NmMyYWViNmQ0YWMxYmJlOWNlMWU1Y2VkNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC0zMiw2ICszMiwxMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFjZSBGb3JBbGxLaWxsc0ludGVybmFsIHsK
K2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKwogLy8gVXRpbGl0aWVzIGZvciBm
aW5kaW5nIHRoZSBsYXN0IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSBpbiBERkcgU1NBLiBU
aGlzIGFjY291bnRzIGZvciBsaXZlbmVzcyBkdWUKIC8vIHRvIE9TUiBleGl0LiBUaGlzIGlzIHVz
dWFsbHkgdXNlZCBmb3IgZW51bWVyYXRpbmcgb3ZlciBhbGwgb2YgdGhlIHByb2dyYW0gcG9pbnRz
IHdoZXJlIGEgbm9kZSBpcyBsaXZlLAogLy8gYnkgZXhwbG9yaW5nIGFsbCBibG9ja3Mgd2hlcmUg
dGhlIG5vZGUgaXMgbGl2ZSBhdCB0YWlsIGFuZCB0aGVuIGV4cGxvcmluZyBhbGwgcHJvZ3JhbSBw
b2ludHMgd2hlcmUgdGhlCkBAIC01MywxMyArNTcsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVy
YW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29u
c3QKICAgICAKICAgICBDb2RlT3JpZ2luIGFmdGVyID0gbm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhp
dDsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOworICAgIE9wZXJhbmQg
YWxyZWFkeU5vdGVkOwogICAgIC8vIElmIHdlIE1vdkhpbnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2
ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxsIHRoZSBvbGQgdmFsdWUuCiAgICAgaWYgKG5vZGVB
ZnRlci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5C
eXRlY29kZShyZWcsIGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAg
ICAgICAgYWxyZWFkeU5vdGVkID0gcmVnOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2Rl
QWZ0ZXItPnVubGlua2VkT3BlcmFuZCgpOworICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRl
Y29kZShvcGVyYW5kLCBhZnRlcikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7Cisg
ICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSBvcGVyYW5kOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtNzAsOCArNzQsMjQgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAvLyBvdGhl
ciBsb29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUu
aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxGcmFtZSA9PSBhZnRl
ci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJ
bmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsK
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihiZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRl
eCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZS5ieXRlY29kZUlu
ZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkp
OworCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRv
IGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5i
eXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgaW50IHRtcE9mZnNldCA9IGJlZm9yZUlubGlu
ZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAg
ICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZmlsdGVy
KGxpdmVBZnRlcik7CisKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0g
KHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKE9wZXJhbmQoVG1wT3BlcmFu
ZCwgdG1wICsgdG1wT2Zmc2V0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIE5v
IGxvY2FscyBjYW4gZGllIGF0IGEgY2hlY2twb2ludC4KKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFt
ZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwogICAgICAgICBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJs
b2NrKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZl
bmVzcy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0
aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVB
ZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKQEAgLTgyLDE3ICsxMDIsMjEgQEAg
dm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUs
IE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIAorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJ
bmRleCgpLmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEgY2hlY2twb2ludCBi
dXQgYmVmb3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxsRnJhbWUuIik7CisK
ICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtp
bGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9y
IGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAgICBncmFw
aC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0g
Z3JhcGgubG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICB1bnNpZ25lZCBu
dW1Mb2NhbHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAg
ICBiZWZvcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAg
ICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5k
KSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQocmVnLnRvTG9jYWwo
KSkpCisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1M
b2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAg
IGlmIChsaXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKICAg
ICAgICAgfSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI5LDggQEAgdm9pZCBmb3JBbGxLaWxsZWRO
b2Rlc0F0Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VlbkluQ2xv
c3VyZUZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsbGVkRnVuY3Rv
ckZsYWcgPSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFnczsKLSAgICAKKwor
ICAgIEFTU0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAsMTUgKzE0NSwxMyBA
QCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0pOwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBpZiAobm9kZUluZGV4
KQotICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgTm9kZSog
YmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAgIFsmXSAoVmlydHVh
bFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCi0gICAgICAgICAg
ICAgICAgcmVnLAorICAgICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgICAgICAgICAgWyZd
IChOb2RlKiBub2RlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdz
LmdldChub2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAgICAgIH0sCkBAIC0x
NTksNiArMTgyLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgLy8gU3RhcnQgYXQg
dGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkg
aW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1cCB0byBu
b2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1
bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAx
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICBkYXRh
TG9nTG5JZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5
IGF0IGluZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFi
aWxpdHkpOwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAg
ICAgZ3JhcGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBibG9jaywgbm9kZUlu
ZGV4LAogICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCmluZGV4IGIzMjBmNzA3Yzk1ZjEyMzkzODUxYmMzYjJiMmI0MmI5NTZk
ZDBiZjUuLjA3MWRlMjM5MmI5YzVjOTI4NmRlOWM3ODc4ZmU5YWYwMGMwYjRlNDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4LDggQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUq
IG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0
aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVB
Y2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRo
aXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwgVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAgICAgICAg
IG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwogICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgIm1hY2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9k
ZSwgRHVtcENvbnRleAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkp
IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0YS0+bWFjaGluZUxv
Y2FsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwg
ZGF0YS0+bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5mb3Jt
YXQpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKLSAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgIGlmIChub2RlLT5o
YXNVbmxpbmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIsIG5vZGUtPnZlY3Rv
ckxlbmd0aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVlKCkpCkBAIC01MTUs
OSArNTE1LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAgIG91dC5wcmludChw
cmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJs
b2NrLT5waGlzW2ldOworICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsK
ICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVt
cE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUt
PmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQo
KSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBo
aU5vZGUtPmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9k
ZS0+Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGls
ZDIoKSkgewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2Nh
bChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAg
ICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmxv
Y2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkKICAgICAgICAg
ICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwo
QmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAg
ICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0
YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxv
Y2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgTm9kZSog
b2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAg
ICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICBibG9j
ay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0g
bmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAg
ICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9y
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVybiBraWxsc0Zvcihi
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6
aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJhbmQsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDaGVj
a2luZyBvZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgIGJvb2wgaXND
YWxsZXJPcmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAm
Y29kZU9yaWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9y
aWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29k
ZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUg
dGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQorICAgIC8v
IHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAgZm9yICg7
IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAgIGlubGluZUNhbGxG
cmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAob3Bl
cmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBpbmxpbmVD
YWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAgICAgICB1
bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1
ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsKKyAgICAg
ICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5s
aW5lZC4KKyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1D
aGVja3BvaW50VG1wcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFu
ZEluZGV4IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBj
b2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdE1h
cC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9yaWdp
blB0ci0+c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAgICAgICBhdXRvKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAg
ICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgp
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAgICAgICAgIGlmIChy
ZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLm9m
ZnNldCgpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogCiAKICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0gICAgICAgICAgICAg
ICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkxvb2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAg
ICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7CisgICAg
ICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTG9va3MgbGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc2LDQyICsxMTk3LDQxIEBAIGJvb2wgR3Jh
cGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxp
dmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2spOwogICAgICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJ
bmRleCgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy5vcGVyYW5kSXNMaXZlKHJl
Zy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUu
XG4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZ1bGxM
aXZlbmVzcy52aXJ0dWFsUmVnaXN0ZXJJc0xpdmUocmVnLCBieXRlY29kZUluZGV4LCBhcHByb3By
aWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmln
aW4pKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWx3YXlzIGxpdmUu
IFRoaXMgd291bGQgYmUgcmVkdW5kYW50IGlmIGl0IHdhc24ndCBmb3Igb3VyCiAgICAgICAgIC8v
IG9wX2NhbGxfdmFyYXJncyBpbmxpbmluZy4KLSAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkK
KyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiByZWcuaXNBcmd1bWVudCgpCiAgICAgICAg
ICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkpIDwgaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpKSB7CiAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBpcyBsaXZlLlxuIik7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFdlIG5lZWQg
dG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0
aGUKLSAgICAgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2Fs
bC4KLSAgICAgICAgY29kZU9yaWdpblB0ciA9ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxl
cjsKICAgICAgICAgaXNDYWxsZXJPcmlnaW4gPSB0cnVlOwogICAgIH0KKworICAgIGlmIChvcGVy
YW5kLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwor
ICAgIHJldHVybiB0cnVlOyAgICAKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi1CaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmln
aW4gY29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBCaXRWZWN0b3IgcmVzdWx0OwotICAg
IHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgdW5zaWduZWQgbnVt
TG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOworICAg
IHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZUbXBzKCkpOworICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgK
ICAgICAgICAgY29kZU9yaWdpbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXN1bHQu
cXVpY2tTZXQocmVnLnRvTG9jYWwoKSk7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2Nh
bHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIHJl
c3VsdC5xdWlja1NldChvZmZzZXQpOwogICAgICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMTYzNSw4ICsxNjU1LDggQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFw
aDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KIAogICAgIGZv
ciAoTm9kZSogbm9kZSA9IG9wZXJhbmROb2RlOyBub2RlOykgewogICAgICAgICBpZiAobm9kZS0+
YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKLSAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYm
IG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAgICBpZiAobV9mb3Jt
ICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKTsKICAgICAgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX3Jvb3RUb0FyZ3VtZW50cy5maW5kKGJsb2Nr
KDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRz
IGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NTg0MQpAQCAtMTY1Niw3ICsxNjc2LDcgQEAgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2Rl
KiBjdXJyZW4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUtleSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+b3BlcmFu
ZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZmFiOWNmMDJhMjU5NzZlZjQ3ZDE3OTA1YmFkOWNlMDNl
MzgyYmNlNS4uZjdhMWQ4MjE0YzMwMmQ3ZDk2YWMyYTc3YTAxODY2YTlkMTE5ZjUyZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtODQwLDEzICs4NDAsMTMgQEAgcHVibGlj
OgogICAgIC8vIFF1aWNrbHkgcXVlcnkgaWYgYSBzaW5nbGUgbG9jYWwgaXMgbGl2ZSBhdCB0aGUg
Z2l2ZW4gcG9pbnQuIFRoaXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZwogICAgIC8vIGZvckFsbExp
dmVJbkJ5dGVjb2RlKCkgaWYgeW91IHdpbGwgb25seSBxdWVyeSBvbmUgbG9jYWwuIEJ1dCwgaWYg
eW91IHdhbnQgdG8ga25vdyBhbGwgb2YgdGhlCiAgICAgLy8gbG9jYWxzIGxpdmUsIHRoZW4gY2Fs
bGluZyB0aGlzIGZvciBlYWNoIGxvY2FsIGlzIG11Y2ggc2xvd2VyIHRoYW4gZm9yQWxsTGl2ZUlu
Qnl0ZWNvZGUoKS4KLSAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBD
b2RlT3JpZ2luKTsKKyAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCwgQ29kZU9yaWdp
bik7CiAgICAgCi0gICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9j
YWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKKyAgICAv
LyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgYW5kIHRtcHMgbGl2
ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQogICAgIC8vIGFueSBh
cmd1bWVudHMgYmVjYXVzZSB0aG9zZSBhcmUgYWxsIHByZXN1bWVkIGxpdmUuIFlvdSBjYW4gY2Fs
bCBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIHRvCiAgICAgLy8gYWxzbyBnZXQgdGhlIGFyZ3VtZW50
cy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNhbGxpbmcgaXNMaXZlSW5CeXRlY29kZSgpIGZv
ciBlYWNoIGxvY2FsLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBm
b3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNv
ZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsK
ICAgICAgICAgLy8gU3VwcG9ydCBmb3Igbm90IHJlZHVuZGFudGx5IHJlcG9ydGluZyBhcmd1bWVu
dHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGluIGNhc2Ugb2YgYSB2YXJhcmdzCiAgICAgICAgIC8vIGNh
bGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93cyB0aGF0IGFyZ3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBp
biB0aGUgY2FzZSBvZiBhIG5vbi12YXJhcmdzCkBAIC04ODEsNiArODgxLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW3JlbGF0aXZlTG9jYWxdKQog
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygpKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxv
Y2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgbGl2
ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kKFRtcE9wZXJh
bmQsIHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC05MDQsOSArOTEyLDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2Nh
bHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgorICAgIC8vIEdldCBh
IEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIGxvY2FscyBhbmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4g
VGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCiAgICAgLy8geW91IHdhbnQgdG8gY29tcGFyZSB0d28g
c2V0cyBvZiBsaXZlIGxvY2FscyBmcm9tIHR3byBkaWZmZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAg
Qml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOworICAgIEJpdFZlY3Rv
ciBsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CiAKICAgICBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29k
ZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNDYWxsZXJPcmlnaW4pCiAgICAgewpAQCAtOTM4LDEyICs5
NDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50
OjpCZWZvcmVVc2U7CiAgICAgfQogICAgIAotICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIGFy
Z3VtZW50cyBhbmQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMg
YSBzbWFsbAotICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgp
LCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KKyAgICAvLyBU
ZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVyYW5kcyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2lu
LiBUaGlzIGlzIGEgc21hbGwKKyAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzT3JUbXBz
TGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVk
IGxpdmUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbExp
dmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKICAgICB7Ci0gICAgICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4s
IGZ1bmN0b3IpOworICAgICAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29k
ZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAgICAgIAogICAgICAgICAvLyBSZXBvcnQgYWxsIGFyZ3Vt
ZW50cyBhcyBiZWluZyBsaXZlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykK
QEAgLTExMTQsNiArMTEyMiw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dh
cmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9t
aW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKKyAg
ICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWdu
ZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTExYzQ1YjA1NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIw
MmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhiZTM4NGUzZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00
NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAg
IDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJh
Y3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCi0gICAgLCBtX2Jsb2NrKDApCisgICAg
LCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAppbmRleCBiZjVlYWQxOGVj
MTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcxMjk5Li4xODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4
NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBAIC0xNjcsMTMgKzE2NywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAot
ICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1
ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFi
bGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5kZXgob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAg
ICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVy
biB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpOyB9Ci0gICAgCiAgICAgQWJzdHJhY3RW
YWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxl
QXQobV92YXJpYWJsZXMubG9jYWxJbmRleChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAzZDg0M2NlNThmMjBiNDExNjMzOWZjZGE5
NTg4YWViYTZiN2E4YzJlLi41M2RiOWNkMTRjYWM2YjZlNjY4MmVmZGY0YmE3OTQ4OTdjYTVkNWE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAt
ODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0g
ICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRy
VGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxh
dGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBM
aXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRI
YXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZt
KCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgp
KSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdldCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGFkZExp
bmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0YXJnZXQsIG9zckV4aXRUaHVu
a0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGlu
Zm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgICAgICBpbmZvLm1fcGF0
Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAgICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3
LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2lj
QmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7
CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1
ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmco
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJs
ZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA2
OGNhOThkZjZmNWM0YjdiNjM3MmNjMTU4MThlYzI1NzI4MmY4OWQ5Li41MGYxZDg5M2RhMzAyMTAy
Yjk1ZTc4YWM2MDQzOWQ4NjIzNmYzY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBl
bWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCiAgICAgewotICAg
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwor
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFy
aWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBm
OTNlMDhhYzI1Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1Zh
bGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRl
eCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlv
bihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0
LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25n
LAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVz
aCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRv
IGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2ln
bmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlm
IChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5s
b2NhbCgpID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5h
Y2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJh
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJ
bnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBj
dXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3Ig
bGl2ZUF0Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3Bl
cmFuZHM8Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVy
UmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEg
KzEzMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
Y29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykp
IHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAg
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxM
b2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hI
ZWFkLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAog
ICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1
NiwxMiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVy
UmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0
YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51
bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50Qmxv
Y2tBY2Nlc3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0
cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3Jp
Z2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVu
dEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2Nh
bCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNB
cmd1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0
Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3
OCw2ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwg
PSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9j
YWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2Nh
bCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVz
aChPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1c2goVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAgICAgICAgfTsKIApA
QCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09IFNldExvY2FsIHx8
IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwo
KSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJn
dW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3Bl
cmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZl
QXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3BlcmFuZCkpOwogCiAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIw
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFj
Y2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNz
RGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3Bl
cmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7
CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChv
cGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxh
c3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJl
bW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVk
ODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApA
QCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7
CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICBibG9j
ay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAg
IH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewotICAgICAgICAgICAgICAgIEVwb2NoIGxv
Y2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQg
Iiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2Nh
bEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxF
cG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOworICAg
ICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBF
cG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWF5
RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSArMTE2LDE1IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2Nr
LT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0
IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJv
dGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRl
Lm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3Bl
cmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdNb3ZI
aW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywg
IlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1
cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2ls
bGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50RXBvY2g7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5
NmY0MDRlMzNiNDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1
Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0YWNrQWNjZXNz
RGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKLSAgICAgICAg
OiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVz
aEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAsIGZv
cm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9j
YWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAg
ICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05
MjMsOSArOTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBy
ZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBA
IC05NzMsOSArOTc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8VmFy
aWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZE9wZXJhbmQo
KQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgRXh0cmFjdE9T
UkVudHJ5TG9jYWw6CkBAIC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJh
bmQgdW5saW5rZWRPcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExv
Y2FsKCkpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMy
X3Q+KCkpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICBy
ZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0K
ICAgICAKICAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJn
czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJk
VmFyYXJncyB8fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRW
YXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAppbmRleCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0
Li5lM2U5YzMyZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAg
IC8qIFRoZXNlIGFyZSB1c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wK
ICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxT
dGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0
SlMpIFwKQEAgLTIwMiw2ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oR2V0QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRz
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xl
bmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExv
YWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3Ms
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRl
eCAzMjgwZjg3YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi5kMTBhMjA3MDRiMDE5
ZDdlODc3YWNiMjk2MzI2YmE4OTcwMGMxM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
QEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci19CiAKIGNsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAg
ICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDgg
QEAgcHVibGljOgogICAgICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBt
X2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgw
KS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAg
ICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2cob3BlcmFuZCwgIiAiKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFM
b2dMbigiIik7CiAgICAgICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sg
IyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHko
YmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAg
ICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAg
ICAgICAgICB9CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4
KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNj
ZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiQWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpA
QCAtMjA4LDI4ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6
OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
Y2FzZSBQdXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChkYXRhLT5sb2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEt
PmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEtpbGxTdGFjazogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gp
KTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9k
ZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRB
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21i
aWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVu
YXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQyLDE1ICsyNDAsMTgg
QEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUq
IG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKworICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsK
KyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPSBB
dmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7Ci0gICAgICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRh
LT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZs
dXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFy
dC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShG
bHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCArIGkpKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3MywyMCBAQCB2b2lkIExv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8v
IFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQu
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0gICAgICAgICAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBM
b2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRi
ODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTMyMiw3ICszMjIs
NyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcpIEZpeCB0aGUgY2Fs
bCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAotICAgICpiaXR3aXNl
X2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykg
PSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAgIAogICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmlu
ZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICszODIsMTAgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9T
UkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwog
ICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0
YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCku
bWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUqIGRhdGFC
dWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNoT1NSRW50
cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQp
LmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZlcltpbmRl
eF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1MDY2
NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jvb3QtPmFw
cGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rpb24o
KSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8o
dmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8odmFy
aWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNw
ZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQo
KSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwg
T3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAgICAgICAg
ICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2OWI0MWNhOGY5OGYz
MDhiM2E0YzkzM2JhOTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZlMzJkNjc3NDIwMWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVV
c2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1
ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAi
REZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQVVN0YXRl
ID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0OwotdXNp
bmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBjb25z
dCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFByb2Jl
OjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
LCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVpbnQzMl90
IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBqc1ZhbHVl
Rm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlmIChzb3Vy
Y2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHN0ZDo6
bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsgc291cmNl
Lm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoY3B1Lmdw
cjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChzb3VyY2Uu
aGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygpLCBjcHUu
Z3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZShj
cHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4oc291cmNl
LnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVT
X1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29u
dGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKGNvZGVC
bG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVz
dG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygp
LCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
Y2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxTdGFja0Zy
YW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBl
bnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0
ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8g
VGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFjaywgbm90
IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRoZSB2YWx1
ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQgb2YKLSAg
ICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFTU0VSVCgh
KGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAgY29udGV4
dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5Lm9mZnNl
dCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNz
ZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZl
Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17
Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2Rl
QmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdp
c3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVl
U2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNv
dW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVz
LT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQuZnAoKSwg
ZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3By
KCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9p
ZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0g
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZt
Q2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQg
cmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVudHJ5UmVj
b3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAg
VUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ1BVUmVn
aXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0KLSAgICAv
LyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0g
YWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMu
Z2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzaXplX3Qg
dWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rlcik7Ci0g
ICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4dC5ncHIo
ZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XTsKLSAg
ICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRleHQuZnBy
KGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZm
ZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2lu
dCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0g
KmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsK
LQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BF
bnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNvcmQtPmNh
bGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxs
Q2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMt
PnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBp
KyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5h
dChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0g
ICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNv
bnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAgICAgZWxz
ZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZl
QnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5y
ZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdp
c3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQg
b24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0
aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIsIGJv
b2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgp
LCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3Rl
clNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMo
KSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0K
LSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50
cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdWludHB0
cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlhVGFpbENh
bGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAg
c2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zmc2V0KCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBjb250ZXh0
LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNldFZpcnR1
YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRSZWdpc3Rl
clZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9TQVZFU19S
RUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4
dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsg
fQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxv
Y2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVSX09GX0NB
TExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVjdEFy
Z3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGlu
dDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigp
OwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1
bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxlbmd0aCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMSkpOwot
ICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCi0g
ICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVudHNTdHJ1
Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxlZSh2bSwg
Y2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigp
ICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsK
LSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4UXVpY2ts
eSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBj
b250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAg
IFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0Rl
ZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsK
LQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIENs
b25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKLSAg
ICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxl
ZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIq
PigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAw
KTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdElu
ZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUsIGNvbnN0
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBmcmFtZShj
b250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQs
IGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50
cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVy
YW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAgICAgICAg
ICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3Jl
YXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQgaWQgPSBy
ZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBm
cmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0KLSAgICAg
ICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZyYW1lKCk7
Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAgICAgICAg
SlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVlID0ganND
YXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50
KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCogYXJndW1lbnRzT2Jq
ZWN0OwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0ID0gY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBjb2Rl
QmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRl
ZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1
cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJn
dW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoYXJn
dW1lbnRzT2JqZWN0KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQo
aWQsIG9wZXJhbmQpOwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2Yg
ZXh0cmEgaW5pdGlhbGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGluIG9yZGVyCi0vLyBv
ZiBtb3N0IGxpa2VseSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxlYXN0IGxpa2VseSBu
ZWVkZWQgKGhpZ2hlciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5pdGlhbGl6YXRpb24g
aW5jbHVkZXMgdGhlIHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1c2Ugb2YgdGhlCi0v
LyBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51bSBjbGFzcyBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3VsYXRpb25SZWNvdmVy
eSwKLSAgICBWYWx1ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxlVXBkYXRlLAotICAg
IE90aGVyCi19OwotCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxGcmFtZS0+ZGVwcmVj
YXRlZFZNKCkgPT0gJnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsKLQotICAgIGlm
ICh2YWxpZGF0ZURGR0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBleGl0IG9w
dGltaXplZCBjb2RlLiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGltaXplZAotICAgICAg
ICAvLyBjb2RlIHJ1bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAgICB2bS5oZWFwLnNl
dEV4cGVjdERvZXNHQyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1lRm9yQ2F0
Y2gpIHsKLSAgICAgICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2g7Ci0gICAgICAg
IGNvbnRleHQuZnAoKSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0KLSAg
ICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhl
cmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFi
bGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotCi0gICAgdWludDMy
X3QgZXhpdEluZGV4ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklUQ29kZSogZGZnSklU
Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JFeGl0JiBleGl0ID0g
ZGZnSklUQ29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJUKCF2bS5jYWxsRnJh
bWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBFWENFUFRJ
T05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8fCAhZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQuZXhpdFN0YXRlKSkg
ewotICAgICAgICBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAgICAgIC8vIFdlIG9u
bHkgbmVlZCB0byBleGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBPU1JFeGl0IHJlY29y
ZC4gVGhlIGNvbXB1dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBjYWNoZWQgaW4gdGhl
IE9TUkV4aXRTdGF0ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0aGUKLSAgICAgICAg
Ly8gZXhpdCByYW1wIGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0g
ICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsKLSAgICAgICAg
aWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICByZWNv
dmVyeSA9ICZkZmdKSVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVyeUlu
ZGV4XTsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxh
dGlvblJlY292ZXJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1f
a2luZCA9PSBHZW5lcmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUg
PSBudWxscHRyOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAg
ICAgICAgaWYgKGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICBp
ZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2Zp
bGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJv
ZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQzMl90
IGFjdGl2ZVRocmVzaG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3RlZENvdW50ZXJWYWx1
ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKTsKLSAgICAg
ICAgZG91YmxlIGFkanVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NB
bmRDb252ZXJ0VG9JbnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAg
ICAgIEFTU0VSVChhZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBhZGp1c3RlZFRocmVz
aG9sZCA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNl
bGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAg
ICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8
IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OwotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhpdFRvTExJbnQpIHsK
LSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3Vy
cmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlT2Zmc2V0KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJU
YWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29k
ZU1hcCgpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29k
ZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAgICAgIE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFu
ZFNwYW4+IHVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklUQ29kZS0+dmFyaWFi
bGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBk
ZmdKSVRDb2RlLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5kcywgJnVu
ZGVmaW5lZE9wZXJhbmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJPZmZz
ZXQgPSAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29t
bW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKTsK
LQotICAgICAgICBleGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JFeGl0U3RhdGUoZXhp
dCwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdURk1vdmUodW5kZWZp
bmVkT3BlcmFuZFNwYW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNldCwgYWN0aXZlVGhy
ZXNob2xkLCBhZGp1c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQcm9maWxlLCBleGl0
VG9MTEludCkpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikpIHsK
LSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9wZXJCeXRl
Y29kZVByb2ZpbGVyOwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxh
dGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0
KCk7Ci0KLSAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21w
aWxhdGlvbi0+YWRkT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVy
OjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0g
ICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxlSW52
YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9maWxlckV4aXQgPSBw
cm9maWxlckV4aXQ7Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6
Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6
T3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50
RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBz
dGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bDo6T3RoZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpKSkg
ewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykgZnJvbSAl
cywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9D
U3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgZXhpdEtp
bmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCi0g
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3Bl
cmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NSRXhpdFN0YXRlJiBl
eGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0g
ICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0YXRlLm9wZXJhbmRz
OwotICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5lZE9wZXJhbmRTcGFu
cyA9IGV4aXRTdGF0ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBjb250ZXh0LnNwKCkg
PSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9pbnRlck9mZnNldDsK
LQotICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGlsZSBsb29wIGlz
IHNvIHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCi0gICAgZG8gewot
ICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19jYXN0PEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCk7
Ci0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBFeHRyYUluaXRpYWxp
emF0aW9uTGV2ZWw6Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdp
biBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292ZXJ5Ci0KLSAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJzdCBiZWNhdXNlIGFy
cmF5IHByb2ZpbGluZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8vIG1heSByZWx5IG9u
IGEgdmFsdWUgdGhhdCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vzbid0IG1lYW4gdGhh
dCBpdCBpcyBsaWtlbHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5IHZhbHVlLiBTbywg
d2UnbGwgZGVjb3JhdGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3Zl
cnkqIHJlY292ZXJ5ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBpZiAoVU5MSUtFTFko
cmVjb3ZlcnkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAgICAgY3B1Lmdwcihy
ZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0g
Y3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIp
KTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6
Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIFNwZWN1bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8aW50MzJfdD4ocmVj
b3ZlcnktPmRlc3QoKSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIp
KTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6
Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgICAgIGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkg
LSByZWNvdmVyeS0+aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAgICAg
ICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFn
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSBe
IEpTVmFsdWU6OlZhbHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFZh
bHVlUHJvZmlsZVVwZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFsdWU7Ci0gICAgICAg
IGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBwcm9maWxlZFZhbHVl
ID0ganNWYWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAgIGlm
IChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFsdWVQcm9m
aWxlKQotICAgICAgICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJvZmlsZWRWYWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IEFycmF5
UHJvZmlsZVVwZGF0ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBl
eGl0U3RhdGUuYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoISFleGl0Lm1fanNW
YWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUg
fHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJhc2VsaW5lQ29k
ZUJsb2NrKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IHBy
b2ZpbGVkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAgICBib29sIGRvUHJv
ZmlsZSA9ICFpbnN0cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCkubWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9kZU1ldGFkYXRhLm1v
ZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgaWYgKGRvUHJvZmls
ZSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcHJvZmlsZWRWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUt
Pm9ic2VydmVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2Zp
bGUtPm9ic2VydmVBcnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSkK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJhIGluaXRpbGl6YXRp
b24gbGV2ZWw6IE90aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9PSBHZW5l
cmljVW53aW5kKSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8g
b3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KLSAg
ICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNr
IHBvaW50ZXIuCi0gICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29udGV4dC5m
cCgpID09IHZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChl
eGl0U3RhdGUucHJvZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRlLnByb2ZpbGVyRXhp
dC0+aW5jQ291bnQoKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRFYWNo
T1NSRXhpdCgpKSkKLSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0LCB2bS5vc3JFeGl0
SW5kZXgsIGV4aXQpOwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQgZXh0cmEgaW5pdGlh
bGl6YXRpb24uCi0KLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsK
LSAgICBBU1NFUlQoIShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4NykpOwotCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3RlcikgPT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NFUlQoY3B1Lmdwcjxp
bnQ2NF90PihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOb3RDZWxs
TWFzayk7Ci0jZW5kaWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBh
bmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8gTm90ZTogd2UgbmVl
ZCB0byByZWNvdmVyIHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBzYXZlIHJlZ2lzdGVy
cyBiZWxvdwotICAgIC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5IG9uIHZhbHVlcyBp
biBzb21lIG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBjYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lQ29kZUJsb2Nr
LT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAgc2l6ZV90IG51bWJl
ck9mT3BlcmFuZHMgPSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51bVVuZGVmaW5lZE9w
ZXJhbmRTcGFucyA9IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0KLSAgICBzaXplX3Qg
bmV4dFVuZGVmaW5lZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRPcGVy
YW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRlZmluZWRPcGVyYW5k
U3BhbnMpCi0gICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVy
YW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLQotICAgIEpTVmFs
dWUgdW5kZWZpbmVkID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVfdCBzcGFuSW5kZXgg
PSAwOyBzcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsrc3BhbkluZGV4KSB7
Ci0gICAgICAgIGF1dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbc3BhbkluZGV4XTsK
LSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0gICAgICAgIGludCBs
YXN0T2Zmc2V0ID0gZmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0ZXJzOwotCi0gICAg
ICAgIGZvciAoaW50IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBsYXN0T2Zmc2V0OyAr
K29mZnNldCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0LCB1bmRlZmluZWQp
OwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZk9w
ZXJhbmRzOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5
ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFu
ZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChVTkxJS0VM
WShpbmRleCA9PSBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAgICAgICAgICAgaW5k
ZXggKz0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXgrK10ubnVt
YmVyT2ZSZWdpc3RlcnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRlZmluZWRTcGFuSW5k
ZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAgICAgbmV4dFVuZGVm
aW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3Bh
bkluZGV4XS5maXJzdEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5l
eHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcu
dG9Mb2NhbCgpIDwgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0KLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2Fs
bEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZnBy
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
Y2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1Lmdw
cjxKU1ZhbHVlPihyZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQot
ICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigpKSwgY3B1Lmdwcjxp
bnQzMl90PihyZWNvdmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+KHJlY292ZXJ5Lmdw
cigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVl
KGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94
ZWRDZWxsKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNvdmVyeS5ncHIoKSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBCb29sZWFuRGlz
cGxhY2VkSW5KU1N0YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2VuZGlmCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVj
b3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVu
c2FmZVVuYm94ZWRJbnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5n
cHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJl
Y292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdHJp
Y3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LmFzYW5VbnNhZmVVbmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHB1cmlmeU5hTihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5V
bnNhZmVVbmJveGVkRG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIENvbnN0YW50OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCByZWNv
dmVyeS5jb25zdGFudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRGly
ZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNlIENsb25lZEFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHll
dC4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVu
IHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVTYXZlc0Zvcihjb250
ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNwdS5n
cHIoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVn
aXN0ZXI+KEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJbmZvOjpub3RDZWxs
TWFza1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpO
b3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KGNvbnRleHQpOwotCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFjayBhcmUgcmVj
b3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhhdCBhcmd1bWVu
dHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRvIGVhY2ggb3Ro
ZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQotICAgIC8vIHJl
ZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5lZWQgdG8gZG8g
dGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAvLyBOb3RlIHRoYXQg
d2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQgc3RpbGwgYmUg
bWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNhbGwgZnJhbWUgc2Nv
cGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0KLSAgICBERkc6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklUQ29kZSwgb3BlcmFu
ZHMpOwotCi0gICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5j
ZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFsbCBuZXcgY2FsbHMg
aW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKLSAg
ICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1Ig
ZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRo
ZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gT1NS
IGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAg
IC8vCi0gICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFu
Y2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVudHVhbGx5LCBzaW5j
ZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAgICB3YW50
IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCi0g
ICAgLy8KLSAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0
IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBjb2RlIGFuZCBoYXMg
bmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8vICAgICBw
ZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgotICAg
IC8vCi0gICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3Qg
aW1tZWRpYXRlbHkgcmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1z
IG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAgICAgcGFydGljdWxh
cmx5IGV4cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMs
IGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8gICAgIHJ1
bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmln
Z2VyZWQuCi0gICAgLy8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRo
ZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
V2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8vIChhKSBh
bmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1
bml0eSBmb3IKLSAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBF
c3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1ZW50bHkgYW5kIHRo
ZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKLSAg
ICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmln
Z2VyZWQuIE9TUiBlbnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMg
aG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gZ29vZCBqb2Ig
b2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChk
KSwKLSAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhl
IGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIg
b2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vIGxhcmdlciB0
aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBh
bmQgaWYKLSAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNl
IHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJXYXJtVXAoKS4KLQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9TUkV4aXRD
b3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2RlQmxvY2s6
Ok9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJlb3B0aW1p
emF0aW9uTm93KGJhc2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0KTsKLQotICAgIHJl
aWZ5SW5saW5lZENhbGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwot
ICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJsb2NrLCBiYXNlbGlu
ZUNvZGVCbG9jaywgZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9j
aywgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5j
cHU7Ci0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZv
cm1pbmcgYW4gT1NSIGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2Fs
bHMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUx
MQotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxvY2sqPihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLQot
ICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0g
JmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENh
bGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2Nr
KTsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZDsKLSAg
ICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAgICAgIHZvaWQqIGNh
bGxlckZyYW1lID0gY3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50ID0gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5s
aW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5QQyA9IGZy
YW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSNpZiBDUFUoQVJN
NjRFKQotICAgICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSAr
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1Ag
PSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkg
KyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIocmV0
dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8UHRy
VGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4o
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7Ci0gICAgICAgICAg
ICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+
Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxlclJl
dHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwgdHJ1
ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAgICAgaWYgKHRydWVD
YWxsZXItPmlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNhbGxlckZyYW1lID0g
Y3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCktPnN0YWNr
T2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShBUk02NEUpCi0gICAg
ICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2Fs
bEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSB0YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG5l
d0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVD
YWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnJhbWUuc2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAg
ICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVnaXN0
ZXJzLgotICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwgdGhh
dCB3aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8KLSAg
ICAgICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMgYWxy
ZWFkeSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAgIHNh
dmVPckNvcHlDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7Ci0K
LSAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7
Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGlu
ZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRh
VGFibGVHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFi
bGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2
b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywg
TExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1l
KTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1l
T2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFn
T2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNv
IHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0
cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWlu
dDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIFRhZ09mZnNldCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpKTsK
LSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29u
c3RhbnQoKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBw
YXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAgICB9Ci0KLSAgICAv
LyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBk
aWQgaW5saW5lIHRhaWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotI2VuZGlmCi0gICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0KQot
ewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0K
LSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4
cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNl
LgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8v
IFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVu
dCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5s
aW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1
cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBp
ZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUg
YiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1F
OiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBDb2Rl
QmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxGcmFt
ZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewot
ICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNh
bGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJh
bWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0SW5s
aW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAg
aWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRleHQu
ZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5q
dW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3Bf
Y2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5jYWxs
RnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAgICB2
bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAoZXhp
dFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9y
RXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhp
dC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0Zv
ckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAgICAg
IGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVj
dGlvbnNSYXdQb2ludGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKS5vZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3Ry
dWN0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8SlNF
bnRyeVB0clRhZz4oanVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChD
b250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4
aXQpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+
KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwot
ICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0g
ICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBkYXRh
TG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2co
IiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4
aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7
Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRl
cm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRl
cm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAg
ICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0
dGlzb25lZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1l
IG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVn
aXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoi
LCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRhdGFM
b2coIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAg
ICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVpbnQ2
NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91YmxlIHZh
bHVlID0gY29udGV4dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJc
biIpOwotfQotCi0vLyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQg
c3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShr
aW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+
bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNl
KQpAQCAtOTU4LDE1ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+
IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4aXQ6
OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlmaWVk
SUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0dWFs
UmVnaXN0ZXI+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1
bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0g
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAgICAg
ICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJRCBp
ZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2Nh
dGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2Nh
dGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0Ojpl
bWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVy
YW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGppdC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFu
ZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgsNyBAQCB2b2lkIE9T
UkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNv
bnN0IE9wZXJhbmRzPFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBP
cGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCi0gICAgICAg
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICAgICAgYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkp
OwogICAgIH0KIH0KIApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGls
ZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29u
c3QKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUp
OwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVD
aGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4ndCB1c2Ug
YSBwcm9iZSBidXQgZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0cyBpcyB0cmlja3kg
b3RoZXJ3aXNlLi4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2YWx1ZXMob3BlcmFu
ZHMubnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJh
bmRzLm51bWJlck9mVG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvcGVyYW5k
cy50bXAoaSk7CisKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBhdXRvKiB0bXBT
Y3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAgICAgICBqaXQucHJv
YmUoWz0sIHZhbHVlcyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFt
ZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRl
ID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAg
ICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVzW2kgKyB0bXBPZmZz
ZXRdOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdoYXQgdGhl
IEZUTCBkb2VzIGFuZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGludG8gdGhlIHNjcmF0
Y2ggYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUocmVjb3Zlcnku
Y29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0bXBTY3Jh
dGNoW2kgKyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZElu
dDMySW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3Rh
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kgKyB0
bXBPZmZzZXRdKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEaXNw
bGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1w
c1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAg
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4
aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxl
clNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNh
bGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAg
ICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIGFkZFNp
ZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgLSBzaXpl
b2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwg
Ynl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIERvIGFsbCBk
YXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3Rh
Y2suCiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgp
OyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3Bl
cmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMudmly
dHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgp
ICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpbnQg
b3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYm
IG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxv
Y2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAg
ICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmgKaW5kZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1NGYxYTA0ZWI4ZS4u
OWU5YmNlYTQ4MWMxZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBzdHJ1Y3QgT1NSRXhp
dCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAgc3RhdGljIHZvaWQg
ZXhlY3V0ZU9TUkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZjNTMzMjc4NGYwYTI5
MmE0OWNiZTFiODJhNTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJjM2MxMjQzNWRiOTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCkBAIC03MCw2
ICs3MCwxMSBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1cm4gbV9raW5kID09
IEdlbmVyaWNVbndpbmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzRXhpdGlu
Z1RvQ2hlY2twb2ludEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0KKwogcHJvdGVjdGVk
OgogICAgIHZvaWQgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBw
cm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKaW5kZXggMmZmM2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRkNTExNS4uMjFiZWU4
MjgzNGE3ODA3NDIyNDcyN2Q4OTlmMmJjMmY2Yjg1YWE4NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjks
MTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZXMu
aCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRG
R0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKKyNpbmNs
dWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2LDkgQEAgdm9pZCog
Y2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0
ZWNvZGVJbmRleCBjYWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VP
U1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZMTElu
dDo6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50KTsKKwog
ICAgIHZvaWQqIGp1bXBUYXJnZXQ7CiAKICAgICBpZiAoY2FsbGVySXNMTEludCkgewpAQCAtMjM4
LDcgKzI0NCw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5l
ZCB0YWlsIGNhbGxzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDc1MTEKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0LmJhc2Vs
aW5lQ29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwotICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spKTsKKyAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGpp
dC5iYXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaykpOwogCiAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdp
bjsKICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4g
JiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2lu
LT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewpAQCAt
MzA1LDMzICszMTEsMzQgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJhc2VsaW5lQ29kZUJsb2NrLT5i
eXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRzKCk7
CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0
aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsK
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAg
ICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0
b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBz
byB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJh
bWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihp
bnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSkpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKQotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25z
dGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0
bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgfQogCiAgICAgLy8gRG9uJ3QgbmVlZCB0
byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWls
IGNhbGxzCiAgICAgaWYgKGNvZGVPcmlnaW4pIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVj
b2RlSW5kZXgoKSkuYml0cygpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9yRXhpdChj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5z
dHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOworICAgICAgICBhdXRv
IGJ5dGVjb2RlSW5kZXggPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleEZv
ckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9u
cyhieXRlY29kZUluZGV4KS5hdCgpLnB0cigpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKS5i
aXRzKCk7CiAjZW5kaWYKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgaml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgIH0K
IH0KIApAQCAtMzgyLDExICszODksMTIgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0m
IHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgQVNT
RVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkp
OwogCiAgICAgdm9pZCoganVtcFRhcmdldDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPiBjaGVja3BvaW50UmV0dXJuVGFyZ2V0OwogICAgIGJvb2wgZXhpdFRvTExJbnQgPSBP
cHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAgICAgaWYgKGV4aXRUb0xMSW50KSB7
CiAgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9
ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIo
KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0
aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0
aW9uID0gYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgPyBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZMTEludDo6Y2hlY2twb2ludF9vc3JfZXhp
dF9lbnRyeXBvaW50KSkgOiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7
CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJl
bnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJlZ1QyKTsKQEAgLTQwMiw3ICs0MTAsMTQgQEAgdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
T1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0
aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9
IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9j
YXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9
IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRl
eCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4gPSBjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUlu
ZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmlu
ZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4pOworICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNr
cG9pbnQoKSkgeworICAgICAgICAgICAgY2hlY2twb2ludFJldHVyblRhcmdldCA9IGNvZGVMb2Nh
dGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oJkxMSW50OjpjaGVja3BvaW50X29zcl9leGl0
X2VudHJ5cG9pbnQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24p
OwogCiAgICAgICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0
clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5k
ZXggMjE2YzViYWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRiMDNkYzE5OS4uN2RhNmFmZDVjMjIx
Yzk3ZmY5M2Y0MDBjYjM0OTQ0NTRkNGQ0OTI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
CkBAIC0yMTA3LDcgKzIxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVhcC5m
b2xsb3coYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9w
SW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRF
ZGdlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggZjM5YzE0Yjlm
MGE0NDg3ODlkNzcyZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0YmY1ZWE2MGE2
ZTY2NTIwZmUwNTE0NGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcEluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCkBA
IC00NCw3ICs0NCw3IEBAIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJbnRl
Z3JhbFR5cGUgdmFsdWUpCiAgICAgICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oc3RydWN0dXJlKSkpIHsgfQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQgb3Ap
IDogbV92YWx1ZShvcC5hc0JpdHMoKSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
ICAgICBleHBsaWNpdCBPcEluZm8oVCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKaW5kZXggNTBjYTAwYjAwYjk0ODhhMTAzMjg3MjYyOGE5ZTJlZTg3
M2YyYzM3OS4uY2YwOWQ4NzM5NzRhODU2MzNhMmVkYjY4Nzc2OTJkYjEwNzY4NDA3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTQ2LDE1ICsy
OTQ2LDE2IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1
ZURvdWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90
IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQz
Ml90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQog
eworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVu
dHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZh
cmFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1l
bnREZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3MoZ2xv
YmFsT2JqZWN0LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50KSksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGggLSAxKTsKICAgICAKLSAgICBmb3IgKHVp
bnQzMl90IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCi0gICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgIGZv
ciAodWludDMyX3QgaSA9IGxlbmd0aCAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisg
ICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CiB9
CiAKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBp
bnQzMl90IGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2RiMzZh
YjVhMGM2YWRjMi4uMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVlMDliYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlv
blBoYXNlLmNwcApAQCAtNDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBoYXNl
SW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQog
Y2xhc3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21JbnNl
cnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9t
IGluc2VydGlvbiIpCkBAIC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0TG9j
YWxzIGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2Vy
dCB0b28gZmV3IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIs
IG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Cisg
ICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUg
UGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAg
ICAgICB9CkBAIC03Miw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAgIGhh
bmRsZUJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIgKzEwMCwyMiBA
QCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOwotICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFs
Ojp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAg
ICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRE
ZWZpbml0ZWx5OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAg
ICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMTM0LDM4ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGgu
ZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZd
IChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
IlVwZGF0aW5nIGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJl
bnRFcG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOwor
ICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHBy
b2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQot
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIHJlZywg
IlxuIik7CisgICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVy
YW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAg
IEtpbGxlZCBvcGVyYW5kOiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVh
ZHkgaGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxy
ZWFkeUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVk
KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFu
ZCAiLCBvcGVyYW5kLCAiIGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJlZyk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgIE5vZGUq
IGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAgICAgICAgICAg
ICBpZiAoIWtpbGxlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVkIGluIHRoaXMg
YmxvY2suIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOworICAg
ICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQgYSBQ
aGFudG9tIGlmIHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAgICAg
ICAgICAgICAgICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQuCi0g
ICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKQor
ICAgICAgICAgICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9jaCkg
eworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQg
Iiwgb3BlcmFuZCwgIiBoYXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIEluc2Vy
dGluZyBQaGFudG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsCisgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwg
a2lsbGVkTm9kZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFz
dEV4aXRpbmdJbmRleCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdl
IGhhdmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRoYXQg
d2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50Lgog
ICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3OSwxNCArMTgw
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2Nh
bCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9k
ZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBuZWVkIHRoZSBN
b3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBsaXZlIHVu
dGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2ls
bGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBs
b2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2FsKSA9IG51bGxw
dHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1fZ3Jh
cGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tpbGxlZE9wZXJh
bmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0Mjk4ODZlMDc4ZjBh
ZmNjLi5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUu
aApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZSht
X3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAgICAg
ICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVj
aXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhl
YXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5w
YXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29u
ZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkp
OworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIGhl
YXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FT
U0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAgCi0gICAgICAg
IG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIo
KSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFuZCgpLCBub2Rl
KTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVy
YW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50b0xvY2FsKCkp
ID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKQog
ICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2UyNGUyYTExNjMz
N2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMzODY5
NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8
T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVz
dEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQg
PSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAg
ICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNb
aV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZjYmZlY2M4NGZlMTk1ODQy
OGEwY2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5YmU2ZDMxOTdjMTNm
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAg
ICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMyZWFlNjAzYmFj
YmQxMDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBlN2VkZjYzZjA3Zjc4ZDgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQot
CiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQdXRTdGFja1Np
bmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRTdGFj
ayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUgc3Rh
Y2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9yIG5vdC4KICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5Ngog
ICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdy
YXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1
bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAgICAgICBCbG9j
a01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3Bl
cmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIGxpdmVBdFRh
aWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVz
QXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmls
bChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAg
ICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWls
W2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQ7
CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8
Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIs
IDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCA0
PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9w
ZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4g
d3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNI
ZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9k
ZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0
ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdz
IHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBLaWxsU3Rh
Y2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBvcCA9
PSBWYXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZvcndhcmRWYXJh
cmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXMu
YXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAg
ICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0ZXMpCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFti
bG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2Rl
IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6
IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsyNTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5nRmx1c2g7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFi
bGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQdXRT
dGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0aW5nIGZsdXNo
IGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFjaykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEgUHV0U3Rh
Y2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5r
ZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBl
c2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5k
bGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFy
Z3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZv
cndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVy
YW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkg
PSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2Rl
KSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkg
eyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywxMyArMzEz
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcg
IiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIgYXQgIiwg
cG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBk
ZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJn
ZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZlcnJlZC5vcGVy
YW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVy
RHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhl
YWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ldKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5k
VG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhU
b09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAg
ICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CiAg
ICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7
CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxlLT5p
bmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBj
YXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRkKG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1Zhcmlh
YmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAg
ICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9j
YWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewot
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRb
dmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGlu
ZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwgb3Bl
cmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hl
YXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkpOwpAQCAt
NDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRy
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFw
cGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpE
ZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxl
KTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtYXBwaW5n
Lm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBwaW5n
LCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpE
ZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVm
LT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5k
LCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWFwcGlu
Zy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAt
NDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJl
ZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlm
IChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBh
dCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1
dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVy
YW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBw
aW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIsIG5v
ZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAg
ICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChk
YXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1h
dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZl
cnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZl
cnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBkZWZlcnJh
bC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdoYXQgaXMg
c3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVw
IHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChk
YXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVy
YW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcyLDIw
ICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0b3JlZCBh
bmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBkYXRhLT5m
b3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSog
aW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVsdEVkZ2Uo
KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25m
bGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAg
ICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVI
YW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAi
LCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9wZXJh
bmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUxMyw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFu
ZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRpdGlvbmFs
IHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1ha2Vz
IHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMgd2Ug
c2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNrcyBy
aWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJh
cmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkg
PT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9w
KCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAog
ICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAg
ICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9j
ayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRl
eCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGlu
ZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBVcHNp
bG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9p
bnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0
ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1
dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJv
c2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtpbmc6
XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXgg
NDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRmMmMwY2QzOTk4YjE4
MWI5ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdl
dFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5m
bHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
bV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVz
aEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5vZGUp
OwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hpbGRO
b2RlKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJs
ZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gUHJ1bmUg
YnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBpbGUg
dGltZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIE5vZGUq
IGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVy
YW5kKCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVudCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhp
RGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+dmFs
dWUoKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVmLT52YWx1ZSgpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgTW92SGlu
dCwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksCi0gICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFsdWUo
KS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+
b3BlcmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4aXRPSykKQEAgLTMz
Nyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CiAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdp
biwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCku
b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0g
ZmFsc2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwxOSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0YWNrKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFi
bGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9n
cmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlh
YmxlLT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+b3BlcmFu
ZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9k
ZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQo
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2
YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM4NSw3ICszODUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVmYXVs
dEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQyNSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAgICAgICAgICAgICAgICAg
ICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KTsKIAotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24g
Zm9yICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZvciAi
LCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05v
bmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8ocGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2EzMTY5MTkuLjlhMzJk
NjdhNTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIyLDcgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6
CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1
Y3RGb3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKaW5kZXggYjVhMTFjNTFlZjEwY2Y3YTZiMjMxNzJkMmQ4YmY4ZjY3NWUw
NTJiZC4uNDFlOWM0YjlhY2Q0OTc5YzQyMDFjNmZkYTEwMWZlZThkOTFiOTlmNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE3NzUs
NyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5v
ZGUpCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNl
T1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFi
bGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgp
KSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1p
bmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29uIHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgIG1fc3Rh
dGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBt
X2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVy
YW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJ
bmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtp
XTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQg
dG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5y
ZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRl
YWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+
Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAg
ICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
LAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExv
ZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAt
MTkxOSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVz
KCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxS
ZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7
CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0
MSw1NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25O
YW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFy
Z3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpz
VmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2so
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0
aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1l
bnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXpl
T2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBHUFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRp
bmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdD
b3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2Fs
bCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAv
LyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3Vi
dGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUg
YmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBv
cF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5j
bHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0K
LSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGludDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5n
VGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFy
Z3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3Vt
ZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFy
YXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOwor
ICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5i
cmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNr
KAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2pp
dC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAg
ICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwog
Ci0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRh
LT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwog
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTcz
OTgsMTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJh
cmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0g
ICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5j
aGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgIGlmIChub2Rl
LT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1
bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxz
ZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRD
b3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlz
KTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5n
dGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1l
bnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwot
ICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAv
KiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAgIAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7
CiAgICAgICAgIApAQCAtMTI0NDcsNyArMTI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVD
YWxsRnJhbWUoKSkKICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CiAgICAgZWxzZQotICAgICAgICBhcmd1bWVudENv
dW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCk7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQ7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciksIHJlc3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAppbmRleCBjNjRmOTc4YWRmODVmYmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5
Li4wM2Q0ODM1YmY0YjdhOGRlMDkzOWVmY2ZhMzcwMjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVOZXdSZWdleHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRW
YXJhcmdzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRl
QWN0aXZhdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRz
KE5vZGUqKTsKQEAgLTE2NjksMTUgKzE2NzAsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5
cGVkQXJyYXlTdG9yYWdlKEdQUlJlZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNl
dExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRl
Y29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNv
ZGVSZWcudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0
cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBt
YWNoaW5lUmVnLCBmb3JtYXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2Nh
bChEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX2N1cnJlbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
cmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KSwgZm9ybWF0KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwg
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRp
b25JbmZvJiBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2
ZGJkMGQyYTA1NmRiODEuLjBhZjNmMTcxODE1NDEwZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcApAQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsK
LSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9j
YWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlz
IHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5u
b3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAg
LTE5MTIsNyArMTkxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNv
cmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3Rl
cigpLCBEYXRhRm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQp
OwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgy
NCw2ICszODI0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBp
bGVMb2FkVmFyYXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWVi
NWVhMjZhMzEwNWRkYjhhZmU3NjYyMTYzMzQ0Li43YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZk
YzkzYWM4NmM3YzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExv
Y2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tp
bmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAg
Ly8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2Nl
ZWQuCkBAIC0yMDA3LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAg
ICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1
cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3Jt
YXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTQ0NjQsNiArNDQ2NCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNh
c2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAg
ICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2
YWM3YTdkMzMzZTM5Njc5ZTI2NzU1OTA3NGU0NjRjOWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2
MTVmNjA0Mjc1MjIwNDc3YTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gdHJlYXQgYSB2YXJpYWJsZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFu
IGFjY2VzcyB0byBpdCAoU2V0TG9jYWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhh
bnRvbUxvY2FsKS4KICAgICAgICAgCi0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAg
ICAgICBPcGVyYW5kczxib29sPiB1c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywg
Z3JhcGgoKS5tX3RtcHMsIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhv
c2UgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rl
c1RoYXROZWVkRml4dXAgPSBmYWxzZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDogewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwo
KS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFu
ZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6
IHsKICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xv
Y2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3Vu
dC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFu
ZChkYXRhLT5jb3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFy
dC5pc0xvY2FsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFs
bHkgcmVsaWVzIG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYXNzaWdubWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAx
KS5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS0+bGltaXQ7IGktLTspIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2Nh
bHMuc2V0KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAg
ICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAg
ICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC05Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQo
KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2Vk
TG9jYWxzLnNldChzdGFjay0+bG9jYWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
dXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IApAQCAtMTA4LDIxICsxMDcsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2Vk
TG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xv
Y2FsKCkpOworICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlcigKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAg
ICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkg
KwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xv
Y2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAg
bV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkTG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0
KGkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJ
bmRleChpKSkgewogICAgICAgICAgICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzaXplX3QgbG9jYWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0g
ICAgICAgICAgICBpZiAobG9jYWwgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90
IGluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAg
IGlmIChpbmRleCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJp
YWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2Fs
KCkpOworICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRP
cGVyYW5kcywgYWxsb2NhdGlvbiwgdmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGZvciAoU3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YSkgewotICAgICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkp
IHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAg
ICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwo
KSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFY
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJh
bmQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4o
ZGF0YS0+b3BlcmFuZC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRh
LT5vcGVyYW5kLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5t
YWNoaW5lTG9jYWwgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAg
ICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwg
ZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFw
aC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29w
ZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9j
aygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29w
ZVJlZ2lzdGVyKGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5z
Y29wZVJlZ2lzdGVyKCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1f
aW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFy
aWFibGVEYXRhIGRhdGEgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxG
cmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IGFzc2lnbigKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5k
cywgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5z
aXplKCk7IGFyZ3VtZW50LS07KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYg
cG9zaXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIx
NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAg
ICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxs
b2NhdGlvbiwgZGF0YS0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFs
bG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVTdGFydCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0
b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1
YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29u
c3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3Vs
dC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9j
YXRpb25bcmVzdWx0LnRvTG9jYWwoKV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09
IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKG15QWxsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRl
eCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVk
IG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15
QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlv
bik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMy
Y2U5NjFmZjlhMDcxMmExYTA1MS4uYjQ4YzZmN2YxOTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4
YTcyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVu
Z3RoUmVkdWN0aW9uUGhhc2UuY3BwCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGkt
LTspIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgp
ID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwg
JiYgbm9kZS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0
TG9jYWwgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUs
IEFic3RyYWN0SGVhcChTdGFjaywgbG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIw
NzBiNmVlNmY0ZjhiZjkuLmYxYjFmZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewot
ICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4
ZWN1dGVPU1JFeGl0LCAmdm0pOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuaAppbmRleCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4
MjA1ZDllLi44YjVjM2YwMWE0ODUyMGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07
CiAKIG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3Io
Vk0mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggNjBmYmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1
ZjU3MTNmMWQ3ZS4uNzk2NjVmOGFiODVmYzExMTZkNjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY2hlY2tPcCA9IENoZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNwZWNDZWxsQ2hlY2sgJiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFt
ZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0
aGUgVERaIHZhbHVlLiBUaGUgY2FsbCBlbnRyeXBvaW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFRE
WiwKQEAgLTE2OCw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IAotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2Fs
OworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCkpID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRM
b2NhbDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
c3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9j
YWwpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhh
bmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBt
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4
IDllZTVlMDA3NDA5ZGY1Mjk0YmZjZjUxYjc3NmViOGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUz
ZGMzYzQ2YzBlMjRkNGRhMWNlMWIwY2Y1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCkBAIC00ODMsNyArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNbaV07CiAgICAgICAgICAgICAgICAgQVNTRVJU
KHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAg
ICAgICAgICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxv
Y2stPmlzUGhpSW5kZXgoaSkpCkBAIC01MTksMTAgKzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29y
cy5zaXplKCk7ICsraykgewogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJl
dkJsb2NrID0gYmxvY2stPnByZWRlY2Vzc29yc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9k
ZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmlu
ZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2td
KSwgcHJldk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQs
IGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CkBAIC01MzMsMTEgKzUzMywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2st
PnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNz
b3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9k
ZS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0
NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9k
ZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZO
b2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBv
c2l0aW9ucygKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKTsKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3Np
dGlvbnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRp
b25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBP
cGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kp
IHsKICAgICAgICAgICAgICAgICBWQUxJREFURSgodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBA
IC02NjgsMjQgKzY2NCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
bXlSZWZDb3VudHMuZ2V0KG5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgYmxvY2spLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgp
ID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkp
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAg
ICAgICAgICAgICAgICAvLyBPbmx5IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1h
eSBiZSBtdWx0aXBsZSBTZXRMb2NhbHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBv
ZiBmbHVzaGluZy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAo
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERl
ZmluaXRlbHk6CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQu
IEl0J3Mgb2sgdG8gaGF2ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2Ft
ZQogICAgICAgICAgICAgICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERl
ZmluaXRlbHkgZm9yIHRoYXQgbG9jYWwuCi0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7Cisg
ICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFu
ZCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5YmU6CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtOTY4LDI2ICs5NjQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0
YUxvZyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZh
bGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2sp
CisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2lj
QmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAg
ZGF0YUxvZyhsb2NhbCwgIiBpbiBudWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhv
cGVyYW5kLCAiIGluIG51bGwgQmxvY2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAg
ICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlv
bkJsb2NrKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2Nr
LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhs
b2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxv
Y2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2Nr
LCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBv
cnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNp
Y0Jsb2NrKiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAg
ICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNv
dXJjZUJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwg
IiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5jcHAKaW5kZXggMjZmMDMyOWQ1NDMwNDE1NzIwNWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVj
ZGM5MmUyYzI0MTBhMzVjMDEzMTMxZmRjM2I3Y2NjMjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBA
IC00MSwxMSArNDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVz
cGFjZSB7CiAKLW5hbWVzcGFjZSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewot
c3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
KEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGlu
ZyIpCkBAIC01Niw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2
YXJhcmdzIGZvcndhcmRpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAg
ICAgICB9CkBAIC04OCw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBj
YWxscyBpbnRvIHRoaXMgZnVuY3Rpb24gdG8gYmUgcmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBp
biBhIHNpbXBsZSBPKG4pIG1hbm5lci4KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0
ZSA9IGJsb2NrLT5hdChjYW5kaWRhdGVOb2RlSW5kZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJc
biIpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVy
IENyZWF0ZUNsb25lZEFyZ3VtZW50cyBpZiB0aGUgYnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3
ICsxMDMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBb
Jl0gewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTEx
Nyw5ICsxMTUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKS5pc1RtcCgpLCAiV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQg
YSB0bXAgcmVmZXJyaW5nIHRvIGFuIGFyZ3VtZW50cyBvYmplY3QuIik7CiAgICAgICAgICAgICAg
ICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2
YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAg
ICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxldmFu
dExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBDaGVja1ZhcmFyZ3M6CkBAIC0xNDAsMTMgKzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgc2F3RXNjYXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgaWYgKHNhd0VzY2FwZSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
CiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJ
bmRleCA9IG5vZGVJbmRleDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNh
bmRpZGF0ZSB8fCBub2RlLT5jaGlsZDIoKSA9PSBjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzTG9hZGVkRnJvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKCF2YWxpZEdldEJ5T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBi
dXR0ZXJmbHkgOiBjYW5kaWRhdGVCdXR0ZXJmbGllcykgewogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC51c2VzKG5vZGUsIGJ1dHRlcmZseSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgQnV0dGVyZmx5IGVzY2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTIzNSwxMSArMjM1LDExIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9w
ZXJhbmRzKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2Rl
SW5kZXggKyAxKSwKLSAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5n
ICIsIHJlZywgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFu
dExvY2FscyksICJcbiIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgb3BlcmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJl
c3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSBy
ZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9j
YWxzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0t
XSA9IHJlbGV2YW50TG9jYWxzLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWxldmFudExvY2Fscy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNl
ckluZGV4ID0gIiwgbGFzdFVzZXJJbmRleCwgIiwgIiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgp
LCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBE
ZXRlcm1pbmUgaWYgYmV0d2VlbiB0aGUgY2FuZGlkYXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJl
IGlzIGFueQpAQCAtMjYzLDE2ICsyNjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2Ug
TW92SGludDoKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGNhc2Ug
S2lsbFN0YWNrOgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90
KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBu
b2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgUHV0U3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFj
a1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2Fu
ZGlkYXRlLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAg
Y2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xv
dChjYW5kaWRhdGUsIG5vZGUtPmxvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5k
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxMyAr
Mjk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNh
bmRpZGF0ZSwgaGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
ZXNJbnRlcmZlcmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9lc0ludGVy
ZmVyZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9k
ZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CkBAIC0zMTEsNyArMzEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gV2UgY2FuIG1ha2UgdGhpcyB3b3JrLgotICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBXaWxsIGRvIGZvcndhcmRpbmchXG4iKTsKICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgCkBAIC0zNDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0
aGVzZS4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1
bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRB
cmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBu
b2RlLT5vcmlnaW4sIC8qIGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKEZvcndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4
ZWJmZmI0MzVlZDRkYmY2MDJiZDYyYWVkNGMzNDMyZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMw
ODEyNWI0ZTZlY2M4OGE4N2M3ZDE3OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFi
bGVBY2Nlc3NEYXRhKCkKLSAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihT
cGVjTm9uZSkKKyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRB
d2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3Vs
ZE5ldmVyVW5ib3goZmFsc2UpCkBAIC00NSwxMCArNDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRh
OjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVB
Y2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAg
IDogbV9sb2NhbChsb2NhbCkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxl
QWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1f
cHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3Bl
Y05vbmUpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAs
IG1fc2hvdWxkTmV2ZXJVbmJveChmYWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZChmYWxzZSkKQEAgLTg3LDcgKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6
OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCB0aGlzIGZhY2lsaXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhN
RTogbWFrZSB0aGlzIHdvcmsgZm9yIGFyZ3VtZW50cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3Vt
ZW50KCkpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCiAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBw
cmVkaWN0aW9uLCB0aGVuIHRoaXMgZG9lc24ndApAQCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFy
aWFibGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsK
ICAgICBBU1NFUlQoaXNSb290KCkpOwogICAgICAgICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3Vt
ZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJveCgpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50
KCkgfHwgc2hvdWxkTmV2ZXJVbmJveCgpCiAgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVj
b2RlVXNlc0FzQXJyYXlJbmRleCkpCiAgICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9y
bWF0U3RhdGUobV9kb3VibGVGb3JtYXRTdGF0ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAg
IApAQCAtMTc2LDcgKzE3NSw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJl
c2VudEludDUySW1wbCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXZSBw
dW50IGZvciBtYWNoaW5lIGFyZ3VtZW50cy4KLSAgICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkp
CisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICAvLyBUaGUgYXJndW1lbnQtYXdhcmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJn
ZXMgYWxsIG9mIGFuIChpbmxpbmVkIG9yIG1hY2hpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEy
MDQzZmEyNTRlNjA5NDIzMjAxNGEyODRlLi5iZTJmYjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1
NTczZmNlZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0Rh
dGEgOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFZhcmlhYmxlQWNjZXNzRGF0YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2Nh
bCk7CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCgpCisgICAgT3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2Fs
OworICAgICAgICBBU1NFUlQobV9vcGVyYW5kID09IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAg
ICAgcmV0dXJuIG1fb3BlcmFuZDsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBt
YWNoaW5lTG9jYWwoKQpAQCAtMjA4LDEwICsyMDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0
aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERG
RyBzcGFjZQogICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2ln
bmlmaWNhbnQuCiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwog
ICAgIFNwZWN1bGF0ZWRUeXBlIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFu
ZCBtX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5v
ZGVGbGFncyBtX2ZsYWdzOwogCiAgICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAppbmRleCAyOGU0Mzdm
ZDUxZmVhNDk2OWViNDhlY2YwYzA1MDhmMGEzN2RmODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBj
NDNiZDM2ZWQ3MmUzZjljZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudC5jcHAKQEAgLTU5LDExICs1OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgi
LCBpZCgpLCAiKSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAg
ICAgICAgb3V0LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIo
KSwgIikiKTsKKyAgICAgICAgb3V0LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJh
bmQoKSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAg
ICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5l
UmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBieXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAg
ICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29k
ZToiLCBvcGVyYW5kKCksCiAgICAgICAgICAgICAiLCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0
YUZvcm1hdCgpKSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3
MjIzZGQ2ZjY5OWM2ZGJhZDZkMjI0NjdjOTgzNC4uYzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFh
YzQ4MTM4ZDM0ZTNmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50LmgKQEAgLTY4LDYgKzY4LDEwIEBAIGVudW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50
OF90IHsKIH07CiAKIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIFZhcmlhYmxl
UmVwcmVzZW50YXRpb24oKSAKKyAgICAgICAgOiBvcGVyYW5kKCkgCisgICAgeyB9CisKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHI7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVn
aXN0ZXJJRCBmcHI7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5p
b24gVmFyaWFibGVSZXByZXNlbnRhdGlvbiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBheWxvYWRHUFI7CiAgICAgfSBwYWlyOwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0
dWFsUmVnOworICAgIE9wZXJhbmQgb3BlcmFuZDsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQg
ewpAQCAtMTYyLDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwog
ICAgICAgICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRh
dGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9
IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlcjsKICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAg
ICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0g
V1RGTW92ZSh3aGljaCk7CkBAIC0xODEsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0
IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxl
RXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2gudmly
dHVhbFJlZyA9IG1hY2hpbmVSZWcub2Zmc2V0KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50
YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcg
PSBieXRlY29kZVJlZy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9
IGJ5dGVjb2RlT3BlcmFuZDsKICAgICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsK
ICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3do
aWNoID0gV1RGTW92ZSh3aGljaCk7CkBAIC0xOTUsMTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBldmVudDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQg
bW92SGludChNaW5pZmllZElEIGlkLCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAg
c3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVj
b2RlUmVnKQogICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hp
Y2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFy
aWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRp
b24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRh
dGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVSZWc7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhp
bnRFdmVudDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwogICAgICAg
ICBldmVudC5tX3JlcHJlc2VudGF0aW9uID0gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0y
NjUsMTMgKzI2OSwxMyBAQCBwdWJsaWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0
ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwg
fHwgbV9raW5kID09IFNwaWxsKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3Jl
cHJlc2VudGF0aW9uLmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNl
bnRhdGlvbi5nZXQoKS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWdpc3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5k
IG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2Nh
bEV2ZW50IHx8IG1fa2luZCA9PSBNb3ZIaW50RXZlbnQpOwotICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJl
dHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnaXN0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQz
OWJiMDk0YzRiODY2ZTY3ZWQzZTJlZTFiNDg5NmFiYjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIx
YTM1YWY4ZDIxZGUzMmI1ZGRhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFy
aWFibGVFdmVudFN0cmVhbTo6bG9nRXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7
CiAgICAgZGF0YUxvZ0YoInNlcSMldToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7
CiAgICAgZXZlbnQuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgIGRhdGFMb2dGKCIgIik7Cisg
ICAgZGF0YUxvZ0xuKCIgIik7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBA
QCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFw
aCwKICAgICB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVj
b3ZlcmllcywgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNw
YW5zKSBjb25zdAogeworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsK
IAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52
YWxpZEluZGV4OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBA
IC0xMzAsMzcgKzEzMiw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0
cnVjdCgKICAgICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVk
IGkpIHsKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVz
LnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAg
ICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXgoaSAtIDEpLm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292
ZXJpZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKTsKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50
IG1pbk9mZnNldCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAg
dW5kZWZpbmVkT3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0
LCBpIC0gZmlyc3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxp
ZEluZGV4OwogICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1
bnNpZ25lZCBpKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2Yg
YXJndW1lbnRzIGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFj
ZW50IG9wZXJhbmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZh
bGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5p
c0FyZ3VtZW50KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4
ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZv
ckluZGV4KGkpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFu
ZFNwYW4oaSk7CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkg
ewogICAgICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRl
ZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAg
ICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZv
ckluZGV4KGkpLmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsg
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSAr
IDE7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQp
LnRvTG9jYWwoKSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSAr
IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZh
cmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAg
bnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAg
IC8vIENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMg
bXVzdCBiZSBhbiBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ug
YWxsIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAog
ICAgIC8vIHJlZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVj
b3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBudW1WYXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVy
ZSBiZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3Zlcmll
cyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBu
dW1WYXJpYWJsZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVj
b3Zlcmllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0g
VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
LnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBudW1WYXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQg
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsK
ICAgICAKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRl
IGFuZCBleGVjdXRlIHRoZSBldmVudHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJh
bmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAg
IE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbnVtVmFyaWFibGVzLCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBv
cGVyYW5kU291cmNlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0g
VmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlm
aWVkR2VuZXJhdGlvbkluZm8+IGdlbmVyYXRpb25JbmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGFydEluZGV4OyBpIDwgaW5kZXg7ICsraSkgewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2
ZW50JiBldmVudCA9IGF0KGkpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vz
c2luZyBldmVudCAiLCBldmVudCk7CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAg
ICAgICAgIGNhc2UgUmVzZXQ6CiAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4
LDIxICsyMDYsMjMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3Qo
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVu
dDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVj
b2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFu
ZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkp
CisgICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5k
KCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFNldExvY2FsRXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFz
T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJh
bmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJj
ZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1h
dCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5v
cGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZl
bnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVn
aXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJPcGVyYW5kIHNvdXJjZXM6ICIsIG9wZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAv
LyBTdGVwIDM6IENvbXB1dGUgdmFsdWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMg
PSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVt
VmFyaWFibGVzKTsKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
PihPcGVyYW5kc0xpa2UsIG9wZXJhbmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2Um
IHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlh
bGx5UmVjb3ZlcmFibGUoKSkgewpAQCAtMjMwLDYgKzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxl
RXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBn
cmFwaC5hdChzb3VyY2UuaWQoKSk7CiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5m
byA9IGdlbmVyYXRpb25JbmZvcy5nZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAoIWluZm8u
YWxpdmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZh
bHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSksICIgaXMgZGVhZC4iKTsKICAgICAgICAg
ICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZp
bmVkKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNl
cGFyYXRlZCkKICAgICAgICAgICAgICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAt
MjM3LDYgKzI0OCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0
KAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1
ZVJlY292ZXJpZXNbaV0sIG5vZGUpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNv
bnN0YW50LiIpOwogICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6
OlNlcGFyYXRlZCkgewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYm
IG5vZGUtPmNvbnN0YW50KCkgPT0ganNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAg
cmVjb3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAgLTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0
dWFsUmVnKSwgaW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1h
dCk7CiAgICAgfQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0
ZWQpCiAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6
ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmgKaW5kZXggMDE1NzMwMDdlZGRkZDcwZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4u
ZTllNDNhYmZlYzQ4NWZlYzdlNjYzMTUxYzFjMjJlYzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkg
KzQyLDEyIEBAIHN0cnVjdCBVbmRlZmluZWRPcGVyYW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJp
YWJsZUV2ZW50U3RyZWFtIDogcHVibGljIFZlY3RvcjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFw
cGVuZEFuZExvZyhjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKICAgICB7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgbG9nRXZlbnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQo
ZXZlbnQpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAppbmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGVi
ZjFkLi4zMmNiYzEwNzZkZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkx
LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFy
YXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAg
ICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZh
bHVlVG9JbnQzMjoKICAgICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMz
MjRiODE0M2QyYTk1NGYwOGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFh
YjdkY2I5ODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkK
LSAgICA6IG1fYnl0ZWNvZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291
bnQoMCkKKyAgICA6IG1fZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNi
NzgxY2ZiODliMTFjMzlmOThmN2E5YWJhM2QuLmQzNTkxMzU0ZjE1YTAyZWZiMTdmNzg5Zjk3ZTk4
NTljMTZiOWJmODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuY2xlYXJTdGFja0ZyYW1lKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFt
ZVNpemUoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2Rl
QmxvY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAg
ICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9p
bnRJbmRleCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5r
ZXlzKCkpIHsKQEAgLTI3NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAv
LyBXZSBkb24ndCB3YW50IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBp
dHNlbGYgYmVjYXVzZQogICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBn
ZXQgY29sbGVjdGVkLgotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50
UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0
YWNrIE92ZXJmbG93IENoZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9n
cmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpA
QCAtMzU1LDcgKzM1NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1l
bnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1h
cCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpKSk7CkBAIC0xMjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENh
bGxFdmFsOgogICAgICAgICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFy
Z3NMZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdz
OgogICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE5NTMsNyArMTk1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNW
YWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAg
IG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0
YUJ1ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1
dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUt
PnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9
CiAKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3Bl
cmFuZCk7CiAgICAgICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXND
b25jcmV0ZShkYXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYs
MTMgKzc5MjksMTMgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUo
KQogICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIo
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAg
ICB9CiAKICAgICB2b2lkIGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBj
YWxsZWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0
cihjYWxsZWUsIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1f
b3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC03OTQ3LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBjb21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAg
ICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlR2V0U2NvcGUoKQpAQCAtOTU0Miw1MSArOTU0NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBz
ZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2Fk
VmFyYXJncygpCisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVl
IGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAg
ICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0
aW9uU2l6ZU9mVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMs
CiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAK
LSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFu
IGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAv
LyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3Vi
dGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4g
VGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0
aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAot
ICAgICAgICAKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFk
ZChsZW5ndGgsIG1fb3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAg
ICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1f
b3V0LmFib3ZlKGxlbmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQz
MihsZW5ndGhJbmNsdWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFy
YXJncygpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAg
ICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBW
YXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFi
b3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7
Ci0gICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3Ro
SW5jbHVkaW5nVGhpcyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNv
bnN0SW50MzIoZGF0YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0
aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAg
IAotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElm
IG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlv
bkxvYWRWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBh
IFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAg
IExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3Vi
KGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxG
cmFtZSksCisgICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3Rh
cnQpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KDMpKTsKICAgICAgICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJh
dGlvbkxvYWRWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAg
bV9vdXQuY2FzdFRvSW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0
SW50MzIoZGF0YS0+b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdU
aGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgp
KSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxk
KCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3
QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZm
ZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAg
ICBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwpAQCAtOTU5NSw1MCArOTU5OCwyNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEo
KSkKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSkKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsg
Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAg
QXJndW1lbnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxp
bmVDYWxsRnJhbWUpOwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwot
ICAgICAgICAgICAgaWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAg
ICAgICBrbm93bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxl
bmd0aCA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3Ro
SW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBs
b2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBv
cGVyYXRpb25zLgotICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAg
ICAgbGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwot
ICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7Ci0KLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0
aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3Vt
ZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJl
KGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50
MzIoZGF0YS0+b2Zmc2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxl
ck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9v
dXQuY29uc3RJbnQzMigxKSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxl
bmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
TFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApIHsKKyAgICAgICAgICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1Yihj
YWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2Vs
ZWN0KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJv
KSwgZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlBy
ZWRpY3RhYmxlKTsKKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0
aCA9IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAg
ICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBu
dWxscHRyLAogICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0
b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQp
KTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
ZGF0YS0+b2Zmc2V0OwogICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNT
dGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAg
TFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVl
KCk7CiAKQEAgLTk2OTcsNjUgKzk2NzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3Zl
LCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVl
OworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2lj
QmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5n
dGggPSBtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxl
ck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7
Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50
c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkp
LCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBs
YXJnZXJMZW5ndGhSZXN1bHQpOworICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0Lmdy
ZWF0ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5n
dGgsIG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsK
ICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAg
IHsKLSAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVs
dEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElu
bGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFy
Z3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVu
dHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tU3ByZWFkKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3Vt
ZW50cyA9IDA7Ci0gICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAg
ICAgICAgYXV0byBjb2xsZWN0QXJndW1lbnRDb3VudCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1
dG8gc2VsZiwgTm9kZSogdGFyZ2V0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQt
Pm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewotICAgICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5j
aGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkKSB7Ci0gICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJp
dFZlY3RvcigpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJn
ZXQtPm51bUNoaWxkcmVuKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVj
dG9yLT5nZXQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJn
Q2hpbGQodGFyZ2V0LCBpKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICArK251bWJlck9mU3RhdGljQXJndW1lbnRzOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFu
ZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwot
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVu
ZChjYWNoZWRTcHJlYWRMZW5ndGhzLmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAg
ICAgICB9KS5pdGVyYXRvci0+dmFsdWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0
QXJndW1lbnRDb3VudChhcmd1bWVudHMpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAg
ICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxl
bmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3Ro
KTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBzcGVjdWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0
YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCi0gICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9
IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMsICZjYWNoZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3Rh
cnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVl
IHsKKyAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywg
JnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgp
IC0+IExWYWx1ZSB7CiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJl
YWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCks
IHN0b3JlSW5kZXgpOwogCkBAIC05Nzk4LDggKzk3MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3Vy
Y2VTdGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0
LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRM
ZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNh
bGxGcmFtZSkpOworICAgICAgICAgICAgYXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRh
cmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3Vy
Y2VTdGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApOworICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1f
b3V0Lnplcm9FeHRQdHIoZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVD
YWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxvb3AgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAg
cHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBz
LlNoYWRvd0NoaWNrZW5fUGFja2V0X2ZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9v
dXQubG9hZFB0cihhZGRyZXNzRm9yKDApKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5f
UGFja2V0X2NhbGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0
cihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hh
ZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQu
bG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMu
U2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOworICAgICAgICBtX291dC5zdG9yZVB0
cihtX291dC5sb2FkUHRyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7
CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hp
Y2tlbl9QYWNrZXRfc2NvcGUpOwogICAgIH0KICAgICAKQEAgLTEyMzQ2LDcgKzEyMjgyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KGZyYW1lLT5jYWxsZWVSZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAg
cmV0dXJuIHdlYWtQb2ludGVyKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2Vs
bCgpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAg
fQogICAgIAogICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgdW5zaWduZWQgb2Zmc2V0ID0gMCkKQEAgLTE3NjExLDcgKzE3NTQ3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxT
dGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKICAgICAgICAg
bV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRl
eC5iaXRzKCkpLAotICAgICAgICAgICAgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKTsKKyAgICAgICAgICAgIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpKTsKICNpZiAhVVNFKEJVSUxUSU5fRlJBTUVfQUREUkVTUykgfHwgIUFT
U0VSVF9ESVNBQkxFRAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQu
YWJzb2x1dGUoJnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAjZW5kaWYKQEAgLTE3NzE5LDcgKzE3NjU1
LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4
aXREZXNjcmlwdG9ycy5hbGxvYygKICAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9m
aWxlLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1
bWVudHMoKSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9m
TG9jYWxzKCkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZMb2NhbHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJl
ck9mVG1wcygpKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0xNzgyNCwx
NSArMTc3NjEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92
YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
ZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1h
cC5tX2xvY2Fsc1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZh
bGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkKICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1f
cGxhbi5tb2RlKCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwg
bm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwg
YXZhaWxhYmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2lu
KS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYg
bV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQorICAgICAgICAg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0
ZWNvZGUgbG9jYWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWls
YWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0
YSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBl
eGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CiAg
ICAgICAgICAgICBpZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQpA
QCAtMTgxMzIsMzkgKzE4MDY5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5h
bHJlYWR5UmVnaXN0ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5nZXQoKSk7CiAg
ICAgfQogICAgIAotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQg
b3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NG
b3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAg
ICAgewotICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxl
c1tvcGVyYW5kXSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwg
bV9oZWFwcy52YXJpYWJsZXNbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9m
ZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBp
bnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3Bl
cmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3Bl
cmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZh
bHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJh
c2UsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJh
c2UsIG9wZXJhbmQsIFRhZ09mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNz
Rm9yKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIg
YWRkcmVzc0ZvcihPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZz
ZXQpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
LCBvZmZzZXQpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBpZiAo
b3BlcmFuZC5pc0xvY2FsKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1
cmVkLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihtX2NhbGxGcmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybiBhZGRyZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBhZGRyZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLCBvZmZzZXQpOwogICAgIH0KLSAg
ICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIg
cGF5bG9hZEZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZv
cihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBh
eWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2lu
dGVyIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVu
dHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4
IDkzMzE3NzEwZjZkMDY4NjA5MTliYzAwMjUzMTNhMTMyMTkwNDQ5MTkuLjA5MWU3ZjNjOWI0OTgz
NDA3NmE4ZDZmOTE3NDJjY2I1Y2FkNWVhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgK
ICAgICAgICAgZGF0YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsK
ICAgICAKICAgICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygp
OyBhcmd1bWVudC0tOykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5V
bnNhZmVKU1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkuYXNhblVuc2FmZUpTVmFs
dWUoKTsKICAgICAgICAgT3B0aW9uYWw8SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFs
dWVzLmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFsdWUg
JiYgdmFsdWVPblN0YWNrID09IHJlY29uc3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJndW1l
bnQpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuY3BwCmluZGV4IDA5OTU4ZDJjNGY5YTVkODliNWZiYmI2NWY4NmJiNmRhYmNkZjE4ZTMu
LjA0Yzg1Nzk5ZTRkNDY5MjNhMzE4NjcxOGUxOWYyNGJkZmZkYWJhNGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcApAQCAtNDcsMTAgKzQ3LDEwIEBAIHVzaW5nIG5h
bWVzcGFjZSBERkc7CiAKIE9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcigKICAg
ICBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlIHZhbHVlUHJvZmlsZSwKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtYmVyT2ZMb2NhbHMpCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2ln
bmVkIG51bWJlck9mTG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpCiAgICAgOiBtX3Byb2Zp
bGVEYXRhRm9ybWF0KHByb2ZpbGVEYXRhRm9ybWF0KQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFs
dWVQcm9maWxlKQotICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9j
YWxzKQorICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzLCBu
dW1iZXJPZlRtcHMpCiB7CiB9CiAKQEAgLTExNyw1ICsxMTcsMyBAQCBDb2RlTG9jYXRpb25KdW1w
PEpTSW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJs
b2NrKiBmdAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAppbmRleCBkYTg3
Y2NmMzI3M2ZlNGJlMzYwNjgzYjhhZjNiYmY1MTZkNjIyNWViLi5mZDdmOWYwNWJjNDg5YzFmNmFl
Y2UwOTdhZDhhNGQxZTI3YjgwMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaApAQCAtNjksNyArNjksNyBAQCBzdHJ1Y3QgT1NSRXhpdEhhbmRsZTsKIHN0cnVjdCBPU1JF
eGl0RGVzY3JpcHRvciB7CiAgICAgT1NSRXhpdERlc2NyaXB0b3IoCiAgICAgICAgIERhdGFGb3Jt
YXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsCi0gICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7
CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxv
Y2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKTsKIAogICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVu
dCB0byB0aGUgZXhpdCBjYWxsIG1heSBiZSBhIHZhbHVlIHdlIHdpc2ggdG8gcHJvZmlsZS4KICAg
ICAvLyBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSBmb3JtYXQgd2lsbCBiZSBub3QgSW52YWxpZCBh
bmQgd2UnbGwgaGF2ZSBhCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKaW5kZXggNjY0ZDNiOTg4YWY3ZWE4M2Y2ZmI4MmJjYjNhOGMwYTg4MTc2
ZWU3Mi4uYTM3ODQxMGRhOWI4MDE1NzI0YTlkYzE2YzNmZTFhZWMwODA1NWQ0OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1
Y3RzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRl
ICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRG
b3JPcGVyYW5kLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtMzcsMTAgKzM4LDExIEBA
CiAjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5j
bHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
LmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKQEAgLTQ3NCwxNiArNDc2LDUyIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZN
JiB2bSwgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAK
ICAgICBzaXplX3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNl
bGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyAg
ICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9p
bnQoKSkgeworICAgICAgICBhdXRvKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIGV4aXQubV9kZXNj
cmlwdG9yLT5tX3ZhbHVlcy50bXBJbmRleCgwKTsKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOwor
ICAgICAgICBqaXQucHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAg
ICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5dGVjb2Rl
SW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFr
ZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAgICAgICAg
IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsK
KworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1l
LCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29u
c3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2Rl
T3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29k
ZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkp
IHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9j
YXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxp
bmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2Fs
bEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVP
cmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAg
ICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7Cisg
ICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIE5vdyBnZXQgc3RhdGUgb3V0IG9mIHRoZSBzY3Jh
dGNoIGJ1ZmZlciBhbmQgcGxhY2UgaXQgYmFjayBpbnRvIHRoZSBzdGFjay4gVGhlIHZhbHVlcyBh
cmUKICAgICAvLyBhbHJlYWR5IHJlYm94ZWQgc28gd2UganVzdCBtb3ZlIHRoZW0uCiAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7IGlu
ZGV4LS07KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBleGl0Lm1fZGVzY3JpcHRv
ci0+bV92YWx1ZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4
KGluZGV4KTsKKworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0
YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQor
ICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0
aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVnKSk7CisgICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKSkpOwogICAgIH0KICAgICAKICAgICBoYW5kbGVFeGl0Q291bnRzKHZtLCBqaXQs
IGV4aXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKaW5k
ZXggN2Y3Y2QzODMyNDk2MWE4ZmY0ZTQ3MjU5YTg4NGRlODZkNTY0YjExNy4uMTAyYzFlNmExYmQ5
ZWIzYjQ3MTMzNzQ0Zjg0M2VjNjRkNjNhMThmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgZXh0ZXJuICJDIiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUihKU0dsb2Jh
bE9iamVjdCoKICAgICAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1
dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFs
bG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgog
ICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIGNvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5v
ZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAg
ICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFi
bGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAg
ICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKaW5kZXggNzQ5MzNkYzYwNTE1YzVkYTAwZWExOGZj
N2Q1ZGIzYWQ5Y2U1ZTljZi4uZDU3ZmIxZWVhODA0NGEzNGI3OTE3NjhhOTA5NzY5ODk5OGFjMzM5
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1NSwxNSAr
NjU1LDM3IEBAIExWYWx1ZSBPdXRwdXQ6Om5vdFplcm82NChMVmFsdWUgdmFsdWUpCiAgICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBv
cmlnaW4oKSwgdmFsdWUsIGludDY0WmVybyk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OnNlbGVjdChM
VmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKQorTFZhbHVlIE91dHB1
dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgU2VsZWN0
UHJlZGljdGFiaWxpdHkgcHJlZGljdGFiaWxpdHkpCiB7CiAgICAgaWYgKHZhbHVlLT5oYXNJbnQz
MigpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+YXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJu
IHRha2VuOworICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBub3RUYWtlbjsKKyAgICAgICAgICAgIHJldHVybiByaWdodDsKICAgICB9Ci0g
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVj
dCwgb3JpZ2luKCksIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOworCisgICAgaWYgKHByZWRpY3Rh
YmlsaXR5ID09IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSkKKyAgICAgICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwg
b3JpZ2luKCksIHZhbHVlLCBsZWZ0LCByaWdodCk7CisKKyAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBuZXdCbG9jaygpOworICAgIExCYXNpY0Jsb2NrIGxlZnRUYWtlbkJsb2NrID0gbmV3
QmxvY2soKTsKKyAgICBMQmFzaWNCbG9jayByaWdodFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOwor
CisgICAgbV9ibG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBtX3Byb2MsIEIz
OjpCcmFuY2gsIG9yaWdpbigpLCB2YWx1ZSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGxlZnRU
YWtlbkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UmlnaHRM
aWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAor
ICAgICAgICBGcmVxdWVudGVkQmxvY2socmlnaHRUYWtlbkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAh
PSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6TGVmdExpa2VseSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3Jt
YWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSkpOworCisgICAgTFZhbHVlIHBoaSA9IGNvbnRpbnVh
dGlvbi0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6UGhpLCBsZWZ0LT50eXBlKCks
IG9yaWdpbigpKTsKKworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2lsb25W
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgbGVmdCwgcGhpKTsKKyAgICBsZWZ0VGFrZW5CbG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJl
cXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOworCisgICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBl
bmROZXc8QjM6OlVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcmlnaHQsIHBoaSk7Cisg
ICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVt
cCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICBt
X2Jsb2NrID0gY29udGludWF0aW9uOworICAgIHJldHVybiBwaGk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6OmF0b21pY1hjaGdBZGQoTFZhbHVlIG9wZXJhbmQsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBX
aWR0aCB3aWR0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0
ZWY3ZTA2MGY5MzYyYjNiZGNhMGZkNDZhMDNhYTU3MGNhMmUuLjRjMDJiMzQwODUxNDZmN2RmMDI1
NjI3ZDVmZjMxYzc4MTBkOGZiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKICNp
bmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMQ29tbW9u
VmFsdWVzLmgiCisjaW5jbHVkZSAiRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCIKICNpbmNsdWRl
ICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTFN3aXRjaENhc2UuaCIKICNpbmNsdWRlICJGVExU
eXBlZFBvaW50ZXIuaCIKQEAgLTM2NSw3ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHRl
c3RJc1plcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNOdWxsKGJp
dEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAgICAgTFZhbHVlIHRlc3ROb25aZXJvUHRyKExWYWx1ZSB2
YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdE51bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7
IH0KIAotICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1
ZSBub3RUYWtlbik7CisgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtl
biwgTFZhbHVlIG5vdFRha2VuLCBTZWxlY3RQcmVkaWN0YWJpbGl0eSA9IFNlbGVjdFByZWRpY3Rh
YmlsaXR5OjpOb3RQcmVkaWN0YWJsZSk7CiAgICAgCiAgICAgLy8gVGhlc2UgYXJlIHJlbGF4ZWQg
YXRvbWljcyBieSBkZWZhdWx0LiBVc2UgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVG
ZW5jZWRBY2Nlc3MoKSB3aXRoIGEKICAgICAvLyBub24tbnVsbCBoZWFwIHRvIG1ha2UgdGhlbSBz
ZXFfY3N0IGZlbmNlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2VsZWN0UHJlZGljdGFiaWxpdHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2Vs
ZWN0UHJlZGljdGFiaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTg1M2JhOTg1MjJhYWFjNjFiODQ5OTU1
Mjc5NGE1MDkzMGM3ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQzo6RlRMIHsKKworZW51bSBjbGFzcyBT
ZWxlY3RQcmVkaWN0YWJpbGl0eSA6IHVpbnQ4X3QgeworICAgIE5vdFByZWRpY3RhYmxlLAorICAg
IFByZWRpY3RhYmxlLAorICAgIExlZnRMaWtlbHksCisgICAgUmlnaHRMaWtlbHksCit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2OTM0YzNmMGQz
NzkxZjY0YmE0Mjk2M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3YTY3MGQyNTgw
NGFhOGNhZTIyYjNhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigK
ICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1cm4gY2FsbE9w
ZXJhdGlvbih2bSwgdXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9u
LCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdkZDYzMWFjZDRj
Y2JlY2QxNGIyNGNjNWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBACisjIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50CisgICAgYXR0
cl9yZWFkZXIgOnVzZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJfcmVhZGVyIDpu
YW1lCisgICAgYXR0cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBp
bmRleCwgdG1wcykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRleCA9IGluZGV4
CisgICAgICAgIEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09
IDp1c2UgfQorICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVz
ZURlZiA9PSA6ZGVmaW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhuYW1lc3BhY2Up
CisgICAgICAgIEVPRjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9OgorRU9GCisg
ICAgZW5kCitlbmQKKworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlhbGl6ZShvcGNv
ZGUsIHRtcHMsIGNoZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAg
IEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXBfd2l0
aF9pbmRleCB7IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhuYW1lLCBpbmRl
eCwgdG1wcykgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAgIEBjaGVja3Bv
aW50cy5lYWNoIGRvIHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAgICBFT0Y8LS0K
K0JpdE1hcDxtYXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBpdGFsaXplZF9u
YW1lfSh1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3BvaW50KSB7CisK
KyAgICB9Cit9CitFT0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL09wY29kZS5yYgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNlYmI0ZjBhYjI0
NDg1Li5jZmQ5ZGYxNTExNDdhODZkYTRiYzc1YmU0NmE2NzgyNWUyNTM3NWYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAsNyBAQCBjbGFz
cyBPcGNvZGUKICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVyIDptZXRhZGF0
YQogICAgIGF0dHJfcmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hlY2twb2ludHMK
IAogICAgIG1vZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXplOjpOYXJyb3ci
CkBAIC00NSwxMiArNDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAogICAgIGVuZAog
Ci0gICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0
YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5h
bWUsIGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycywgdG1wcywg
Y2hlY2twb2ludHMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAgICBAbmFtZSA9
IG5hbWUKICAgICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBAbWV0YWRhdGEg
PSBNZXRhZGF0YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwogICAgICAgICBA
YXJncyA9IGFyZ3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwgaW5kZXh8IEFy
Z3VtZW50Lm5ldyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFyZ3MubmlsPwor
ICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMu
bWFwIHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5u
aWw/CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEyMSw4IEBAIGNs
YXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDog
cHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9CisgICAg
I3tjaGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTEzMiw2ICsx
MzcsMTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBv
cGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMK
KyAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJlbnVtIENo
ZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9p
bnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9m
Q2hlY2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAgICBkZWYg
dGVtcHMKKyAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVudW0gVG1w
cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAg
I3t0bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYg
ZW1pdHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJ
RFR5cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29k
ZUlEVHlwZSwgMCkKQEAgLTIwMCw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9w
Y29kZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5l
cmF0b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7
dHlwZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3Bv
aW50cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBp
ZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25X
aWRlT3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6Oldp
ZGUzMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlv
bi5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAy
MDRhYzc1OWUxM2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRj
MjNjYzBlYmVjMTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAK
ICAgZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxm
LCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFd
LCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYs
IG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0s
IGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpj
aGVja3BvaW50c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29k
ZXMsIGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAKaW5kZXggZjYzOTRhYzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5NTM2YTYwMC4u
ZWY3ZjZjOTRmNDE2OGI0YTI4NDYwNTNhNWQwMTNiZTExMjIwZGVmYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2Fs
bEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGwKICAgICBBU1NFUlQoZ2xvYmFsRXhlYy0+aXNEZXBy
ZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSk7CiB9CiAKLWJvb2wgQ2FsbEZyYW1lOjpjYWxs
U2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0Citib29sIENhbGxGcmFtZTo6Y2FsbFNp
dGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygp
KTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKQEAgLTkwLDEyICs5MCwx
MiBAQCBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29u
c3QKIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCk7CisgICAg
cmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KV0udGFnKCk7CiB9CiAKIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVD
YWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudF0udW5zYWZlVGFnKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udW5zYWZlVGFnKCk7CiB9CiAK
IENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKQEAgLTEwNSw3
ICsxMDUsNyBAQCBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0
CiAKIFNVUFBSRVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRl
SW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSAmIChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkgPj4gQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0KSkp
OwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTExNywzMyArMTE3LDM0IEBAIGNvbnN0
IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogdm9pZCBDYWxsRnJh
bWU6OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlKEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2cGMp
KSk7Ci0gICAgdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IGNhbGxT
aXRlLmJpdHMoKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCldLnRhZygpID0gY2FsbFNpdGUuYml0cygpOwogfQogCiB1bnNpZ25lZCBDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VS
VChjb2RlQmxvY2soKSk7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0
KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJl
dHVybiBjb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXQoY3VycmVudFZQQygpKTsgICAgIAogfQog
CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFt
ZTo6Y3VycmVudFZQQygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVj
b2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkp
OwogICAgIHJldHVybiBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbFNpdGVCaXRz
QXNCeXRlY29kZU9mZnNldCgpKS5wdHIoKTsKIH0KIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJl
bnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlKGNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0
ZS5iaXRzKCkpOworICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KV0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRW
UEMoKSA9PSB2cGMpOwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0
ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgQVNT
RVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwogICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0
cygpOwogfQogCkBAIC0xNjUsOCArMTY2LDggQEAgQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5
dGVjb2RlSW5kZXgoKQogICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgfQogI2VuZGlmCi0gICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0
KCkpOwotICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZz
ZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CisgICAg
cmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7CiB9CiAKIENvZGVPcmlnaW4g
Q2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAgLTE4MCw3ICsxODEsNyBAQCBDb2RlT3JpZ2luIENh
bGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9y
aWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNv
ZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICByZXR1cm4gQ29k
ZU9yaWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpKTsKIH0KIAogUmVnaXN0ZXIq
IENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCBjZmI3NzE4NTYwMzk5MzM5MTAwNGZjMTMy
MTE4Mzg0MjNjNWRjNmE5Li42NDQ5MGU3YTcwN2VlYjAxYmEwN2FjYTMzMjYyM2FkZTEzZTBjOTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCisjaW5jbHVkZSA8d3RmL0VudW1DbGFzc09w
ZXJhdG9yT3ZlcmxvYWRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtNDYsMTggKzQ3LDI0
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsK
ICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQotICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgeyB9CisgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNl
dCgpKQorICAgICAgICB7IAorICAgICAgICAgICAgQVNTRVJUKCFieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSk7CisgICAgICAgIH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2Rl
SW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9
PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBj
b25zdCB7IHJldHVybiBtX2JpdHM7IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRz
KCkpOyB9CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENhbGxTaXRlSW5kZXgodWludDMyX3Qg
Yml0cykKKyAgICAgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQogICAgIHByaXZh
dGU6Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50
MzJfdCBtX2JpdHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfTsKICAgICB9OwogCiAgICAg
Y2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBA
IC02NSw3ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4Ojpmcm9tQml0cyhiaXRzKSkKKyAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChi
aXRzKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNzgsMjQgKzg1LDI3IEBAIG5hbWVzcGFj
ZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJu
IHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAg
ICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAg
YWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVyblBDOworICAgICAg
ICBhbGlnbmFzKENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBz
aXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9m
KFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJl
Y3QuIik7CiAKLSAgICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsK
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY2FsbGVlID0gY29kZUJsb2NrICsgMTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYXJndW1lbnRDb3VudCA9IGNhbGxlZSArIDE7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQg
KyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdEFyZ3VtZW50ID0gdGhpc0Fy
Z3VtZW50ICsgMTsKKyAgICBlbnVtIGNsYXNzIENhbGxGcmFtZVNsb3QgOiBpbnQgeworICAgICAg
ICBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsCisgICAgICAg
IGNhbGxlZSA9IGNvZGVCbG9jayArIDEsCisgICAgICAgIGFyZ3VtZW50Q291bnQgPSBjYWxsZWUg
KyAxLAorICAgICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50ICsgMSwKKyAgICAgICAg
Zmlyc3RBcmd1bWVudCA9IHRoaXNBcmd1bWVudCArIDEsCiAgICAgfTsKIAorICAgIE9WRVJMT0FE
X01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNs
b3QpCisgICAgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lU
SF9JTlRFR1JBTFMoQ2FsbEZyYW1lU2xvdCkKKwogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJl
bnQgc3RhdGUgb2Ygc2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rpb25zLgogICAgIGNsYXNzIENhbGxGcmFtZSA6IHByaXZh
dGUgUmVnaXN0ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIDE7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IHN0
YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgKyAxOwogCiAgICAg
ICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lm
aWMgY2lyY3Vtc3RhbmNlcwogICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBj
YWxsZWUgY2FuJ3QgYmUgYSBXYXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMTYsMTAg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFu
ZCBpZiBpdCdzIG5vdCwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNW
YWx1ZSBndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNP
YmplY3QqIGpzQ2FsbGVlKCkgY29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29u
c3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRl
cigpKTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNh
blVuc2FmZVBvaW50ZXIoKSk7IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7
IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpXS5wb2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1
bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBh
ZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2Nr
Kio+KHRoaXMgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9j
ayoqIGFkZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2Rl
QmxvY2sqKj4odGhpcyArIHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSk7IH0KICAgICAgICAgaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2Rl
QmxvY2soKSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJl
Z2lzdGVyT2Zmc2V0KSBjb25zdDsKIApAQCAtMTQ2LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
IHsKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDYWxsZXJGcmFtZUFuZFBDLCByZXR1cm5QQyk7IH0KICAgICAgICAgQWJz
dHJhY3RQQyBhYnN0cmFjdFJldHVyblBDKFZNJiB2bSkgeyByZXR1cm4gQWJzdHJhY3RQQyh2bSwg
dGhpcyk7IH0KIAotICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkg
Y29uc3Q7CisgICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpIGNvbnN0
OwogICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0Owog
CiAgICAgICAgIHVuc2lnbmVkIGNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3Q7CkBAIC0xODIsMTUg
KzE5MiwxMyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXBy
ZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxl
ZSogZ2xvYmFsQ2FsbGVlKTsKIAogICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUg
Y29kZWZyYW1lIChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdp
c3RlciYgcihpbnQpOwogICAgICAgICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAg
ICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lz
dGVyJiB1bmNoZWNrZWRSKGludCk7CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBr
bm93biBub24tY29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJl
Z2lzdGVyKTsKIAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFm
dGVyIGNhcHR1cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4p
CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSAtIDE7IH0KLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50XS5wYXlsb2FkKCk7IH0KKyAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1
bWVudE9mZnNldChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFy
Z3VtZW50ICsgYXJndW1lbnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCArIGFyZ3VtZW50KTsgfQogCkBAIC0yMzksNyArMjQ3LDcgQEAgbmFtZXNwYWNlIEpT
QyAgewogCiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3Vt
ZW50KTsKIAotICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNl
dEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQog
CiAgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsg
fQogICAgICAgICBib29sIGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QK
QEAgLTI1MSwxMCArMjU5LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0
YWNrT3ZlcmZsb3dGcmFtZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29u
c3Q7CiAKLSAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291
bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50XS5wYXlsb2FkKCkgPSBjb3VudDsgfQorICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMp
W3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnBheWxvYWQo
KSA9IGNvdW50OyB9CiAgICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwog
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZv
aWQgc2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBD
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAg
ICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1
cm5QQyA9IHZhbHVlOyB9CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
SW5saW5lcy5oCmluZGV4IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEu
LmVlN2VjMmFiMTA0YTdhMzRkOThiMGY0MzhmNjQ0YzJkY2ExYzUxNjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAt
MzIsNTAgKzMyLDM5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENh
bGxGcmFtZTo6cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlz
LT5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbmRleCkpCi0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZj
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRl
eF07Ci19Ci0KIGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpCiB7Ci0gICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVy
JiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2lu
ZGV4XTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVy
KHJlZykpOworICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdp
c3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAg
cmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0
YW50KCkpOworICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1Zh
bHVlIENhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdAogewogICAgIEFT
U0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6
OmNhbGxlZV0uanNWYWx1ZSgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKV0uanNWYWx1ZSgpOwogfQogCiBpbmxpbmUgSlNPYmplY3QqIENh
bGxGcmFtZTo6anNDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNt
KCkpOwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7Cisg
ICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5v
YmplY3QoKTsKIH0KIAogaW5saW5lIENvZGVCbG9jayogQ2FsbEZyYW1lOjpjb2RlQmxvY2soKSBj
b25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0
ZXI6OmNvZGVCbG9jaygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUg
U1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sqIENhbGxGcmFtZTo6dW5zYWZlQ29kZUJsb2NrKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVy
Ojphc2FuVW5zYWZlQ29kZUJsb2NrKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50
PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9j
aygpOwogfQogCiBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6bGV4aWNhbEdsb2Jh
bE9iamVjdChWTSYgdm0pIGNvbnN0CkBAIC0xMDIsMTIgKzkxLDEyIEBAIGlubGluZSBib29sIENh
bGxGcmFtZTo6aXNXYXNtRnJhbWUoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNl
dENhbGxlZShKU09iamVjdCogY2FsbGVlKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4o
dGhpcylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGNhbGxlZTsKKyAgICBzdGF0aWNfY2FzdDxS
ZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0g
PSBjYWxsZWU7CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKENvZGVC
bG9jayogY29kZUJsb2NrKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrXSA9IGNvZGVCbG9jazsKKyAgICBzdGF0aWNfY2FzdDxSZWdp
c3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0g
PSBjb2RlQmxvY2s7CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0U2NvcGUoaW50IHNj
b3BlUmVnaXN0ZXJPZmZzZXQsIEpTU2NvcGUqIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MjA5YzNhMWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZmNDZi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0No
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBvZmZz
ZXQpIAorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVp
bnQ2NF90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZzZXRd
KTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDMy
X3QpKQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50
MzJfdD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2Yo
VCkgPT0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90KSk7
CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OworICAgIHZvaWQqIG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7CisgICAg
dWludDY0X3QgdG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBkYWE5
NGM4OWY5MDA1YTk5NzJmYzBlM2IwMmViODkzZDIxMWNkZDk3Li5jMTlkNTBkMzQ1ZDQ5ZmU0ZmY3
MmQ1NTJjMWY0MzhhMTk3ZTRiZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJC
eXRlY29kZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0
Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGly
ZWN0QXJndW1lbnRzLmgiCkBAIC0xMjMsNyArMTI0LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNpdGVJ
bmRleCBjYWxsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsK
ICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tl
ZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5j
aGVja2VkUihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNjb3Bl
KCk7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0gY2Fs
bGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93RnVu
Y3Rpb25Db250ZXh0ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigp
IHx8IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7CkBA
IC0yMTMsNiArMjE0LDkgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+IG1heEFy
Z3VtZW50cykKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSk7CisKICAgICBpZiAobGVuZ3RoID49IGZpcnN0VmFyQXJnT2Zmc2V0KQogICAgICAgICBs
ZW5ndGggLT0gZmlyc3RWYXJBcmdPZmZzZXQ7CiAgICAgZWxzZQpAQCAtMjQ5LDcgKzI1Myw3IEBA
IHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBs
b2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRz
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKK3ZvaWQgbG9hZFZhcmFyZ3MoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgSlNW
YWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQogewogICAg
IGlmIChVTkxJS0VMWSghYXJndW1lbnRzLmlzQ2VsbCgpKSB8fCAhbGVuZ3RoKQogICAgICAgICBy
ZXR1cm47CkBAIC0yNjEsMzEgKzI2NSwzMSBAQCB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaQogICAg
IHN3aXRjaCAoY2VsbC0+dHlwZSgpKSB7CiAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgog
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMq
PihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVs
ZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVu
dHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVz
dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTY29wZWRBcmd1
bWVudHNUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxTY29w
ZWRBcmd1bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxT
Y29wZWRBcmd1bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmly
c3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50
cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5n
dGgpOworICAgICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRv
QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgp
OwogICAgICAgICByZXR1cm47IAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGFyZ3Vt
ZW50cy5pc09iamVjdCgpKTsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwogICAgICAgICBpZiAoaXNKU0FycmF5KG9iamVjdCkpIHsKICAgICAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0
KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnRE
ZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVj
dCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNl
dCwgbGVuZ3RoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB1bnNp
Z25lZCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoICYmIG9iamVjdC0+Y2FuR2V0
SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkpID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNl
dCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gb2JqZWN0LT5nZXRJbmRleFF1
aWNrbHkoaSArIG9mZnNldCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGkgKyBv
ZmZzZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
LSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB2YWx1ZTsK
KyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB2YWx1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfSB9CkBAIC0yOTcsOCArMzAxLDcgQEAgdm9pZCBzZXR1cFZhcmFy
Z3NGcmFtZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsbEYKICAgICAKICAgICBsb2FkVmFyYXJncygKICAgICAgICAgZ2xvYmFsT2JqZWN0LAot
ICAgICAgICBjYWxsRnJhbWUsCi0gICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldCgwKSwKKyAgICAgICAgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2Fs
bEZyYW1lLT5yKGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgw
KSkpLAogICAgICAgICBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAKICAgICBuZXdD
YWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGxlbmd0aCArIDEpOwpAQCAt
NTM4LDggKzU0MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+
Y29kZUJsb2NrKCk7CiAKICAgICAgICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYg
KCFtX2lzVGVybWluYXRpb24pIHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAg
ICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c3VwcG9ydCBleGNlcHRpb24gaGFuZGxpbmcgaW4gY2hlY2twb2ludHMuCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgICAgICAgICBpZiAobV9yZXR1cm5QQyA9PSAmTExJbnQ6OmNoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludCkKKyAgICAgICAgICAgICAgICBt
X2NvZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7
CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxv
Y2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1f
aGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
QEAgLTU2MSw2ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5k
aW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAorICAgICAgICBt
X3JldHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC01OTcsNiArNjA2LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2Nv
ZGVCbG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0
IHZvaWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxl
ckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUs
IEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY2LDcgKzg3Niw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U09iamVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpCisg
ICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkg
PiBtYXhBcmd1bWVudHMpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpKTsKIAogICAgIGlmIChpc0pT
Q2FsbCkgewpAQCAtOTM1LDcgKzk0NSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0
ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAgICAg
fQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
aWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7CisgICAgaWYgKFVOTElL
RUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVu
dHMpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKaW5kZXggODZjMzI0NjkyMDRl
OWFlNTkxMWZlY2VhOTAyYWU5N2NhYjU1ZDNhMC4uZmYxYjRlODYxMDRjOTYyNTk3NzllMjUyNzky
MmFmMzM0N2NmMjk0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFyZ3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5z
aWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZN
JiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJf
dCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNl
ZFN0YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1Zh
bHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQg
bG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBK
U1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZv
aWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxs
ZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZp
cnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdz
RnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBD
YWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50
cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9p
ZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSog
ZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApp
bmRleCBkNzFhNTk3MWRkYzhmMGY1ZWE2NzhkNWZjZTQ4ZTM5NmUyMmE4NzU0Li44MThmNGRiMmI2
N2RlMzkzYTE3OTg0ZGQ1MDY4YTg0MmQyMWZiMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBA
IHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBj
YWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxs
RnJhbWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0
ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVC
bG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CkBAIC00ODMs
NyArNDgzLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIEluZGVudGVyIGluZGVudCwgV1RGOjpGdW5jdGlvbjwKICAgICAgICAgaWYgKGNvZGVCbG9j
ayAmJiAhaXNJbmxpbmVkKSB7CiAgICAgICAgICAgICBpbmRlbnQrKzsKIAotICAgICAgICAgICAg
aWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSkgeworICAgICAg
ICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKSB7CiAg
ICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY2FsbEZyYW1lLT5i
eXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KGluZGVudCwgYnl0ZWNv
ZGVJbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSwgIlxuIik7
CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAppbmRleCAyMjAwOWM1ZmQyYmEyMjdkNDdjZmU4NTQ5MzlmNTJkZWYyZDcxYmMy
Li5lMDZjYjQ5YjI5NWRlNWVjN2MxOWRiMjRlNzMzODliYTM1NWVkZWE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTY0NywyOCArNjQ3LDI4IEBA
IHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihW
aXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBl
bnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhm
cm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQotICAg
IHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihpbnQgZW50cnksIEdQUlJlZyB0bywg
R1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8s
IEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Cisg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHRvKTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyNjQoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0g
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlcjY0KFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZDY0KEFkZHJl
c3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkNjQo
QWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAg
ICAgfQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAg
ICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
ZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZv
aWQqIHZhbHVlLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
dm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAogICAgIHZvaWQgZW1pdEdl
dENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlcklEIHRvKQpAQCAtNjk2
LDE5ICs2OTYsMTkgQEAgcHVibGljOgogICAgIC8vIGNhbGxlcidzIGZyYW1lIHBvaW50ZXIuIE9u
IHNvbWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVlIGlzIHJlc3BvbnNpYmxlIGZvciBwdXNoaW5nIHRo
ZQogICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBjb250YWluaW5nIHRoZSByZXR1cm4gYWRkcmVzcyBp
biB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50
cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJS
ZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIo
ZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgp
KSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
KSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkpOwogICAgIH0KICNlbHNlCi0gICAgdm9p
ZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZy
b20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJC
ZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsK
LSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50
cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVT
dGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAg
ICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1
ZShUcnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxs
RnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdG9yZVB0cih0YWcs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVs
dGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTE0OCw5ICsxMTQ4LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1
cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIGFk
ZHJlc3NGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlz
VG1wKCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBAIC0xMTYzLDkgKzExNjQsMTAgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAg
ICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KTsKICAgICB9Ci0g
ICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNz
IHRhZ0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNzgsMzAgKzEx
ODAsMzEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQo
KSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2
aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNl
dCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisg
ICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAg
ICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJh
bmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4g
cGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICAvLyBB
Y2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgc3RhdGljIEFkZHJlc3Mg
Y2FsbGVlRnJhbWVTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1l
U2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzbG90ID49
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBDYWxs
ZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpKTsKKyAgICAgICAgQVNTRVJUKHNsb3Qub2Zm
c2V0KCkgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0
dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xv
dCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycykub2Zmc2V0KCkpOwogICAgIH0K
IAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KICAgICBzdGF0
aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1
bWVudCkub2Zmc2V0KCkpOworICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUZyYW1lVGFnU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVy
biBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCisgICAg
c3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xv
dCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNl
dChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CkBAIC0xMjE4LDcgKzEyMjEsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZUNhbGxlckZyYW1lKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoMCkud2l0aE9mZnNldChDYWxsRnJhbWU6OmNhbGxl
ckZyYW1lT2Zmc2V0KCkpOworICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxS
ZWdpc3RlcigwKSkud2l0aE9mZnNldChDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihSZWdpc3RlclNldCBw
cmVzZXJ2ZWQpCkBAIC0xNTI3LDcgKzE1MzAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBB
U1NFUlQoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKTsK
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgcmV0
dXJuIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7CiAgICAgICAgIHJldHVybiBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKaW5kZXggOTY5MGUwOWM4YjU3
MjcwZGVmN2Y4N2E0NmNjMmI1N2U0Zjc2MjAzZS4uMzk1ZDkxMzNiY2Q5NDA3NTNmODg4MGI5ODM3
YjVjNjRkNGM1NjQyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxG
cmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGEK
ICNlbmRpZgogCiAgICAgQVNTRVJUKCFkYXRhLmNhbGxlZS5pc0luSlNTdGFjaygpIHx8IGRhdGEu
Y2FsbGVlLnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKSk7Ci0gICAgYWRkTmV3KFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBkYXRhLmNhbGxlZSk7CisgICAgYWRkTmV3
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgZGF0YS5jYWxsZWUpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKCFkYXRh
LmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRhLmFyZ3NbaV0udmlydHVhbFJlZ2lzdGVyKCku
aXNMb2NhbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuaAppbmRleCA2MjQzOWJkZjM0NDNiODdiZTk5OTYwMmZkOWMzZWJjOTZhZjZhOWY1Li40YzZh
YTMyZjRmNTg3NjM4MzEwOTM4ZjAwZjkyYzA5OThkNjZmOTQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCkBAIC0xMjgsNyArMTI4LDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVW5kZWNpZGVkKCkpOwogICAgICAgICBBU1NF
UlQoIWdldE5ldyhqc1ZhbHVlUmVncykpOwotICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVk
UmVjb3ZlcnkgeyBnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
IH07CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhDYWxs
RnJhbWVTbG90OjpjYWxsZWUpIH07CiAgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeSk7CiAg
ICAgICAgIGFkZE5ldyhqc1ZhbHVlUmVncywgY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCkpOwog
ICAgIH0KQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhc3N1bWVDYWxsZWVJ
c0NlbGwoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBDYWNoZWRSZWNv
dmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hl
ZFJlY292ZXJ5ID0gKmdldE5ldyhDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwogICAgICAgICBzd2l0
Y2ggKGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkpIHsKICAgICAg
ICAgY2FzZSBJblBhaXI6CiAgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCmluZGV4IDI4MDMyYTIxYWFjYjlhMmQ5MzIyODVmZTFmOTY1YWRlM2UyN2E4MGEu
Ljg3MzE1ZWY4NDc3YWMxMmE3M2M1NzBhZWY5MTI1MGM1NjlhNGYxNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaApAQCAtMzMxLDE2ICszMzEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9w
U3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwg
TkVxIH07CiAgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7Ci0gICAg
ICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCi0gICAg
ICAgIHZvaWQgZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOwot
ICAgICAgICB2b2lkIGVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBG
UFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lkIGVtaXRMb2FkSW50MzJUb0RvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKICAgICAgICAgZW51bSBXcml0
ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFz
ZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwogICAgICAg
ICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQgYmVmb3JlIGFueSBz
Y3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJlIHRoZSBzYW1lIGFz
IGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMuCi0gICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUp
OwotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
VmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmll
ck1vZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0
aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2
YWlsYWJsZSBmb3IKQEAgLTQwNCwzMiArNDA0LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9Owog
Ci0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVn
cyBkc3QpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNW
YWx1ZVJlZ3Mgc3JjKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7CisgICAgICAgIHZvaWQgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOwogCi0g
ICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpOwotICAgICAgICBk
b3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOworICAgICAgICBpbnQzMl90
IGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsKKyAgICAgICAgZG91
YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsKIAogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGJvb2wgZ2V0T3BlcmFuZENvbnN0YW50SW50KGlu
dCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsKKyAgICAgICAgYm9v
bCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOwogCi0gICAgICAgIHZvaWQgZW1p
dExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZyk7Ci0gICAgICAgIHZvaWQgZW1pdExv
YWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgdm9pZCBl
bWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKKyAgICAgICAgdm9p
ZCBlbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOwog
CiAgICAgICAgIHZvaWQgZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQoaW50IGluZGV4LCBS
ZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxs
RnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQyKGludCBpbmRleDEsIFJlZ2lz
dGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0
YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZChWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQg
YmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZDIoVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKIAotICAgICAg
ICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9p
ZCBlbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklE
IGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIo
aW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2Up
OwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBpbmRleCwgVHJ1c3RlZEltbTMyIHBh
eWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9y
ZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBm
YWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lkIGVt
aXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3Rl
cklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50
MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMy
ID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3Rlciwg
VHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOworICAgICAg
ICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQs
IGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQm9vbChW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9IGZh
bHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJl
Z2lzdGVySUQgdmFsdWUpOwogCi0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcp
OworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90
UGF0aChjb25zdCBJZGVudGlmaWVyKik7CiAKQEAgLTQzOCwxNyArNDM4LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cnVjdGlv
biAqLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdElu
dDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0cnVlLCBib29sIG9wMklzSW5SZWdpc3Rl
cnMgPSB0cnVlKTsKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgdm9pZCBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKICAgICAgICAg
dm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwg
UmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKTsKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJ
RCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKTsKLSAgICAgICAg
dm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJl
Z1QwKTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVD
ZWxsKGludCBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNW
YWx1ZTMyXzY0ICovID0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGVtaXRT
dG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAgICAg
ICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKICAgICAg
ICAgewogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwog
ICAgICAgICB9CkBAIC00NTYsMjkgKzQ0OSwyOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SnVtcCBlbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmSlNDZWxsKFJlZ2lzdGVySUQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsK
LSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgaW50
IFZSZWcpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklELCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZOb3RJbnQoUmVn
aXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKICAgICAgICAgUGF0Y2hh
YmxlSnVtcCBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2
b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQg
c2NyYXRjaCk7CiAKLSAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2VW
UmVnLCBjb25zdCBJZGVudGlmaWVyKik7CisgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQ
YXRoKFZpcnR1YWxSZWdpc3RlciBiYXNlUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CiAKICNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChp
bnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwor
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGlu
dCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7
CiAKQEAgLTY4NSw4ICs2NzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShp
bnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRSZXNvbHZl
Q2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKKyAgICAgICAgdm9pZCBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZv
aWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJl
Zyk7CkBAIC02OTQsMjAgKzY4NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHRh
ZywgR1BSUmVnIHBheWxvYWQpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihK
U1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAjZW5kaWYKLSAg
ICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
KTsKKyAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hw
b2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRv
U2V0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFu
ZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwg
V2F0Y2hwb2ludFNldCoqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVn
aXN0ZXIoaW50IGRzdCk7CisgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMpOwotICAgICAgICBib29sIGlzT3BlcmFu
ZENvbnN0YW50SW50KGludCBzcmMpOwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hh
cihpbnQgc3JjKTsKKyAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIp
OwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgog
ICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBj
b25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24p
OwpAQCAtNzM0LDcgKzcyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJU
KCFpdGVyLT5mcm9tLmlzU2V0KCkpOwogICAgICAgICAgICAgKytpdGVyOwogICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHZvaWQgbGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2Rl
SW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCiAgICAgICAgICAgICBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCk7CiAKQEAgLTc1NCwxMyArNzQ3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhS
ZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogI2VuZGlmCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRh
ZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlv
blRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4K
LSAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTgwNCw3ICs3OTcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5j
dGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQpOwpAQCAt
ODY0LDcgKzg1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhpbnQgc3JjMSwgaW50IHNy
YzIpOworICAgICAgICB2b2lkIHByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXMoVmlydHVhbFJlZ2lz
dGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNB
TVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAKaW5kZXggMzQ1ODc0NGZiY2RkNTNhY2Y5YTQzMzI4YmM0OTRiMGZlZGNiODkzZi4uM2EzMmMz
MjYxODlmYWIxOTdkN2NmOWY5MWQ1ZjZiNGIzMTAyMDJjNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC0xNTgsOCArMTU4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamJlbG93ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BVbnNpZ25lZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0x
NzIsMTMgKzE3MiwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIs
IHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29k
ZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50
IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCkBAIC0yMzAsMTMgKzIzMCwxMyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKG9wMSwgb3Ay
LCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCByZWdUMCk7CkBAIC0yNTYsMTMgKzI1NiwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBp
bnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgZW1p
dF9jb21wYXJlVW5zaWduZWRJbXBsKGRzdCwgb3AxLCBvcDIsIGNvbmRpdGlvbik7CiB9CiAKLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9w
MiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CkBAIC0yODQsMTMgKzI4NCwxMyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBp
dGVyKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3Ax
LCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogCiAgICAgLy8g
V2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNs
b3cgcGF0aDoKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90CiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsK
LSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDApOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5
dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTQxNSw5ICs0
MTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTW9kPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9
IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgog
ICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC00OTEsOSArNDkxLDkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CiB2b2lk
IEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHByb2ZpbGluZ1BvbGljeSkKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhz
Lm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01MzgsOCArNTM4LDggQEAgdm9pZCBKSVQ6OmVt
aXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGkKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTU5OSw5ICs1
OTksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZh
c3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIEpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3I6OlNoaWZ0VHlwZSBzbmlwcGV0U2hpZnRUeXBlKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zm
c2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTY3NCw4ICs2NzQsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgTgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2Zp
bGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgLy8g
QXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMg
YW5kIGRzdC4KQEAgLTcyNCw5ICs3MjQsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTgogdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMs
IGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24g
cHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTc5OSw3ICs3OTksNyBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7CkBAIC04NDUsOSArODQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKgogICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zm
c2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTkwNiw5ICs5MDYsOSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCBiZjIzMDZiY2U0ZDU2ZjEwOWEwMzYx
OGIzNDA3MmZjNTdjMGU1YWMzLi5hZjllZWI2Mjc5Y2NlNGQxMWI5MzRhZTFmMWI1YzZlNGQ2NzIy
Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTUxLDcgKzUxLDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02Niw3ICs2Niw3IEBAIEpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQog
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fYXJn
dik7CiAKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2Zp
bGluZygpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDApOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNl
dCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgcmVnVDApOwog
ICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwog
ICAgICAgICBzdG9yZTMyKHJlZ1QwLCBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJv
ZmlsZS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwpAQCAtODUsOSArODUsOSBAQCBz
dGQ6OmVuYWJsZV9pZl90PAogLCB2b2lkPgogSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBpbnQgdGhpc1ZhbHVlID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5
dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFs
dWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CisgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0
ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhIHZpcnR1
YWwgcmVnaXN0ZXIgaWYgd2UgbmV2ZXIgdXNlIGl0IGFzIG9uZS4uLgogICAgIGludCBmaXJzdFZh
ckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDEpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgY2Fs
bGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoKICAgICAg
ICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCBiN2QwY2EyMzU4
YmU1MjUwMThhM2Y0ZTk2MTZkOWNiODQ4ZmZmNTIxLi5lMDdhODMzZDRjODUzYjljN2EwMmRlOGI3
NDYwMWRmMzA2NmJhZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKE9wdGlvbnM6OmJyZWFrT25UaHJvdygpKSB7CiAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdG9wSlNDYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1lICIsIFJhd1BvaW50ZXIodG9wSlNDYWxs
RnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsIGNvZGVCbG9jaywgIlxuIik7Ci0gICAgICAgIENS
QVNIKCk7CisgICAgICAgIFdURkJyZWFrcG9pbnRUcmFwKCk7CiAgICAgfQogICAgIAogICAgIGlm
IChhdXRvKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCAyMjE0OWM5YmQxYjhlYzExODEyY2JlMGI4NTQx
YmVlOTNiMTBhYjM0Li5jNjZjMWIxMTkwMzY4NTFjMjcyZDBkOGEyNGViZTM5ZTMxMTc2NGVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtNDgsMTkgKzQ4LDIwIEBA
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6ZW1pdExvYWRGb3JB
cnJheU1vZGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERv
dWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNE
b3VibGUoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRD
b25zdGFudE9wZXJhbmQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSk7CisgICAgQVNTRVJUKHNyYy5pc0Nv
bnN0YW50KCkpOwogICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KQogeworICAgIEFTU0VSVChlbnRyeS5pc0hlYWRlcigpKTsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KGVudHJ5KSk7CiAgICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CkBAIC0xNDMs
NyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGkKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE1NSw3
ICsxNTYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
ID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CkBAIC0xNjcsOSArMTY4LDkgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmUKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlh
dGUodlJlZykpCisgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShyZWcp
KQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTI4NCw5ICsyODUsOSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiAjZW5kaWYKICNlbmRpZgogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudENoYXIoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgp
KS0+bGVuZ3RoKCkgPT0gMTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQpAQCAtMzYz
LDI2ICszNjQsMjYgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShB
cnJheVByb2ZpbGUqIHByb2ZpbGUpCiAgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9CiAKLUFM
V0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQor
QUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50
MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRE
b3VibGUoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRJbml0UmVnaXN0ZXIoaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBzdG9yZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQg
dGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1v
dmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS50YWcoKSksIHRhZyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zOTAsOSArMzkxLDkgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQogICAgIGxvYWQzMih0YWdGb3IoaW5k
ZXgpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2Fk
KFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKIHsKLSAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGlu
ZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQw
NiwxMzYgKzQwNywxMzMgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChjb25zdCBKU1ZhbHVl
JiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIG1vdmUoSW1tMzIo
di50YWcoKSksIHRhZyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAg
ICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpT
VmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1p
dFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwog
CiAgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCBw
YXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcoaW5kZXgsIHRhZyk7CisgICAgICAgIGVtaXRM
b2FkUGF5bG9hZChyZWcsIHBheWxvYWQpOworICAgICAgICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsg
aW5kZXggfTsKICAgICBpZiAocGF5bG9hZCA9PSBiYXNlKSB7IC8vIGF2b2lkIHN0b21waW5nIGJh
c2UKLSAgICAgICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcpOwotICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICAgICAgbG9hZDMy
KHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcs
IGJhc2UpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWQzMihw
YXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IodGFy
Z2V0LCBiYXNlKSwgdGFnKTsKKyAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXls
b2FkKTsKKyAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJ
RCBwYXlsb2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxv
YWQyKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJl
Z2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIs
IFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKIHsKLSAgICBlbWl0TG9hZChp
bmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxv
YWQxKTsKKyAgICBlbWl0TG9hZChyZWcyLCB0YWcyLCBwYXlsb2FkMik7CisgICAgZW1pdExvYWQo
cmVnMSwgdGFnMSwgcGF5bG9hZDEpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0g
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJl
c3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJU
b0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
ZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0g
bV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBjaGFyKiBieXRl
UG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZpbkNvbnN0YW50UG9vbCk7CiAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyhieXRlUG9pbnRlciArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlKTsKICAgICB9
IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZvcihpbmRleCksIHZh
bHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZvcihyZWcpLCB2YWx1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJ
RCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0
YXJnZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQs
IGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0
b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHRhZywg
dGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMy
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7
CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJv
b2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7
Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihw
YXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkp
OworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0Zv
cihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKGludCBpbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQoraW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmRleElzQ2VsbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgp
KTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRl
eElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJv
b2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsK
ICAgICBpZiAoIWluZGV4SXNCb29sKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQor
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBS
ZWdpc3RlcklEIHZhbHVlKQogewotICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGlu
ZGV4KSk7CisgICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IocmVnKSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFu
dCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQogewot
ICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIoSW1tMzIo
Y29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9y
ZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHRhcmdldCwgYmFzZSkpOworICAgIHN0
b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsK
KyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmly
dHVhbFJlZ2lzdGVySW5kZXgpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlz
S25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgp
KQorICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1w
SWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgs
IFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsK
LSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFs
UmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRhZykpOwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQm
IG9wLCBpbnQzMl90JiBjb25zdGFudCkKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBp
bnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSkgewogICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFz
SW50MzIoKTsKQEAgLTU1NSwxMSArNTUzLDExIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omdl
dE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90CiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20g
dGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAg
aWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsK
QEAgLTU3MSw0NyArNTY5LDMyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgbG9hZDY0KGFkZHJlc3NG
b3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVS
ZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgZHN0LnBheWxvYWRH
UFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCi17Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCksIGRzdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3Qx
LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQogewogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJl
Z2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhzcmMxLm9mZnNldCgpLCBkc3QxLCBzcmMyLm9mZnNldCgpLCBkc3QyKTsKLX0KLQotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwg
UmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3Rv
cmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20p
Ci17Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qub2Zmc2V0KCksIGZyb20pOwotfQot
CiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdp
c3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAg
IG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC02MjksMjggKzYxMiwyOCBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIGlu
dCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKICAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewot
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZElt
bVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRy
ZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChp
bmRleCkpIHsKLSAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KGluZGV4KSk7Ci0g
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRl
eCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAg
ICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChyZWcpKTsKKyAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKHJlZykuYXNJbnQzMigpKSwgdmFs
dWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9y
KGluZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShhZGRyZXNzRm9y
KHJlZyksIHZhbHVlKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6OlBhdGNoYWJsZUp1bXAgSklU
OjplbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQgcmVnKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggN2NmYTA5NWYwMGQxN2UxNDExYmU5Y2Zi
ODBmODA4MDZmNzg4ZjZjMS4uNjI2MzJkYTg0YWZlZjk3ODIxMTkwM2M0ODZkMjE5YTFlOWE3ZTVh
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC01NiwxMCAr
NTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNzcsNyAr
NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVuZD4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJh
bWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CkBAIC0xMTAs
NyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1
bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogICAgIH0K
IH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEu
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEyOSw5ICsxMjksOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5z
dGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50
IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsK
IApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IHByb3RvID0gYnl0ZWNv
ZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKICAg
ICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0
aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBz
aW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNl
IGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5l
cmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBA
IC0yMDQsOCArMjA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29u
c3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKQEAgLTIxNyw4
ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKQEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKQEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CkBAIC0yNzQsOCArMjc0LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFn
UmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4ICsyODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5
cGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC0zMDcs
OCArMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAog
ICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1p
dGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29k
ZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICAKQEAgLTM2MCwxNSArMzYwLDE1
IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCks
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwg
cmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2
YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCiAgICAg
Ly8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9y
IGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCkBAIC0zNzcsNyArMzc3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICB4b3I2NChUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzkwLDE0ICszOTAsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOwot
ICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBAIC00MjEsNyArNDIxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5l
ZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpA
QCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
am51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRl
ZmluZWRPck51bGw+KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3Rh
bnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEpTVmFsdWUgc3BlY2lhbFBv
aW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAg
ICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgCkBAIC00ODUsMTggKzQ4NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MTAsMjYgKzUxMCwyNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OwogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0
KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAg
IGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBA
IC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KQEAgLTU0OCw5
ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxlT3BTdHJp
Y3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogICAgIApAQCAtNTkyLDggKzU5
Miw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBpbnQgc3Jj
MSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9y
aHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKIApAQCAtNjUwLDgg
KzY1MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19u
dW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIGlu
dCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
ICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwpAQCAtNjY0
LDggKzY2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIGludCBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTY4NCwyMCArNjg0LDIw
IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgaW50IGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC03MjgsMTAgKzcyOCwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3Rv
cmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJl
Z1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBF
eGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlLm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUpOwogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRv
aW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRh
Lm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBt
X2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTc0OSw3ICs3NDksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBK
U1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CkBAIC03NjYsMTAg
Kzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgaW50IGN1cnJl
bnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1f
ZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJ
bW0+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAg
ICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGlu
ZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
U2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKICAgICBz
aXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBk
ZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
ZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFi
bGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsKICAgICBzaXplX3QgdGFi
bGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zm
c2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9m
ZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRp
bmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMs
IHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBU
YWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpA
QCAtODM0LDggKzgzNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwpAQCAtODY3LDggKzg2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxs
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTkwMyw3ICs5
MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVf
dCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CiAgICAgZm9yIChzaXplX3QgaiA9IENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9j
ayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwpAQCAt
OTI0LDcgKzkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQg
PSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIApAQCAtOTM3LDcgKzkzNyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVU
aGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2NSwxMyArOTY1LDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
bG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
ci5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAgLTk4NSw3ICs5ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+
KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZElt
bTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTEwMjQsMTAgKzEwMjQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3Rh
bmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9y
ID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFu
Y2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNv
bnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTA0LDggKzExMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTExNSwxMiArMTEx
NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAKQEAgLTExNjEsMTEgKzExNjEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAj
ZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKQEAgLTEyMDcsMTAgKzEyMDcs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlc0luZGV4ID0gYnl0ZWNvZGUubV9hcmd2Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5t
X2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAog
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7
CiB9CkBAIC0xMjE5LDggKzEyMTksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0
aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4
ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29k
ZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCkBAIC0xMjM2LDkgKzEyMzYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCByZWdUMSk7CkBAIC0xMjgyLDkgKzEyODIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhl
ZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAg
ICAKQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAtMTM0OSwxMCArMTM0OSwxMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0
KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMzkwLDkgKzEz
OTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAg
ICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVn
VDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAt
MTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iu
b2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVHlwZUxv
Y2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAg
ICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUwOSw3ICsxNTA5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlz
IG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVn
ID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tl
blByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0K
IApAQCAtMTUyMyw4ICsxNTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJS
ZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1l
bnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBz
Y3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNW
YWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCkBAIC0xNTQ1LDcgKzE1NDUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxh
YmxlUmVncyhyZWdUMCwgcmVnVDEpOwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1Rv
U2tpcDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwpAQCAtMTU4Niw3
ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwpAQCAt
MTU5Niw3ICsxNTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDIpOwogICAgIEp1bXAgYXJndW1lbnRP
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0z
MihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCArIGluZGV4KSwgcmVzdWx0UmVncyk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJl
c3VsdFJlZ3MpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZC
b3VuZHMubGluayh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAppbmRleCBhZTViNmFkNTRjYTgxMzZlY2FjMWI2NDExYzk1NzM0MzBlNWMxZjdh
Li5jNDYzNzlhOWY5ZWNjYWU3NDRhOGU3YWM4MDg1NTFmZWJmMmZhNTczIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC05MzMsNyArOTMzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0
YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1
ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTk0
Myw3ICs5NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDNiNDg1MGZh
YjhkNmZhZTkzMGU5ZTg2OTNjNDRiYmY0YTFlNDM5M2QuLjhjYjU1ZmI1YjdlZjg1ZjBhYzExOWYy
MmVlMmFkMTkxYWMxOTA0NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtMTY1NCwxOCArMTY1NCwxOCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRl
YwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkKICAgICAgICAg
ICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2Rl
QmxvY2ssICJcbiIpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOworICAg
ICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgICAgIGlmIChieXRlY29k
ZUluZGV4KQogICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVl
cyA9IDA7Ci0gICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFs
dWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcyk7CisKKyAg
ICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzLCAwKTsKICAgICAgICAgaW50
IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcyA9IHN0YXRpY19jYXN0PGludD4oQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaSk7Ci0gICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwob3BlcmFuZCkgJiYgVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykK
KyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFu
ZC50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1
ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSku
anNWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKQEAgLTE3ODMsNyArMTc4Myw3
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFs
dWVQcm9maWxlKFZNKiB2bVBvaW50ZXIsIHVpCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0
byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkt
PmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAg
IHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTkwNyw4
ICsxOTA3LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qgc2NvcGUKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgSlNTY29wZSogc2Nv
cGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwot
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykgPSBzY29wZS0+bmV4dCgpOworICAg
IGF1dG8mIHNjb3BlU2xvdCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGVSZWcpKTsKKyAgICBzY29wZVNsb3QgPSBzY29wZVNsb3QuUmVnaXN0ZXI6OnNjb3BlKCkt
Pm5leHQoKTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZD
dXN0b20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU09iamVjdCogY29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJ
bnN0YW5jZSkKQEAgLTI0MTYsNyArMjQxNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0RnJvbVNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFy
KTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKKyAgICBKU09i
amVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0
ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1
bGVWYXIgaXMgYWx3YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29w
ZS4KQEAgLTI0NTksOCArMjQ1OSw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRU
b1Njb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RyCiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogCiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIp
OwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1
ZSgpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+
dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOwogICAgIEdldFB1
dEluZm8mIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1
bGVWYXIgZG9lcyBub3Qga2VlcCB0aGUgc2NvcGUgcmVnaXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZH
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApp
bmRleCBhYjk5ZmQ5ODdiMDYxZjJlNzZhMTdjMjhiZThjNGU3MjY1YTJkODE1Li5lNzI5ZmMwNThl
YzY4ZWMxMWYzMmQ1NzA3ODliNzdhMDk3NWQyNmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFMKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7
CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWw+KCk7Ci0gICAgICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCkBAIC0xMTcsOCAr
MTE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwot
ICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdU
eXBlIGluZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAK
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yMDgsNyArMjA4LDcgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFi
bGVKdW1wJiBiYWQKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0
b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBDUkFTSCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRl
Y29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTI0OSw3ICsyNDksNyBAQCBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJlZ1Qz
LCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihieXRl
Y29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBq
dW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBK
SVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBPcCBieXRlYwogICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNj
cmF0Y2g6IHJlZ1QyCiAKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChyZWdUMSkpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJl
Z1QxLCByZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQg
QEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpbnQg
YmFzZTsKLSAgICBpbnQgcHJvcGVydHk7Ci0gICAgaW50IHZhbHVlOworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWU7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAg
ICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICAg
ICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgICAgICB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTMzNywzNiArMzM3
LDM2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLm9mZnNldCgpLCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlci5vZmZz
ZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0
ZXIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVy
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OwpAQCAtMzc1LDE4ICszNzUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRT
ZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eUlkSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7CkBA
IC0zOTUsOSArMzk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKQEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00MzAsNyArNDMwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKQEAgLTQ0NSw4ICs0NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
bwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00ODUsOCAr
NDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBA
IC01MTMsOSArNTEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHRoaXNWUmVn
ID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCsrXTsKQEAgLTU3MSw4ICs1NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSAh
IShieXRlY29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIEluIG9yZGVy
IHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBv
ZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLApAQCAtNjE1LDggKzYxNSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQordm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApA
QCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQgSklUOjpl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewogICAgIGxvYWRQdHIoc3Ry
dWN0dXJlU2xvdCwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCiAgICAgbG9hZFB0cihyZWcs
IHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kKQordm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHJlZ1QwKTsKQEAgLTgwMCw4ICs4MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwog
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3Ry
dWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKIH0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0
KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCiB7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRj
aHBvaW50U2V0LCByZWdUMSk7CkBAIC05MzgsNyArOTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFs
dWUsIFcKICAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1
dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4
ICs5NTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdl
dFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsx
MDg2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IKIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3Vt
ZW50cz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwpAQCAtMTA5OSw5ICsxMDk5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b0FyZ3VtZW50cz4oKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJn
dW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEp
OwpAQCAtMTExMCw3ICsxMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJh
cnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdp
c3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUp
CiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExMzMsNyAr
MTEzMyw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNp
Z25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5s
aW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwpAQCAtMTE1MCw4ICsxMTUwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CkBAIC0xMTY0
LDggKzExNjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxG
aWVsZD4oKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMTc2LDcgKzEx
NzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAot
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0
dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0x
MTk5LDcgKzExOTksNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIAotICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQu
aAppbmRleCAyY2Y5MTk4ZjQwZWRhYWY1M2E2MWRiZjMzOTBhNmM3ZGIyODZhNWMxLi5mYTVkMGFh
YjRhNWQ4MTJkZTAxMWIzNmQ1NGMzM2MwODBkN2Q5ZDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC00NSwxOCArNDUsMTggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2Fk
SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQp
OwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdp
c3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2Fk
RG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHNjcmF0Y2gpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIGlubGluZSBKdW1w
IGVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCk7CisgICAgICAg
IGlubGluZSBKdW1wIGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lz
dGVySW5kZXgpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3Rlcik7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRD
ZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAg
ICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRy
eSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwor
ICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZp
cnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVt
aXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIApA
QCAtNjQsMzYgKzY0LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgcGF5bG9hZCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXJJbmRleCksIHBheWxvYWQpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpT
Q2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RK
U0NlbGwodmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VK
SVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmly
dHVhbFJlZ2lzdGVySW5kZXgpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVn
aXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHJldHVy
biBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rl
ciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1w
IEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0g
ICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0g
ICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHN0YXRpY19jYXN0PGludD4o
dmlydHVhbFJlZ2lzdGVySW5kZXgpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7
CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3Qp
OworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklE
IHNjcmF0Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lz
dGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7Ci0gICAgICAgIGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
c2NyYXRjaCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHNjcmF0Y2gpOwogICAgICAgICBKdW1wIGlzRG91YmxlID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0
Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVy
KSwgc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7
CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNEb3VibGUubGluayh0aGlz
KTsKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
ZHN0KTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRz
dCk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5vdEludDsKICAg
ICB9CkBAIC0xMDEsMjMgKzEwMSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdp
c3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBkc3QpOwogICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKGRzdCk7CiAgICAgfQog
ICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9h
ZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBk
c3QpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwog
ICAgICAgICBKdW1wIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihkc3QpOwogICAgICAgICB6
ZXJvRXh0ZW5kMzJUb1B0cihkc3QsIGRzdCk7CiAgICAgICAgIHJldHVybiBub3RJbnQzMjsKICAg
ICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQg
ZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1w
IEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAg
ICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOwor
ICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAg
ICAgICAgSnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcihzY3JhdGNoKTsKICAgICAg
ICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHNjcmF0Y2gpOwogICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwpAQCAtMTI5LDI2ICsxMjksMjYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVy
IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCiAgICAgewotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgdG8pOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVu
dHJ5KSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpOwogI2Vsc2UK
ICAgICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5KSk7CiAjZW5kaWYKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIGludCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKaW5k
ZXggMzg4NzMwNTJkMTI4NTJmYzZiYjkxNDJkNDU2MDdhZThlMTlhNjcwYS4uMGJhNzNlZjhjMTM0
ZWJiYmQxZDA0YTRiMTcyMTRmNGZhNzM1MTgzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIGVt
aXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBudW1Vc2VkU2xvdAogICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxS
ZWdpc3RlcigwKTsKICAgICB9IGVsc2UgewogICAgICAgICBhcmd1bWVudENvdW50UmVjb3Zlcnkg
PSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMik7
CisgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBEYXRhRm9ybWF0SW50
MzIpOwogICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCkpOwogICAgIH0KICAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVG
YXN0Q2FzZSh2bSwgaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
Miwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1bWVudFJlZywg
Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKaW5kZXggNGY1NjdkMDZhZWE1NDRhYjI2NzE1NWMx
M2RmMzZhNzI0OWI2YzM0My4uOTMzY2E5YmUxMDJlMGVkZjk0YmI0ZWFlODI4MjE0ODIyOWM4MjZm
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5r
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklU
LmgKQEAgLTU1LDEzICs1NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgbG9hZERvdWJsZUFyZ3VtZW50KGludCBhcmd1bWVudCwgRlBSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMg
PSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAg
ICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZERvdWJsZShzcmMsIGRzdCwgc2Ny
YXRjaCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRDZWxsQXJndW1l
bnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCkKICAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
YXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWRKU0NlbGwo
c3JjLCBkc3QpKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRJbnQzMkFyZ3VtZW50KGludCBh
cmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZhaWxUYXJnZXQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1l
bnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIGZhaWxUYXJnZXQgPSBlbWl0TG9hZElu
dDMyKHNyYywgZHN0KTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA1MjQxZTVmN2NjMzMyYTY0ZTBkZTZk
YjQ0YmRhZjllOGU4MGYyMmFhLi5jMzc2ZGJlMmNkN2Q2ZGQzZmE1NDg3YjU3YjU4OTQ3ZjZkZmJh
MzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CkBAIC0xMDMyLDggKzEwMzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGFic1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
MCk7Ci0gICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVySW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApOworICAgIGppdC5sb2Fk
NjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86
OnJlZ1QwKTsKICAgICBhdXRvIG5vdEludGVnZXIgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihHUFJJ
bmZvOjpyZWdUMCk7CiAKICAgICAvLyBBYnMgSW50MzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmgKaW5kZXggYWU4ZGVlMjlmOTg5YzZhMDI1NTAxNWY1ZmFhNjE1NjZkNjE5
NjAwMy4uYTIzODAyN2QzYmNhYTcwMzcxMWJjNGJmZjBjMTA2MjUzZTBkOTE5NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaApAQCAtNDMsNiArNDMsOSBAQCB0eXBlZGVm
IHZvaWQgKCpMTEludENvZGUpKCk7CiAKIG5hbWVzcGFjZSBMTEludCB7CiAKKworZXh0ZXJuICJD
IiB2b2lkIEpTQ19IT1NUX0NBTEwgY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50KCk7Citl
eHRlcm4gIkMiIHZvaWQgSlNDX0hPU1RfQ0FMTCBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5s
aW5lZF9jYWxsX2VudHJ5cG9pbnQoKTsKIGV4dGVybiAiQyIgSlNfRVhQT1JUX1BSSVZBVEUgT3Bj
b2RlIGdfb3Bjb2RlTWFwW251bU9wY29kZUlEcyArIG51bVdhc21PcGNvZGVJRHNdOwogZXh0ZXJu
ICJDIiBKU19FWFBPUlRfUFJJVkFURSBPcGNvZGUgZ19vcGNvZGVNYXBXaWRlMTZbbnVtT3Bjb2Rl
SURzICsgbnVtV2FzbU9wY29kZUlEc107CiBleHRlcm4gIkMiIEpTX0VYUE9SVF9QUklWQVRFIE9w
Y29kZSBnX29wY29kZU1hcFdpZGUzMltudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4
IDM1N2E0NmU4ZTU3ODk3ZjI3ODVjZDMzOWZjYmUyYmMwYzkwY2VkYjIuLmY2MjEzMWM3MzcxZDYz
NDUxYWQ5ZWE5ODAyZmMyNmVjYjZmODgwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFy
cmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgi
CiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlubGluZSBK
U1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
VmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
b3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5k
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsg
cmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KK2lubGlu
ZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVy
YW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnIo
b3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhmaXJzdCwg
c2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwg
c2Vjb25kKTsgICAgICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2Fs
bEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5dGVjb2Rl
Lm1fYXJndjsKICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5j
aGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVB
c1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwogICAg
IAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKQEAg
LTE2ODksNyArMTY5MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVw
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgc2V0dXBG
b3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBj
YWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwg
dm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2Fs
bEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNh
bGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7CkBA
IC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxF
dmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIGNh
bGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2Mp
OwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxl
ZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVl
OworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldFJldHVy
blBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZyYW1lLT5z
ZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsK
QEAgLTE5MzAsNyArMTkzMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9m
aWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRh
ZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2Zp
bGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1sw
XSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJh
bmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NjEsMTEgKzE5NjIsMTI0IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKICAgICBM
TElOVF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+CitzdGF0aWMg
dm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVjb2RlLCBD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS5nZXRUbXA8SlNWYWx1ZT4oT3Bjb2RlOjphcmdDb3VudCku
YXNVSW50MzIoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5m
aWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBidWZmZXIp
IHsKKyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxGcmFtZS0+
cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCAwLCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpOworICAgIH0pOworICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQoKSkgewor
ICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwoZ2xvYmFs
T2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVy
YW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisgICAgZWxz
ZQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNh
bGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNv
ZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2RzdCkg
PSByZXN1bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hOZXh0SW5z
dHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMp
Cit7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVy
VGh1bmspIHsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG5leHRQQyA9IHBjLm5leHQoKS5w
dHIoKTsKKyAgICAgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBMTEludDo6Z2V0Q29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPigqcGMubmV4dCgpLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChuZXh0UEMsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoSklUKQorICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgQnl0ZWNvZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRleCA9IHBj
Lm5leHQoKS5pbmRleCgpOworICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gY29kZUJsb2NrLT5qaXRD
b2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChudWxscHRyLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisjZW5kaWYKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2Fs
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlKTsKK2V4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21f
aW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUg
cmVzdWx0KQoreworICAgIC8vIFNpbmNlIGFsbCBvdXIgY2FsbGluZyBjaGVja3BvaW50cyBkbyBy
aWdodCBub3cgaXMgbW92ZSByZXN1bHQgaW50byBvdXIgZGVzdCB3ZSBjYW4ganVzdCBkbyB0aGF0
IGhlcmUgYW5kIHJldHVybi4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRo
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMt
Pm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFy
YXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ2FsbFZhcmFy
Z3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFs
dWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3Mgc2hvdWxkIG5ldmVyIHJldHVybiBpZiB0aGUgdGhpbmcgaXQgd2FzIGNh
bGxpbmcgd2FzIGlubGluZWQuCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGRpc3Bh
dGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCitleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNh
bGxGcmFtZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2tw
b2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworCisgICAg
c3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2
bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBBU1NFUlQo
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworCisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBj
LT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGds
b2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBo
YW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5h
czxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9yZXQsICJXZSBzdHJvbmdseSBhc3N1
bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2VkIGJ5IGFuIG9wX3JldC4iKTsKKyAgICAgICAg
aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+
YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVh
azsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHJldHVyblRvVGhyb3codm0pLCAwKTsK
KworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30K
KwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZs
b3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJhbWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9
IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGUxNzM0ZGNm
NjFiNGNmYzU1MTJmYTI4NTYwMWJjYWIzMGM4OGYyZTQuLjQwZjkyZTMxMmE0MDBkODg0YzAzMmFk
OGFkNDk4MzRjNmVhNzgyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTEwOTEsNyArMTA5MSw3IEBAIG1hY3JvIGdl
dHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcE5hbWUsIHNpemUpCiAgICAgZGVmaW5lT1NS
RXhpdFJldHVybkxhYmVsKG9wTmFtZSwgc2l6ZSkKIAogICAgIHJlc3RvcmVTdGFja1BvaW50ZXJB
ZnRlckNhbGwoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMK
KyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gYXJyYXlQcm9m
aWxlKG9mZnNldCwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gpCkBAIC0x
ODM5LDEzICsxODM5LDE3IEBAIGVuZCkKIGNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBw
cmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQogCiAKLW1h
Y3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRj
aCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQotICAgIGNhbGxTbG93UGF0
aChmcmFtZVNsb3dQYXRoKQorbWFjcm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0
KQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MwogICAgIGxvYWRwIENvZGVCbG9jazo6bV92
bVt0M10sIHQzCiAgICAgYnRweiBWTTo6bV9leGNlcHRpb25bdDNdLCAubm9FeGNlcHRpb24KLSAg
ICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKLS5ub0V4Y2VwdGlv
bjoKKyAgICBqbXAgZXhjZXB0aW9uVGFyZ2V0Cisubm9FeGNlcHRpb246ICAgIAorZW5kCisKK21h
Y3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRj
aCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgIGNhbGxTbG93UGF0
aChmcmFtZVNsb3dQYXRoKQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9t
X3Nsb3dfcGF0aF90cmFtcG9saW5lKQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKICAgICBpZiBK
U1ZBTFVFNjQKICAgICAgICAgbW92ZSByMSwgc3AKQEAgLTE5OTksNyArMjAwMyw2IEBAIG9wKGxs
aW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogICAg
IGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShJbnRlcm5hbEZ1bmN0aW9uOjptX2Z1bmN0
aW9uRm9yQ29uc3RydWN0KQogZW5kKQogCi0KICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBj
YW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVz
ZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBK
SVQuIFdlIGFzc2VydAogIyBhcyBtdWNoLgpAQCAtMjA0NSwzICsyMDQ4LDIwIEBAIG9wKHdhc21f
ZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzLCBtYWNybyAoKQogZW5kKQogCiBlbmQKKworaWYgbm90
IENfTE9PUCBhbmQgbm90IENfTE9PUF9XSU4KKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludAorICAgIF9jaGVja3BvaW50X29zcl9leGl0
X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQ6CisgICAgICAgIG1vdmUgcjAsIGEyCisgICAg
ICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxp
bmVkX2NhbGwpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEKKworICAgIGdsb2JhbCBfY2hlY2tw
b2ludF9vc3JfZXhpdF9lbnRyeXBvaW50CisgICAgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlw
b2ludDoKKyAgICAgICAgIyBGSVhNRTogV2UgY2FuIHByb2JhYmx5IGRpc3BhdGNoIHRvIHRoZSBj
aGVja3BvaW50IGhhbmRsZXIgZGlyZWN0bHkgYnV0IHRoaXMgd2FzIGVhc2llciAKKyAgICAgICAg
IyBhbmQgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgICAgICBj
YWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KQorICAgICAgICBicmFu
Y2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAg
ICAgICAgam1wIHIxCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggM2RkMmViNDhjYmJhNmVmNWNkOTg4NjM5
Yzc5MTFlMjJhNzEzMzE0OC4uNDExZGYyYzY3NTIzMzBiMzdiOTZhYmNlZDg3YTg0NDZhODc1Njk5
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KQEAgLTQyLDYgKzQyLDE0IEBAIG1hY3JvIG5leHRJbnN0cnVjdGlvbldp
ZGUzMigpCiAgICAgam1wIFt0MSwgdDAsIFB0clNpemVdLCBCeXRlY29kZVB0clRhZwogZW5kCiAK
K21hY3JvIHN0b3JlUEMoKQorICAgIHN0b3JlaSBQQywgTExJbnRSZXR1cm5QQ1tjZnJdCitlbmQK
KworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCitlbmQK
KwogbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3Bjb2RlU3RydWN0LCBmaWVsZE5hbWUsIGRzdCkK
ICAgICBsb2FkYiBjb25zdGV4cHIgJW9wY29kZVN0cnVjdCVfJWZpZWxkTmFtZSVfaW5kZXhbUEIs
IFBDLCAxXSwgZHN0CiBlbmQKQEAgLTkyLDcgKzEwMCw3IEBAIGVuZAogCiAjIEFmdGVyIGNhbGxp
bmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVnaXN0ZXJzIGFyZSBub3Qg
dXNlZC4KIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0
Y2gpCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxv
YWRQQygpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIGdldChzaXplLCBvcGNvZGVT
dHJ1Y3QsIG1fZHN0LCB0MSkKQEAgLTM5MCw3ICszOTgsNyBAQCBlbmQKIAogIyBDYWxsIGEgc2xv
dyBwYXRoIGZvciBjYWxsIG9wY29kZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRo
LCBhY3Rpb24pCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0K
KyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIs
IGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTM5OSwyMCArNDA3LDIwIEBAIG1hY3JvIGNhbGxDYWxs
U2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBjYWxsVHJhcEhhbmRsZXIo
dGhyb3dIYW5kbGVyKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtj
ZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUg
Y2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCiAgICAgY0NhbGwyKF9sbGludF9zbG93X3BhdGhfaGFu
ZGxlX3RyYXBzKQogICAgIGJ0cG56IHIwLCB0aHJvd0hhbmRsZXIKLSAgICBsb2FkaSBBcmd1bWVu
dENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJd
LCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICBjaGVja1N3
aXRjaFRvSklUKAogICAgICAgICAxLAogICAgICAgICBtYWNybygpCi0gICAgICAgICAgICBzdG9y
ZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICAgICAgc3RvcmVQ
QygpCiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAgICAgICBtb3Zl
IGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00MjEsNyArNDI5LDcgQEAgbWFj
cm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSByMSwgc3AKICAg
ICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3ZlcjoKLSAgICAg
ICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICAgICAg
ICAgIGxvYWRQQygpCiAgICAgICAgIGVuZCkKIGVuZAogCkBAIC0xNzY4LDYgKzE3NzYsOCBAQCBt
YWNybyBwdXRCeVZhbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgb3NyRXhpdFBvaW50KQog
ICAgIGVuZCkKIGVuZAogCisKKwogcHV0QnlWYWxPcChwdXRfYnlfdmFsLCBPcFB1dEJ5VmFsLCBt
YWNybyAoc2l6ZSwgZGlzcGF0Y2gpCiAub3NyUmV0dXJuUG9pbnQ6CiAgICAgZ2V0dGVyU2V0dGVy
T1NSRXhpdFJldHVyblBvaW50KG9wX3B1dF9ieV92YWwsIHNpemUpCkBAIC0yMDU3LDcgKzIwNjcs
NyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVj
dCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBhZGRwIGNmciwgdDMKICAgICAgICAg
c3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBt
X2FyZ2MsIHQyKQotICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRb
Y2ZyXQorICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50
ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAgICAgcHJlcGFy
ZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVD
b2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCA4NDBmODliODhkNDIwY2MzYjc1YzgzZDZjNTc4
MjQxNTQwMmYzMzY2Li44ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1MDBmZGZiZTY5OTk4MDdjZGEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCkBAIC0xMzMsNiArMTMzLDE3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3ZlcmZsb3dDaGVja05vdE5lZWRlZCgpIHsgY2xlYXJO
ZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50LCBjb25zdCBGdW5jdG9yJiBmdW5jKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7
CisgICAgICAgIGlmIChCYXNlOjpoYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fc2l6ZSA9IGNvdW50OworICAgICAgICBmdW5jKHJlaW50ZXJwcmV0X2Nhc3Q8
SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZXhw
YW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCBuZXdDYXBhY2l0eSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXgg
ZjhkOTc5OTU4NzQ1MjI2YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNlODdhMS4uZmZiNzQ1OWE2YWRjY2Jh
YjE2ZGE4YTRlZjhiMTcxMWQ4NzJhMWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMTc4OCw2ICsxNzg4LDcgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENv
bnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgZXZhbENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9ldmFsQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMoKSBjb25z
dCB7IHJldHVybiBtX2hhc1RhaWxDYWxsczsgfQorICAgIHVuc2lnbmVkIGhhc0NoZWNrcG9pbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQogICAgIHVuc2lnbmVkIGxpbmVD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CiAgICAgdW5zaWduZWQgZW5kQ29s
dW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KIApAQCAtMTgyMCw2ICsxODIxLDcg
QEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0VHlwZSA6IDI7CiAgICAgdW5z
aWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOwogICAgIHVuc2lnbmVkIG1fY29kZVR5cGUgOiAyOwor
ICAgIHVuc2lnbmVkIG1faGFzQ2hlY2twb2ludHMgOiAxOwogCiAgICAgQ29kZUZlYXR1cmVzIG1f
ZmVhdHVyZXM7CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtMjAxOCw2ICsy
MDIwLDcgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxv
Y2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKgogCiAgICAgLCBtX2RpZE9wdGltaXplKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAg
LCBtX2hhc0NoZWNrcG9pbnRzKGNhY2hlZENvZGVCbG9jay5oYXNDaGVja3BvaW50cygpKQogCiAg
ICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcygpKQogICAgICwgbV9wYXJz
ZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQpAQCAtMjIwNiw2ICsyMjA5LDcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAgICBtX3BhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3Bh
cnNlTW9kZTsKICAgICBtX2NvZGVHZW5lcmF0aW9uTW9kZSA9IGNvZGVCbG9jay5tX2NvZGVHZW5l
cmF0aW9uTW9kZTsKICAgICBtX2NvZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7CisgICAg
bV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwogCiAgICAgbV9t
ZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAg
IG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CmluZGV4IGYzNThkNDhhNTBkZTczZWFiMzg1Njk5YjNhNmY1MTEzYmJiZTliYmEuLmUyN2ZlM2Nh
OTc4YjM5NDQ4MjYxNjdkNGEwNjFhMmVhZDRmOTI2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtOTgsOCArOTgsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBCRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAg
IFwKICAgICBTRVRfUENfRk9SX1NUVUJTKCkKIAotI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxG
cmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKSkKLSNkZWZpbmUgR0VUX0Mob3BlcmFu
ZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKSkKKyNkZWZpbmUgR0VUKG9wZXJhbmQp
IChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkpCisjZGVmaW5lIEdFVF9DKG9wZXJhbmQp
IChjYWxsRnJhbWUtPnIob3BlcmFuZCkpCiAKICNkZWZpbmUgUkVUVVJOX1RXTyhmaXJzdCwgc2Vj
b25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vj
b25kKTsgICAgICAgIFwKQEAgLTExMzksOCArMTEzOSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAg
aW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBj
dXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihHRVRfQyhieXRlY29kZS5tX3N5bWJv
bFRhYmxlKS5qc1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gR0VUX0MoYnl0
ZWNvZGUubV9pbml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoaW5pdGlhbFZhbHVl
ID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpzVERaVmFsdWUoKSk7CkBAIC0x
MTU1LDggKzExNTQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF93aXRoX3Njb3Bl
KQogICAgIEpTT2JqZWN0KiBuZXdTY29wZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpz
VmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwog
Ci0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUub2Zmc2V0KCk7Ci0g
ICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVn
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgp
OwogICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJl
bnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIApAQCAtMTE2NSw3ICsxMTYzLDcgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVT
Y29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Ci0gICAg
SlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5v
ZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAg
SlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdG
dW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAKICAgICBDSEVDS19F
WENFUFRJT04oKTsKQEAgLTExNzksNyArMTE3Nyw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9yZXNvbHZlX3Njb3BlKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2Nv
cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fdmFyKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKICAgICBKU09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJl
c29sdmUoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwogICAgIC8vIFByb3h5IGNhbiB0aHJv
dyBhbiBlcnJvciBoZXJlLCBlLmcuIFByb3h5IGluIHdpdGggc3RhdGVtZW50J3MgQHVuc2NvcGFi
bGVzLgogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTQyNCw3ICsxNDIyLDcgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoYnl0ZWNvZGUubV9pbW11dGFibGVC
dXR0ZXJmbHkub2Zmc2V0KCkpKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0
ZXJmbHkuaXNDb25zdGFudCgpKTsKICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxl
QnV0dGVyZmx5ID0gYml0d2lzZV9jYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oR0VUX0MoYnl0
ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgYXV0
byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlOwogCkBAIC0xNDQzLDcgKzE0NDEsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUg
YSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFs
aWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVh
ZC4KICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5z
ZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0s
IGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKICAgICB9CiAKQEAgLTE0ODgsNCArMTQ4NiwxNiBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfc3ByZWFkKQogICAgIFJFVFVSTihKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRl
RnJvbUFycmF5KGdsb2JhbE9iamVjdCwgdm0sIGFycmF5KSk7CiB9CiAKK2V4dGVybiAiQyIgdm9p
ZCBkdW1wUmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKTsKK2V4dGVybiAiQyIgdm9pZCBkdW1w
UmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKQoreworICAgIGRhdGFMb2dMbihSYXdQb2ludGVy
KGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpKSk7Cit9CisKKy8vIGV4dGVybiAiQyIgU2xvd1Bh
dGhSZXR1cm5UeXBlIFNMT1dfUEFUSCBjaGVja1BDKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25z
dCBJbnN0cnVjdGlvbiogcGMpOworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgU0xP
V19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBw
YywgKQorLy8geworCisvLyB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCA0YmQxOTJhNmM3N2Vm
YzAyNmU3YTk1YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0MThjYTg4ZWZkMWI3OGU2MzExYjY3
NWQxZWZhNWE1ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
dHJ1Y3REYXRhLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBKU09i
amVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29u
c3RydWN0b3JPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVz
c2FnZSkKK3sKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JP
YmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU09i
amVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29u
c3RydWN0b3JPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBj
b25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTQ2LDEw
ICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGdsb2Jh
bE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEs
IGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlw
ZSwgY29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAKIH0KIAotCiBKU09iamVjdCog
Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0
b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBuZXdUYXJnZXQp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4IGQwYWUwMGJhMTFkN2NlZTI0ZGZm
YWU5MTkxMTk2N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzljNDkxZjlmOTNiYWViNmNhYzEyNjIx
ZjNiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVj
dERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRh
LmgKQEAgLTYwLDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVjdERhdGEgewogCiAvLyBDb252ZW5p
ZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBhbmQg
Q2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCiBKU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmLCBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29u
c3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlw
ZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlIG5ld1Rhcmdl
dCk7CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNv
bnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEwMjJhYzJkZDlhZWZhZmQ0M2EwMWE1
Yzg1Li40YjM0NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1MDlmMzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKQEAgLTEz
NywyMCArMTM3LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2
bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVy
bmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fbWFwcGVkQXJndW1l
bnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVuZ3RoICsgb2Zmc2V0
LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAgICAgIGZvciAoaSA9IG9m
ZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBp
KSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAt
IG9mZnNldF0gPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IGdldChnbG9iYWxP
YmplY3QsIGkpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdl
dChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2VuZXJp
Y0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5n
dGgpOwogfQogCiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApp
bmRleCAwYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNlNzcyZTBhLi44ZDk2NDJhMmM5
NDA0MDgwYjkxM2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6aXNN
b2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9sZW5ndGgpOwogICAgIH0KIAotICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUq
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBhYmQwMGNlZWFmNWViYjdlZTFkNDY3
ZGE0ODg3MGQ1MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJkYWIzZGFlZWIyNzJjYmJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
CkBAIC01OSw3ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1vZGlmaWVkQXJndW1l
bnREZXNjcmlwdG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAg
Ym9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25l
ZCBsZW5ndGgpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1bWVudHNQdHIgPSBDYWdlZEJh
cnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47CiAgICAgTW9kaWZpZWRBcmd1bWVu
dHNQdHIgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAppbmRleCAy
MTgyYTYyYjEzMDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZmLi5lMGFhYmY1ZjJlZTE4NWI3
ZDEzMzE2MDM3ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKQEAgLTI5Nyw3ICsyOTcs
NyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERlc2Ny
aXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
Pgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3Zv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMDUsOSArMzA1
LDkgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpICsg
b2Zmc2V0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkg
PSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZz
ZXQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDQ0
YzdlNTIwZjFjMGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAuLjZkMDc1OTE3MTFlZWRiYzI4
ZTBlNGRhNzg0OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdM
aXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBh
cgogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0LCBpKSk7CiB9CiAKLXZvaWQg
SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAg
ICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQodGhpcywg
aSk7CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpIC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTQsMTEgKzEyOTQsMTEg
QEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IHYuZ2V0
KCk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgpOwogICAg
IH0KICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNhbGxGcmFt
ZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBp
KTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmpl
Y3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCAzMTc5NDlj
NTcyYTExYjc1YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2NWI1ZmY0OTI1NGNjMWE2YzQ3
OTAyYjc5MTBhYzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJrZWRBcmd1bWVudEJ1
ZmZlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAzM2RhYTk5YTU5MzZkZWExOWEx
YzQ5YzAuLmU0OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEyYzE5MTFjMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVibGljTGVuZ3RoKCkpCi0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGkgKyBvZmZz
ZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zmc2V0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0g
anNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4IGFjYjY4NDgxOTFhMTkwMzUy
MmI5YjNlNGQwMGY5NjllNDBiNzgxNWEuLjA3ZTFhOGExMGMzY2RjNzExN2FjYTNkYzU0M2VkN2Rk
YjBkNDFmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZv
aWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVT
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgxNjgzNDk3
ZS4uMTZhYTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAgdm9pZCBK
U0xvY2s6OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9IG1fdm07
CiAgICAgaWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0t
Pmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0IHBlbmRp
bmcgY2hlY2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAgICB2bS0+
ZHJhaW5NaWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFkNmRlMzdi
YTAuLjU5NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KIAogICAg
IGV4ZWN1dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxP
YmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0g
ICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxP
YmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSku
Z2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBleGVjdXRh
YmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0o
KSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZS0+Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZz
ZXQoKSkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKaW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEwNTBjZGU4NmNiMjUyMWU1NDExNi4u
OTFlZDczOWUyNWY0OTM4ZWY1MDI3MjdkZjUxNjgwZDg2Y2EyMDg3ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMSArNTA5LDkgQEAgc3RhdGlj
IHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6OnNvZnRS
ZXNlcnZlZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVt
UmVzZXJ2ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUo
KSA9IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXpl
OwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBGSVhNRTogTWFrZSBwcm9iZSBPU1Ig
ZXhpdCB3b3JrIG9uIDMyLWJpdDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxz
ZTsKLSNlbmRpZgogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAg
T3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4MWQ5NzhhN2IyYTYy
NjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2MDVmYmY1MjViZGRm
MjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Nv
cGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRz
Ojp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAgc3RvcmFnZSgpW2kg
LSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5lcmljQXJndW1lbnRz
Ojpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYyOWVkNGNiMWI0ZTk3
MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUwODRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaApAQCAtMTQy
LDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8U2Nv
cGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV90YWJs
ZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA2NGRkZmNiMWEyNTYwZTZmZTFiNDU0ZTRm
ZWUxNDg5MmFkYzA4YTlmLi44ZjZlNTY1ZTI0N2U1YTIzMTkzMzE5ODgyODY3MmUyMTA0ODgxNjU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5FeGVjdXRhYmxlcy5o
IgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMTAyNyw2
ICsxMDI4LDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRp
dmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYKIAordm9pZCBWTTo6YWRkQ2hl
Y2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc3RkOjp1bmlxdWVfcHRy
PENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxvYWQpCit7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9j
aGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdURk1vdmUocGF5bG9hZCkpOworICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gVk06OmZpbmRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIHNpZGVTdGF0ZSA9IG1fY2hl
Y2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHNpZGVTdGF0ZTsK
K30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJhbWUpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCmluZGV4IDI4MDg2YzRlZDkxNjA2YzI4MWIxYTFkNWI3YTFkYWIwNjA4
ODA3MGEuLjI1YzRhNTE0YTE4YzY3MGU2NTQzMWFiOTY4Nzg4MzM4MWQ3MWVjMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50
aWZpZXJzOwpAQCAtOTQ5LDYgKzk1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdhdGhlclNj
cmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogCisgICAgdm9pZCBhZGRDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqKTsKKyAg
ICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNr
cG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVudHJ5U2NvcGUqIGVudHJ5U2NvcGU7
CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxw
dHIgfTsKQEAgLTEyMDAsNiArMTIwNSw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX3NjcmF0Y2hC
dWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gbV9zY3JhdGNoQnVmZmVyczsK
ICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsKKyAgICBIYXNoTWFw
PENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4+
IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0
aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9m
aWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9WTUluc3BlY3Rvci5jcHAKaW5kZXggODFjOWYxZjY3NDcwNzllZDgzMTI2NjJjMDgzMDBjNmNj
MzYyOGUzNy4uZTE0ODQwMGQ0ODdkZmM2NGU0NDA1NGRkYWRiMDg1ODk3MmUzOWEyNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBAIC0zOTcsOCArMzk3
LDggQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAgY29uc3QgUmVnaXN0ZXIqIGVuZDsKIAot
ICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGVuZCA9IGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxOworICAgIGl0ID0g
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxKTsKICAgICB3aGlsZSAoaXQg
PiBlbmQpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAgICAgaW50
IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBm
Njg4YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0
MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19J
TkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFMV0FZU19J
TkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19J
TkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2Rlcygp
KTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25z
dGFudEluZGV4KCldOwogICAgIH0KIAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5p
cXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggYWIxNzQwNmFmYjczNGE3MDhkZjEx
ZGJiNjgwMTUxOGI3NjY1ZmI0Mi4uZWUyYjMyN2QyYWY1NDcxOTY4Nzk2OWFjMjUyYTg0Yzc4OGVm
NmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuY3BwCkBAIC0yNDIsNiArMjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJz
ZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBw
YXJzZXI7IH07CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxh
dGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkg
Y29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBkdW1wKGNv
bnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggZTJhNGM0MjUz
M2EyZjQ0N2RkMzIwMjA1Yjc3N2I3OGIwMzljMGI2OC4uMjA2OWFkOGIyNGI3MzY5ZGNkOWQ1ZjBj
N2Y1OGVlYzkyYjM1Yzc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmNwcApAQCAtNzQzLDcgKzc0Myw3IEBAIHZvaWQqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uV2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206OkV4Y2Vw
CiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZv
IGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0
aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJs
ZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW0NhbGxGcmFtZVNs
b3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7
CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5j
ZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCA5
MjdhNjk4NGEzYmUwMTRjZjNlYTdkNjdmMDM0NTg0ZWViZWI2MGNlLi41NGY2MzZhYzFiNTA3NWQx
YzY2N2IzOGE5MDMxMzI5MGQ1ZjMzM2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3RlcikgXAogICAgICh2
aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUo
Q09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpKSBcCisg
ICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmlydHVh
bFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIpKQog
CiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpMTEludENhbGxl
ZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpJbnN0
YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaCBiL1Nv
dXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYzMmMzZWZjMDAwYmQxOGU5ZTM2
OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUzNjZhNzUwNTRkY2M2YzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Jp
dG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbmV4dFBvc3NpYmx5
VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFyKHNpemVfdCk7CiAgICAgdm9pZCBj
bGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50NjRfdCBmaW5kUnVuT2ZaZXJv
cyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXplX3QgY291bnQoc2l6ZV90IHN0YXJ0
ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKQEAgLTEwMiw2ICsxMDMs
MTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAg
ICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yPShib29sIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5kZXgsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29u
c3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CkBAIC0xMTEsNiAr
MTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUpOyB9CiAgICAgCisgICAgaXRl
cmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJhdG9yW10o
c2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRDbGVhcihCaXRtYXAmKTsKICAgICB2
b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAtMjI0LDYgKzIzNCwxMyBAQCBpbmxp
bmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpjbGVhckFsbCgpCiAgICAgbWVt
c2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwogfQogCit0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRzW2ldOworfQorCiB0ZW1wbGF0ZTxz
aXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgc2l6ZV90IEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0KHNpemVfdCBzdGFydCkg
Y29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAogICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNp
emUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0ZXJhdG9yCit7CisgICAgQVNT
RVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGluZGV4KTsK
K30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5s
aW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuICgqY29uc3RfY2Fz
dDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhpcykpW2luZGV4XTsKK30KKwogdGVt
cGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHVuc2ln
bmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhhc2goKSBjb25zdAogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAppbmRleCBkYWU0YTcxYjI4ZDEzMDQyNGMwYmQ3MzFiZTQxNjQzZjA1MmIzZWE5
Li4yYTMyNjJjOWI4YjZkNTZkZTNjYTRkYTAxNTY5NmQ3NTI3YWE0YjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dApAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgRHVt
YlB0clRyYWl0cy5oCiAgICAgRHVtYlZhbHVlVHJhaXRzLmgKICAgICBFbnVtVHJhaXRzLmgKKyAg
ICBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCiAgICAgRXhwZWN0ZWQuaAogICAgIEV4cG9y
dE1hY3Jvcy5oCiAgICAgRmFzdEJpdFZlY3Rvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oIGIvU291cmNlL1dURi93dGYvRW51bUNsYXNz
T3BlcmF0b3JPdmVybG9hZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmRlNzNmNWIyZDdkNTc0NGEzZDA4NTc3
Y2M3MjQ4NzFlOTNlNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvRW51bUNs
YXNzT3BlcmF0b3JPdmVybG9hZHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
dHlwZV90cmFpdHM+CisKKyNkZWZpbmUgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1Nf
V0hFTihlbnVtTmFtZSwgb3AsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoZW51bU5hbWUgZW51bUVu
dHJ5LCBUIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9uKSwgVD4g
XAorICAgIHsgXAorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KSBvcCB2
YWx1ZTsgXAorICAgIH0gXAorICAgICAgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAg
ICBjb25zdGV4cHIgYXV0byBvcGVyYXRvciBvcChUIHZhbHVlLCBlbnVtTmFtZSBlbnVtRW50cnkp
IC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisg
ICAgICAgIHJldHVybiB2YWx1ZSBvcCBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpOyBcCisgICAg
fSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICssIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAtLCBlbmFibGVF
eHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihl
bnVtTmFtZSwgKiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC8sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAlLCBlbmFibGVF
eHByZXNzaW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1f
Q0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikKKworI2Rl
ZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVu
dW1OYW1lLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VO
VU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVS
TE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAhPSwgZW5hYmxlRXhw
cmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51
bU5hbWUsIDwsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1Jf
RU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9W
RVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID4sIGVuYWJsZUV4
cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVu
dW1OYW1lLCA+PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX1JFTEFU
SU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBP
VkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zh
c3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAppbmRleCA4ODVi
N2IxNzNiMTFhNjAxYmUyOWEzMzJhYjlkMmE0MTRkNTYyMTIyLi45MjA4OTVmYzQ5ZTcxYmY5NjY5
MjIxYzEzMWExNzQyZmI3NThmZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0
VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCkBAIC00NTAsNyAr
NDUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiAhISgqbV93b3JkICYgbV9tYXNrKTsKICAgICB9CkBAIC00NjQsNiArNDY0LDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgRmFzdEJpdFJlZmVyZW5j
ZSYgb3BlcmF0b3J8PShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzID0gdmFsdWUg
OiAqdGhpczsgfQorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yJj0oYm9vbCB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPyAqdGhpcyA6ICp0aGlzID0gdmFsdWU7IH0KKwogcHJpdmF0ZToKICAg
ICB1aW50MzJfdCogbV93b3JkIHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fbWFzayB7IDAg
fTsKQEAgLTUwOSw3ICs1MTIsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5j
bGVhckFsbCgpOwogICAgIH0KLSAgICAKKworICAgIC8vIEZvciB0ZW1wbGF0aW5nIGFzIFZlY3Rv
cjxib29sPgorICAgIHZvaWQgZmlsbChib29sIHZhbHVlKSB7IHZhbHVlID8gc2V0QWxsKCkgOiBj
bGVhckFsbCgpOyB9CisgICAgdm9pZCBncm93KHNpemVfdCBuZXdTaXplKSB7IHJlc2l6ZShuZXdT
aXplKTsgfQorCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJSYW5nZShzaXplX3Qg
YmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50
cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgpAQCAtNTg5LDQgKzU5Niw1IEBAIHB1YmxpYzoK
IAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6RmFzdEJpdFJlZmVyZW5jZTsKIHVz
aW5nIFdURjo6RmFzdEJpdFZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VuYWxp
Z25lZEFjY2Vzcy5oIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKaW5kZXggNWE0
ZTllZjQ0OTRlZjQ2Y2E5ZTRlZWY3N2ZkY2MwZDYwZmFhNGExMS4uM2EzNWIzOGY0YzAyMzY3OWFj
N2NmYzljNDY1NjA4NGEzOTE0ODNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5hbGln
bmVkQWNjZXNzLmgKKysrIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKQEAgLTM0
LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5s
aW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lkKiBwb2ludGVyKQogewotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAg
VHlwZSByZXN1bHQgeyB9OwogICAgIG1lbWNweSgmcmVzdWx0LCBwb2ludGVyLCBzaXplb2YoVHlw
ZSkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBUeXBlIHVu
YWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
CiBpbmxpbmUgdm9pZCB1bmFsaWduZWRTdG9yZSh2b2lkKiBwb2ludGVyLCBUeXBlIHZhbHVlKQog
ewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOwor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVl
LCAiIik7CiAgICAgbWVtY3B5KHBvaW50ZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEwZDhl
NzVkN2VlZTJkNmFjNThlMDY4ZWUxODI2NGQ0OGRhZjZkMTMuLmM5ODlkMDRiOTI4NTVkNTk2Zjlj
NzA0MTkwMTU0OTVjMjYxYmVjYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMi0xOCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZW1vdmUg
cHJvYmUgT1NSIGV4aXQgb3B0aW9uIHNpbmNlIHdlIGFyZSBub3QgdXNpbmcgdGhhdCBhbnltb3Jl
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0xMi0xNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBHVEsgZ2Fy
ZGVuaW5nLiBNYXJrIFdlYktpdC5Gb2N1c2VkRnJhbWVBZnRlckNyYXNoIGFzIHRpbWVvdXQKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGNkYmY5YzBkYmY5MzJlMjhjNmQ1YTgyMDhh
MGE5OGNjZWU2YWVkOWYuLjVmYmMyMDllZGU0ZDM0NWE0NjA1YjAwZDI3MTcyMDQ1ZDA0OTJjZTYg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNDk4LDcgKzQ5OCw2IEBAIE5PX0NK
SVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXA9MTAwCiBCM08xX09QVElPTlMgPSBbIi0tZGVmYXVsdEIzT3B0TGV2ZWw9
MSJdCiBCM08wX09QVElPTlMgPSBbIi0tbWF4REZHTm9kZXNJbkJhc2ljQmxvY2tGb3JQcmVjaXNl
QW5hbHlzaXM9MTAwIiwgIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MCJdCiBGVExfT1BUSU9OUyA9IFsi
LS11c2VGVExKSVQ9dHJ1ZSJdCi1QUk9CRV9PU1JfRVhJVF9PUFRJT04gPSBbIi0tdXNlUHJvYmVP
U1JFeGl0PXRydWUiXQogRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyItLWZvcmNlT1NSRXhp
dFRvTExJbnQ9dHJ1ZSJdCiAKIHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1YnkvanNjLXN0cmVz
cy10ZXN0LXdyaXRlci0jeyR0ZXN0V3JpdGVyfSIKQEAgLTcxMyw3ICs3MTIsNyBAQCBkZWYgcnVu
RlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRlZiBy
dW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1
bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdy
YXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0Fs
bG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIFBST0JFX09T
Ul9FWElUX09QVElPTiArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJm
dGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9
dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2Nh
dG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUTm9QdXRTdGFja1ZhbGlk
YXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MjksNyArNzI4LDcgQEAgZGVm
IHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
IGVuZAogCiBkZWYgcnVuREZHRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAg
ICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZ
X09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBGT1JDRV9MTElOVF9FWElUX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZGZnLWVhZ2VyIiwg
KihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIEZPUkNFX0xM
SU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAog
ZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggN2M1YWY0NGJiM2M0ZmNjMzc5OGZhZDQzNmNjYjFkODgzYjUxOWZhMS4uMWMxMDAwYjI5NjM4
Yzk1NGM5ODJhMDU4YTNjZDgzMjMyZjNiNmMxMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxOS0xMi0xOCAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRM
IHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9hcHBs
eS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5
LmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVl
KToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAg
ICAgICAqIHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAgICAq
IHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0Lmpz
OgorICAgICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICogc3RyZXNzL3JlY3Vyc2l2ZS10YWls
LWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanM6CisKIDIwMTktMTItMTMgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUg
SlNGaXhlZEFycmF5LCBhbmQgdXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5IGluc3RlYWQKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9u
Y2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3It
ZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJjNTBhYzBhMjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxl
bmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCkBAIC0wLDAgKzEsMzYgQEAKKwor
bGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAg
cmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOwor
CitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0
ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24g
dGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25v
SW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0g
MjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsKKyAgICBpZiAobGVu
Z3RoQ2FsbHMrKyAlIDEwID09IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigidGhyb3dpbmcg
YW4gZXhjZXB0aW9uIGluIGxlbmd0aCIpOworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQKK30g
fQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTY7IGkrKykgeworICAgIHRyeSB7CisgICAgICAgIHRl
c3QoYXJyYXkpOworICAgIH0gY2F0Y2ggeyB9Cit9CisKK2N1cnJlbnRBcmdDb3VudCA9IDEwMDsK
K2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVuZ3RoQ2FsbHMgIT09IDEp
CisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMgYi9KU1Rlc3Rz
L3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhiZWU0NWNlMWM3MjgzNjUzODI3MDVkOTlkMzAxYWU2YmNiOGQ4N2EKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1v
bmNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9u
IGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25v
SW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBs
eSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2Fs
bHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwg
Z2V0IGxlbmd0aCgpIHsgbGVuZ3RoQ2FsbHMrKzsgcmV0dXJuIGN1cnJlbnRBcmdDb3VudCB9IH0K
K2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdChhcnJheSk7CisKKwordGVz
dChhcnJheSk7CitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0ZXN0
KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJvcihs
ZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhl
bi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12
YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwppbmRleCAzNjE4Zjhj
YmIzZDMyMTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBjZjQ5ZDg4ZTNmZmU5
MTJiMWUxNmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFy
Z3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKQEAg
LTE4LDggKzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOwogICAg
IGlmIChhLmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAi
ICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVu
Z3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0
Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMubGVuZ3RoICE9PSBi
LmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGgg
bWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5sZW5ndGg7CiAgICAg
Zm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYgKGEuY1tpXSAhPSBi
LmNbaV0pCiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRj
aCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJn
dW1lbnQtY291bnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgt
ZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCmluZGV4IDA0N2ZiMDFmODgzMTQ1Y2M3NTU0ZjVj
ZjcwMWE3MDc0ZjI2N2RlZWUuLjUzZDc1MmRlY2Q3ZDBmMzFiYzJmMWQ3ODk5MWM2OTEwMWYwOGJm
ZjMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1k
aWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZl
LXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwpAQCAtMTgsOCArMTgs
OCBAQCBub0lubGluZShiYXIpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAg
ICAgdmFyIHJlc3VsdCA9IGZvbyg0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0gICAg
ICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVz
dWx0OworICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVjdGVk
IDQyLCBnb3QgIiArIHJlc3VsdCk7CiAgICAgcmVzdWx0ID0gYmFyKDQwLCAyKTsKICAgICBpZiAo
cmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBmb3IgYmFyLCBleHBl
Y3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IEVycm9yKCJXcm9uZyByZXN1
bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386040</attachid>
            <date>2019-12-18 17:23:16 -0800</date>
            <delta_ts>2019-12-18 17:27:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218172300.patch</filename>
            <type>text/plain</type>
            <size>661296</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi41YWZiZjFhODU4NGI0MzMx
OTIzMjZjNjZhYjJiOTU5N2QzNDU3ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGlu
ZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludERhdGEuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlND
OjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6ZHVtcFJlZ2lz
dGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAoSlND
OjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0
b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFu
dFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25z
dCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0ganNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2Jq
ZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBiZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29w
ZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdiMGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJl
Li41OWEwMDQzNDgyYWMyM2UwMmI4NmEzOTY5OThhM2IwNTg1MWIyNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxl
IG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJl
bmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0
b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RG
OjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGlnbmVkQWNjZXNzLmg6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRT
dG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2RjY2UwZjgxZWQ0NGM3NGQ2
MGVhNWEwYzYyOGQ4YmZhZDkzMzA4Zi4uY2NlZjFhZmQ0NWRhMTkzMDFjODZhOWY3NTcyMmJhZGEz
N2M4MzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTI1LDYgKzUy
NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL09wY29kZS5o
CiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAgYnl0ZWNvZGUvT3BlcmFuZHMuaAogICAg
IGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
aAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRiY2U1YmFjZWRjMDVjM2RjMGVhOGIwNDMzNDZkMTUxZDBkZWY0NDEuLmIyNjRmNGVkZDM5
NjI2OTA1ZTFiMjJhODJlMWU0MTUyMzU1Njc0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMzhFQkEzMjNBQjA0Qjgw
MDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZU
TFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRE
NyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERE
RUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzU5Nyw2ICszNTk5LDggQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFj
dFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9
IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMx
RDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
dGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29y
ZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEph
dmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMz
OEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2
MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBwYXRoID0gZnRsL0ZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURD
N0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFD
MzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzYxMSw2ICszNjE1LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3
NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0
QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjND
NTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9y
SGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJh
dG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYz
QzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFj
Y2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNz
Q2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkw
MDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MjEsNiArNTUyOCw3IEBACiAJCQkJMEY0ODUzMjYxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEz
RTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywKKwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAz
ODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLywKIAkJCQkwRjI1RjFBQjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJMEYyNUYxQUMxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01OTQ3LDYgKzU5NTUs
NyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJ
CQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJ
CUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJ
NTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgg
Ki8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAog
CQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdD
MUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2
LDcgKzg1ODUsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVy
YXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2
IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1
NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlB
MzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1
NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFD
NDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2
RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAw
MzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk4LDcgQEAK
IAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJ
CQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJ
CTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90
b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0
b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk5LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIw
Mjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMy
MjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNE
REExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMz
OEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyog
Q0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDMyLDYgKzk0NDUsNyBAQAogCQkJCTBG
OUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3Zl
cnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEVCQTMyM0FCMDRCODAw
MzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBl
dFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2Rl
ZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRi
MmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAot
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihG
dW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRy
PHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NF
UlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQq
IHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBm
M2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBm
MTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2Jl
RnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxU
PihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3Rlcikp
OwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJh
bmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBn
ZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFs
dWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFu
ZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZh
bHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
LCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRP
cGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQg
c2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZz
ZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNl
ZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxp
bmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRp
b24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0
IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAg
ICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFu
ZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJh
bmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9w
ZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVm
IEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQx
Nl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5k
OwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+
IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5k
PGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
RmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3Bl
cmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5n
VmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9w
ZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7
CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhW
ZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRP
cGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVy
YW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAg
VmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJ
bnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCA2MDA2
MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFiNGRiZDI2M2Y0
OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGpp
dC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAg
aWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAgICAgICAgICAg
YXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKQEAgLTE3
OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5h
bCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGpp
dC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMwZWU1OGY1ODgu
LjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFy
YW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBqaXQubWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4
Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2Nh
dGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAg
ICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQg
Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2Vu
ZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFz
cyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50
IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZp
cnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5h
bWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAg
cmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgs
MTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZz
ZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNz
IEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1l
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCkt
PmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZp
cnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIp
Iik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQg
Qnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRl
Y29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNv
ZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZh
bHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2Nr
LT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEw
NzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnBy
aW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1l
KGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVh
bFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1
bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCBy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmly
dHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAg
QmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNp
bmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVy
OwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29u
c3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3
ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1
MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lk
IEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAg
ICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApp
bmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4
ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQg
KzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5k
ZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisg
ICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAg
ICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkK
LSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNC
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAg
ICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hv
dWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hl
Y2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsg
fQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNr
ZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0
dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQog
CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAg
ICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBk
ZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJp
dHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNv
bnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhl
ci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3
OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
aW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAot
ICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50
MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisK
KyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1
aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNo
ZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0
KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5
dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAg
ICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAg
IHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDcx
YmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLmRmMGJkZWIxY2IwZjA1NDA4
MDdlOWFmYTdlMjkzMTRhMTcwYzI3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldh
dGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIs
CiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAg
ICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBh
cmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBk
ZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQog
CiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9wIDp0YWlsX2Nh
bGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5
UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1w
czogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRz
OiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6
IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBAIC04NDUs
NiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQK
KyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6
IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTIs
NyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdp
c3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhiNDNmNDQwLi43
ZGEyMmMyZDJjYzdiZmMxMWQxZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0ZXhwciBib29s
IGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCit7
CisgICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVt
VHlwZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5
aW5nX3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNpemVvZihJbnRU
eXBlMSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50
VHlwZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlw
ZTI+KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsK
KyAgICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKKwor
ICAgIGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN3aXRj
aCAoY29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5vcGNvZGVJRCgp
KSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwg
T3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFs
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZh
cmFyZ3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFs
dWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENvbnN0cnVjdFZh
cmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFy
Z3M6Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdD
b3VudCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIz
MjU5MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0
MjdlZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDgg
QEAgcHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4
TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxv
Y2smLCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShp
bnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3
NGU3OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4Mjgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
TG9jYWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCk7CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+
PSBvdXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFts
b2NhbF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAg
IHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBkMDc2MTA5YTFm
ZGE1Zjk0N2Y1MjBmZTUxNGRkLi42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVjYzYzNmVhMWVi
NWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRp
ZXMuaCIKQEAgLTQwNyw3ICs0MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9u
ZWRTeW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2Zp
bGVyT3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxv
d1Byb2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRj
aGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgog
ICAgICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJv
bFRhYmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7
CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxl
LT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0g
ICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRh
YmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3Rh
bnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIp
OwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3Jl
YXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBh
cmVkIGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0YXRpYyBib29s
IHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlv
biYgdHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXgg
Q29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAg
ICAgIGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENv
ZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZvaWQgQ29kZUJs
b2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNv
bnN0IE9wQ2F0Y2gmCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0ZXJzKCk7ICsr
aSkKICAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSk7CiAKLSAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHByb2ZpbGVzID0g
bWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+KGxpdmVPcGVy
YW5kcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3NpemUgPT0gbGl2
ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGVz
LT5tX3NpemU7ICsraSkKLSAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3Bl
cmFuZCA9IGxpdmVPcGVyYW5kc1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmlsZXMtPm1fYnVm
ZmVyLmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAgIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNp
Z25lZCYgbnVtYmUKIAogICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkp
IHsKICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQ
cm9maWxlcykgewotICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
ICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAppbmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1NmNlNTgxNTBm
NTM0MjY2Li4yNTA2NzI2M2UyNDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2MzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEsNiArMTYxLDcg
QEAgcHVibGljOgogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251
bUNhbGxlZUxvY2FsczsgfQogCiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251
bVZhcnM7IH0KKyAgICBpbnQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAogICAgIGludCog
YWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIyOSwyMCArMjMw
LDIwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkg
Y29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGlu
ZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGluZSBib29sIGlz
S25vd25Ob3RJbW1lZGlhdGUoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA9PSB0aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCisg
ICAgICAgIGlmIChyZWcgPT0gdGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9kZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRleCkuaXNDZWxs
KCk7CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KHJlZykuaXNDZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGlu
ZGV4KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOwor
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9CiAKICAgICBI
YW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWly
ZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4MSwxMCArNTgy
LDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7
IH0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyBy
ZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1
bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC03NzQs
NiArNzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRC
YXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAgIAorICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkgY29uc3Q7CiAg
ICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3Vu
dGVyOyB9CiAKICAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9
CkBAIC04NzQsNyArODc1LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRh
YmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
QnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxDb2RlQ2FjaGUg
bV9kaXJlY3RFdmFsQ29kZUNhY2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0MiwxMCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVj
dXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNlQ29uc3RhbnQo
aW50IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChyZWcu
aXNDb25zdGFudCgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3RhbnRJbmRleCgp
KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwogICAg
IH0KIAogICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4
IDIxMDY4MTNmMGExZWFhNTEzNGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5YTI4NmY4YWFi
ZjRkMzMyZmZmMWU3MWVhM2M4M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBhcHByb3hpbWF0ZUhhc2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9IG51bGxwdHIp
IGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAgIHZvaWQgd2Fs
a1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtVcElubGluZVN0
YWNrKGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBpbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0aGUg
aW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5n
IG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVz
cy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLjQ3YzY1
N2M4ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwx
MiArMjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNz
IGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVt
cHMuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1w
TGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1
YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29s
IHZpcnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBv
aW50KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xp
dmUocmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExp
dmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAg
Ly8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVt
IGNvbXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5p
c20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvciwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxG
YXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApp
bmRleCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5hMGFhN2MwOTI0
NGY5OTU2YmVmMWZiOTgzOGI1NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3Ry
dWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxp
bmVDb2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4
dXBzLgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERv
IG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBz
aWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0
eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVu
IHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24n
dCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVk
IG1hbnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJl
IGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFs
aXplIGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09m
ZnNldCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAg
ICwgdG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5k
KENhbGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiAr
MjIyLDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRt
cE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2Fs
bGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3Qg
cmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3LDkgKzI1Niw5
IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2Nr
OwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKKy8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQg
bm90IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENh
bGxlciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KLWlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNr
KGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSAqdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMzggQEAg
aW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVt
YXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2
ZUNoZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fs
a1VwSW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0
cnVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3Bl
cmFuZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQgb3BlcmFuZCkKK3sKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4g
b3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBp
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKwor
QUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVy
YW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBP
cGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3Bl
cmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/
IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2FsbEZyYW1lLT50
bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FMV0FZU19J
TkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3BlcmFuZChpbmxp
bmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1ZWIxYzY0YTU5
Li5lMDNmYTM5Mzk1OTU1NTJlYmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25jdXJy
ZW50SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVByb2Zp
bGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICA6IG1f
Ynl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQogICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkg
KyBtX29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFz
aCgpICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAgIH0KICAgICAK
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgsNyArNzksNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogCi0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJldHVybiBtX29w
ZXJhbmQ7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRlOiAKICAgICBC
eXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5SGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggMmI2
OWYzNmM3ZmJkYTEwNTU3ODlkZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5Yjk1NmY3OTc4
NmVjODdhYTJjNjlhOGJjMDY3MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApA
QCAtNDIsNyArNDIsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQubV9raW5kID0g
TGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2NrID0gY29kZUJs
b2NrOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0ga2V5LmJ5dGVj
b2RlSW5kZXgoKTsKLSAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJh
bmQoKS5vZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9w
ZXJhbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKENDYWxsSGVscGVy
cyYgaml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBM
YXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5s
YXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQu
b3BlcmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5
T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxv
Y2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0K
QEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpyZXBv
cnRWYWx1ZShKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIExhenlP
cGVyYW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlP
cGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVy
YW5kKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVy
YW5kLmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7
CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oCmluZGV4IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEyZGNmMzM1ZWM4
OGQuLjM2ZDM2OWYwYzAwZmJkNDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0
cnVjdCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZDsKKyAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9
IHU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCBm
MjlmZjlmOTczNmFlYjM3MzQ1OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li5jY2UwODAyZjg5ZDE3ODg2
ODA0NjA5MDdlOTg2YTcwNGJhNmUxZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExMSArMzUsMjE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9w
ZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1
bnNpZ25lZCBtYXhOdW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBv
bmUgdGhhdCBleGlzdHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBl
eGlzdCBiZXR3ZWVuIGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJh
bmQsIExvY2FsT3BlcmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1Ymxp
YzoKKyAgICBPcGVyYW5kKCkgPSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3QgT3BlcmFuZCYp
ID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsgfQor
CisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAgOiBt
X2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAgICAg
ICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5p
c0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3BlcmFu
ZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVyYW5k
KTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0KKyAg
ICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWludDY0
X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBU
bXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9
CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVyYW5k
ICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50
KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcigp
LnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2Nh
bCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5l
IGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBBcmd1bWVudE9wZXJhbmQgfTsK
KyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lz
dGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25z
dCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1
cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIo
KSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6
aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1
ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKwor
aW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAg
T3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VS
VChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNz
ZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRz
KCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNM
aWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6
Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAot
ICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2Nh
bHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVf
djxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3Nh
bWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVm
VHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwg
Y29uc3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBP
cGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVt
VG1wcykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwg
bV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJh
aXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNp
emUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAg
ICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVt
VG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZl
Y3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVz
LmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhw
bGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6
ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3Vt
ZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAg
IHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51
bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxz
ICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhP
cGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBP
cGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3Qg
VCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51
bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZM
b2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJP
ZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVz
Lmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUp
OwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAg
ICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQor
ICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkg
LSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90
IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwg
bnVtYmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMo
KSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNp
emVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVu
dHMpOworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAg
IHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBp
ZHgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7Cisg
ICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51
bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90
IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5
cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCld
OyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBh
cmd1bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVz
W2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90
IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0
UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1
bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1
cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVf
dCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBS
ZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4
KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRL
aW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAo
b3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAg
ICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1
cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQorICAgIFJlZlR5
cGUgYXRGb3Ioc2l6ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBB
cmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBj
YXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwot
ICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6Cisg
ICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1w
bGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZvcihzaXplX3Qg
aWR4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBjb25zdAogICAg
IHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAg
c3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAg
ICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAg
ICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgp
OworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChp
ZHgpOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVf
dCBzaXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVu
c3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1
ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6
ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0g
bnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7Cisg
ICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOworICAgICAgICBz
aXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93
KG5ld1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRp
YWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1f
dmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gVCgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkKKyAgICAgICAg
ICAgIG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRleChvbGROdW1U
bXBzIC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7CisgICAgICAgIGlm
IChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0
aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplIC0g
b2xkTnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9jYWxJbmRleChv
bGROdW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlKQor
ICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0g
VCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0g
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBp
ZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZlRtcHMo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFs
dWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6
ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKworICAgICAg
ICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBp
IDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZh
bHVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlk
eCwgY29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3Miw3NiBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09IFQoKSk7CiAg
ICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRGb3JPcGVyYW5k
SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25z
dFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgoaW5kZXgpOyB9
CisKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25z
dAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJn
dW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAg
ICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCi0g
ICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBj
b25zdAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAg
ICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmRJbmRleChv
cC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChvcC52YWx1ZSgp
KTsKICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBSZWZUeXBl
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2Nh
bChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAg
ICB9CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisg
ICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlzVG1wKCkp
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3QgVCYgb3BlcmFu
ZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3Rf
Y2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAgIGNvbnN0IFQm
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5k
KSk7IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJh
bmQpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0K
ICAgICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgYm9vbCBo
YXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5k
LnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29sIGhhc09wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoT3BlcmFu
ZCBvcCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJlZy5vZmZzZXQo
KSk7CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AudmFs
dWUoKSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wLnZh
bHVlKCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc09w
ZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE9w
ZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChP
cGVyYW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy0+b3Bl
cmFuZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUpCi0gICAgewot
ICAgICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFsdWUpOwotICAg
IH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tp
bmRleF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4
XTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4g
YXQoaW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xvY2FsKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IG9w
ZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZUeXBlIGF0KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgUmVmVHlw
ZSBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0
UmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQotICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZzZXQoKTsK
LSAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgZWxzZSBp
ZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAg
ICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBpbmRleCAtIChu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAg
ICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1
bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xv
Y2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kp
CkBAIC0yNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFT
U0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAg
LTI2NSw5ICszNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRz
IG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVj
dG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBt
X251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9u
dW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2
YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBA
IC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFu
ZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAg
ICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnBy
aW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQg
T3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIs
IGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7
CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJP
ZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5k
ZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2Nh
bEluZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRl
eCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1w
IiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJj
MTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2Rl
VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQor
ICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFy
c2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUp
CiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmlu
ZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMwODJiMGEyNjNj
MzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Np
b25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYg
ZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29s
IGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAg
IHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisK
ICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7
IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0
ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0
YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0
YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQxOSw2ICs0MjEs
NyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2ln
bmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhB
Z2UpOworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3Vy
cmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTEx
ODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5YTY5ZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3
NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5
dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1
Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3Np
emUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUg
c3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxl
cwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1
ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1fc2l6ZSAq
IHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyhtX3NpemUgKiBz
aXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVy
LmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZt
X2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
fQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0u
flZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ld
Ln5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAg
ICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7CisgICAgTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVm
M2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCkBAIC0zNSwy
MiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1i
ZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSk7CiAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOwor
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51
bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CiAg
ICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJl
cihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJv
eGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBjYXNlIEJvb2xl
YW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJu
IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAj
ZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKICNl
bmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZDhm
MThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJiYmNjNGZmOTdh
NjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4NmJhYjEyZjZj
Y2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRk
ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJl
Z2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdp
c3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBi
b29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lz
dGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8IDA7CiB9CiAK
LWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wg
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3Bl
cmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBmcmllbmQgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGludCk7CiAKKyAg
ICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZm
ZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZ2lz
dGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+KTsKIAogICAg
IFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50
IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wg
aXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVy
KTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50Pihz
bG90KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3Zp
cnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNM
b2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJl
Z2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzSGVhZGVy
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdp
c3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
cnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NF
UlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lz
dGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0
YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29u
c3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lz
dGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxS
ZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZm
ZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMgaW50IGxvY2Fs
VG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAgIHN0YXRpYyBp
bnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQog
ICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CmluZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMuLjhkMmE3ZmI4
MjQ3NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0x
MTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6
ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAgICBtX3BhcmFt
ZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1ldGVy
ID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgp
KTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFy
YW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb2RlIGJsb2Nr
IGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IHBh
cmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgotICAgIG1f
dGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkp
OyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAgICAgYm9vbCBu
b25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVv
Zj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
PigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAg
ICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAg
ICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkg
ewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsK
KyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAg
ICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJl
Z2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0
dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZh
bHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAg
ICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAt
MzIyOSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNh
bGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6
ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRz
IDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZz
ZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMx
ZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZm
ZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0
aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wg
aXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
OyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0
SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4
IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTliMTIzZDRkODli
YTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50
IGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBpbmRleCkKICAg
ICAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVl
OwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWEx
ZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAK
QEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9p
ZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAg
ICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9
CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVh
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBE
T01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAg
IG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOwor
ICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91
dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2
ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFu
Z2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3Zh
bHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKwor
ICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChm
YWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBh
eWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFu
ZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBi
b29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
QVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtp
bmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNv
ZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAm
JiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0
SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0K
KyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFu
ZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFj
dEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRh
Y2I1NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uNWQ5ZTE3YzkwYTJjNWI1MTgy
YjM2NTYxMjg3NjFkODUzNzE4NDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4
MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFs
dWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgp
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9j
YWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
dXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0
YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5k
KGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3Vs
ZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAo
dmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3Rh
dGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0
ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJn
dW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVu
dCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0
dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJU
KCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1
OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sg
aWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVy
bgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBt
X3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFr
ZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMzU4LDcgKzIzNjQsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFyZ3Vt
ZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUub3Bl
cmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9s
ZGluZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmgKaW5kZXggZDczMjQ3YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4u
ODljMDhmYTA4MGNlYTMyZmQ5YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYy
ZWRhNGFkODhlOWI5N2FhZDVmNGY5MzkyMzc2MjE5NTJhZWY4NC4uZmEyNGM2OWQwZmVjYjdiYWZj
NzA1ZDg1YzNjNWFkMGM2NTM5MWU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSAr
MzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNw
cmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+
YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgpAQCAtNDkzLDEwICs0OTYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0
byBhbiBhcmd1bWVudCBvciBsb2NhbCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQg
U2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXJlZy5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJl
ZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAg
ICAgICAgICB9CkBAIC01NjAsMTIgKzU2MywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9j
ayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrKSB7CkBAIC02MjcsNyArNjMwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwgTm9PcENsb2JiZXJpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChBYnN0cmFjdEhlYXAgaGVhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXls
b2FkKCkudmFsdWUzMigpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9w
ZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04NDUsOSArODQ4
LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50
aXR5T24ocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2Fu
ZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVmFyYXJnc0xlbmd0
aCBjYW4gZXhpdCwgc28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0
cnVlKTsKKworCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24o
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRl
LCBub2RlSW5kZXgsIG9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczogewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0
ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTg2MiwxMCArODc5LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZz
ZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+
Y291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhp
bnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzTm9kZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
UHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJh
cmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLApAQCAtODc0LDE0ICs4OTEsMTUgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgICAgICBhdXRvIHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUq
IHZhbHVlLCB1bnNpZ25lZCBzdG9yZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2Fu
RXhpdCksIE9wSW5mbyhyZWcub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRF
eGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRn
ZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcpLCBFZGdl
KHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRT
dGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CkBAIC0xMDE5LDkgKzEwMzcs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdz
KCkpIHsKLQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0
b3J5TWluaW11bSwgdmFyYXJnc0RhdGEtPmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWlu
aW11bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0
aWxpdGllcy5jcHAKaW5kZXggNjI2MTEyM2NiZmVjM2ViYTE5NWQwOWI5MzEwMjZmMjZjNzI1ODQ3
Ni4uMjA2ZDZmYmRjNTRhMzZjYjg0MThhOGIzODU0NmQ4NzU3Nzk5MDFiZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAt
MzIsMTEgKzMyLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9v
bCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7Cisg
ICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcu
dG9Bcmd1bWVudCgpKSB8fCByZWcuaXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MiwxMyArNTYsMTMgQEAgYm9vbCBhcmd1bWVudHNJ
bnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFs
UmVnaXN0ZXIKICAgICByZXR1cm4gcmVnID49IGFyZ3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1l
bnRTdGFydCArIG51bUFyZ3VtZW50czsKIH0KIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAg
ICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgcmVnKTsKKyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2
ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwg
b3BlcmFuZCk7CiB9CiAKIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgK
LSAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25l
ZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luKQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0
aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBv
cmlnaW4sIGJvb2wgYWRkVGhpcykKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQu
Z3JhcGgoKTsKIApAQCAtNjksMTEgKzczLDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVu
dHNBcnJheUxlbmd0aCgKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVm
ZmVyCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRz
IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNw
cmVhZCwKICAgICAgICAgYXJndW1lbnRzLT5vcCgpKTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9w
KCkgPT0gUGhhbnRvbVNwcmVhZCkKKyAgICAgICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVu
dHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGFyZ3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBu
b2RlSW5kZXgsIG9yaWdpbiwgYWRkVGhpcyk7CisKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZO
b25TcHJlYWRBcmd1bWVudHMgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVh
ZEFyZ3VtZW50cyA9IGFkZFRoaXM7CiAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJn
dW1lbnRzLT5iaXRWZWN0b3IoKTsKICAgICAgICAgTm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVu
KCk7IGkrKykgewpAQCAtMTAzLDcgKzExMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVu
dHNBcnJheUxlbmd0aCgKIAogICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZm
ZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAg
ICByZXR1cm4gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9kZUlu
ZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVC
dXR0ZXJmbHkqPigpLT5sZW5ndGgoKSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4s
IGpzTnVtYmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigp
LT5sZW5ndGgoKSArIGFkZFRoaXMpKTsKICAgICB9CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKQEAgLTExMyw3ICsxMjAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRz
QXJyYXlMZW5ndGgoCiAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRz
LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJn
dW1lbnRzU2l6ZSA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3Vt
ZW50c1NpemUgLT0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEy
OSwxNCArMTM2LDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgK
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcElu
Zm8oQXJpdGg6OlVuY2hlY2tlZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJV
c2UpLAogICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAg
ICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJl
cihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCArICFhZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAg
IGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkgewogICAgICAgICAvLyBUaGUgYWJvdmUgc3Vi
dHJhY3Rpb24gbWF5IHByb2R1Y2UgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMg
bm9uLXplcm8uIFdlIGNvcnJlY3QgdGhhdCBoZXJlLgogICAgICAgICByZXN1bHQgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwg
QXJpdGhNYXgsIG9yaWdpbiwgCiAgICAgICAgICAgICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAK
LSAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgs
IG9yaWdpbiwganNOdW1iZXIoMCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRo
aXMpLCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50
MzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzVXRpbGl0aWVzLmgKaW5kZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNk
ZGYxMi4uNzRmOTM5ZTgxNjIyZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0z
MSwxMSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29s
IGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyKTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZp
cnR1YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2Fs
bEZyYW1lKiwgT3BlcmFuZCk7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSog
Y2FuZGlkYXRlLCBPcGVyYW5kKTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5
TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9k
ZUluZGV4LCBOb2RlT3JpZ2luKTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMs
IHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2Nl
NTQzZjU3ZjM2Y2Q2MWRlY2MyOGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2
ODEwNGQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgKQEAgLTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNB
dFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7
IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Js
b2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUm
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChP
cGVyYW5kIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1
ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwu
YXJndW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNj
MDljNzdmODAyOWJhNS4uYzJiNTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNw
cApAQCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQog
CiB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29k
ZU9yaWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHko
bV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwg
QXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+
IGxvY2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUs
Ci0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJh
bmQgcmVnKSB7CiAgICAgICAgICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxz
Lm9wZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fs
c0NvcHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmgKaW5kZXggNTM1NTI1NjAyM2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJi
ZjE4MDI1YTU2MTA1OTZkYTI0ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVj
dCBBdmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNGdW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dp
dGhMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0
IEFkZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFu
ZCBvcCwgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAg
ewotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChy
ZWcpOworICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFu
ZChvcCk7CiAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAppbmRleCAwNTg0NDk2M2U2MTBlZDI5M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5l
MjFiMjhiNTIyMWYxNTYxOGI4MDY0YTNhN2IyZDc4NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25l
ZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9j
ayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5z
aWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkK
ICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2sp
CiAgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNo
ZWQpCkBAIC00OCwxMSArNDgsMTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlz
TGlua2VkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZh
cmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMs
IG51bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFk
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0
VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZh
bHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsK
IH0KQEAgLTcwLDYgKzcwLDE1IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2ln
bmVkIG5ld051bUxvY2FscykKICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5z
dXJlTG9jYWxzKG5ld051bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAor
dm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAg
dmFyaWFibGVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRU
YWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMo
bmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7Cisg
ICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywg
QWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNl
VGVybWluYWwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCBy
ZXN1bHQgPSBmaW5kVGVybWluYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKaW5kZXggYjVhZGYwOTEyZDA5NDJiZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4u
MWRkMzhjNzkwOGRjNmY0ZDFiMDg1YmM4ZTA2MjU0ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKQEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVm
IFZlY3RvcjxOb2RlKiwgOD4gQmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAgICBCYXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
TG9jYWxzLAorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51
bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAg
ICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2
b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJl
VG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIXNpemUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrSW5zZXJ0aW9uU2V0LmNwcAppbmRleCA3NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5
OTllMDQ2MGY5Li4wMDhjZjUyMjY5NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90
IGluZGV4LCBSZWY8QmFzaWNCbG9jaz4mJiBibG9jaykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNl
cnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewot
ICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRl
Y29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9w
dFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZlRtcHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNS
ZWFjaGFibGUgPSB0cnVlOwogICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGlu
c2VydChpbmRleCwgV1RGTW92ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMx
ZTQ5OWRjOWU4NDQwOGI3Li5kMDY0N2NmNWQ5ODZlMGE5ZGU3ZmI1NDRkZWNlYTQyMjU0NjViMGRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cApAQCAtMTExLDYgKzExMSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdy
YXBoLmZyZWV6ZShqc051bWJlcigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5u
dW1UbXBzKCkpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVt
UGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2
ICsxNDAsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3Vy
ZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0KIAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNp
Z25lZCBuZXdOdW1UbXBzKQorICAgIHsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZVRt
cHM6IHRyeWluZyB0byByYWlzZSBtX251bVRtcHMgZnJvbSAiLCBtX251bVRtcHMsICIgdG8gIiwg
bmV3TnVtVG1wcywgIlxuIik7CisgICAgICAgIGlmIChuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisg
ICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAg
IH0KKworCiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKQEAg
LTI3MCwyNSArMjgyLDMzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9j
ayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5r
QmxvY2tzKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNC
bG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQg
cHJvZ3Jlc3NDaGVja3BvaW50KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0
ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2tw
b2ludCgpICsgMSk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8g
T1NSIGV4aXQuCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgYWRkVG9HcmFwaChF
eGl0T0spOworCisgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CisgICAgfQorCisgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAg
IEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXND
b25zdGFudCgpKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0Rh
dGEuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICByZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEubGFzdCgpOwogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5k
cy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlKiBnZXREaXJlY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgTm9kZSogZ2V0RGlyZWN0KE9wZXJhbmQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAg
ICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
LmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3Vt
ZW50KG9wZXJhbmQpOworICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpOwogCi0gICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KLSAgICAgICAg
cmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZ2V0TG9jYWxPclRtcChv
cGVyYW5kKTsKICAgICB9CiAKICAgICBOb2RlKiBnZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CkBAIC0yOTgsOCArMzE4LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVuc2lnbmVkIG9sZFNp
emUgPSBtX2NvbnN0YW50cy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+
PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSkgewogICAgICAgICAgICAg
ICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrID0gKm1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29u
c3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQpOworICAgICAg
ICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSkgewogICAgICAg
ICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5kZXggKyAxKTsKICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsgaSA8IG1fY29uc3RhbnRz
LnNpemUoKTsgKytpKQpAQCAtMzU4LDkgKzM3OCwxMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBp
bml0aWFsaXppbmcgbG9jYWxzIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlvbi4KICAgICAgICAgSW1t
ZWRpYXRlTmFrZWRTZXQKICAgICB9OwotICAgIE5vZGUqIHNldERpcmVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKwor
ICAgIE5vZGUqIHNldERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQs
IE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBhZGRUb0dyYXBoKE1v
dkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwogCiAgICAgICAgIC8vIFdlIGNhbid0IGV4
aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMgY2hhbmdlZC4KICAgICAg
ICAgbV9leGl0T0sgPSBmYWxzZTsKQEAgLTM3NCw3ICszOTUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzKTsKICAgICB9Ci0gICAgCisK
ICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpCkBAIC0zOTIsMTgg
KzQxMywxNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
ID09IG1fY3VycmVudEluZGV4KTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7
CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwg
bm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwog
ICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsK
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRp
bmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUu
Ci0gICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgTm9kZSog
Z2V0TG9jYWxPclRtcChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBs
b2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgQVNTRVJUKG9w
ZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CisgICAgICAgIE5vZGUqJiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZh
cmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAgICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVh
dGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCkBAIC00MjgsMjAg
KzQ0OCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9w
ZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7
Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0g
bm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIE5vZGUqIHNldExvY2FsKGNv
bnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
Tm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICBOb2RlKiBzZXRM
b2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVyYW5kIG9wZXJh
bmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgeworICAg
ICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8IG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAg
ICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3JpZ2luQ2hhbmdlKG1fY3VycmVudFNlbWFudGlj
T3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVy
YW5kLnRvTG9jYWwoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0
ZU5ha2VkU2V0KSB7Ci0gICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0
aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNUbXAoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgp
KSA+PSBtX251bVRtcHMpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oKmlubGluZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiQmFkIG9wZXJhbmQ6ICIsIG9wZXJhbmQsICIgYnV0IGN1cnJlbnQgbnVtYmVy
IG9mIHRtcHMgaXM6ICIsIG1fbnVtVG1wcywgIiBjb2RlIGJsb2NrIGhhczogIiwgbV9wcm9maWxl
ZEJsb2NrLT5udW1UbXBzKCksICIgdG1wcy4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCAmJiAhb3Bl
cmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3Vt
ZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKHJlZyk7CiAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChv
cGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgu
bmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdp
c3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIo
KSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgICAg
ICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQogCkBAIC00NTEsNyArNDc3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0Zh
aWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBCYWRJbmRleGluZ1R5cGUpKTsK
ICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgfQogCkBAIC00ODMsMjAgKzUwOSwyMSBAQCBwcml2YXRlOgogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2Rl
T3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZh
bHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0QXJndW1lbnQo
Y29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSog
dmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CiAgICAgICAgIFNldEZv
clNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwg
c2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50
b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IHJlZy50b0FyZ3VtZW50
KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAg
Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShyZWcpOwogCiAgICAgICAg
IC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBmb3IgJ3RoaXMnLiBJZiAndGhpcycg
aXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8gdGhlbiBtYWtlIHN1cmUgdGhhdCBpdCdzIG5l
dmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1bWVudCB8fCBtX2dyYXBoLm5lZWRzRmx1c2hl
ZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQp
Ci0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCk7CisgICAgICAgICAgICAgICAg
Zmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFhcmd1
bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0
cnVjdCkKQEAgLTUzMiwxNCArNTU5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpbnQgYXJn
dW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSAtIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBzdGFjay0+
bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICBBcmd1bWVudFBv
c2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihPcGVyYW5kIG9wZXJhbmQp
CiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAg
IHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVu
dCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFu
ZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFkZEZs
dXNoRGlyZWN0RnVuYz4KQEAgLTU1MCw5ICs1NzksOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
QVNTRVJUKCFtX2dyYXBoLmhhc0RlYnVnZ2VyRW5hYmxlZCgpKTsKICAgICAgICAgICAgIG51bUFy
Z3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsKICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAg
ICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAg
ICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5k
KGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgICAgICBhZGRGbHVz
aERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAg
ICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGlu
ZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3IoaW5saW5lQ2FsbEZyYW1lKS0+bnVtUGFyYW1ldGVycygpOwogCkBAIC01NzUsNiArNjA0LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNz
Rm9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0
byBoYW5kbGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZs
dXNoZWQgdG8gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNz
QXRCeXRlY29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dy
YXBoLmFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJP
cmlnaW4pKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGxpdmVuZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBAIC01ODQsMjcgKzYxNCwyNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAg
ICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAg
ICAgfQogCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJn
dW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9w
ZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7
CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50
UG9zaXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAg
IHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJn
dW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFu
dG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0
aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAg
ICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCku
aXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwog
ICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAg
CkBAIC02MTQsMjYgKzY0NCwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0g
YWRkVG9HcmFwaChub2RlVHlwZSwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAg
IGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRk
VmFyaWFibGUodmFyaWFibGUpOwogICAgIH0KIAotICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhh
bnRvbUxvY2FsPihvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAg
fQogCiAgICAgdm9pZCBmbHVzaChJbmxpbmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQog
ICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1l
KiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OworICAgICAgICBh
dXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJh
bmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVT
dGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAog
ICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNo
RGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZs
dXNoRGlyZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0g
WyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2Nh
bERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07
CisgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJh
bWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9Owog
ICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1wbChjdXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVz
aERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3OTAs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBF
ZGdlKGNoaWxkMykpOwogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0K
KyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IGNoaWxkMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAg
cmV0dXJuIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhvcGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVy
YW5kLnZhbHVlKCkpLCBjaGlsZDEpOworICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVU
eXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hp
bGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUq
IHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwOTEsOCArMTEyNSwxMCBAQCBwcml2YXRl
OgogCiAgICAgLy8gVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlv
bi4KICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxv
Y2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBU
aGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRl
Y29kZSBmb3IgdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8v
IFRoZSBtYXggbnVtYmVyIG9mIHRlbXBzIHVzZWQgZm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBP
U1IgZXhpdCB0byBjaGVja3BvaW50LgorICAgIHVuc2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBU
aGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdl
IG5lZWQgdG8KICAgICAvLyBwcmVhbGxvY2F0ZSBmb3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNh
bGxzIGZyb20gdGhpcyBmcmFtZS4gVGhpcwogICAgIC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2Fs
bEZyYW1lIHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwx
NCArMTE5NSwxNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgfklubGluZVN0YWNrRW50
cnkoKTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CisgICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5k
KE9wZXJhbmQgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lu
bGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKKworICAgICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3BlcmFu
ZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zm
c2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3Rh
bnQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXND
b25zdGFudCgpKTsKIAotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
Lm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0OwogICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNzUsMTMgKzEyMTQsOCBA
QCBwcml2YXRlOgogICAgIElDU3RhdHVzQ29udGV4dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAg
ICAgCiAgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9v
cmlnaW47Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUq
IG1fdmFsdWU7Ci0gICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwotICAgICAgICAKICAgICAgICAg
RGVsYXllZFNldExvY2FsKCkgeyB9Ci0gICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2Rl
T3JpZ2luJiBvcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlKQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYg
b3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAg
ICAgICAgICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCkBAIC0xMTk0LDggKzEyMjgsMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmln
aW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBw
YXJzZXItPnNldExvY2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7
CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29w
ZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAgICAgICAgIH0KKworICAgICAgICBDb2RlT3Jp
Z2luIG1fb3JpZ2luOworICAgICAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSog
bV92YWx1ZSB7IG51bGxwdHIgfTsKKyAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsK
ICAgICAKICAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBA
IC0xMjA4LDcgKzEyNDcsNyBAQCBwcml2YXRlOgogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6
OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsK
ICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0g
YWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBt
X251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpu
ZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMs
IG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7
CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBp
bmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1Rv
cC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKQEAgLTEyMjAsNyArMTI1OSw3IEBAIEJh
c2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxv
Y2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBh
ZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywg
bV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigq
bmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2Nh
bHMsIG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRy
KCk7CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJu
IGJsb2NrUHRyOwpAQCAtMTQyMyw3ICsxNDYyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMK
ICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2Fz
dDxpbnQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxs
RnJhbWUgaXMgVmFyYXJncywgd2UgZG8gbm90IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBh
Y3R1YWxseSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MK
LSAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVt
YmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJj
b250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8g
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFs
bHkgZmlsbGVkIGFyZ3VtZW50cyBieSB4a0xvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRo
ZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKICAgICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQg
dG8ganVtcCBpbnRvLgogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDQ5LDcgKzE0ODgsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
Q2FsbFZhcmlhbnQgYwogICAgICAgICAvLyBXZSBtdXN0IHNldCB0aGUgY2FsbGVlIHRvIHRoZSBy
aWdodCB2YWx1ZQogICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUpIHsK
ICAgICAgICAgICAgIGlmIChzdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKLSAgICAgICAgICAgICAgICBzZXREaXJlY3Qoc3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgY2FsbFRhcmdldE5vZGUs
IE5vcm1hbFNldCk7CisgICAgICAgICAgICAgICAgc2V0RGlyZWN0KHJlbWFwT3BlcmFuZChzdGFj
a0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgY2FsbFRh
cmdldE5vZGUsIE5vcm1hbFNldCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYWRkVG9H
cmFwaChTZXRDYWxsZWUsIGNhbGxUYXJnZXROb2RlKTsKIApAQCAtMTYxNCwxNiArMTY1MywxOCBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgIEFTU0VSVCghKG51bWJlck9mU3RhY2tQYWRk
aW5nU2xvdHMgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0QWZ0ZXJGaXh1cCA9IHJlZ2lzdGVyT2Zmc2V0IC0gbnVtYmVyT2ZTdGFja1BhZGRpbmdT
bG90czsKICAgICAKLSAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1
cCkpLm9mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAgT3Bl
cmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1
cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgCiAg
ICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
U3RhcnQpLnRvTG9jYWwoKSArIDEgKworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xv
Y2FsKCkgKyAxICsKICAgICAgICAgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsKICAgICAKKyAgICBlbnN1cmVUbXBzKChtX2lu
bGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51bVRtcHMoKSk7CisKICAgICBzaXplX3QgYXJn
dW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsK
IAogICAgIGlmIChyZXN1bHQuaXNWYWxpZCgpKQotICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCkudmlydHVhbFJlZ2lzdGVyKCk7CiAKICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlhYmxlID0gbnVsbHB0cjsKICAgICBpZiAoY2Fs
bGVlLmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAtMTYzNiw3ICsxNjc3LDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCwgQ2EKIAogICAgIElubGluZVN0YWNrRW50cnkqIGNhbGxlclN0YWNrVG9wID0gbV9p
bmxpbmVTdGFja1RvcDsKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhp
cywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxlZS5mdW5jdGlvbigpLCByZXN1bHQsCi0gICAg
ICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CisgICAgICAgIGlubGluZUNh
bGxGcmFtZVN0YXJ0LnZpcnR1YWxSZWdpc3RlcigpLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywga2luZCwgY29udGludWF0aW9uQmxvY2spOwogCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUg
YWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgogICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5k
ZXggPSBtX2N1cnJlbnRJbmRleDsKQEAgLTE2NzEsOSArMTcxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIENhCiAgICAgICAgIC8vIEhvd2V2ZXIsIHdoZW4gd2UgYmVnaW4gZXhlY3V0aW5nIHRo
ZSBjYWxsZWUsIHdlIG5lZWQgT1NSIGV4aXQgdG8gYmUgYXdhcmUgb2Ygd2hlcmUgaXQgY2FuIHJl
Y292ZXIgdGhlIGFyZ3VtZW50cyB0byB0aGUgc2V0dGVyLCBsb2M5IGFuZCBsb2MxMC4gVGhlIE1v
dkhpbnRzIGluIHRoZSBpbmxpbmVkCiAgICAgICAgIC8vIGNhbGxlZSBtYWtlIGl0IHNvIHRoYXQg
aWYgd2UgZXhpdCBhdCA8SEVSRT4sIHdlIGNhbiByZWNvdmVyIGxvYzkgYW5kIGxvYzEwLgogICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0
ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRU
b0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGlu
dCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0KSwgdmFsdWUpOwogICAgICAg
ICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29k
ZU9yaWdpbigpLCBhcmd1bWVudFRvR2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xNzE3LDE2ICsxNzU4LDE2IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIEluIHN1Y2ggY2FzZXMsIHdlIGRvIG5vdCBuZWVk
IHRvIG1vdmUgZnJhbWVzLgogICAgICAgICBpZiAocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwICE9
IHJlZ2lzdGVyT2Zmc2V0KSB7CiAgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3At
PnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVu
dFRvR2V0KTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpbmRleCkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFy
Z3VtZW50VG9TZXQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBh
cmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGluZGV4KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZI
aW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHZhbHVlKTsKICAgICAgICAgICAgICAgICBtX3Nl
dExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCks
IGFyZ3VtZW50VG9TZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJpdHlG
aXh1cENvdW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwg
dW5kZWZpbmVkKTsKKyAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1v
dkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdW5kZWZpbmVkKTsKICAgICAgICAgICAgIG1f
c2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4o
KSwgYXJndW1lbnRUb1NldCwgdW5kZWZpbmVkLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAg
ICAgfQogCkBAIC0xODkzLDEyICsxOTM0LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAg
ICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsVmFyaWFudCwgY2FsbFRhcmdldE5vZGUsIHRo
aXNBcmd1bWVudCk7CiAgICAgICAgIAogICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCA9Ci0gICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgZW5zdXJlTG9jYWxzKFZpcnR1YWxS
ZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgICAgICAKICAg
ICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0
YXJ0KSkub2Zmc2V0KCk7CisgICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lu
bGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQp
KS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEuYWRkKCk7CiAgICAgICAg
IGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkQXJndW1lbnRTdGFydCArIDEp
OwpAQCAtMTkwNiwxMSArMTk0NywyNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJh
cmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAg
ICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7CiAgICAgICAgIGRhdGEtPmxpbWl0ID0g
bWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1p
bmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxPcCA9
PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKQotICAgICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJk
VmFyYXJncywgT3BJbmZvKGRhdGEpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkVG9H
cmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsK
KworICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAg
ICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnQ7CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSgpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKEdldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlubGluZUNh
bGxGcmFtZSgpLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0g
Z2V0RGlyZWN0KHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUoKSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1
bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUo
anNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkp
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwg
YXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1
bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQpOworICAgICAgICAgICAgYXV0byBhcmdDb3Vu
dFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChPcGVyYW5kKFRtcE9wZXJhbmQs
IE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgICAgICBzZXREaXJlY3QoYXJnQ291
bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0aCwgT3BJbmZvKGRhdGEpLCBhcmd1bWVudHMp
KTsKKyAgICAgICAgICAgIHByb2dyZXNzQ2hlY2twb2ludCgpOworCisgICAgICAgICAgICBhZGRU
b0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldExvY2FsT3JUbXAoYXJnQ291bnRU
bXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBMb2FkVmFy
YXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBuZWVkIHRvIGtlZXAgYWxpdmUgY2FsbFRhcmdl
dE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAvLyBhbmQgYXJndW1lbnRzQXJndW1lbnQgZm9y
IHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdlIG9ubHkgbmVlZCBhIFBoYW50b20gZm9yCkBA
IC0xOTIyLDE0ICsxOTc2LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIC8v
IFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5z
ZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAvLyBiZWZvcmUgU1NBLgogICAgICAgICAKLSAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50
VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoZGF0YS0+Y291bnQpOwogICAgICAgICAv
LyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUg
Zmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAogICAgICAgICAvLyBtYXR0ZXIgdmVyeSBt
dWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGFuZCBGbHVzaGVz
IGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAgICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxp
dHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnByZWRpY3QoU3BlY0ludDMyT25seSk7CiAgICAg
ICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9maXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAg
ICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnREZWZpbml0
ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1l
bnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3Bl
cmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50Q291bnQpOwogICAgICAg
ICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNB
cmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgdW5zaWduZWQgbnVtU2V0QXJn
dW1lbnRzID0gMDsKQEAgLTE5NTMsNyArMjAwNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3Vt
ZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVudHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNl
dEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERlZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkp
OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0
QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1TZXRBcmd1bWVudHM7CiAgICAgICAgIH0KICAg
ICB9OwpAQCAtMjA1Myw3ICsyMTA3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRp
b25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIC8vIHlldC4KICAg
ICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0OiAiLCByZWdpc3Rlck9mZnNldCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgVkVSQk9TRV9MT0coIkNhbGxl
ZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcsICJcbiIpOwogICAgIHNldERpcmVjdChjYWxs
ZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOwogCkBAIC01MTAy
LDcgKzUxNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgICAgICAg
ICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBG
cm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5m
cmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5
dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRv
R3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVuUmVnRXhwKSwganNDb25zdGFudChqc051bWJl
cigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19yZWdleHApOwogICAgICAg
ICB9CkBAIC02MTc4LDcgKzYyMzIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPnNpemUoKSB8fCAobV9ncmFwaC5jb21waWxhdGlvbigpICYmIG1fY3VycmVudEJsb2Nr
LT5zaXplKCkgPT0gMSAmJiBtX2N1cnJlbnRCbG9jay0+YXQoMCktPm9wKCkgPT0gQ291bnRFeGVj
dXRpb24pKTsKIAotICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVm
ZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsKIAogICAgICAgICAgICAgaWYgKCFidWZmZXIp
IHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7IC8vIFRoaXMgY2F0Y2gg
aGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUg
bWFpbiB0aHJlYWQuCkBAIC02MTk1LDcgKzYyNDksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5tX2xvY2spOwogCi0gICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewog
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBw
cm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCkBAIC02MjIzLDE0ICs2Mjc3LDE0IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBt
X2V4aXRPSyA9IGZhbHNlOyAKIAogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMg
PSAwOwotICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBhZGRUb0dyYXBoKEV4dHJhY3RDYXRjaExvY2FsLCBPcEluZm8obnVt
YmVyT2ZMb2NhbHMpLCBPcEluZm8obG9jYWxQcmVkaWN0aW9uc1tudW1iZXJPZkxvY2Fsc10pKTsK
ICAgICAgICAgICAgICAgICArK251bWJlck9mTG9jYWxzOwotICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoTW92SGludCwgT3BJbmZvKHByb2ZpbGUubV9vcGVyYW5kKSwgdmFsdWUpOworICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgbG9jYWxzVG9TZXQudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG9wZXJhbmQsIHZhbHVlKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChudW1i
ZXJPZkxvY2FscykKQEAgLTYzNTgsNyArNjQxMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9q
bmVxX3B0cjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxUHRyPigpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50
ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSkpOworICAgICAg
ICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyht
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlcikpOwogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1w
VGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewpAQCAtNjgyNiw4ICs2ODgwLDggQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBv
cF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7
CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5pc0NvbnN0YW50KCkg
JiYgYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUuaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIEZy
b3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlLm9m
ZnNldCgpKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFw
aC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkpOworICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25n
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2lu
aXRpYWxWYWx1ZSkpOwogICAgICAgICAgICAgTm9kZSogc2NvcGUgPSBnZXQoYnl0ZWNvZGUubV9z
Y29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52aXJvbm1lbnQgPSBhZGRUb0dyYXBo
KENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1ib2xUYWJsZSksIE9wSW5mbyhpbml0aWFsVmFs
dWUpLCBzY29wZSk7CiAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGxleGljYWxFbnZp
cm9ubWVudCk7CkBAIC02ODU3LDcgKzY5MTEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gbG9hZHMgZnJvbSB0aGUgc2Nv
cGUgcmVnaXN0ZXIgbGF0ZXIsIGFzIHRoYXQgd291bGQgcHJldmVudCB0aGUgREZHIGZyb20gdHJh
Y2tpbmcgdGhlCiAgICAgICAgICAgICAvLyBieXRlY29kZS1sZXZlbCBsaXZlbmVzcyBvZiB0aGUg
c2NvcGUgcmVnaXN0ZXIuCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgICAgIE5v
ZGUqIGNhbGxlZSA9IGdldChDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwogICAgICAgICAgICAgTm9k
ZSogcmVzdWx0OwogICAgICAgICAgICAgaWYgKEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbGVl
LT5keW5hbWljQ2FzdENvbnN0YW50PEpTRnVuY3Rpb24qPigqbV92bSkpCiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gd2Vha0pTQ29uc3RhbnQoZnVuY3Rpb24tPnNjb3BlKCkpOwpAQCAtNzI3NSw4
ICs3MzI5LDEwIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFj
a0VudHJ5KAogICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywg
YW5kIHdlIGFscmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAv
LyBwbGFuIGZpbmlzaGVzLgogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2suc2V0V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
KTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1f
aW5saW5lQ2FsbEZyYW1lID8gbV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQg
OiAwKSArIG1fY2FsbGVyLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgp
IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgICAgICBtX2lubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID09IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAg
ICAgICAgaWYgKGNhbGxlZSkgewogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAg
IG1faW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsID0gZmFsc2U7CkBAIC03NjM4LDcgKzc2
OTQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKIAogICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNzY1OCwyNCArNzcxNCwyNCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2
aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBv
cCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBp
bnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtYXBwaW5nLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9w
ZXJhbmQpID0gdmFyaWFibGU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5s
aW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOworICAgICAg
ICAgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
LmlzQXJndW1lbnQoKSAmJiAhYXJndW1lbnQuaXNIZWFkZXIoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uKj4mIGFyZ3VtZW50cyA9
IG1faW5saW5lQ2FsbEZyYW1lVG9Bcmd1bWVudFBvc2l0aW9ucy5nZXQoaW5saW5lQ2FsbEZyYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbYXJndW1lbnQudG9Bcmd1
bWVudCgpXS0+YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUlu
ZGV4LCBTcGVjTm9uZSwgb3AsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBb
Jl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxs
RnJhbWUsIEZsdXNoLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBQ
aGFudG9tTG9jYWwsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAg
ICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1wbChvcmlnaW4uc2VtYW50aWMsIGFkZEZsdXNo
RGlyZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwpAQCAtNzc0MCw2ICs3Nzk2LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICB9CiAKKyAgICBtX2dyYXBoLm1fdG1w
cyA9IG1fbnVtVG1wczsKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAg
ICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKaW5kZXggOGU5YmI0YWNiZTU1MDJk
ZGE3YjM3NDc4NGI1YTg1ZmZkZTcwM2JmZC4uM2RjNzU2OGYxZWUyYzY5NzcyMjY4Y2M5NmRlYTRh
MDVjNjIzNjI1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAK
QEAgLTE3MCwyMiArMTcwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZh
bHNlOwogICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5k
bGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvcklu
ZGV4KGkpOwogICAgICAgICAgICAgT3B0aW9uYWw8SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxl
VmFsdWVzW2ldOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlm
IChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGlu
IGJ5dGVjb2RlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgb3BlcmFuZCwg
IlxuIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE5vdCBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBXaWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCksICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICBXaWRlbmluZyAiLCBvcGVyYW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUo
KSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHRhcmdl
dCA9IGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gdGFyZ2V0Lm1lcmdlT1NSRW50cnlWYWx1ZShtX2dyYXBoLCB2YWx1ZS52YWx1ZSgp
LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSwgbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAppbmRleCBkOThmZDRh
ZjQ0MGYwN2NiYzE2YjY3ZDYwMmJhNjQyNmFmMGYyMzgyLi41NzcwZjA5ODk0MmM4OTZiN2FjZjgy
M2ZjYWI5NDQ0YTIyNGNjZWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgog
ICAgICAgICBzcGVjaWFsQ2FzZUFyZ3VtZW50cygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExv
Y2FsT3BlcmFuZD4oKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7
CisgICAgICAgIHByb3BhZ2F0ZVBoaXM8VG1wT3BlcmFuZD4oKTsKICAgICAgICAgY29tcHV0ZUlz
Rmx1c2hlZCgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQ
UzsKQEAgLTIxMSwxMCArMjEyLDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVH
ZXRMb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFi
bGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9j
YWxGb3I8QXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCku
dG9Bcmd1bWVudCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0
TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCku
dG9Mb2NhbCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkg
eworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2Fs
aXplR2V0TG9jYWxGb3I8QXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUt
Pm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdl
dExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5k
KCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgVG1wT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8VG1w
T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlLCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAg
LTIyOSw2ICsyNDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAg
ICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAg
ICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5v
ZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwo
KS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJs
ZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5v
bmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5v
ZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0
Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRP
cGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9y
PG5vZGVUeXBlLCBBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnRvQXJndW1lbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIExvY2FsT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hP
clBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwg
dmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxp
emVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBUbXBPcGVyYW5kPihub2RlLCB2YXJp
YWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVT
ZXQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
ZXRPcGVyYW5kKG5vZGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg5LDYgKzMxMSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBjbGVhclZhcmlhYmxlczxBcmd1bWVudE9wZXJh
bmQ+KCk7CiAgICAgICAgIGNsZWFyVmFyaWFibGVzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAg
Y2xlYXJWYXJpYWJsZXM8VG1wT3BlcmFuZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc3Vt
ZXMgdGhhdCBhbGwgcGhpIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhh
dCB0aGluZ3MgdGhhdAogICAgICAgICAvLyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8g
cmVmIGNvdW50LCBidXQgZG9lc24ndCBhc3N1bWUgdGhhdCB0aGUgcmVmCkBAIC0zODgsNyArNDEx
LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAg
ICB2b2lkIHByb3BhZ2F0ZVBoaXMoKQogICAgIHsKLSAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50
cnksIDEyOD4mIHBoaVN0YWNrID0gb3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9h
cmd1bWVudFBoaVN0YWNrIDogbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBWZWN0b3I8UGhpU3Rh
Y2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sgPSBwaGlTdGFja0ZvcjxvcGVyYW5kS2luZD4oKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwg
aW5zdGFudGx5LgogICAgICAgICBtX2Jsb2NrID0gMDsKQEAgLTQ2Niw5ICs0ODksMTIgQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2tGb3IoKQogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3Vt
ZW50UGhpU3RhY2s7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIHN3
aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHJldHVy
biBtX2FyZ3VtZW50UGhpU3RhY2s7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiByZXR1cm4g
bV9sb2NhbFBoaVN0YWNrOworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHJldHVybiBtX3RtcFBo
aVN0YWNrOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcHV0ZUlzRmx1c2hlZCgpCkBAIC01MjEsNiArNTQ3
LDcgQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIFZlY3RvcjxQaGlT
dGFja0VudHJ5LCAxMjg+IG1fYXJndW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8UGhpU3RhY2tF
bnRyeSwgMTI4PiBtX2xvY2FsUGhpU3RhY2s7CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEy
OD4gbV90bXBQaGlTdGFjazsKICAgICBWZWN0b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxP
cFdvcmtsaXN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cAppbmRleCAyMzgxYzZiOGY4ZjRiYTc2MzRiYjY2YjEyMzk0NzFiNWE2MTY2N2NlLi40Y2NlMTc0
ODgzZTIwNDEwZDYyMjNhNmY0MTcyZWRkZTY5OGFhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcApAQCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YWNrOiB7CiAgICAgICAgICAgICBBU1NFUlQo
IWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9h
ZCgpLnZhbHVlKCkgPT0gaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Cisg
ICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52
YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAg
ICAgICAgICAgbV9mYWxsYmFja1N0YWNrTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBlbHNlCkBA
IC0xNzIsNyArMTcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghY2xvYmJlckNv
bnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBpZiAocGFpci5rZXkuaGVhcCgpLmtpbmQoKSA9PSBTdGFjaykgewotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5
LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5
bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9h
YnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKSAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBwYWly
LmtleSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjYsOCArMjI1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEFic3RyYWN0SGVhcCBhYnN0cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CiAgICAg
ICAgICAgICBpZiAoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS5pc1RvcCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBhZGQobV9mYWxsYmFja1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0
SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMy
KCksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCksIG51bGxwdHIpOwog
ICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0
aW9uLCBub2RlLCAwfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDks
OCArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTaWRlU3RhdGU6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBjYXNlIFN0YWNrOiB7Ci0g
ICAgICAgICAgICBBU1NFUlQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpID09IGxv
Y2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxv
YWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAg
ICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKICAg
ICAgICAgICAgICAgICAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKICAgICAg
ICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLT52YWx1ZTsKQEAgLTI5OCw3ICsyOTUs
NyBAQCBwcml2YXRlOgogICAgIC8vIGEgZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25s
eSBsaXZlIGluIG1fZmFsbGJhY2tTdGFja01hcC4KICAgICAvLwogICAgIC8vIE9idmlvdXNseSwg
VE9QIGFsd2F5cyBnb2VzIGludG8gbV9mYWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90
IGhhdmUgYSB1bmlxdWUgdmFsdWUuCi0gICAgSGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9w
dHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7
CisgICAgSGFzaE1hcDxpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBE
ZWZhdWx0SGFzaDxpbnQ2NF90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8aW50NjRfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CiAgICAgTWFwIG1fZmFsbGJhY2tT
dGFja01hcDsKIAogICAgIE1hcCBtX2hlYXBNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCmluZGV4IDg5YmM2NDFmNTI2YmI1M2ZmMDM3ZjczY2Y5NTBiYWM2NDZk
NDk5NTQuLjgyZjNjYTY0MTg0ZjkxOTM2NTAzOWIxMzIyMTdkZDk5ZWE5NzEwNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xMTEsOSArMTExLDkgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0
b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAvLyBzY2FuIHdvdWxkIHJlYWQuIFRoYXQncyB3
aGF0IHRoaXMgZG9lcy4KICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJh
bWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGlu
ZUNhbGxGcmFtZSgpKSB7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwpCi0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0
YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpKTsKICAgICB9CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNwZWNpZmlj
YWxseSBhY2NvdW50IHdoaWNoIG5vZGVzIGNhbiByZWFkIGZyb20gdGhlIHNjb3BlCkBAIC00NDEs
NyArNDQxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywg
bm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCiAg
ICAgY2FzZSBNb3ZIaW50OgpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIHJlYWQoQWJz
dHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsK
ICAgICAgICAgcmV0dXJuOwogCkBAIC03NjQsMTIgKzc2NCwxMiBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3Qg
V3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgot
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFj
aywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgTGF6eU5vZGUobm9k
ZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFNldENhbGxlZToKLSAgICAgICAgd3Jp
dGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM6IHsKQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29u
c3QgV3JpdGVGdQogICAgIH0KIAogICAgIGNhc2UgU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgICAgICByZXR1cm47
CiAKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CkBAIC03ODgsMzYgKzc4OCw0MyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywg
bm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihT
dGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUo
bm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6Ci0g
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxv
Y2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSks
IExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3Rh
Y2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVh
cCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCk7CiAgICAgICAg
IHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBM
YXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNr
LCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHdyaXRlKGhlYXAp
OwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAor
ICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAg
d3JpdGUoSGVhcCk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNv
dW50KSk7CisgICAgICAgIHJldHVybjsgIAorICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6
IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKEhlYXApOwogICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQoKSkpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxp
bnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0
YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKQEAgLTgyNiw5ICs4MzMsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAg
ICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChT
dGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGlt
aXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0
YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAppbmRleCA5NTg2NmE3ZjkxYTcxNDQy
ZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJi
ZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJp
bmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmlu
ZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgc3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVM
aXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAog
ewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICBub2RlLT5vcmlnaW4u
Zm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsm
XSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0
aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAgIHJlZywKICAgICAgICAgICAgICAgICBbJl0g
KE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUwOWY5MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2Fk
Yi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEzMzJmZDUyNDk2NTVhMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENh
bGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5z
W2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGluZGV4
KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4
KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0LDEzICs2NCwxMyBAQCBDYWxsU2l0ZUluZGV4
IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4
XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0K
IAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjpsYXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAg
IFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNpemUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lucy5zaXplKCkgLSAxKSk7CisgICAgcmV0dXJu
IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW5zLnNpemUoKSAtIDEpOwogfQogCiBE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJ
bmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKaW5kZXggODU0MTIzMTQ3NDFlNmYxMTI2MWYyZTk3YzQ5ZmU2NDRkYWU3YmFmNy4u
ZjM4YzgzZmRkMzBjMmY1M2IzZDUwOTNmNDBiMmM3MGU5NTMxMDQ4OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjk0LDYgKzI5NCw3IEBAIGJvb2wgZG9lc0dD
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJ
bnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0
aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeENvbnN0YW50Ogpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4
NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1ZmJjNDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMx
OTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAg
LTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNl
IGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBK
SVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4K
ICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0
dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKaW5kZXggYWVlMWYwMDczYjBmNGJiY2M0NzM0ZWI2NDFlNDY0OGMzMDU1YTI0NC4uY2EzM2Ri
MjI3ZDRiOTI3NzNmYTg2ZDcyZWUzZDRkMWI4NWJmOTgzZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yNDMyLDYgKzI0MzIsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisKKwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVz
ZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBo
YW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0
ZWx5OgpAQCAtMjQ2NCw4ICsyNDcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgog
ICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAg
ICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAg
ICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93Ogog
ICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgY2FzZSBOZXdQcm9taXNlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCmluZGV4IDBiZjFjM2ZiYmFjNGE2
NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLjkzM2EyYmRlMjJlMTY2YzJhZWI2ZDRhYzFiYmU5
Y2UxZTVjZWQ1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9y
QWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxz
LmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJuYWwgeworY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMgZm9yIGZpbmRpbmcgdGhlIGxhc3QgcG9pbnRz
IHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBTU0EuIFRoaXMgYWNjb3VudHMgZm9yIGxpdmVu
ZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMgaXMgdXN1YWxseSB1c2VkIGZvciBlbnVtZXJh
dGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUs
CiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3aGVyZSB0aGUgbm9kZSBpcyBsaXZlIGF0IHRh
aWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9ncmFtIHBvaW50cyB3aGVyZSB0aGUKQEAgLTUz
LDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgIAogICAgIENvZGVPcmln
aW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JFeGl0OwogICAgIAotICAgIFZpcnR1YWxS
ZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3BlcmFuZCBhbHJlYWR5Tm90ZWQ7CiAgICAgLy8g
SWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBsaXZlIGF0IHRoZSB0aW1lLCB0aGVuIHdl
IGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAobm9kZUFmdGVyLT5jb250YWluc01vdkhpbnQo
KSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gbm9kZUFmdGVyLT51bmxpbmtlZExv
Y2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7
Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSBy
ZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGVBZnRlci0+dW5saW5rZWRPcGVyYW5k
KCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkg
eworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKKyAgICAgICAgICAgIGFscmVhZHlOb3Rl
ZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03MCw4ICs3NCwyNCBAQCB2
b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwg
Tm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgIC8vIG90aGVyIGxvb3AsIGJlbG93LgogICAgIGF1
dG8qIGJlZm9yZUlubGluZUNhbGxGcmFtZSA9IGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAg
ICBpZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1lID09IGFmdGVyLmlubGluZUNhbGxGcmFtZSgpKSB7
Ci0gICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9y
ZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwogICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGJlZm9yZUlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgIGlmIChhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0g
YWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8g
bGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUu
Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGF1dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5l
c3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAg
ICAgICAgICBpbnQgdG1wT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVy
dCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFmdGVyKTsKKworICAgICAg
ICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAg
ICAgICAgICAgIGZ1bmN0b3IoT3BlcmFuZChUbXBPcGVyYW5kLCB0bXAgKyB0bXBPZmZzZXQpKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgLy8gTm8gbG9jYWxzIGNhbiBkaWUgYXQgYSBj
aGVja3BvaW50LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50
IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxs
TGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOwogICAgICAgICBjb25zdCBG
YXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJlZm9y
ZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsK
ICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdl
dExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50
OjpCZWZvcmVVc2UpOwpAQCAtODIsMTcgKzEwMiwyMSBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJh
bmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25z
dAogICAgICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKKyAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpLCAi
VHJhbnNpdGlvbmluZyBhY3Jvc3MgYSBjaGVja3BvaW50IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRv
bid0IHNoYXJlIGFuIGlubGluZUNhbGxGcmFtZS4iKTsKKwogICAgIC8vIERldGVjdCBraWxscyB0
aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQgaXMga2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJl
Zm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9j
YWxzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwotICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5
dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2
ZUluQnl0ZWNvZGUoYWZ0ZXIpOworICAgIHVuc2lnbmVkIG51bUxvY2FscyA9IGdyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKKyAgICBncmFwaC5mb3JBbGxM
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGJlZm9yZSwKLSAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBpZiAocmVnID09IGFscmVhZHlO
b3RlZCkKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kID09IGFscmVhZHlOb3RlZCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9Mb2NhbCgpKSkKKyAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUo
KSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQob2Zm
c2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7
CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOwogICAgICAgICB9KTsKIH0KICAgICAKQEAg
LTEwNSw3ICsxMjksOCBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWVuSW5DbG9zdXJlRmxhZyA9IDE7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxsZWRGdW5jdG9yRmxhZyA9IDI7CiAgICAgSGFzaE1h
cDxOb2RlKiwgdW5zaWduZWQ+IGZsYWdzOwotICAgIAorCisgICAgQVNTRVJUKG5vZGVJbmRleCk7
CiAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgIAogICAgIGdyYXBo
LmRvVG9DaGlsZHJlbigKQEAgLTEyMCwxNSArMTQ1LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9k
ZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICBOb2RlKiBi
ZWZvcmUgPSBudWxscHRyOwotICAgIGlmIChub2RlSW5kZXgpCi0gICAgICAgIGJlZm9yZSA9IGJs
b2NrLT5hdChub2RlSW5kZXggLSAxKTsKKyAgICBOb2RlKiBiZWZvcmUgPSBibG9jay0+YXQobm9k
ZUluZGV4IC0gMSk7CiAKICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgZ3JhcGgs
IGJlZm9yZSwgbm9kZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAg
ICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAu
Y2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAgICAgICAgICAgICAgICByZWcsCisgICAgICAgICAg
ICAgICAgb3BlcmFuZCwKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZ3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xv
c3VyZUZsYWc7CiAgICAgICAgICAgICAgICAgfSwKQEAgLTE1OSw2ICsxODIsNyBAQCB2b2lkIGZv
ckFsbEtpbGxzSW5CbG9jaygKICAgICAvLyBTdGFydCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1
c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8gb25seSBpbnNwZWN0IG5vZGVzIGZyb20gdGhl
IHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVwIHRvIG5vZGVJbmRleCAoZXhjbHVzaXZlKSwg
c28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0aGUgZnVuY3RvciBoYXMgbm90aGluZyB0byBk
by4KICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgIGRhdGFMb2dMbklmKEZvckFsbEtpbGxzSW50
ZXJuYWw6OnZlcmJvc2UsICJsb2NhbCBhdmFpbGFiaWxpdHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRl
eCwgIiAiLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgIGZvckFs
bEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICBncmFwaCwgbG9jYWxBdmFpbGFi
aWxpdHkubV9hdmFpbGFiaWxpdHksIGJsb2NrLCBub2RlSW5kZXgsCiAgICAgICAgICAgICBbJl0g
KE5vZGUqIG5vZGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXgg
YjMyMGY3MDdjOTVmMTIzOTM4NTFiYzNiMmIyYjQyYjk1NmRkMGJmNS4uMDcxZGUyMzkyYjljNWM5
Mjg2ZGU5Yzc4NzhmZTlhZjAwYzBiNGU0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKQEAgLTMwOCw4ICszMDgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAg
IGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
OwotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRh
KSwgIikiKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0
YS0+b3BlcmFuZCgpOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vz
c0RhdGEtPm9wZXJhbmQoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJp
YWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgICAgICAgICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CiAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5k
KTsKQEAgLTMxNywxMyArMzE3LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgfQog
ICAgIGlmIChub2RlLT5oYXNTdGFja0FjY2Vzc0RhdGEoKSkgewogICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBkYXRhLT5sb2NhbCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+b3Bl
cmFuZCk7CiAgICAgICAgIGlmIChkYXRhLT5tYWNoaW5lTG9jYWwuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBkYXRhLT5tYWNoaW5lTG9jYWwpOwog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmZvcm1hdCk7CiAgICAgfQotICAgIGlmIChu
b2RlLT5oYXNVbmxpbmtlZExvY2FsKCkpIAotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUt
PnVubGlua2VkTG9jYWwoKSk7CisgICAgaWYgKG5vZGUtPmhhc1VubGlua2VkT3BlcmFuZCgpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICBp
ZiAobm9kZS0+aGFzVmVjdG9yTGVuZ3RoSGludCgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJ2ZWN0b3JMZW5ndGhIaW50ID0gIiwgbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgpKTsKICAgICBp
ZiAobm9kZS0+aGFzTGF6eUpTVmFsdWUoKSkKQEAgLTUxNSw5ICs1MTUsMTAgQEAgdm9pZCBHcmFw
aDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0
ciwgQmFzaWNCbG9jayoKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAg
ICAgICBBU1NFUlQocGhpTm9kZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgaWYgKCFwaGlO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNP
bmx5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIg
QCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2Rl
LT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5v
ZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+b3BlcmFuZCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNv
dW50KCksICI+LT4oIik7CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7CkBAIC04ODQsNyArODg1
LDcgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1
bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAgICAgICAgYm9vbCBzaG91bGRDb250aW51
ZSA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFNl
dExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+b3BlcmFuZCgpID09IHZhcmlh
YmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKQogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVl
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODkzLDkgKzg5NCw5
IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5z
aWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgc3Vic3RpdHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2Rl
LCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAg
ICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKTsKICAgICAgICAgICAgIGlmIChvbGRUYWls
Tm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPSBuZXdHZXRMb2NhbDsKKyAgICAgICAg
ICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm9wZXJhbmQoKSkgPSBuZXdHZXRMb2NhbDsKICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTEzMywzNiArMTEzNCw1
NiBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6a2lsbHNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUpCiAgICAgcmV0dXJuIGtpbGxzRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlu
bGluZUNhbGxGcmFtZSkpOwogfQogCi1ib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCitib29sIEdyYXBoOjpp
c0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQog
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgCiAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNoZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2
ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgYm9vbCBpc0NhbGxlck9yaWdpbiA9IGZhbHNlOwor
CiAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0ciA9ICZjb2RlT3JpZ2luOwotICAgIGZvciAo
OzspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAg
ICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgp
KTsKKyAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3
ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCisgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBm
b2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KKyAgICBmb3IgKDsgY29kZU9yaWdpblB0cjsgY29kZU9y
aWdpblB0ciA9IGlubGluZUNhbGxGcmFtZSA/ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxl
ciA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+
aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHRtcE9mZnNldCA9IGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxG
cmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpOworCisgICAgICAgICAgICBB
U1NFUlQob3BlcmFuZC52YWx1ZSgpID49IDApOworICAgICAgICAgICAgLy8gVGhpcyB0bXAgc2hv
dWxkIGhhdmUgYmVsb25nZWQgdG8gc29tZW9uZSB3ZSBpbmxpbmVkLgorICAgICAgICAgICAgaWYg
KG9wZXJhbmRJbmRleCA+IHRtcE9mZnNldCArIG1heE51bUNoZWNrcG9pbnRUbXBzKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
aWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBvcGVyYW5kSW5kZXggPCB0bXBPZmZzZXQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gYml0TWFwID0gdG1w
TGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2Rl
SW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gYml0TWFwLmdldChvcGVyYW5kSW5kZXggLSB0
bXBPZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJyZWcg
PSAiLCByZWcsICJcbiIpOwogCi0gICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQo
KSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycykgeworICAgICAgICBpZiAob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycykgewogICAgICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWcub2Zmc2V0KCkgPCBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyk7CiAKIAogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgp
ID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgeworICAgICAgICAgICAgICAgICAgICAmJiByZWcg
PT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSBhIGNhbGxl
ZS5cbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVn
ID09IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb29rcyBsaWtl
IHRoZSBhcmd1bWVudCBjb3VudC5cbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTExNzYsNDIgKzExOTcsNDEgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxs
RnJhbWUpOwogICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9
IGxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggPSBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZnVsbExpdmVuZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUlu
ZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwg
aXNDYWxsZXJPcmlnaW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3Rl
cklzTGl2ZShyZWcsIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlv
blBvaW50KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRh
bnQgaWYgaXQgd2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGlu
aW5nLgotICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lICYmIHJlZy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNp
emVfdD4ocmVnLnRvQXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhG
aXh1cC5zaXplKCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
IGRhdGFMb2coIkFyZ3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJz
IGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0
dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2lu
UHRyID0gJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9y
aWdpbiA9IHRydWU7CiAgICAgfQorCisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJhbiBv
dXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7CisgICAgcmV0dXJuIHRydWU7ICAgIAog
ICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUJpdFZlY3RvciBH
cmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVj
dG9yIEdyYXBoOjpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQogewogICAgIEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2Nh
bHNMaXZlSW5CeXRlY29kZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVt
TG9jYWxzICsgYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAg
Zm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAot
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChy
ZWcuaXNMb2NhbCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgp
KTsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6
IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7
CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM1LDggKzE2NTUsOCBA
QCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFu
ZE5vZGU7IG5vZGU7KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkg
ewotICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRv
QXJndW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJh
bmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2Rl
LT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50
Tm9kZSA9IG1fcm9vdFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERl
ZmluaXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBA
IC0xNjU2LDcgKzE2NzYsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVy
YW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAg
ICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRl
eCBmYWI5Y2YwMmEyNTk3NmVmNDdkMTc5MDViYWQ5Y2UwM2UzODJiY2U1Li5mN2ExZDgyMTRjMzAy
ZDdkOTZhYzJhNzdhMDE4NjZhOWQxMTlmNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCkBAIC04NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVy
eSBpZiBhIHNpbmdsZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBm
YXN0ZXIgdGhhbiBjYWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ug
d2lsbCBvbmx5IHF1ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBv
ZiB0aGUKICAgICAvLyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9j
YWwgaXMgbXVjaCBzbG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wg
aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wg
aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlj
a2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4g
cG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0
aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4g
VGhpcyBkb2Vzbid0IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3Nl
IGFyZSBhbGwgcHJlc3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2Rl
KCkgdG8KICAgICAvLyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVy
IHRoYW4gY2FsbGluZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2
b2lkIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZv
ciBub3QgcmVkdW5kYW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2Ug
aW4gY2FzZSBvZiBhIHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtu
b3dzIHRoYXQgYXJndW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZh
cmFyZ3MKQEAgLTg4MSw2ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChs
aXZlbmVzc0F0Qnl0ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0b3IocmVnKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5Q
dHItPmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoY29kZUJsb2NrLT5udW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMg
PSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0
ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsm
XSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wKSkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwNCw5ICs5MTIs
OSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgQml0VmVj
dG9yIG9mIGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhp
cyBpcyBtb3N0bHkgdXNlZnVsIGlmCisgICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0
aGUgbG9jYWxzIGFuZCB0bXBzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwg
aWYKICAgICAvLyB5b3Ugd2FudCB0byBjb21wYXJlIHR3byBzZXRzIG9mIGxpdmUgbG9jYWxzIGZy
b20gdHdvIGRpZmZlcmVudCBDb2RlT3JpZ2lucy4KLSAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUlu
Qnl0ZWNvZGUoQ29kZU9yaWdpbik7CisgICAgQml0VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5C
eXRlY29kZShDb2RlT3JpZ2luKTsKIAogICAgIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBhcHBy
b3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludChDb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBp
c0NhbGxlck9yaWdpbikKICAgICB7CkBAIC05MzgsMTIgKzk0NiwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZTsKICAgICB9CiAg
ICAgCi0gICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgYXJndW1lbnRzIGFuZCBsb2NhbHMgbGl2
ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCi0gICAgLy8gZXh0ZW5z
aW9uIHRvIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMg
YXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgorICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9w
ZXJhbmRzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAorICAg
IC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNPclRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5j
ZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9y
QWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CisgICAgICAgIGZv
ckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFzIGJlaW5nIGxpdmUuCiAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KQpAQCAtMTExNCw2ICsxMTIyLDcgQEAg
cHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZH
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0Rv
bWluYXRvcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lz
PiBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOworICAgIHVuc2lnbmVkIG1fdG1wczsKICAg
ICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7
CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggOTlhZWZmY2Rj
MDVhMTFjNDViMDU3NDEyNTBmNGQyYWViNGUyMjhjZC4uMjAyZDIyNTA1M2ZhOWRmYmU1YzIzYzY0
YmNmOGJlMzg0ZTNlNzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTQ1LDggKzQ1LDggQEAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAg
ICwgbV9hYnN0cmFjdFZhbHVlcygqZ3JhcGgubV9hYnN0cmFjdFZhbHVlc0NhY2hlKQotICAgICwg
bV92YXJpYWJsZXMobV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5t
X2xvY2FsVmFycykKLSAgICAsIG1fYmxvY2soMCkKKyAgICAsIG1fdmFyaWFibGVzKE9wZXJhbmRz
TGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIG1fYmxvY2sobnVs
bHB0cikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oCmluZGV4IGJmNWVhZDE4ZWMxNjQ3ZWUxNjc2Njg4MzU3NDAxZmE3
ZmVjNzEyOTkuLjE4NjVlNmExZWZmYzNkYWFlZmU1ODRjYTg2MmM0OWJjMzY4NTg1MDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmgKQEAgLTE2NywxMyArMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhc3RGb3J3
YXJkKG1fdmFyaWFibGVzW2luZGV4XSk7CiAgICAgfQogCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3Bl
cmFuZChpbnQgb3BlcmFuZCkKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3Bl
cmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLm9wZXJh
bmRJbmRleChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIHRoaXMtPm9wZXJhbmQob3BlcmFu
ZC5vZmZzZXQoKSk7IH0KLSAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5k
ZXgpCiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5sb2NhbElu
ZGV4KGluZGV4KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCmluZGV4IDNkODQzY2U1OGYyMGI0MTE2MzM5ZmNkYTk1ODhhZWJhNmI3YThjMmUuLjUzZGI5
Y2QxNGNhYzZiNmU2NjgyZWZkZjRiYTc5NDg5N2NhNWQ1YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC04NSw4ICs4NSw2IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdl
dENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRvIG9zckV4aXRUaHVua0xh
YmVsID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2Rl
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhp
dENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGlu
Zm8ubV9mYWlsdXJlSnVtcHM7CkBAIC05NywxMyArOTUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rT1NSRXhpdHMoKQogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAg
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS5vc3JFeGl0SW5kZXgpOwotICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAgICAgICAgICAgIEp1bXAg
dGFyZ2V0ID0ganVtcCgpOwotICAgICAgICAgICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhp
dFRodW5rTGFiZWxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHRhcmdldCwgb3NyRXhpdFRodW5rTGFiZWwpOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBw
YXRjaGFibGVKdW1wKCk7CisgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxl
SnVtcCgpOwogICAgIH0KIH0KIApAQCAtNTk1LDExICs1ODcsMTIgQEAgdm9pZCBKSVRDb21waWxl
cjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6Okxh
YmVsIGJsb2MKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9j
YWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKworICAgICAgICAgICAgQVNTRVJU
KCF2YXJpYWJsZS0+b3BlcmFuZCgpLmlzVG1wKCkpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
KSB7CiAgICAgICAgICAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgKICAgICAg
ICAgICAgICAgICAgICAgT1NSRW50cnlSZXNodWZmbGluZygKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCku
b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCku
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZz
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IDY4Y2E5OGRmNmY1YzRiN2I2MzcyY2Mx
NTgxOGVjMjU3MjgyZjg5ZDkuLjUwZjFkODkzZGEzMDIxMDJiOTVlNzhhYzYwNDM5ZDg2MjM2ZjNj
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKQEAgLTEz
NSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGVtaXRTdG9yZUNhbGxTaXRlSW5kZXgo
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSkKICAgICB7Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0
aG91dCBhbiBleGNlcHRpb24gY2hlY2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
LmNwcAppbmRleCA0MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5M2UwOGFjMjVjYTYzMTM0Li40NWVj
YjQ2YWEyNDQzYmExYjk1NTcxNmJjMWY0MmE3MDhhMWEwNDg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGlzVmFsaWRGbHVzaExvY2F0aW9uKEJhc2lj
QmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICBib29sIGlzVmFsaWRGbHVzaExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5n
QmxvY2ssIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICAv
LyBUaGlzIGNvZGUgaXMgbm90IG1lYW50IHRvIGJlIGZhc3QuIFdlIGp1c3QgdXNlIGl0IGZvciBh
c3NlcnRpb25zLiBJZiB3ZSBnb3QgbGl2ZW5lc3Mgd3JvbmcsCiAgICAgICAgIC8vIHRoaXMgZnVu
Y3Rpb24gd291bGQgcmV0dXJuIGZhbHNlIGZvciBhIEZsdXNoIHRoYXQgd2UgaW5zZXJ0LgpAQCAt
ODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gZmx1c2hJc0RlZmluaXRlbHlJbnZh
bGlkID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpIHsKICAgICAgICAg
ICAgIGJvb2wgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aW5kZXg7IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNz
ZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPmxvY2FsKCkgPT0gb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkg
JiYgYmxvY2stPmF0KGkpLT5vcGVyYW5kKCkgPT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAg
ICAgICBhbGxHb29kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMTE1LDggKzExNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZUJs
b2NrRm9yVHJ5Q2F0Y2goQmFzaWNCbG9jayogYmxvY2ssIEluc2VydGlvblNldCYgaW5zZXJ0aW9u
U2V0KQogICAgIHsKICAgICAgICAgSGFuZGxlckluZm8qIGN1cnJlbnRFeGNlcHRpb25IYW5kbGVy
ID0gbnVsbHB0cjsKLSAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQXRDYXRjaEhlYWQ7Ci0gICAg
ICAgIGxpdmVBdENhdGNoSGVhZC5yZXNpemUobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlQXRDYXRj
aEhlYWQoMCwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZlRtcHMoKSk7CiAK
ICAgICAgICAgSGFuZGxlckluZm8qIGNhY2hlZEhhbmRsZXJSZXN1bHQ7CiAgICAgICAgIENvZGVP
cmlnaW4gY2FjaGVkQ29kZU9yaWdpbjsKQEAgLTEzMywxMSArMTMyLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgewotICAgICAgICAgICAgICAgICAg
ICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZUF0
Q2F0Y2hIZWFkLmZpbGwoZmFsc2UpOwogCiAgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChoYW5kbGVyLT50YXJnZXQpOwot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENv
ZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRj
aEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5
dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlZEhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyOwpAQCAtMTU2LDEyICsxNTUsMTIgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhhbmRsZXJSZXN1bHQ7CiAgICAgICAgIH07CiAK
LSAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNz
RGF0YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbnVsbHB0cik7CisgICAgICAgIE9wZXJh
bmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLCBudWxscHRyKTsKIAogICAgICAgICBhdXRvIGZs
dXNoRXZlcnl0aGluZyA9IFsmXSAoTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4KSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcik7Ci0g
ICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewot
ICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2ZUF0Q2F0Y2hIZWFk
W29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gZmx1c2ggPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVy
YW5kKSkgewogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlv
bihibG9jaywgaW5kZXgsIG9wZXJhbmQpKTsKIApAQCAtMTc4LDYgKzE3Nyw4IEBAIHB1YmxpYzoK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyBsb2NhbCsrKQogICAgICAgICAgICAgICAg
IGZsdXNoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHRtcCA9IDA7IHRtcCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZU
bXBzKCk7ICsrdG1wKQorICAgICAgICAgICAgICAgIGZsdXNoKE9wZXJhbmQoVG1wT3BlcmFuZCwg
dG1wKSk7CiAgICAgICAgICAgICBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKSkpOwogICAgICAgICB9OwogCkBAIC0xOTIsOSArMTkzLDggQEAgcHVi
bGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY3VycmVudEV4Y2VwdGlvbkhh
bmRsZXIgJiYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1
bWVudERlZmluaXRlbHkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1heWJlKSkgewotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENhdGNoSGVhZFtv
cGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7Ci0KKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9w
ZXJhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlv
bihibG9jaywgbm9kZUluZGV4LCBvcGVyYW5kKSk7CiAKICAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NE
YXRhLm9wZXJhbmQob3BlcmFuZCk7CkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSkK
LSAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQobm9kZS0+bG9j
YWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRp
b25IYW5kbGVyKSB7CkBAIC0yMTYsOSArMjE2LDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5k
LmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAgICAgCiAgICAgICAgIG1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICByZXR1
cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKaW5kZXggNzNh
M2Q3NWI3NjBiNTJiOTY3NjM3MTMzZDZhMGZlZmIwMGViZWQ4Ny4uZmZmOTZiZmNmNjI5ZWI0ZDA1
MmU3YjE0MjdiMmI2N2IwNTRjMWEwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1fc3RhdGUuZmlsbChFcG9jaCgpKTsKICAgICAgICAgbV9ncmFwaC5mb3JB
bGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgIGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4u
Zm9yRXhpdCwKLSAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAg
ICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFu
ZChyZWcpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIApAQCAtOTks
NyArOTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBN
b3ZIaW50KSB7Ci0gICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAgICAgIEVwb2NoIGxvY2Fs
RXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgICAg
ICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCAiLCBub2RlLCAiOiBjdXJyZW50ID0g
IiwgY3VycmVudEVwb2NoLCAiLCBsb2NhbCA9ICIsIGxvY2FsRXBvY2gsICJcbiIpOwogICAgICAg
ICAgICAgICAgIGlmICghbG9jYWxFcG9jaCB8fCBsb2NhbEVwb2NoID09IGN1cnJlbnRFcG9jaCkg
ewpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IEVwb2NoKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5v
cGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IEVwb2NoKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9
IERvZXNOb3RFeGl0KQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGlmIChub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLCBu
b2RlLAotICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYSBiaXQgc2xvcHB5IC0gaXQgbWlnaHQgY2xh
aW0gdG8ga2lsbCBhIGxvY2FsIGV2ZW4gaWYKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0
J3Mgc3RpbGwgbGl2ZSBhZnRlci4gV2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgdGhhdC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChyZWcpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2ls
bGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgcmVnLCAiXG4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChyZWcpID0gY3VycmVudEVwb2NoOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2Rl
LCAiOiAiLCBvcGVyYW5kLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChvcGVyYW5kKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
aW5kZXggMzkxNTkzNzIyOWYyOGE3YWEyZTY1NWY1MjUxZjk2ZjQwNGUzM2I0Ni4uYjgwMTU1ZTkz
NTYyOWRmMmNkZTM5YWI2NDYzNDQwMDQ3MGM3OGM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKQEAgLTI1MCwxMyArMjUwLDEzIEBAIHN0cnVjdCBTdGFja0FjY2Vzc0RhdGEgewog
ICAgIHsKICAgICB9CiAgICAgCi0gICAgU3RhY2tBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgRmx1c2hGb3JtYXQgZm9ybWF0KQotICAgICAgICA6IGxvY2FsKGxvY2FsKQorICAgIFN0
YWNrQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQsIEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAg
ICAgOiBvcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICwgZm9ybWF0KGZvcm1hdCkKICAgICB7CiAg
ICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbDsKKyAgICBPcGVyYW5kIG9wZXJh
bmQ7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbDsKICAgICBGbHVzaEZvcm1hdCBm
b3JtYXQ7CiAgICAgCkBAIC05MDIsNiArOTAyLDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2gg
KG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTkyMyw5ICs5MjQsMTEgQEAgcHVibGlj
OgogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CisgICAgICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKICAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKLSAgICAg
ICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDIoKTsKICAg
ICAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKQEAgLTk3Myw5ICs5NzYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxWYXJpYWJsZUFjY2Vzc0RhdGEqPigpLT5m
aW5kKCk7CiAgICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAgT3Bl
cmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+bG9jYWwoKTsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5k
KCk7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWwoKQpAQCAt
OTgzLDcgKzk4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5tYWNoaW5lTG9jYWwoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNVbmxpbmtlZExv
Y2FsKCkKKyAgICBib29sIGhhc1VubGlua2VkT3BlcmFuZCgpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKQEAgLTk5Niwx
MCArOTk5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdW5saW5rZWRMb2NhbCgpCisgICAgT3BlcmFuZCB1bmxpbmtlZE9wZXJhbmQoKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1VubGlua2VkTG9jYWwoKSk7Ci0gICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIobV9vcEluZm8uYXM8aW50MzJfdD4oKSk7CisgICAgICAgIEFTU0VS
VChoYXNVbmxpbmtlZE9wZXJhbmQoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjpmcm9tQml0
cyhtX29wSW5mby5hczx1aW50NjRfdD4oKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3Rh
Y2tBY2Nlc3NEYXRhKCkKQEAgLTEzNTAsNyArMTM1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBi
b29sIGhhc0xvYWRWYXJhcmdzRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBM
b2FkVmFyYXJncyB8fCBvcCgpID09IEZvcndhcmRWYXJhcmdzOworICAgICAgICByZXR1cm4gb3Ao
KSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09IEZvcndhcmRWYXJhcmdzIHx8IG9wKCkgPT0gVmFy
YXJnc0xlbmd0aDsKICAgICB9CiAgICAgCiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJn
c0RhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IDI0Yzcz
M2QzODcwMjc5ZjRhNTZiNGU2ODhiZjBiZjA2YWMyNGMxZDQuLmUzZTljMzJmOGQwODEzYTZhZGEy
MmFhY2NkMzc0NDJkNGViZDlkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKQEAgLTc0LDYgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBcCisgICAgLyogVGhlc2UgYXJlIHVzZWQgaW4g
U1NBIGZvcm0gdG8gcmVwcmVzZW50IHRvIHRyYWNrICovXAogICAgIG1hY3JvKFB1dFN0YWNrLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oS2lsbFN0YWNrLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oR2V0U3RhY2ssIE5vZGVSZXN1bHRKUykgXApAQCAtMjAyLDYgKzIwMyw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeVZhbFdp
dGhUaGlzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0
TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhWYXJhcmdzTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhGb3J3YXJkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKFB1dEJ5VmFsRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFy
Z3MpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCmluZGV4IDMyODBmODdhNjI2N2RmMDM0Yzg0
ZTMzMTg1MzBjNzQxOWU1NWU5N2UuLjQyNDdkZWFlYzdjYmJjZTYwODNhYTg3MzJiOWMyNzdmNWVm
ZDI4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcApAQCAtMzUsMTEgKzM1LDkgQEAKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
LW5hbWVzcGFjZSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWwgewotc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBhdmFp
bGFiaWxpdHkgYW5hbHlzaXMiKQpAQCAtNzUsOCArNzMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBkYXRhTG9nKCJMaXZlOiAiKTsKICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoCiAgICAgICAgICAgICAgICAgYmxvY2stPmF0KDApLT5vcmlnaW4uZm9yRXhpdCwKLSAg
ICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyhyZWcsICIgIik7CisgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiICIpOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgZGF0YUxvZ0xuKCIiKTsKICAgICAgICAgfTsK
QEAgLTkxLDcgKzg5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oIkJlZm9yZSBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAg
ICAgICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMTA2LDcgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBibG9jay0+
c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwgPSBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OwogICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgaWYgKERGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0
ZXIgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
IGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEyMCw3ICsx
MTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwogICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLnBydW5lQnlMaXZlbmVzcygKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHN1Y2Nlc3Nvci0+YXQoMCktPm9yaWdpbi5m
b3JFeGl0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJBZnRlciBwcnVuaW5n
IEJsb2NrICMiLCBzdWNjZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR1
bXBBdmFpbGFiaWxpdHkoc3VjY2Vzc29yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBC
eXRlY29kZUxpdmVuZXNzQXRIZWFkKHN1Y2Nlc3Nvcik7CkBAIC0yMDgsMjggKzIwNiwyOCBAQCB2
b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9k
ZSkKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKS5zZXRGbHVz
aChkYXRhLT5mbHVzaGVkQXQoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQoZGF0YS0+b3BlcmFuZCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgS2lsbFN0YWNrOiB7Ci0gICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5z
ZXRGbHVzaChGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkpOworICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXRGbHVzaChG
bHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKGRhdGEtPmxvY2FsKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7
CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkg
PSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5v
ZGVVbmF2YWlsYWJsZSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0yNDIsMTUgKzI0MCwxOCBAQCB2b2lkIExvY2FsT1NSQXZhaWxh
YmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7
CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChkYXRhLT5jb3VudCkgPQotICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChG
bHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIHsKLSAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkp
ID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+c3RhcnQgKyBp
KSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1
ZSwgZGF0YS0+bWFjaGluZVN0YXJ0ICsgaSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTI3MiwyMCArMjczLDIwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxj
dWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgLy8gUmVjb3JkIGhvdyB0byByZWFkIGVh
Y2ggYXJndW1lbnQgYW5kIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eSBhcmd1bWVudENvdW50ID0KLSAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0aW9uKEFyZ3VtZW50
Q291bnRQTG9jLCBub2RlKSwgYXJndW1lbnRDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAg
IEF2YWlsYWJpbGl0eSBjYWxsZWUgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAot
ICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0aW9uKEFyZ3VtZW50
c0NhbGxlZVBMb2MsIG5vZGUpLCBjYWxsZWUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyArK2kpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDEpOyArK2kpIHsKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudCA9IG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpOworICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChpKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0aW9uKEFyZ3VtZW50UExv
Yywgbm9kZSwgaSksIGFyZ3VtZW50KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA0NDk3MzA4MzljOTQ0NTA3MjU3MWE1YjBjN2M5NGI4
NDNlODkwZGM3Li5lZTVmN2YzZDY4ZTJlYTBlYjFkZGVmMTM5ZmY5MzliNmFkODlkOTM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApAQCAtMzIyLDcgKzMyMiw3
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvCiAgICAgCiAgICAgLy8gNykgRml4IHRoZSBjYWxs
IGZyYW1lIHRvIGhhdmUgdGhlIHJpZ2h0IGNvZGUgYmxvY2suCiAgICAgCi0gICAgKmJpdHdpc2Vf
Y2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAxIC0gQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSA9
IGNvZGVCbG9jazsKKyAgICAqYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPihwaXZvdCAtIChDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2sgKyAxKSkgPSBjb2RlQmxvY2s7CiAgICAgCiAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgcmV0dXJuaW5n
IGRhdGEgYnVmZmVyICVwLlxuIiwgc2NyYXRjaCk7CkBAIC0zODIsMTAgKzM4MiwxMCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NS
RW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAg
ICAgQVNTRVJUKGluc3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRh
ZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5t
ZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0YUJ1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRy
eUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCku
aXNMb2NhbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkYXRhQnVmZmVyW2luZGV4
XSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCBkYzc2YmNiYWVkNDFlZWUwNjNkZmRiZWE4NDUwNjY1
NTNkMGNiNGQ2Li42MDk2ODY2M2I2NGMyYjY4NTRlNDYxNjFmOTQ5OTQ2NTdlMWFlZmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBsb2NhbHNbbG9jYWxdID0gbmV3Um9vdC0+YXBw
ZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigp
LCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3Bl
Y05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBP
cEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSksCiAgICAgICAgICAg
ICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggMThjNjQxNDc5MzQyNDY5YjQxY2E4Zjk4ZjMw
OGIzYTRjOTMzYmE5OC4uMDVkZTk1OGNhZWVmMWI4ZjA5ZTMyZDA5N2E4ZmUzMmQ2Nzc0MjAxYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVz
ZURlZi5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVk
ZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJE
RkdNYXlFeGl0LmgiCkBAIC00Nyw4OTUgKzQ4LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBQcm9iZSBiYXNlZCBPU1IgRXhpdC4KLQotdXNpbmcgQ1BVU3RhdGUg
PSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2lu
ZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0
IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6
OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ss
IE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiwgdWludDMyX3Qg
b3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVG
b3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJj
ZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgc3RkOjpt
ZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4oc291cmNlLmJhc2UoKSkgKyBzb3VyY2Uu
b2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShjcHUuZ3By
PEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsKLSNlbHNlCi0gICAgaWYgKHNvdXJjZS5o
YXNLbm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShzb3VyY2UudGFnKCksIGNwdS5n
cHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlKGNw
dS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2Uu
cGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJs
b2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0
b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCks
IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBj
YWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVUNQVVJlZ2lzdGVyKiBwaHlzaWNhbFN0YWNrRnJh
bWUgPSBjb250ZXh0LmZwPFVDUFVSZWdpc3Rlcio+KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3Rl
cnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBU
aGUgY2FsbGVlIHNhdmVkIHZhbHVlcyBjb21lIGZyb20gdGhlIG9yaWdpbmFsIHN0YWNrLCBub3Qg
dGhlIHJlY292ZXJlZCBzdGFjay4KLSAgICAgICAgLy8gSGVuY2UsIHdlIHJlYWQgdGhlIHZhbHVl
cyBkaXJlY3RseSBmcm9tIHRoZSBwaHlzaWNhbCBzdGFjayBtZW1vcnkgaW5zdGVhZCBvZgotICAg
ICAgICAvLyBnb2luZyB0aHJvdWdoIGNvbnRleHQuc3RhY2soKS4KLSAgICAgICAgQVNTRVJUKCEo
ZW50cnkub2Zmc2V0KCkgJSBzaXplb2YoVUNQVVJlZ2lzdGVyKSkpOwotICAgICAgICBjb250ZXh0
LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBwaHlzaWNhbFN0YWNrRnJhbWVbZW50cnkub2Zmc2V0
KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKV07Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsK
LSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lz
dGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVT
YXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291
bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMt
PmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFjay5zZXQoY29udGV4dC5mcCgpLCBl
bnRyeS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIo
KSkpOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lk
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250
ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1D
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCBy
ZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFZNRW50cnlSZWNv
cmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICBV
Q1BVUmVnaXN0ZXIqIGNhbGxlZVNhdmVCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFVDUFVSZWdp
c3Rlcio+KGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyKTsKLQotICAgIC8v
IFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBh
bGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHNpemVfdCB1
aW50cHRyT2Zmc2V0ID0gZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKTsKLSAg
ICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBjb250ZXh0Lmdwcihl
bnRyeS5yZWcoKS5ncHIoKSkgPSBjYWxsZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdOwotICAg
ICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgY29udGV4dC5mcHIo
ZW50cnkucmVnKCkuZnByKCkpID0gYml0d2lzZV9jYXN0PGRvdWJsZT4oY2FsbGVlU2F2ZUJ1ZmZl
clt1aW50cHRyT2Zmc2V0XSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50
IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBC
YXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAq
Y29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwot
Ci0gICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVu
dHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVCdWZmZXIgPSBlbnRyeVJlY29yZC0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxD
YWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
LSAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+
c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkr
KykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0
KGkpOwotICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAg
ICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29u
dGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkpOwotICAgICAgICBlbHNl
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVC
dWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJl
ZygpLmZwcigpKSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtp
dC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJlZ2lz
dGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNlZCBv
biBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRp
YyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyIG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9v
bCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygp
KTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdl
dChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB1aW50cHRy
X3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlmICh3YXNDYWxsZWRWaWFUYWlsQ2Fs
bCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBz
YXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0cl90PihlbnRyeS5vZmZzZXQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGNvbnRleHQu
Z3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBmcmFtZS5zZXQob2Zmc2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9mZnNldCgpLCBzYXZlZFJlZ2lzdGVy
VmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQm
LCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0
JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9
Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9j
ayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlRGlyZWN0QXJn
dW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50
MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7
Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3Vt
ZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc3RkOjptYXgobGVuZ3RoLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgLSAxKSk7Ci0g
ICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKLSAg
ICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVj
dHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBj
YWxsZWUpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkg
KyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwot
ICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+c2V0SW5kZXhRdWlja2x5
KHZtLCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1z
dGF0aWMgSlNDZWxsKiBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAg
Vk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVm
ZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwot
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgQ2xv
bmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAotICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVl
LCBsZW5ndGgpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+
KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDAp
OwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERGRzo6SklUQ29kZSogZGZnSklUQ29kZSwgY29uc3Qg
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQotewotICAgIEZyYW1lIGZyYW1lKGNv
bnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwg
aW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRz
IG5vZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAotICAgICAgICAgICAg
JiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJl
Y292ZXJ5Lm5vZGVJRCgpOwotICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmZpbmQoaWQpOwotICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZy
YW1lLm9wZXJhbmQoaXRlci0+dmFsdWUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPQotICAgICAg
ICAgICAgZGZnSklUQ29kZS0+bWluaWZpZWRERkcuYXQoaWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LQotICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgICAgICBzdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gMDsKLQotICAgICAgICBK
U0Z1bmN0aW9uKiBjYWxsZWU7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZnJhbWUub3BlcmFuZChzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQo
KS5hc0NlbGwoKSk7Ci0KLSAgICAgICAgaW50MzJfdCBhcmd1bWVudENvdW50OwotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAg
ICAgICAgICAgYXJndW1lbnRDb3VudCA9IGZyYW1lLm9wZXJhbmQ8aW50MzJfdD4oc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0KLSAgICAgICAgSlNDZWxsKiBhcmd1bWVudHNPYmpl
Y3Q7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
OgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVy
aW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1
bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShhcmd1
bWVudHNPYmplY3QpKTsKLQotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChp
ZCwgb3BlcmFuZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBl
eHRyYSBpbml0aWFsaXphdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUgaW4gb3JkZXIKLS8vIG9m
IG1vc3QgbGlrZWx5IG5lZWRlZCAobG93ZXIgZW51bSB2YWx1ZSkgdG8gbGVhc3QgbGlrZWx5IG5l
ZWRlZCAoaGlnaGVyIGVudW0gdmFsdWUpLgotLy8gRWFjaCBsZXZlbCBpbml0aWFsaXphdGlvbiBp
bmNsdWRlcyB0aGUgcHJldmlvdXMgbG93ZXIgZW51bSB2YWx1ZSAoc2VlIHVzZSBvZiB0aGUKLS8v
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2YWx1ZSBiZWxvdykuCi1lbnVtIGNsYXNzIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCB7Ci0gICAgTm9uZSwKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5
LAotICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwKLSAgICBBcnJheVByb2ZpbGVVcGRhdGUsCi0gICAg
T3RoZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIEFTU0VSVCgmY2FsbEZyYW1lLT5kZXByZWNh
dGVkVk0oKSA9PSAmdm0pOwotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotCi0gICAgaWYg
KHZhbGlkYXRlREZHRG9lc0dDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0
aW1pemVkIGNvZGUuIFNvLCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0aW1pemVkCi0gICAgICAg
IC8vIGNvZGUgcnVubmluZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAgICAgIHZtLmhlYXAuc2V0
RXhwZWN0RG9lc0dDKHRydWUpOwotICAgIH0KLQotICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRj
aCkgewotICAgICAgICBjYWxsRnJhbWUgPSB2bS5jYWxsRnJhbWVGb3JDYXRjaDsKLSAgICAgICAg
Y29udGV4dC5mcCgpID0gY2FsbEZyYW1lOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLQotICAg
IC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVy
ZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJs
ZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Ci0KLSAgICB1aW50MzJf
dCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7Ci0gICAgREZHOjpKSVRDb2RlKiBkZmdKSVRD
b2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIE9TUkV4aXQmIGV4aXQgPSBk
ZmdKSVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0KLSAgICBBU1NFUlQoIXZtLmNhbGxGcmFt
ZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpOwotICAgIEVYQ0VQVElP
Tl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKTsKLQotICAgIGlmIChVTkxJS0VMWSghZXhpdC5leGl0U3RhdGUpKSB7
Ci0gICAgICAgIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmU7Ci0KLSAgICAgICAgLy8gV2Ugb25s
eSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9jayBvbmNlIGZvciBlYWNoIE9TUkV4aXQgcmVjb3Jk
LiBUaGUgY29tcHV0ZWQKLSAgICAgICAgLy8gcmVzdWx0cyB3aWxsIGJlIGNhY2hlZCBpbiB0aGUg
T1NSRXhpdFN0YXRlIHJlY29yZCBmb3IgdXNlIG9mIHRoZSByZXN0IG9mIHRoZQotICAgICAgICAv
LyBleGl0IHJhbXAgY29kZS4KLQotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBudWxscHRyOwotICAgICAgICBp
ZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIHJlY292
ZXJ5ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5k
ZXhdOwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0
aW9uUmVjb3ZlcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9r
aW5kID09IEdlbmVyaWNVbndpbmQpKQotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAg
ICAgICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIGlm
IChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5
cGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQotICAg
ICAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9m
aWxlVXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludDMyX3Qg
YWN0aXZlVGhyZXNob2xkID0gYmFzZWxpbmVDb2RlQmxvY2stPmFkanVzdGVkQ291bnRlclZhbHVl
KE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpOwotICAgICAg
ICBkb3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0Fu
ZENvbnZlcnRUb0ludChhY3RpdmVUaHJlc2hvbGQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGFkanVzdGVkVGhyZXNob2xkID4gMCk7Ci0gICAgICAgIGFkanVzdGVkVGhyZXNo
b2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKLQotICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAg
ICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwg
Y29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7
Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgICAgIGlmIChleGl0VG9MTEludCkgewot
ICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2Rl
TWFwKCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2Rl
TG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwotICAgICAgICAgICAganVtcFRh
cmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICAgICAgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5k
U3Bhbj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICBkZmdKSVRDb2RlLT52YXJpYWJs
ZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGRm
Z0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzLCAmdW5k
ZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90IHN0YWNrUG9pbnRlck9mZnNl
dCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21t
b24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpOwot
Ci0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0
LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywgV1RGTW92ZSh1bmRlZmlu
ZWRPcGVyYW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJl
c2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJheVByb2ZpbGUsIGV4aXRU
b0xMSW50KSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewot
ICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS5tX3BlckJ5dGVj
b2RlUHJvZmlsZXI7Ci0gICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0
aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQo
KTsKLQotICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBp
bGF0aW9uLT5hZGRPU1JFeGl0KAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgUHJvZmlsZXI6
Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luKSwKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZh
bGlkYXRpb24pOwotICAgICAgICAgICAgZXhpdC5leGl0U3RhdGUtPnByb2ZpbGVyRXhpdCA9IHBy
b2ZpbGVyRXhpdDsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpP
dGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0
ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVs
OjpPdGhlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUtPmV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDsKLQotICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCkpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nRigiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NT
dHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBleGl0S2lu
ZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVy
YW5kcykpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBPU1JFeGl0U3RhdGUmIGV4
aXRTdGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gZXhpdFN0YXRlLmJhc2VsaW5lQ29kZUJsb2NrOwotICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAg
ICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0U3RhdGUub3BlcmFuZHM7
Ci0gICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZpbmVkT3BlcmFuZFNwYW5z
ID0gZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLQotICAgIGNvbnRleHQuc3AoKSA9
IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zmc2V0Owot
Ci0gICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRvIHdoaWxlIGxvb3AgaXMg
c28gd2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0ZS4KLSAgICBkbyB7Ci0g
ICAgICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RhdGljX2Nhc3Q8RXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsPihleGl0U3RhdGUuZXh0cmFJbml0aWFsaXphdGlvbkxldmVsKTsK
LQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09IEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6Tm9uZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2lu
IGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFNwZWN1bGF0aW9uUmVjb3ZlcnkKLQotICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0aW9uIHJlY292ZXJ5IGZpcnN0IGJlY2F1c2UgYXJy
YXkgcHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9maWxpbmcKLSAgICAgICAgLy8gbWF5IHJlbHkgb24g
YSB2YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBIb3dldmVyLCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGF0
IGl0IGlzIGxpa2VseQotICAgICAgICAvLyB0byBoYXZlIGEgcmVjb3ZlcnkgdmFsdWUuIFNvLCB3
ZSdsbCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VMWS4KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVy
eSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVjb3Zlcnk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShy
ZWNvdmVyeSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAg
ICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJl
Y292ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSBj
cHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+c3JjKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zl
cnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikp
OwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6
TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAgICAgICAgY3B1Lmdwcihy
ZWNvdmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAt
IHJlY292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAg
ICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBCb29s
ZWFuU3BlY3VsYXRpb25DaGVjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIF4g
SlNWYWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5KQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogVmFs
dWVQcm9maWxlVXBkYXRlCi0gICAgICAgIEpTVmFsdWUgcHJvZmlsZWRWYWx1ZTsKLSAgICAgICAg
aWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIHByb2ZpbGVkVmFsdWUg
PSBqc1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgaWYg
KE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2Zp
bGUpCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5yZXBvcnRWYWx1ZShwcm9maWxlZFZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogQXJyYXlQ
cm9maWxlVXBkYXRlCi0gICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGV4
aXRTdGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghIWV4aXQubV9qc1Zh
bHVlU291cmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8
fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJv
ZmlsZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgICAgIGJvb2wgZG9Qcm9m
aWxlID0gIWluc3RydWN0aW9uLT5pczxPcEdldEJ5SWQ+KCkgfHwgaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKS5tZXRhZGF0YShwcm9maWxlZENvZGVCbG9jaykubV9tb2RlTWV0YWRhdGEubW9k
ZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBpZiAoZG9Qcm9maWxl
KSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm9maWxlZFZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
b2JzZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmls
ZS0+b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gRXh0cmEgaW5pdGlsaXphdGlv
biBsZXZlbDogT3RoZXIKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9raW5kID09IEdlbmVy
aWNVbndpbmQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBv
cF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAg
ICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sg
cG9pbnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZw
KCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4
aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgICAgICBleGl0U3RhdGUucHJvZmlsZXJFeGl0
LT5pbmNDb3VudCgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpKQotICAgICAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRleHQsIHZtLm9zckV4aXRJ
bmRleCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxlIChmYWxzZSk7IC8vIEVuZCBleHRyYSBpbml0aWFs
aXphdGlvbi4KLQotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwot
ICAgIEFTU0VSVCghKGNvbnRleHQuZnA8dWludHB0cl90PigpICYgMHg3KSk7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIEFTU0VSVChjcHUuZ3ByPGlu
dDY0X3Q+KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok5vdENlbGxN
YXNrKTsKLSNlbmRpZgotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFu
ZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAvLyBOb3RlOiB3ZSBuZWVk
IHRvIHJlY292ZXIgdmFsdWVzIGJlZm9yZSByZXN0b3JpbmcgY2FsbGVlIHNhdmUgcmVnaXN0ZXJz
IGJlbG93Ci0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3ZlcnkgbWF5IHJlbHkgb24gdmFsdWVzIGlu
IHNvbWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotCi0gICAgaW50IGNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2st
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVy
T2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUoKTsKLSAgICBzaXplX3QgbnVtVW5kZWZpbmVkT3Bl
cmFuZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zLnNpemUoKTsKLQotICAgIHNpemVfdCBu
ZXh0VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsKLSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZE9wZXJh
bmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgaWYgKG51bVVuZGVmaW5lZE9wZXJhbmRT
cGFucykKLSAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJh
bmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotCi0gICAgSlNWYWx1
ZSB1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwotICAgIGZvciAoc2l6ZV90IHNwYW5JbmRleCA9
IDA7IHNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFuczsgKytzcGFuSW5kZXgpIHsK
LSAgICAgICAgYXV0byYgc3BhbiA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tzcGFuSW5kZXhdOwot
ICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSBzcGFuLm1pbk9mZnNldDsKLSAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSBmaXJzdE9mZnNldCArIHNwYW4ubnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLSAgICAg
ICAgZm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RPZmZzZXQ7IG9mZnNldCA8IGxhc3RPZmZzZXQ7ICsr
b2Zmc2V0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvZmZzZXQsIHVuZGVmaW5lZCk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mT3Bl
cmFuZHM7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5k
cy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KGluZGV4ID09IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRl
eCArPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleCsrXS5udW1i
ZXJPZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFVuZGVmaW5lZFNwYW5JbmRl
eCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZp
bmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFu
SW5kZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV4
dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50
b0xvY2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKLQotICAg
ICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmZwcjxKU1ZhbHVlPihyZWNvdmVyeS5mcHIo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBj
YXNlIEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZ3By
PEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0g
ICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkudGFnR1BSKCkpLCBjcHUuZ3ByPGlu
dDMyX3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8SlNDZWxsKj4ocmVjb3ZlcnkuZ3By
KCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hl
ZENlbGwoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjcHUuZ3ByPGJvb2w+KHJlY292ZXJ5LmdwcigpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIEJvb2xlYW5EaXNw
bGFjZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNlbHNlCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkucGF5bG9hZCgpKSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlVW5ib3hlZEludDMyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5Lmdw
cigpKSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQ1MigpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1MkluR1BSOgotICAgICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVj
b3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0cmlj
dEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBw
dXJpZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5mcHIoKSkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cHVyaWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVu
c2FmZVVuYm94ZWREb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIHJlY292
ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXJl
Y3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1l
bnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgeWV0
LgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5kIHRoZW4g
c2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAgcmVzdG9yZUNhbGxlZVNh
dmVzRm9yKGNvbnRleHQsIGNvZGVCbG9jayk7Ci0gICAgc2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnRl
eHQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY3B1Lmdw
cihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdp
c3Rlcj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBjcHUuZ3ByKEdQUkluZm86Om5vdENlbGxN
YXNrUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok5v
dENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Y29udGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNv
dmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50
cwotICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhl
ci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVm
ZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0
aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3
ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBt
YXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29w
ZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLQotICAgIERGRzo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoY29udGV4dCwgY29kZUJsb2NrLCBkZmdKSVRDb2RlLCBvcGVyYW5k
cyk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNl
IHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBp
bnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAg
IC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBl
eGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhl
IG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1Ig
ZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAg
Ly8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5j
ZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNl
IG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQg
dG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAg
ICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQg
aXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBu
ZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBl
cmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAg
Ly8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBp
bW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMg
b2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFy
bHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywg
ZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVu
bmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdn
ZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhl
IGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFu
ZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVu
aXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVz
c2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhl
IGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAg
IC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdn
ZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBo
b3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBv
ZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQp
LAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUg
ZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBv
ZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRo
YW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFu
ZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFp
bHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ug
d2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpLgotCi0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+dXBkYXRlT1NSRXhpdENv
dW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShleGl0U3RhdGUpID09IENvZGVCbG9jazo6
T3B0aW1pemVBY3Rpb246OlJlb3B0aW1pemVOb3cpKQotICAgICAgICB0cmlnZ2VyUmVvcHRpbWl6
YXRpb25Ob3coYmFzZWxpbmVDb2RlQmxvY2ssIGNvZGVCbG9jaywgJmV4aXQpOwotCi0gICAgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci0g
ICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNvbnRleHQsIHZtLCBjb2RlQmxvY2ssIGJhc2VsaW5l
Q29kZUJsb2NrLCBleGl0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2Nr
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKLXsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNw
dTsKLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0YWNrIHdoZW4gcGVyZm9y
bWluZyBhbiBPU1IgZXhpdAotICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxs
cy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTEx
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICBmcmFtZS5zZXRPcGVyYW5kPENvZGVCbG9jayo+KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotCi0g
ICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKLSAgICBmb3IgKGNvZGVPcmlnaW4gPSAm
ZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2Fs
bGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jaygqY29kZU9yaWdpbiwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kOwotICAg
ICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJT
a2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKLSAgICAgICAgdm9pZCogY2Fs
bGVyRnJhbWUgPSBjcHUuZnAoKTsKLQotICAgICAgICBib29sIGNhbGxlcklzTExJbnQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAgICAgICAgICAgIHZvaWQqIHJldHVyblBDID0gZnJh
bWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpOwotI2lmIENQVShBUk02
NEUpCi0gICAgICAgICAgICB2b2lkKiBvbGRFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9
IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAr
IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICByZXR1cm5QQyA9IHJldGFnQ29kZVB0cihyZXR1
cm5QQywgYml0d2lzZV9jYXN0PFB0clRhZz4ob2xkRW50cnlTUCksIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIHJldHVyblBDKTsKLSAgICAgICAgICAg
IGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5i
eXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0
dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVl
Q2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNh
bGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tP
ZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAg
ICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxs
RnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVt
cFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3
RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAg
ICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3Rl
cnMuCi0gICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0
IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJl
YWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2
ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQot
ICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsK
LSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5l
Q2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFU
YWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJs
ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZv
aWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBM
TEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUp
OwotICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVP
ZmZzZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdP
ZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1ZhbHVlKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28g
dGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQs
IFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50
MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwot
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25z
dGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBh
cnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8v
IERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRp
ZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0
d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCi17
Ci0gICAgT1NSRXhpdFN0YXRlKiBleGl0U3RhdGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLQot
ICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsgLy8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhw
ZWN0cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNoYW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2Uu
Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgLy8g
V2UgYmFycmllciBhbGwgaW5saW5lZCBmcmFtZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50
IGlubGluZSBzdGFjayAtLQotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxp
bmVkIGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVlIHByb2ZpbGUgdGhhdAotICAgIC8vIHdlJ2xsIHVw
ZGF0ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBjYXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlm
IGJvdGgKLSAgICAvLyBhIGFuZCBiIGFyZSBpbmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBi
IGR1ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQKLSAgICAvLyBmcm9tIGEuCi0gICAgLy8gRklYTUU6
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVC
bG9jayBvd25zCi0gICAgLy8gdGhlIHZhbHVlIHByb2ZpbGUuCi0gICAgSW5saW5lQ2FsbEZyYW1l
U2V0KiBpbmxpbmVDYWxsRnJhbWVzID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0g
ICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2Fs
bEZyYW1lcykKLSAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgIH0KLQotICAgIGF1dG8qIGV4aXRJbmxp
bmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBp
ZiAoZXhpdElubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5m
cDx1aW50OF90Kj4oKSArIGV4aXRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLQotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1
bXBUYXJnZXQ7Ci0gICAgQVNTRVJUKGp1bXBUYXJnZXQpOwotCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9j
YXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0gICAgICAgIHZtLmNhbGxG
cmFtZUZvckNhdGNoID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIH0KLQotICAgIHZt
LnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLQotICAgIGlmIChleGl0
U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JF
eGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0
Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9y
RXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0KLSAgICAgICAg
Y29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpLm9mZnNldCgpKTsKLSNlbHNlCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
Ci0gICAgICAgICAgICB2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudElu
c3RydWN0aW9uOwotICAgIH0KLQotICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENv
bnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhp
dCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4o
KTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAg
ICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLQotICAgIGRhdGFM
b2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygi
IEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhp
dEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKLSAgICBpZiAoYWx0ZXJuYXRpdmUpIHsK
LSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLAotICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKSwKLSAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGRhdGFMb2coIm5vIGFsdGVybmF0aXZlIGNvZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0
aXNvbmVkKSIpOwotICAgIGRhdGFMb2coIiwgb3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2st
Pm9zckV4aXRDb3VudGVyKCksICJcbiIpOwotICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUg
b2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdp
c3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIs
IFJhd1BvaW50ZXIoY29udGV4dC5ncHI8dm9pZCo+KGdwcikpKTsKLSAgICB9Ci0gICAgZGF0YUxv
ZygiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
IHsKLSAgICAgICAgRlBSUmVnIGZwciA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAg
IGRhdGFMb2coIiAiLCBjb250ZXh0LmZwck5hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0
X3QgYml0cyA9IGNvbnRleHQuZnByPHVpbnQ2NF90PihmcHIpOwotICAgICAgICBkb3VibGUgdmFs
dWUgPSBjb250ZXh0LmZwcihmcHIpOwotICAgICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxu
Iik7Ci19Ci0KLS8vIEpJVCBiYXNlZCBPU1IgRXhpdC4KLQogT1NSRXhpdDo6T1NSRXhpdChFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBz
dHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtp
bmQsIGppdC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5t
X29yaWdpbi53YXNIb2lzdGVkKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2Up
CkBAIC05NTgsMTUgKzcwLDE4IEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4g
T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6
ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJ
RCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1l
bnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxS
ZWdpc3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAg
ICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5k
LmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBNaW5pZmllZElEIGlk
ID0gcmVjb3Zlcnkubm9kZUlEKCk7CiAgICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0
ZWRBcmd1bWVudHMuZW5kKCkpIHsKQEAgLTk4Nyw3ICsxMDIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJh
bmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSks
CiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaml0Lm1vdmUoCkBAIC05OTcsNyArMTEyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0
UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5k
czxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEzOCw3IEBAIHZvaWQgT1NS
RXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29u
c3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAg
YWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOworICAgICAgICBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsODQgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxl
RXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25z
dAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7
CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNo
ZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBh
IHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBv
dGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5k
cy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRz
LnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGF1dG8qIHRtcFNj
cmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CisgICAgICAgIGppdC5wcm9i
ZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1l
LCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUg
PSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAg
ICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNl
dF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUg
RlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRj
aCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5j
b25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRtcFNjcmF0
Y2hbaSArIHRtcE9mZnNldF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRt
cE9mZnNldF0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBz
W2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhp
dC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2Fs
bEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lk
ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVv
ZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBi
eXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRh
dGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFj
ay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0
dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkg
JiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBv
cGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYg
b3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45
ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEyMzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUwLDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0
IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAgIGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZyYW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBl
eGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjky
YTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYg
KzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
R2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5n
VG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAppbmRleCAyZmYzZWE4YjVmYmI2ZjNmMjcyMWQ1MDI0NDU2Mjk4YjA4NGQ1MTE1Li4yMWJlZTgy
ODM0YTc4MDc0MjI0NzI3ZDg5OWYyYmMyZjZiODVhYTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwx
MiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1
ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTE0Myw2ICsxNDYsOSBAQCB2b2lkKiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRl
Y29kZUluZGV4IGNhbGxCeQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9T
UkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oJkxMSW50
OjpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQpOworCiAg
ICAgdm9pZCoganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBAIC0yMzgs
NyArMjQ0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVk
IHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQuYmFzZWxp
bmVDb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
aykpOworICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0
LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2lu
OwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAm
JiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4t
PmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CkBAIC0z
MDUsMzMgKzMxMSwzNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgaml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2RlQmxvY2stPmJ5
dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsK
KyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRp
b25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwog
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
IGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNv
IHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFt
ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGlu
c3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwpCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0
YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3Rs
eSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAvLyBEb24ndCBuZWVkIHRv
IHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwg
Y2FsbHMKICAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleCgpKS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNv
ZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKICNlbHNlCi0gICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0
cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0
d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9y
RXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25z
KGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpLmJp
dHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBqaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJs
eUhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgfQog
fQogCkBAIC0zODIsMTEgKzM4OSwxMiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYg
dm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICBBU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpKSk7
CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+IGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9MTEludCA9IE9w
dGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRvTExJbnQpIHsK
ICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpOwogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0g
KmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b24gPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSA/IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oJkxMSW50OjpjaGVja3BvaW50X29zcl9leGl0
X2VudHJ5cG9pbnQpKSA6IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAKICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsK
ICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVu
dEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIpOwpAQCAtNDAyLDcgKzQxMCwxNCBAQCB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBP
U1JFeGl0QmFzZSYgZXhpdCkKICNlbmRpZgogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRp
b24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2Nh
dGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0g
ZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4
IGluZGV4Rm9yQ2hlY2twb2ludFJldHVybiA9IGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5k
ZXhGb3JFeGl0KGV4aXRJbmRleCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5k
KGluZGV4Rm9yQ2hlY2twb2ludFJldHVybik7CisgICAgICAgIGlmIChleGl0SW5kZXguY2hlY2tw
b2ludCgpKSB7CisgICAgICAgICAgICBjaGVja3BvaW50UmV0dXJuVGFyZ2V0ID0gY29kZUxvY2F0
aW9uOworICAgICAgICAgICAgY29kZUxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPigmTExJbnQ6OmNoZWNrcG9pbnRfb3NyX2V4aXRf
ZW50cnlwb2ludCkpOworICAgICAgICB9CisKICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7
CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRl
eCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNiNGIwM2RjMTk5Li43ZGE2YWZkNWMyMjFj
OTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAK
QEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9oZWFwLmZv
bGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9kZSgpKSAhPSBlc2NhcGVlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJ
bmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVk
Z2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAppbmRleCBmMzljMTRiOWYw
YTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZl
NjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAg
LTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZvKEludGVn
cmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBsaWNpdCBPcEluZm8oT3BlcmFuZCBvcCkg
OiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog
ICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBiOTQ4OGExMDMyODcyNjI4YTllMmVlODcz
ZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3NzY5MmRiMTA3Njg0MDdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI5NDYsMTUgKzI5
NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVl
RG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qg
Zmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCiB7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudCB7IGZpcnN0RWxlbWVudERlc3QgfTsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50
cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKICAgICAKLSAgICBsb2FkVmFy
YXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVu
dERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBsb2FkVmFyYXJncyhnbG9i
YWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAtIDEpOwogICAgIAotICAgIGZvciAodWlu
dDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKLSAgICAgICAgY2Fs
bEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgZm9y
ICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAg
ICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCArIGkpID0ganNVbmRlZmluZWQoKTsKIH0K
IAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGlu
dDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhiZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFi
NWEwYzZhZGMyLi4yYjEwNWIyY2FkZTdiN2Q1NTg5ZmFkZWFmYjAyYmMwOTY0NWUwOWJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9u
UGhhc2UuY3BwCkBAIC00MywxMSArNDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJ
bnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBj
bGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgUGhhbnRvbUluc2Vy
dGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgInBoYW50b20g
aW5zZXJ0aW9uIikKQEAgLTYyLDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICAvLyBTZXRMb2Nh
bHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4gVGhhdCBjYXVzZXMgdXMgdG8gaW5zZXJ0
IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwg
bV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQ
aGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAg
ICAgIH0KQEAgLTcyLDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQogICAgICAgICAgICAgaGFu
ZGxlQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRp
b25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAg
ICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTEwMywyMiArMTAwLDIyIEBA
IHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5nSW5kZXggPSAwOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7Ci0gICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBab21iaWVI
aW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51
bmxpbmtlZE9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERl
ZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5YmU6Ci0gICAgICAgICAg
ICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbnVsbHB0cjsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0xMzQsMzggKzEzMSw0MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5k
b1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICAgICBbJl0g
KEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
VXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2UsICIgdG8gIiwgY3VycmVudEVwb2NoKTsKICAgICAg
ICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3VycmVu
dEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlLaWxsZWQ7Cisg
ICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAgICAgICAgIGF1dG8gcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZDogIiwgcmVnLCAi
XG4iKTsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJh
bmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAg
S2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQpOwogCiAgICAgICAgICAgICAgICAgLy8gQWxyZWFk
eSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJl
YWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlLaWxsZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5k
ICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxsZWQgYnkgc2V0IGxvY2FsIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsK
LSAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCisgICAgICAgICAgICAgICAgTm9kZSog
a2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCk7IAorICAgICAgICAgICAgICAg
IGlmICgha2lsbGVkTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiB3YXMgbm90IGRlZmluZWQgaW4gdGhpcyBi
bG9jay4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBhIFBo
YW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAogICAgICAg
ICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4KLSAg
ICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBjdXJyZW50RXBvY2gpCisg
ICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKSB7
CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAi
LCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVwb2NoICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0
aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwKKyAgICAgICAgICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBr
aWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0
RXhpdGluZ0luZGV4KSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGluZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3
ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSByZWYgY291bnQuCiAg
ICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOwpAQCAtMTc5LDE0ICsxODAs
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
ID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2Rl
LT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXlFeGl0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBkb2VzIGV4aXQsIHdlIG5lZWQgdGhlIE1v
dkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIGxpdmUgdW50
aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLaWxs
ZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IGxv
Y2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChvcGVyYW5kKTsK
KyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IG9wZXJhbmQ7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobG9jYWwpID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMobV9ncmFw
aCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLCBwcm9jZXNzS2lsbGVkT3BlcmFu
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCmluZGV4IGE1OGUxNzk2NTYwZmM2ZDk0YmI0NjNkMTQyOTg4NmUwNzhmMGFm
Y2MuLmY1ZjA5NmM4ZWI1NmQ0NWZhOTg5YmI0OTM2ZjcyZDQ0ODE5NWExNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1f
cmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAg
ICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBoZWFwLm9wZXJhbmQoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02OCw3ICs2OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdyaXRlcyB0byBhbHJlYWR5IGJlIHByZWNp
c2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJlcml6ZSgpLgogICAgICAgICBpZiAoaGVh
cC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoZWFwLnBh
eWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fdW5jb25k
aXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSk7
CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgaGVh
cC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3RhY2spOwogICAgICAgICAKLSAgICAgICAg
bV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigp
KSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAoKS5vcGVyYW5kKCksIG5vZGUp
OwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
LSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2FsbElmQXBwcm9wcmlhdGUoY29uc3QgRnVu
Y3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJh
bmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnRvTG9jYWwoKSkg
Pj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpCiAg
ICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKaW5kZXggNDQ3ZTI0ZTJhMTE2MzM3
YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4uNWI0Zjk5MjkzNDExNzljMjA0OTk1MmJkYzM4Njk2
NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxP
cHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0
SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RI
YW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9
IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAg
ICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tp
XTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggODA1MDUxNmNiZmVjYzg0ZmUxOTU4NDI4
YTBjZjg3Y2Q1NGVlMTE3Yi4uMjIxYzUwMWRiZDE0YzA0NTcyYTdmZTFkMTliZTZkMzE5N2MxM2Yz
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEzNjUsNiArMTM2NSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAg
ICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNl
IFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4IDg3Mjc3NjBjNmVjYmRiMzJlYWU2MDNiYWNi
ZDEwMDM3NGQ4MTRmZTcuLmZkNjEyM2ZhOWYxZDUyOWU0YzJlZTJjMGU3ZWRmNjNmMDdmNzhkODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5n
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19Ci0K
IGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFB1dFN0YWNrU2lu
a2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgIlB1dFN0YWNr
IHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRoZSBzdGFj
ay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhpcyBpcyBpbXBvcnRhbnQgb3Igbm90LgogICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CiAg
ICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3Jh
cGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVt
cCgpOwogICAgICAgICB9CkBAIC04OCwxMSArODUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEJsb2Nr
TWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgpOwogICAgICAgICAKICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgbGl2ZUF0VGFp
bFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxs
KGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdLmZpbGwoZmFsc2UpOworICAg
ICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2Us
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxb
YmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZDsK
QEAgLTEwNywzMyArMTAxLDM0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxi
b29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIsIGxpdmUsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlciwg
ND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+
IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3Bl
cmFuZCwgND4gcmVhZHM7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxPcGVyYW5kLCA0PiB3
cml0ZXM7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hl
YWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJhbmQsICIgaXMgbGl2ZSBhdCAiLCBub2Rl
LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRzLmFwcGVuZChvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3Mg
fHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEtpbGxTdGFj
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG9wID0gbm9kZS0+b3AoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IFB1dFN0YWNrIHx8IG9wID09
IFZhcmFyZ3NMZW5ndGggfHwgb3AgPT0gTG9hZFZhcmFyZ3MgfHwgb3AgPT0gRm9yd2FyZFZhcmFy
Z3MgfHwgb3AgPT0gS2lsbFN0YWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlcy5h
cHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAg
ICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHdyaXRlcykKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiB3cml0ZXMpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHJlYWRzKQorICAgICAgICAg
ICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHJlYWRzKQogICAgICAgICAgICAgICAg
ICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCkBAIC0yMzQsNyArMjI5LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Js
b2NrXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
OiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoi
LCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFjaykgewpAQCAtMjYxLDcgKzI1Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTAzOTgKIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c0NvbmZsaWN0aW5nID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVy
YW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9PSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJs
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsICFpc0NvbmZsaWN0aW5nKTsKQEAgLTI3NSwxNyArMjcwLDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IFB1dFN0
YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlNldHRpbmcgZmx1c2gg
Zm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gS2lsbFN0YWNrKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNpbmsgYSBQdXRTdGFj
ayBwYXN0IGEgS2lsbFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBmb3IgIiwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Np
bmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBhdXRvIGVz
Y2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
Rm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTI5MywxNiArMjkxLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAg
ICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRs
ZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+
b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJn
c0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9y
d2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJh
bmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9
IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUp
IHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7
IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRhaWxbYmxvY2tdKQpAQCAtMzEzLDEzICszMTMs
MTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAi
LCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkpKSwgIiBhdCAiLCBw
b2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRl
ZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdl
cyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIGRlZmVycmVkLm9wZXJh
bmRGb3JJbmRleChpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJE
dW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVh
ZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVyZ2UoZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgZGVmZXJyZWRbaV0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
ZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CkBAIC0zNTIsMTAgKzM1MiwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG9wZXJhbmRU
b1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRv
T3BlcmFuZDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmQ+IGluZGV4VG9PcGVyYW5kOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobV9ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSk7Ci0gICAgICAgICAg
ICAKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisKICAgICAgICAgICAgIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKICAg
ICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsK
ICAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3BlcmFuZC5zaXplKCkgPT0gdmFyaWFibGUtPmlu
ZGV4KCkpOwpAQCAtMzcwLDEyICszNzAsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNh
c2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHB1dFN0YWNrc1RvU2luay5hZGQobm9k
ZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFi
bGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAg
ICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTM4Niw3ICszODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAogICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7Ci0g
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2
YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5k
ZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5kKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zOTcsNyArMzk3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgUGhpIGZvciAiLCBvcGVy
YW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVh
cFRvcCwgUGhpLCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSk7CkBAIC00
MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbWFwcGluZy5maWxsKG51bGxwdHIp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWFwcGluZy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtYXBw
aW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
KG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBvcGVyYW5kVG9WYXJp
YWJsZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRl
ZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUp
OwpAQCAtNDIxLDE1ICs0MjEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1hcHBpbmcu
b3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcHBpbmcs
ICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRl
ZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7Ci0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYt
PnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBwaGlEZWYtPnZh
bHVlKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQs
ICIgdG8gIiwgcGhpRGVmLT52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAgICAgICAgICBtYXBwaW5n
Lm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CkBAIC00
MzcsMTUgKzQzNywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkZWZlcnJlZCA9IGRlZmVycmVk
QXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsg
bm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0
ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgUHV0
U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IGRhdGEtPm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQob3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBp
bmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksICIgYXQgIiwgbm9k
ZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00
NTMsMTYgKzQ1MywxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAg
ICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRh
dGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpICE9IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVy
cmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpICE9IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVy
cmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIGRlZmVycmFs
LiBObyBkZWZlcnJhbCBtZWFucyB0aGF0IHRoZSBtb3N0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhdXRob3JpdGF0aXZlIHZhbHVlIGZvciB0aGlzIHN0YWNrIHNsb3QgaXMgd2hhdCBpcyBz
dG9yZWQgaW4gdGhlIHN0YWNrLiBTbywKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAg
dGhlIEdldFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKGRh
dGEtPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJh
bmQoZGF0YS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC00NzIsMjAg
KzQ3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgc3RvcmVkIGFu
ZCBnZXQgcmlkIG9mIHRoZSBHZXRTdGFjay4KICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCBmb3JtYXQgPT0gZGF0YS0+Zm9ybWF0LCBmb3JtYXQsIGRhdGEtPmZv
cm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBOb2RlKiBp
bmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IGluY29taW5nLT5kZWZhdWx0RWRnZSgp
OwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eSgpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IENvbmZs
aWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRm9yICIs
IG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCkBAIC00OTksNyArNDk5LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2VydCBhIFB1dFN0YWNrLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRTdGFjayBmb3IgIiwgb3BlcmFu
ZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
aW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CkBAIC01MTMsNyArNTEzLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5k
KSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAg
ICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFyZ3MgYXJlIHVuY29uZGl0aW9uYWwg
d3JpdGVzIHRvIHRoZSBzdGFjawpAQCAtNTIxLDEzICs1MjEsMTMgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25zIHRoZXkgd3JpdGUgdG8uIFRoaXMgbWFrZXMg
dGhvc2Ugc3RhY2sgbG9jYXRpb25zIGRlYWQgcmlnaHQgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBiZWZvcmUgYSBMb2FkVmFyYXJncy9Gb3J3YXJkVmFyYXJncy4gVGhpcyBtZWFucyB3ZSBz
aG91bGQgbmV2ZXIgc2luawogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHV0U3RhY2tzIHJp
Z2h0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFy
Z3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9
PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3Ao
KSA9PSBGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5v
cGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAg
ICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsg
fSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0p
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9IH0KICAgICAg
ICAgICAgIH0KQEAgLTUzOSw4ICs1MzksOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9y
IChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2Nr
KHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0g
cGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4
KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5k
ZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIFVwc2ls
b24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2lu
dGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBGbHVz
aEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10ub3BlcmFuZChv
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCBpc0NvbmNyZXRlKGZvcm1hdCksIGZvcm1hdCk7CkBAIC01ODUsNyArNTg1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUHV0U3RhY2sgc2lua2luZzpc
biIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAppbmRleCA0
MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMxMWQ2NzY4NjUwLi4wNGYyYzBjZDM5OThiMTgx
YjllOThiYmE0MjcwNDg4M2I0MGQyZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgR2V0
U3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dy
YXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCkpKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7
CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5v
ZGUpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxl
LT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBQcnVuZSBi
eSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRoYW4gY29tcGlsZSB0
aW1lcy4KLSAgICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSog
aGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPm9wZXJh
bmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWFkTm9kZSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KCkpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFsdWVGb3JPcGVyYW5k
Lm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlE
ZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVy
YW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50
LCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgp
LT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5v
cGVyYW5kKCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3
LDcgKzMzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2lu
LAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5v
ZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2Vk
T3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBm
YWxzZTsgLy8gS2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5LDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RhY2soCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dy
YXBoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFi
bGUtPmxvY2FsKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICB2
YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5k
KCksICIgLT4gIiwgY2hpbGQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNoaWxkOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1fYXJndW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAgICAgICAgICAgICAg
ICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0z
NzEsOCArMzcxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2Rl
ICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2
YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzg1LDcgKzM4NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2Up
OwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0
RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQyNSwxMiArNDI1LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGV4aXRPSy4KICAgICAgICAgICAgICAgICAg
ICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihmb3JtYXQpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBm
b3IgIiwgdmFyaWFibGUtPmxvY2FsKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5k
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiIHRvICIsIHBoaU5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIs
IHZhcmlhYmxlLT5vcGVyYW5kKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICIgdG8gIiwgcGhpTm9kZSk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9u
ZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhwaGlOb2RlKSwgRWRnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2luZCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgKaW5kZXggMTViZTQyYWMzYjY5YWY0ZGM1ODM4YTE4ZGYzOWQwNzhjYTMxNjkxOS4uOWEzMmQ2
N2E1ODc0Mjk1ODViMzdkOWFlMWE2Y2ViYzVmYzk2MmNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTMyMiw2ICszMjIsNyBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoK
ICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVj
dEZvcndhcmRWYXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAppbmRleCBiNWExMWM1MWVmMTBjZjdhNmIyMzE3MmQyZDhiZjhmNjc1ZTA1
MmJkLi40MWU5YzRiOWFjZDQ5NzljNDIwMWM2ZmRhMTAxZmVlOGQ5MWI5OWY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTc3NSw3
ICsxNzc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9k
ZSkKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VP
U1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkp
KTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWlu
aWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmJhaWwoQWJvcnRSZWFzb24gcmVhc29uKQpAQCAtMTgyNSw3ICsxODI1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgbV9zdGF0
ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG1f
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaW50IG9wZXJh
bmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvcklu
ZGV4KGkpOwogICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkW2ld
OwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0
byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgpAQCAtMTgzNSwxMSArMTgzNSw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgICAgICBpZiAoIW5vZGUtPnJl
ZkNvdW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVh
ZCBTZXRMb2NhbCdzLgogICAgICAgICBmb3JtYXQgPSBkYXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5m
bHVzaEZvcm1hdCgpKTsKLSAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZygKLSAgICAgICAg
ICAgIFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKSwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCks
Ci0gICAgICAgICAgICAgICAgZm9ybWF0KSk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgIW9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCkudG9Bcmd1bWVudCgpID49IDApOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9n
KFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKG9wZXJhbmQsIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KSwgZm9ybWF0KSk7CiAgICAgfQogCiAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CkBAIC0x
OTE5LDcgKzE5MTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMo
KQogICAgICAgICBpZiAoZm9ybWF0ID09IEZsdXNoZWRKU1ZhbHVlKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkudmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKTsK
IAogICAgICAgICBKU1ZhbHVlU291cmNlIHZhbHVlU291cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgCkBAIC03MzQx
LDU0ICs3MzM5LDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTZXRGdW5jdGlvbk5h
bWUoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYXJn
dW1lbnRzUmVnczsKLSAgICB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNW
YWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICB9CisgICAgbG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRo
aXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVu
dHMuanNWYWx1ZVJlZ3MoKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIHVubG9jayhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVP
ZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0KTsKICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOwogCiAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgewotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIEdQUlRlbXBvcmFyeSBhcmdDb3VudEluY2x1ZGlu
Z1RoaXModGhpcyk7CisgICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0Nv
dW50SW5jbHVkaW5nVGhpcy5ncHIoKTsKICAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwogCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxs
IGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgIC8v
IGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0
bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBi
ZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9w
X2NhbGxfdmFyYXJncyByaWdodAotICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNs
dWRpbmdUaGlzR1BSKTsKIAotICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQot
ICAgICAgICBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgYXJndW1lbnRzUmVncyk7CisgICAgaW50MzJSZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdU
aGlzR1BSLCBub2RlKTsgIAorfQogCi0gICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQoreworICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworCisgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291bnQodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJn
dW1lbnRDb3VudC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyBhcmd1bWVudHNSZWdzID0gYXJndW1l
bnRzLmpzVmFsdWVSZWdzKCk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBWYXJh
cmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKSk7Cisg
ICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJy
YW5jaFRlc3QzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2so
CiAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0
LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAg
ICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CiAK
LSAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KworICAgIG1faml0LnN0b3JlMzIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwogCi0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEt
Pm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CiAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM5
OCwxNyArNzM5NywxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFy
Z3MoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmNo
aWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAgaWYgKG5vZGUt
PmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBlbHNl
CiAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKIAorICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENv
dW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMp
OwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgR1BSUmVnIGxlbmd0
aEdQUiA9IGxlbmd0aC5ncHIoKTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBhcmd1bWVu
dENvdW50LmdwcigpOwogICAgIEpTVmFsdWVSZWdzIHRlbXBSZWdzID0gdGVtcC5yZWdzKCk7Ci0g
ICAgICAgIAotICAgIGVtaXRHZXRMZW5ndGgoaW5saW5lQ2FsbEZyYW1lLCBsZW5ndGhHUFIsIC8q
IGluY2x1ZGVUaGlzID0gKi8gdHJ1ZSk7CisgICAgCisgICAgbV9qaXQubW92ZShhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgbGVuZ3RoR1BSKTsKICAgICBpZiAoZGF0YS0+b2Zmc2V0KQogICAg
ICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoZGF0YS0+b2Zmc2V0KSwgbGVuZ3RoR1BSKTsK
ICAgICAgICAgCkBAIC0xMjQ0Nyw3ICsxMjQ0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogICAgIGlmIChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0lubGluZUNh
bGxGcmFtZSgpKQogICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICBlbHNlCi0gICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KTsKKyAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudDsKICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1l
bnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0LmdwcigpKTsKICAgICBpbnQzMlJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCmluZGV4IGM2NGY5NzhhZGY4NWZiZjI3N2JiYTc5MjE2MDY0ZjQyODFiOGQ1YTku
LjAzZDQ4MzViZjRiN2E4ZGUwOTM5ZWZjZmEzNzAyMmI0NjI2OTA5NDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEzOTMsNiArMTM5Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZU5ld1JlZ2V4cChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZh
cmFyZ3MoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVB
Y3RpdmF0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMo
Tm9kZSopOwpAQCAtMTY2OSwxNSArMTY3MCwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWdlVHlw
ZWRBcnJheVN0b3JhZ2UoR1BSUmVnLCBHUFJSZWcpOwogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0
TG9jYWwoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lz
dGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVj
b2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAg
ICAgeworICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlUmVnLmlzQXJndW1lbnQoKSB8fCBieXRlY29k
ZVJlZy52aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CiAgICAgICAgIG1fc3Ry
ZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYnl0ZWNvZGVSZWcsIG1h
Y2hpbmVSZWcsIGZvcm1hdCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2Fs
KERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG1fY3VycmVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBy
ZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
LCBmb3JtYXQpOworICAgICAgICByZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CiAgICAgfQogCiAgICAgR2VuZXJhdGlv
bkluZm8mIGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggNjdiMGUwYjM3MDRjYTU5YTg5MGFjNTljODZk
YmQwZDJhMDU2ZGI4MS4uMGFmM2YxNzE4MTU0MTBkOWJlZjY0YTIwZmQwOTA1ZGRjMDNlNjdmNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkBAIC0xODI4LDcgKzE4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2Nh
bCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+b3BlcmFuZCgpKTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMg
dmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5v
dCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAt
MTkxMiw3ICsxOTEyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29y
ZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVy
KCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7
CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODI0
LDYgKzM4MjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6IHsKKyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGls
ZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDNlNjM4YzliOTQ5ZWI1
ZWEyNmEzMTA1ZGRiOGFmZTc2NjIxNjMzNDQuLjdiMWUyNTdkNjBkNDY4NDVmMWE5NDBmZjZkZmRj
OTNhYzg2YzdjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcApAQCAtMTkzNiw3ICsxOTM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9j
YWw6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2lu
ZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAv
LyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2Vl
ZC4KQEAgLTIwMDcsNyArMjAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAg
ICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxS
ZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3Vy
cmVudE5vZGUtPnVubGlua2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1h
dERlYWQpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNDQ2NCw2ICs0NDY0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2Fz
ZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAg
IGNvbXBpbGVMb2FkVmFyYXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAppbmRleCBiZWVjODZh
YzdhN2QzMzNlMzk2NzllMjY3NTU5MDc0ZTQ2NGM5YjgyLi5kNzYyOGU1YTExN2NlMzNkZTFkMTYx
NWY2MDQyNzUyMjA0NzdhMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgICAg
ICAvLyB0cmVhdCBhIHZhcmlhYmxlIGFzIGJlaW5nICJ1c2VkIiBpZiB0aGVyZSBleGlzdHMgYW4g
YWNjZXNzIHRvIGl0IChTZXRMb2NhbCwgR2V0TG9jYWwsCiAgICAgICAgIC8vIEZsdXNoLCBQaGFu
dG9tTG9jYWwpLgogICAgICAgICAKLSAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CisgICAg
ICAgIE9wZXJhbmRzPGJvb2w+IHVzZWRPcGVyYW5kcygwLCBncmFwaCgpLm1fbG9jYWxWYXJzLCBn
cmFwaCgpLm1fdG1wcywgZmFsc2UpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9z
ZSB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBmcm9tIElSLgogICAgICAgICBib29sIGhhc05vZGVz
VGhhdE5lZWRGaXh1cCA9IGZhbHNlOwpAQCAtNjcsMjMgKzY3LDIyIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OiB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
YmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
YmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHZhcmlhYmxlLT5sb2NhbCgp
LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczog
ewogICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9j
YWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50
LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5k
KGRhdGEtPmNvdW50LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0
LmlzTG9jYWwoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxs
eSByZWxpZXMgb24gdGhlIGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhc3NpZ25tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEp
LmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
YXRhLT5saW1pdDsgaS0tOykgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSwgdHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0gLy8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgogICAgICAg
ICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTkyLDkgKzkxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAg
ICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIHN0YWNrID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay0+bG9jYWwuaXNBcmd1bWVudCgp
KQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPm9wZXJhbmQuaXNBcmd1bWVudCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRM
b2NhbHMuc2V0KHN0YWNrLT5sb2NhbC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1
c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChzdGFjay0+b3BlcmFuZCwgdHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CkBAIC0xMDgsMjEgKzEwNywyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9ICppdGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIHVzZWRM
b2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9j
YWwoKSk7CisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewotICAg
ICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAg
ICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSAr
Ci0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9j
YWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQp
LCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRMb2NhbHMuc2l6ZSgpKTsKKyAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRPcGVyYW5kcy5zaXplKCkpOwogICAgICAgICBt
X2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVz
ZWRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghdXNlZExvY2Fscy5nZXQo
aSkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRPcGVyYW5kcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCF1c2VkT3BlcmFuZHMuZ2V0Rm9yT3BlcmFuZElu
ZGV4KGkpKSB7CiAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbltpXSA9IFVJTlRfTUFYOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTM1LDQ5ICsxMzQsNTAg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNpemVfdCBsb2NhbCA9IHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKTsKLSAg
ICAgICAgICAgIGlmIChsb2NhbCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBzaXplX3Qg
aW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICAgICAg
aWYgKGluZGV4ID49IGFsbG9jYXRpb24uc2l6ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0gPT0gVUlO
VF9NQVgpCisgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltpbmRleF0gPT0gVUlOVF9NQVgpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24odXNlZE9w
ZXJhbmRzLCBhbGxvY2F0aW9uLCB2YXJpYWJsZS0+b3BlcmFuZCgpKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgZm9yIChTdGFja0FjY2Vzc0RhdGEqIGRhdGEgOiBtX2dyYXBoLm1fc3Rh
Y2tBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIWRhdGEtPmxvY2FsLmlzTG9jYWwoKSkg
ewotICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPmxvY2FsOworICAg
ICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bG9jYWwudG9Mb2NhbCgp
KSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPmxvY2FsLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFu
ZC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihk
YXRhLT5vcGVyYW5kLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEt
Pm9wZXJhbmQudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVMb2NhbCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5sb2NhbCk7CisgICAgICAgICAg
ICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBk
YXRhLT5vcGVyYW5kKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFtX2dyYXBo
Lm5lZWRzU2NvcGVSZWdpc3RlcigpKQogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3Bl
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
b2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2Nr
KCktPnNjb3BlUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3Bl
UmVnaXN0ZXIoYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNj
b3BlUmVnaXN0ZXIoKSkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9p
bmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBJbmxpbmVWYXJp
YWJsZURhdGEgZGF0YSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV07CiAgICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZy
YW1lOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gYXNzaWduKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRz
LCBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNp
emUoKTsgYXJndW1lbnQtLTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBw
b3NpdGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxv
Y2F0aW9uLCBkYXRhLT5jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNo
aW5lU3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxs
b2NhdGlvbiwgZGF0YS0+Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZVN0YXJ0ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjMxLDE3ICsyMzEsMTYgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rv
cjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgVmlydHVh
bFJlZ2lzdGVyIGFzc2lnbihjb25zdCBPcGVyYW5kczxib29sPiYgdXNlZE9wZXJhbmRzLCBjb25z
dCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3JjOwotICAgICAgICBpZiAocmVzdWx0
LmlzTG9jYWwoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2Nh
dGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKLSAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0g
VUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4g
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKworICAgICAgICBzaXplX3Qgb3BlcmFuZEluZGV4
ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQg
bXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltvcGVyYW5kSW5kZXhdOworICAgICAgICBpZiAobXlB
bGxvY2F0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cigpOworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9u
KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAppbmRleCBlYjNkZGJkNzE4NDNkNDlmNjViMzJj
ZTk2MWZmOWEwNzEyYTFhMDUxLi5iNDhjNmY3ZjE5MDk3NzVkNzI3OTc5OTFmM2ZiOTgzZGU2Mzhh
NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTI4NSwxNyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVs
bHB0cjsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG1fbm9kZS0+bG9jYWwo
KTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fbm9kZS0+b3BlcmFuZCgpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0t
OykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkg
PT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAm
JiBub2RlLT5vcGVyYW5kKCkgPT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICBzZXRM
b2NhbCA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwg
QWJzdHJhY3RIZWFwKFN0YWNrLCBsb2NhbCkpKQorICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nl
c092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAKaW5kZXggNmFjYWZiZjNiZjUzNWM5Njk2YmU2NDhhMjA3
MGI2ZWU2ZjRmOGJmOS4uZjFiMWZmNjRkZGE1M2NmNDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtNDAsMTQgKzQwLDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCi17Ci0g
ICAgQ0NhbGxIZWxwZXJzIGppdChudWxscHRyKTsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhl
Y3V0ZU9TUkV4aXQsICZ2bSk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IHRodW5rIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYg
dm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5oCmluZGV4IDA1YTUwYTU0YjI1ZDUxZGJjYjE4NThmZTdhYWRjYTQ4Njgy
MDVkOWUuLjhiNWMzZjAxYTQ4NTIwYjdhYWFhYWViYWZmOTNjM2IyNmNjZDk4NGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBWTTsK
IAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihW
TSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcAppbmRleCA2MGZiZjg5OTVmZGFkNzgyNTZhMDY3Yjg5YzRlYzVm
NTcxM2YxZDdlLi43OTY2NWY4YWI4NWZjMTExNmQ2MzlmYjNkOGI1NWY2ZWQ5MDI2OGRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBjaGVja09wID0gQ2hlY2tTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoU3BlY0NlbGxDaGVjayAmIFNwZWNFbXB0eSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5sb2NhbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgobG9jYWwgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCA6IDApKSA9PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgw
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRo
ZSBURFogdmFsdWUuIFRoZSBjYWxsIGVudHJ5cG9pbnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERa
LApAQCAtMTY4LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7
CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
dmFyaWFibGUtPm9wZXJhbmQoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExv
Y2FsOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5z
dWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2Nh
bCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRp
b25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFu
ZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5k
bGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXgg
OWVlNWUwMDc0MDlkZjUyOTRiZmNmNTFiNzc2ZWI4Y2ZjZjQ3YzUwZS4uYTJkNmNmYzI0OTM0ZTNk
YzNjNDZjMGUyNGQ0ZGExY2UxYjBjZjViNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAKQEAgLTQ4Myw3ICs0ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tpXTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
cGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9j
ay0+aXNQaGlJbmRleChpKSkKQEAgLTUxOSwxMCArNTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2
QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKGxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2Rl
ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5n
IHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10p
LCBwcmV2Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwg
YmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoK
QEAgLTUzMywxMSArNTMzLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3Nv
cnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+
b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50TWF5YmUKQEAgLTU0NywxOSArNTQ3
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlz
IHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5v
ZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9z
aXRpb25zKAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKSwKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCkpOwotICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0
aW9ucygKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkxvY2FscygpKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlv
bnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIE9w
ZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFy
aWFibGVzQXRIZWFkKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkg
ewogICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAg
LTY2OCwyNCArNjY0LDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9t
eVJlZkNvdW50cy5nZXQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBibG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkg
PT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5
IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9m
IGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAg
ICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVm
aW5pdGVseToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4g
SXQncyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1l
CiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVm
aW5pdGVseSBmb3IgdGhhdCBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAg
ICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5k
KCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC05NjgsMjYgKzk2NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBkYXRh
TG9nKG5vZGUsICIgLT4gIiwgZWRnZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNC
bG9jayogYmxvY2spCiAgICAgewogICAgICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBk
YXRhTG9nKGxvY2FsLCAiIGluIG51bGwgQmxvY2sgIik7CisgICAgICAgICAgICBkYXRhTG9nKG9w
ZXJhbmQsICIgaW4gbnVsbCBCbG9jayAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAg
ICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9u
QmxvY2spCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ss
IEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nKGxv
Y2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9j
ayk7CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ss
ICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2lj
QmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKKyAgICAgICAgT3BlcmFuZCBvcGVy
YW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAg
ICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291
cmNlQmxvY2spOworICAgICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBvcGVyYW5kLCAi
IGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmNwcAppbmRleCAyNmYwMzI5ZDU0MzA0MTU3MjA1ZTc4MTQ5OGM2NGUwYmU5OTMyMTEwLi45NWNk
YzkyZTJjMjQxMGEzNWMwMTMxMzFmZGMzYjdjY2MyODI5ZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAg
LTQxLDExICs0MSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNw
YWNlIHsKIAotbmFtZXNwYWNlIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7Ci1z
dGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2Uo
R3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5n
IikKQEAgLTU2LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAg
ICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZh
cmFyZ3MgZm9yd2FyZGluZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAg
ICAgIH0KQEAgLTg4LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNh
bGxzIGludG8gdGhpcyBmdW5jdGlvbiB0byBiZSByYXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGlu
IGEgc2ltcGxlIE8obikgbWFubmVyLgogICAgICAgICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRl
ID0gYmxvY2stPmF0KGNhbmRpZGF0ZU5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxu
Iik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBlbGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIg
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzIGlmIHRoZSBidXR0ZXJmbHkgaXMgb25seQpAQCAtMTA1LDcg
KzEwMyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsm
XSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE3
LDkgKzExNSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUt
PnVubGlua2VkT3BlcmFuZCgpLmlzVG1wKCksICJXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBh
IHRtcCByZWZlcnJpbmcgdG8gYW4gYXJndW1lbnRzIG9iamVjdC4iKTsKICAgICAgICAgICAgICAg
ICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwotICAgICAgICAgICAgICAgIGlmICghcmVsZXZh
bnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRMb2NhbCgpKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50
TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIENoZWNrVmFyYXJnczoKQEAgLTE0MCwxMyArMTM5LDE0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzYXdFc2NhcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICBpZiAoc2F3RXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoK
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICBsYXN0VXNlcklu
ZGV4ID0gbm9kZUluZGV4OwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2Fu
ZGlkYXRlIHx8IG5vZGUtPmNoaWxkMigpID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNMb2FkZWRGcm9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
RXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAoIXZhbGlkR2V0QnlPZmZzZXQpIHsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1
dHRlcmZseSA6IGNhbmRpZGF0ZUJ1dHRlcmZsaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnVzZXMobm9kZSwgYnV0dGVyZmx5KSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBCdXR0ZXJmbHkgZXNjYXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjM1LDExICsyMzUsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJ
bmRleCArIDEpLAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcg
IiwgcmVnLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50
TG9jYWxzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCBvcGVyYW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVz
dGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWxldmFudExvY2Fscy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJl
ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2Nh
bHNbaV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fsc1tpLS1d
ID0gcmVsZXZhbnRMb2NhbHMubGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bGV2YW50TG9jYWxzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2Vy
SW5kZXggPSAiLCBsYXN0VXNlckluZGV4LCAiLCAiLCBibG9jay0+YXQobGFzdFVzZXJJbmRleCks
ICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gV2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERl
dGVybWluZSBpZiBiZXR3ZWVuIHRoZSBjYW5kaWRhdGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUg
aXMgYW55CkBAIC0yNjMsMTYgKzI2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBN
b3ZIaW50OgogICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgY2FzZSBL
aWxsU3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3Qo
Y2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51
bmxpbmtlZE9wZXJhbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5v
ZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBQdXRTdGFjazoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5k
aWRhdGUsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBj
YXNlIEZsdXNoOgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90
KGNhbmRpZGF0ZSwgbm9kZS0+bG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPm9wZXJhbmQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjk3LDEzICsy
OTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCByZWcpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2Fu
ZGlkYXRlLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9l
c0ludGVyZmVyZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAg
ICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJm
ZXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2Rl
LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
QEAgLTMxMSw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBXZSBjYW4gbWFrZSB0aGlzIHdvcmsuCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAgIFdpbGwgZG8gZm9yd2FyZGluZyFcbiIpOwogICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTM0MSw4ICszNDAsMTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRo
ZXNlLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFy
Z3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5v
ZGUtPm9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDhl
YmZmYjQzNWVkNGRiZjYwMmJkNjJhZWQ0YzM0MzJlYTVhODI5MDIuLjJhYzJlZTM5YjRjY2FkMzA4
MTI1YjRlNmVjYzg4YTg3YzdkMTc5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJs
ZUFjY2Vzc0RhdGEoKQotICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQotICAgICwgbV9wcmVkaWN0aW9uKFNw
ZWNOb25lKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3
YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxk
TmV2ZXJVbmJveChmYWxzZSkKQEAgLTQ1LDEwICs0NCwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6
OlZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFj
Y2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAg
OiBtX2xvY2FsKGxvY2FsKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorVmFyaWFibGVB
Y2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIDogbV9w
cmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVj
Tm9uZSkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICwgbV9mbGFncygwKQogICAgICwg
bV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
RmFpbGVkKGZhbHNlKQpAQCAtODcsNyArODYsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6
c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24n
dCBzdXBwb3J0IHRoaXMgZmFjaWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1F
OiBtYWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRzLgotICAgIGlmIChsb2NhbCgpLmlzQXJndW1l
bnQoKSkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHBy
ZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0CkBAIC0xMjEsNyArMTIwLDcgQEAgYm9vbCBWYXJp
YWJsZUFjY2Vzc0RhdGE6OnRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKQogewog
ICAgIEFTU0VSVChpc1Jvb3QoKSk7CiAgICAgICAgIAotICAgIGlmIChsb2NhbCgpLmlzQXJndW1l
bnQoKSB8fCBzaG91bGROZXZlclVuYm94KCkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQo
KSB8fCBzaG91bGROZXZlclVuYm94KCkKICAgICAgICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNv
ZGVVc2VzQXNBcnJheUluZGV4KSkKICAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3Jt
YXRTdGF0ZShtX2RvdWJsZUZvcm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAg
CkBAIC0xNzYsNyArMTc1LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVz
ZW50SW50NTJJbXBsKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1
bnQgZm9yIG1hY2hpbmUgYXJndW1lbnRzLgotICAgIGlmIChtX2xvY2FsLmlzQXJndW1lbnQoKSkK
KyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIC8vIFRoZSBhcmd1bWVudC1hd2FyZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdl
cyBhbGwgb2YgYW4gKGlubGluZWQgb3IgbWFjaGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCmluZGV4IDFkMzg5MmY5ZWMwOWNiYTIw
NDNmYTI1NGU2MDk0MjMyMDE0YTI4NGUuLmJlMmZiNTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1
NzNmY2VmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaApAQCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0
YSA6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVmFyaWFibGVBY2Nlc3NEYXRhKTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
KTsKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCk7CiAgICAgCi0gICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsKCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7
CisgICAgICAgIEFTU0VSVChtX29wZXJhbmQgPT0gZmluZCgpLT5tX29wZXJhbmQpOworICAgICAg
ICByZXR1cm4gbV9vcGVyYW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1h
Y2hpbmVMb2NhbCgpCkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRp
bmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZH
IHNwYWNlCiAgICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWdu
aWZpY2FudC4KIAotICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFZpcnR1YWxSZWdp
c3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAg
ICAgU3BlY3VsYXRlZFR5cGUgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbjsKKyAgICBPcGVyYW5k
IG1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9k
ZUZsYWdzIG1fZmxhZ3M7CiAKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCmluZGV4IDI4ZTQzN2Zk
NTFmZWE0OTY5ZWI0OGVjZjBjMDUwOGYwYTM3ZGY4MzUuLjViMmMxZWU5MDliNTQ4ZjM5ODI3MGM0
M2JkMzZlZDcyZTNmOWNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50LmNwcApAQCAtNTksMTEgKzU5LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIs
IGlkKCksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTW92SGludEV2ZW50OgotICAg
ICAgICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3Rlcigp
LCAiKSIpOworICAgICAgICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgb3BlcmFu
ZCgpLCAiKSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAg
ICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVS
ZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwKKyAgICAgICAg
ICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2Rl
OiIsIG9wZXJhbmQoKSwKICAgICAgICAgICAgICIsICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRh
Rm9ybWF0KCkpLCAiKSIpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAppbmRleCAyMDYwZDRhMmZkMjcy
MjNkZDZmNjk5YzZkYmFkNmQyMjQ2N2M5ODM0Li5jMWY1NGJhNGZiZGNhYWE1YTFkOWE1ZWRjMWFj
NDgxMzhkMzRlM2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnQuaApAQCAtNjgsNiArNjgsMTAgQEAgZW51bSBWYXJpYWJsZUV2ZW50S2luZCA6IHVpbnQ4
X3QgewogfTsKIAogdW5pb24gVmFyaWFibGVSZXByZXNlbnRhdGlvbiB7CisgICAgVmFyaWFibGVS
ZXByZXNlbnRhdGlvbigpIAorICAgICAgICA6IG9wZXJhbmQoKSAKKyAgICB7IH0KKwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdp
c3RlcklEIGZwcjsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtNzYsNyArODAsNyBAQCB1bmlv
biBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7CiAjZW5kaWYKLSAgICBpbnQzMl90IHZpcnR1
YWxSZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudCB7
CkBAIC0xNjIsNyArMTY2LDcgQEAgcHVibGljOgogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAg
ICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0
aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0g
dmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOwogICAgICAg
ICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBX
VEZNb3ZlKHdoaWNoKTsKQEAgLTE4MSwxMyArMTg1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwoCi0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQg
Zm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAgICAgICAgVmFyaWFibGVF
dmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC52aXJ0
dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRh
dGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9
IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0g
Ynl0ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVudC5tX2tpbmQgPSBTZXRMb2NhbEV2ZW50Owog
ICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2ZW50Lm1fd2hp
Y2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5NSwxMyArMTk5LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBt
b3ZIaW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZykKKyAgICBz
dGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIE9wZXJhbmQgYnl0ZWNv
ZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGlj
aFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJp
YWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlv
bi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0
aW9uLm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAgICAgICAgZXZlbnQubV9raW5kID0gTW92SGlu
dEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7CiAgICAgICAg
IGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKHJlcHJlc2VudGF0aW9uKTsKQEAgLTI2
NSwxMyArMjY5LDEzIEBAIHB1YmxpYzoKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxSZWdpc3Rl
cigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9TcGlsbCB8
fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVw
cmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2Vu
dGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQotICAgIAotICAg
IFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkgY29uc3QKKworICAgIE9wZXJhbmQg
b3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09IFNldExvY2Fs
RXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVudCk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0
dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZDsKICAgICB9CiAgICAgCiAgICAgVmly
dHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3RlcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAppbmRleCA0NTI2ZDM5
YmIwOTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2Li44Y2Y3MDgwNDAzYThlZmZkOWIyMjFh
MzVhZjhkMjFkZTMyYjVkZGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBWYXJp
YWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudChjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKIHsK
ICAgICBkYXRhTG9nRigic2VxIyV1OiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKCkpKTsK
ICAgICBldmVudC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgZGF0YUxvZ0YoIiAiKTsKKyAg
ICBkYXRhTG9nTG4oIiAiKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTExOSwxMCArMTE5LDEyIEBA
IHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1pbmlmaWVkR3JhcGgmIGdyYXBo
LAogICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgdmFsdWVSZWNv
dmVyaWVzLCBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+KiB1bmRlZmluZWRPcGVyYW5kU3Bh
bnMpIGNvbnN0CiB7CisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwog
CiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOworICAgIHVuc2lnbmVkIG51bVRtcHM7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5zaWduZWQgZmlyc3RVbmRlZmluZWQgPSBpbnZh
bGlkSW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSBmYWxzZTsKQEAg
LTEzMCwzNyArMTMyLDQyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWN0KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbiA9IFsmXSAodW5zaWduZWQg
aSkgewogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZEluZGV4KQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMu
dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLm9mZnNldCgpOwotICAgICAg
ICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRl
eChpIC0gMSkub2Zmc2V0KCk7CisgICAgICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zl
cmllcy5vcGVyYW5kRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLnZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpOworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5k
Rm9ySW5kZXgoaSAtIDEpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICBpbnQg
bWluT2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZzZXQsIGxhc3RPZmZzZXQpOwogICAgICAgICB1
bmRlZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7IGZpcnN0VW5kZWZpbmVkLCBtaW5PZmZzZXQs
IGkgLSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlk
SW5kZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQgPSBbJl0gKHVu
c2lnbmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBzZXBhcmF0ZSB0aGUgc3BhbiBvZiBh
cmd1bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2NhbHMgZXZlbiBpZiB0aGV5IGhhdmUgYWRqYWNl
bnQgb3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFs
aWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLmlz
QXJndW1lbnQoaSkpCisgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXgg
JiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9y
SW5kZXgoaSkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5k
U3BhbihpKTsKIAogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZEluZGV4KSB7
CiAgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGk7Ci0gICAgICAgICAgICBmaXJzdFVuZGVm
aW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKTsKKyAgICAgICAg
ICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9y
SW5kZXgoaSkuaXNBcmd1bWVudCgpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIGF1dG8qIGlu
bGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKS0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsg
MTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCku
dG9Mb2NhbCgpICsgMTsKKyAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsg
aW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CisgICAgfSBlbHNlIHsKICAgICAgICAgbnVtVmFy
aWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOworICAgICAgICBu
dW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bVRtcHMoKTsKKyAgICB9CiAgICAgCiAgICAg
Ly8gQ3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdyZSBhdCBpbmRleCA9PSAwIHRoZW4gdGhpcyBt
dXN0IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAgLy8gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBh
bGwgdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJlY292ZXJpZXMgc2hvdWxkCiAg
ICAgLy8gcmVmbGVjdCB0aGlzLgogICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgdmFsdWVSZWNv
dmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcmlhYmxlcyk7CisgICAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdG1wcyBoZXJl
IGJlY2F1c2UgdGhleSBjYW4ndCBiZSB1c2VkIHlldC4KKyAgICAgICAgdmFsdWVSZWNvdmVyaWVz
ID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51
bVZhcmlhYmxlcywgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNv
dmVyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkpLCBEYXRhRm9ybWF0
SlMpOworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSku
dmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0xNzEsMTIgKzE3OCwxMyBAQCB1bnNpZ25lZCBW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgc3RhcnRJbmRleC0tOwog
ICAgIAogICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEgbW9jay11cCBvZiB0aGUgREZHJ3Mgc3RhdGUg
YW5kIGV4ZWN1dGUgdGhlIGV2ZW50cy4KLSAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFu
ZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAg
T3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBudW1WYXJpYWJsZXMsIG51bVRtcHMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG9w
ZXJhbmRTb3VyY2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgb3BlcmFuZFNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgTWluaWZp
ZWRHZW5lcmF0aW9uSW5mbz4gZ2VuZXJhdGlvbkluZm9zOwogICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXJ0SW5kZXg7IGkgPCBpbmRleDsgKytpKSB7CiAgICAgICAgIGNvbnN0IFZhcmlhYmxlRXZl
bnQmIGV2ZW50ID0gYXQoaSk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNz
aW5nIGV2ZW50ICIsIGV2ZW50KTsKICAgICAgICAgc3dpdGNoIChldmVudC5raW5kKCkpIHsKICAg
ICAgICAgY2FzZSBSZXNldDoKICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8uCkBAIC0xOTgs
MjEgKzIwNiwyMyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50
OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNv
ZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5k
KGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOworICAg
ICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkK
KyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQo
KSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU2V0TG9jYWxFdmVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNP
cGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFu
ZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNl
Ojpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0
KCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9w
ZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVu
dC5vcGVyYW5kKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdp
c3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorCisgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIk9wZXJhbmQgc291cmNlczogIiwgb3BlcmFuZFNvdXJjZXMpOwogICAgIAogICAgIC8v
IFN0ZXAgMzogQ29tcHV0ZSB2YWx1ZSByZWNvdmVyaWVzIQotICAgIHZhbHVlUmVjb3ZlcmllcyA9
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1W
YXJpYWJsZXMpOworICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+
KE9wZXJhbmRzTGlrZSwgb3BlcmFuZFNvdXJjZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBvcGVyYW5kU291cmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBWYWx1ZVNvdXJjZSYg
c291cmNlID0gb3BlcmFuZFNvdXJjZXNbaV07CiAgICAgICAgIGlmIChzb3VyY2UuaXNUcml2aWFs
bHlSZWNvdmVyYWJsZSgpKSB7CkBAIC0yMzAsNiArMjQwLDcgQEAgdW5zaWduZWQgVmFyaWFibGVF
dmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIE1pbmlmaWVkTm9kZSogbm9kZSA9IGdy
YXBoLmF0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyBpbmZv
ID0gZ2VuZXJhdGlvbkluZm9zLmdldChzb3VyY2UuaWQoKSk7CiAgICAgICAgIGlmICghaW5mby5h
bGl2ZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFs
dWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBpcyBkZWFkLiIpOwogICAgICAgICAg
ICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2Vw
YXJhdGVkKQogICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQoaSk7CkBAIC0y
MzcsNiArMjQ4LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3Qo
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVl
UmVjb3Zlcmllc1tpXSwgbm9kZSkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSksICIgaXMgY29u
c3RhbnQuIik7CiAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6
U2VwYXJhdGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYg
bm9kZS0+Y29uc3RhbnQoKSA9PSBqc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjY2LDcgKzI3OCw3IEBAIHVuc2lnbmVkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5mby51LnZpcnR1
YWxSZWcpLCBpbmZvLmZvcm1hdCk7CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJbkpTU3RhY2soaW5mby51Lm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIGluZm8uZm9ybWF0
KTsKICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRl
ZCkKICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihvcGVyYW5kU291cmNlcy5zaXpl
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uaAppbmRleCAwMTU3MzAwN2VkZGRkNzBmMzFkMTdhYzBkOTlmNzhlYmY1ZWE2ZWJjLi5l
OWU0M2FiZmVjNDg1ZmVjN2U2NjMxNTFjMWMyMmVjNTE4OTc0MTNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaApAQCAtNDIsOSAr
NDIsMTIgQEAgc3RydWN0IFVuZGVmaW5lZE9wZXJhbmRTcGFuIHsKIH07CiAKIGNsYXNzIFZhcmlh
YmxlRXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9yPFZhcmlhYmxlRXZlbnQ+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIHZvaWQgYXBw
ZW5kQW5kTG9nKGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQogICAgIHsKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBsb2dFdmVudChldmVudCk7CiAgICAgICAgIGFwcGVuZChl
dmVudCk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCmluZGV4IDc4MWI3MWU2OTI0MzgyODY0ODk3ZWZmN2Y5ZGU2OGU0ZWU0ZWJm
MWQuLjMyY2JjMTA3NmRlNTlkYWE0YTcyN2RhYzdkNzVmYmRjYTYwN2RlNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTE5MSw2ICsxOTEs
NyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBj
YXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgVmFs
dWVUb0ludDMyOgogICAgIGNhc2UgQnJhbmNoOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCmluZGV4IDMwODBkYzM0NTA5YzczMzMy
NGI4MTQzZDJhOTU0ZjA4ZWRhZjEzZmIuLmMwMDRmYWNjYzFhZDA1ZDM2Y2VkYmVkZjk2NzgyYWFi
N2RjYjk4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogRm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQot
ICAgIDogbV9ieXRlY29kZUluZGV4KFVJTlRfTUFYKQotICAgICwgbV9lbnRyeUZhaWx1cmVDb3Vu
dCgwKQorICAgIDogbV9lbnRyeUZhaWx1cmVDb3VudCgwKQogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggOTQ1NjU3NzU1YTBlY2I3
ODFjZmI4OWIxMWMzOWY5OGY3YTlhYmEzZC4uZDM1OTEzNTRmMTVhMDJlZmIxN2Y3ODlmOTdlOTg1
OWMxNmI5YmY4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jbGVhclN0YWNrRnJhbWUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwLCBjb2RlLmZyYW1l
U2l6ZSgpKTsKIAogICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
OworICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNvZGVC
bG9jaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwogICAgICAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2lu
dEluZGV4IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZUluZGV4Lmtl
eXMoKSkgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdGhlIENvZGVCbG9jayB0byBoYXZlIGEgd2VhayBwb2ludGVyIHRvIGl0
c2VsZiBiZWNhdXNlCiAgICAgICAgIC8vIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdl
dCBjb2xsZWN0ZWQuCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQ
dHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICAgICAgLy8gU3Rh
Y2sgT3ZlcmZsb3cgQ2hlY2suCiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dy
YXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CkBA
IC0zNTUsNyArMzU1LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVu
dHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCksIDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxh
YmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkpKTsKQEAgLTEyODEsNiArMTI4MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2Fs
bEV2YWw6CiAgICAgICAgICAgICBjb21waWxlQ2FsbEV2YWwoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlVmFyYXJn
c0xlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CiAgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTk1Myw3ICsxOTU2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEVuY29kZWRKU1Zh
bHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRh
QnVmZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0
ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpKSkpOwogICAgIH0K
IAogICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKQEAgLTE5NzIsNyArMTk3NSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVy
YW5kKTsKICAgICAgICAgCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0Nv
bmNyZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgIApAQCAtNzkyNiwx
MyArNzkyOSwxMyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgp
CiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSkpOwogICAg
IH0KIAogICAgIHZvaWQgY29tcGlsZVNldENhbGxlZSgpCiAgICAgewogICAgICAgICBhdXRvIGNh
bGxlZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRy
KGNhbGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgbV9v
dXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTc5NDcsNyArNzk1MCw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAg
ICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVHZXRTY29wZSgpCkBAIC05NTQyLDUxICs5NTQ1LDUxIEBAIHByaXZhdGU6CiAgICAgICAgIHNl
dEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUxvYWRW
YXJhcmdzKCkKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCkKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAorICAgICAgICBMVmFsdWUg
anNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisKICAg
ICAgICAgTFZhbHVlIGxlbmd0aCA9IHZtQ2FsbCgKICAgICAgICAgICAgIEludDMyLCBvcGVyYXRp
b25TaXplT2ZWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBqc0FyZ3VtZW50cywK
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4g
ZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8v
IGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0
bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBU
aGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRo
ZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0g
ICAgICAgIAorCiAgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRk
KGxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOwogCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAg
ICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9v
dXQuYWJvdmUobGVuZ3RoLCBsZW5ndGhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHNldEludDMy
KGxlbmd0aEluY2x1ZGluZ1RoaXMpOworICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJh
cmdzKCkKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAg
IExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgp
KTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZh
cmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJv
dmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsK
LSAgICAgICAgCisgICAgICAgICAgICBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihsZW5ndGhJ
bmNsdWRpbmdUaGlzKSwgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5saW1pdCkpKSk7IAorCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3Ro
SW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYg
b3BlcmF0aW9uTGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9u
TG9hZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCiAgICAgICAgIC8vIG9mIGEg
VmlydHVhbFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKICAgICAgICAg
TFZhbHVlIG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAgICAgICBtX291dC5zdWIo
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZy
YW1lKSwKKyAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFy
dCkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
MykpOwogICAgICAgICAKICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgVm9pZCwgb3BlcmF0
aW9uTG9hZFZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICBt
X291dC5jYXN0VG9JbnQzMihtYWNoaW5lU3RhcnQpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5vZmZzZXQpLAotICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMy
KGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgewotICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkp
IHsKKyAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZl
ciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewogICAgICAgICAgICAgICAg
IGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CkBAIC05NTk1LDUwICs5NTk4LDI3IEBAIHByaXZhdGU6CiAKICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
KQotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVu
dHNDaGlsZCgpKQorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOyAK
LSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBudWxscHRyOwotICAgICAgICBB
cmd1bWVudHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGlu
ZUNhbGxGcmFtZSk7Ci0gICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgewotICAg
ICAgICAgICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247Ci0g
ICAgICAgICAgICBpZiAoa25vd25MZW5ndGggPj0gZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAg
ICAgIGtub3duTGVuZ3RoID0ga25vd25MZW5ndGggLSBkYXRhLT5vZmZzZXQ7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOwotICAgICAgICAgICAgbGVu
Z3RoID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7Ci0gICAgICAgICAgICBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxv
Z2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9w
ZXJhdGlvbnMuCi0gICAgICAgICAgICBpZiAoIWRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAg
ICBsZW5ndGggPSBhcmd1bWVudHNMZW5ndGgudmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKLQotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3Ro
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1l
bnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpLCB1bnN1cmUo
aXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5vZmZzZXQpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBzbWFsbGVy
T3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291
dC5jb25zdEludDMyKDEpKTsKLSAgICAgICAgfQotCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OworICAgICAgICBMVmFsdWUgY2FsbGVyTGVu
Z3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpczsgCisgICAgICAgIGlmIChudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkgeworICAgICAgICAgICAgTFZhbHVlIGZpeGVkTGVuZ3RoID0gbV9vdXQuc3ViKGNh
bGxlckxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5zZWxl
Y3QobV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8p
LCBmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvLCBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UHJl
ZGljdGFibGUpOworICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhpczsKKworICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gbV9vdXQuc3ViKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmludDMyT25lKTsKICAgICAg
ICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsCiAgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3Rv
cmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkp
OwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBk
YXRhLT5vZmZzZXQ7CiAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0
YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwogICAgICAgICBM
VmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUo
KTsKIApAQCAtOTY5Nyw2NSArOTY3NywyMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBuZWVk
IHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUs
IGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KICAgICAgICAgaWYgKCFudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNMZW5ndGgudmFsdWU7
CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlQzMl9NSU4pKTsKIAotICAgICAgICBMQmFzaWNC
bG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExWYWx1ZSBmaXhlZExlbmd0
aCA9IG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVy
T3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsK
LSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRz
TGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSks
IHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxh
cmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgIHJldHVybiBtX291dC5zZWxlY3QobV9vdXQuZ3Jl
YXRlclRoYW5PckVxdWFsKGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8pLCBmaXhlZExlbmd0
aCwgbV9vdXQuaW50MzJaZXJvLCBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UHJlZGljdGFibGUpOwog
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCiAgICAg
ewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZhdWx0
SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8SW5s
aW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgTm9kZSogYXJn
dW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGFyZ3VtZW50
cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3Vt
ZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJndW1l
bnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKLQotICAg
ICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVjdXJzYWJsZUxhbWJkYShbJl0oYXV0
byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAgICAgICAgICAgaWYgKHRhcmdldC0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VsZih0YXJnZXQtPmNo
aWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IHRhcmdldC0+Yml0
VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdl
dC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYobV9ncmFwaC52YXJBcmdD
aGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyArPSB0YXJnZXQtPmNhc3RPcGVyYW5k
PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0LT5vcCgpID09
IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBwZW5k
KGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKLSAgICAgICAg
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbGxlY3RB
cmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOwotICAg
ICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQotICAgICAgICAgICAgbGVu
Z3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5ndGgp
OworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTk3NjYsNyArOTcwMSw3IEBA
IHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFkID0g
cmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMsICZ0YXJnZXRTdGFy
dF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUg
eworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAm
dGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkg
LT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUoKSwg
c3RvcmVJbmRleCk7CiAKQEAgLTk3OTgsOCArOTczMyw5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJnZXQt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExl
bmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2Fs
bEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdGFy
Z2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9v
dXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTIyNTQsOCArMTIxOTAsOCBAQCBw
cml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBwYWNrZXQsIG1faGVhcHMu
U2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9Q
YWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5TaGFk
b3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5s
b2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDApKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsK
ICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlj
a2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAtMTIzNDYsNyArMTIyODIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3Io
ZnJhbWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxs
KCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9
CiAgICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MTEsNyArMTc1NDcsNyBA
QCBwcml2YXRlOgogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0
YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAgICBt
X291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4
LmJpdHMoKSksCi0gICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgICAgICAgICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAhQVNT
RVJUX0RJU0FCTEVECiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5h
YnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTksNyArMTc2NTUs
OCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhp
dERlc2NyaXB0b3JzLmFsbG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHByb2Zp
bGUsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZM
b2NhbHMoKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJP
ZkxvY2FscygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZUbXBzKCkpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODI0LDE1
ICsxNzc2MSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3Zh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBl
eGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFw
Lm1fbG9jYWxzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9w
bGFuLm1vZGUoKSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAgIGlm
IChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBu
b3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiLCBh
dmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4p
LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBt
X2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAgICAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRl
Y29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxh
YmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRh
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4
aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAg
ICAgICAgICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCkBA
IC0xODEzMiwzOSArMTgwNjksMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmFs
cmVhZHlSZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsKICAg
ICB9CiAgICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVz
W29wZXJhbmRdLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBt
X2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwgb2Zm
c2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGlu
dCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVy
YW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFs
dWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFz
ZSwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFz
ZSwgb3BlcmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NG
b3IoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBh
ZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCks
IG9mZnNldCk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVy
ZWQsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQotICAg
IFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBw
YXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9y
KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgcGF5
bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZGRyZXNzRm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkp
OwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50
cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXgg
OTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5ODM0
MDc2YThkNmY5MTc0MmNjYjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAog
ICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOwog
ICAgIAogICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7
IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNhblVu
c2FmZUpTVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNWYWx1
ZSgpOwogICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2YWx1
ZXMuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1ZSAm
JiB2YWx1ZU9uU3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1bWVu
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5jcHAKaW5kZXggMDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThlMy4u
MDRjODU3OTllNGQ0NjkyM2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcgbmFt
ZXNwYWNlIERGRzsKIAogT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAogICAg
IERhdGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgdmFsdWVQcm9maWxlLAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25l
ZCBudW1iZXJPZkxvY2FscykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJvZmls
ZURhdGFGb3JtYXQocHJvZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1
ZVByb2ZpbGUpCi0gICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2Nh
bHMpCisgICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMsIG51
bWJlck9mVG1wcykKIHsKIH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1bXA8
SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxv
Y2sqIGZ0CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRhODdj
Y2YzMjczZmU0YmUzNjA2ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2YWVj
ZTA5N2FkOGE0ZDFlMjdiODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCkBAIC02OSw3ICs2OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9TUkV4
aXREZXNjcmlwdG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZvcm1h
dCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKTsK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9j
YWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50
IHRvIHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgogICAg
IC8vIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFu
ZCB3ZSdsbCBoYXZlIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAppbmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgxNzZl
ZTcyLi5hMzc4NDEwZGE5YjgwMTU3MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUg
IkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZv
ck9wZXJhbmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEgQEAK
ICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNs
dWRlICJGVExTYXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwu
aCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIApAQCAtNDc0LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0m
IHZtLCB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAog
ICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAorICAg
IGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2lu
dCgpKSB7CisgICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rlc2Ny
aXB0b3ItPm1fdmFsdWVzLnRtcEluZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07Cisg
ICAgICAgIGppdC5wcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJ
bmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtl
VW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAg
c2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAg
ICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOwor
CisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUs
IFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25z
dCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVP
cmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkg
eworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5l
Q2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGlu
ZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxs
Qnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9y
aWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAg
ICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0
Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFy
ZQogICAgIC8vIGFscmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9y
LT5tX3ZhbHVlcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworCisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3Rh
dGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRp
Y19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpKSk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwg
ZXhpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRl
eCA3ZjdjZDM4MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFiZDll
YjNiNDcxMzM3NDRmODQzZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFs
T2JqZWN0KgogICAgICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0
dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxs
b2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAg
ICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9m
ZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJs
ZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3
ZDVkYjNhZDljZTVlOWNmLi5kNTdmYjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzky
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2
NTUsMzcgQEAgTFZhbHVlIE91dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9y
aWdpbigpLCB2YWx1ZSwgaW50NjRaZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0
OjpzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQ
cmVkaWN0YWJpbGl0eSBwcmVkaWN0YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMy
KCkpIHsKICAgICAgICAgaWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4g
dGFrZW47CisgICAgICAgICAgICByZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmV0dXJuIG5vdFRha2VuOworICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0
LCBvcmlnaW4oKSwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFi
aWxpdHkgPT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBv
cmlnaW4oKSwgdmFsdWUsIGxlZnQsIHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG5ld0Jsb2NrKCk7CisgICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdC
bG9jaygpOworICAgIExCYXNpY0Jsb2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisK
KyAgICBtX2Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6
OkJyYW5jaCwgb3JpZ2luKCksIHZhbHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRh
a2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExp
a2VseSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisg
ICAgICAgIEZyZXF1ZW50ZWRCbG9jayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9
IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1h
bCA6IEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0
aW9uLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwg
b3JpZ2luKCkpOworCisgICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVx
dWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVu
ZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAg
ICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1w
LCBvcmlnaW4oKSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1f
YmxvY2sgPSBjb250aW51YXRpb247CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1
dDo6YXRvbWljWGNoZ0FkZChMVmFsdWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdp
ZHRoIHdpZHRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRl
ZjdlMDYwZjkzNjJiM2JkY2EwZmQ0NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2
MjdkNWZmMzFjNzgxMGQ4ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2lu
Y2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25W
YWx1ZXMuaCIKKyNpbmNsdWRlICJGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUg
IkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5
cGVkUG9pbnRlci5oIgpAQCAtMzY1LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVz
dElzWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0
QW5kKHZhbHVlLCBtYXNrKSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZh
bHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsg
fQogCi0gICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVl
IG5vdFRha2VuKTsKKyAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2Vu
LCBMVmFsdWUgbm90VGFrZW4sIFNlbGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFi
aWxpdHk6Ok5vdFByZWRpY3RhYmxlKTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBh
dG9taWNzIGJ5IGRlZmF1bHQuIFVzZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZl
bmNlZEFjY2VzcygpIHdpdGggYQogICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNl
cV9jc3QgZmVuY2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
ZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxl
Y3RQcmVkaWN0YWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExODUzYmE5ODUyMmFhYWM2MWI4NDk5NTUy
Nzk0YTUwOTMwYzdkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNl
bGVjdFByZWRpY3RhYmlsaXR5IDogdWludDhfdCB7CisgICAgTm90UHJlZGljdGFibGUsCisgICAg
UHJlZGljdGFibGUsCisgICAgTGVmdExpa2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IDY5MzRjM2YwZDM3
OTFmNjRiYTQyOTYzZTA1NTYzZGJiYzdkZGE1YTQuLmM3MjZhZDI3YzgxNWFjNjdhNjcwZDI1ODA0
YWE4Y2FlMjJiM2EwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0
aENhbGwuaApAQCAtMTAwLDcgKzEwMCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAog
ICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogICAgIHJldHVybiBjYWxsT3Bl
cmF0aW9uKHZtLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24s
IHJlc3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YTVmNTI3N2RkNjMxYWNkNGNj
YmVjZDE0YjI0Y2M1ZDRhMzlhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2NsYXNzIENoZWNrcG9pbnQKKyAgICBhdHRy
X3JlYWRlciA6dXNlcworICAgIGF0dHJfcmVhZGVyIDpkZWZzCisgICAgYXR0cl9yZWFkZXIgOm5h
bWUKKyAgICBhdHRyX3JlYWRlciA6aW5kZXgKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIGlu
ZGV4LCB0bXBzKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGluZGV4ID0gaW5kZXgK
KyAgICAgICAgQHVzZXMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0g
OnVzZSB9CisgICAgICAgIEBkZWZzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNl
RGVmID09IDpkZWZpbmUgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzKG5hbWVzcGFjZSkK
KyAgICAgICAgRU9GPC0tCisgICAgY2FzZSAje25hbWVzcGFjZX06OiN7bmFtZX06CitFT0YKKyAg
ICBlbmQKK2VuZAorCitjbGFzcyBDaGVja3BvaW50cworICAgIGRlZiBpbml0aWFsaXplKG9wY29k
ZSwgdG1wcywgY2hlY2twb2ludHMpCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAg
QHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcF93aXRo
X2luZGV4IHsgfChuYW1lLCB0bXBzKSwgaW5kZXh8IENoZWNrcG9pbnQubmV3KG5hbWUsIGluZGV4
LCB0bXBzKSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MKKyAgICAgICAgQGNoZWNrcG9p
bnRzLmVhY2ggZG8gfGNoZWNrcG9pbnR8CisKKyAgICAgICAgZW5kCisgICAgICAgIEVPRjwtLQor
Qml0TWFwPG1heE51bVRtcHM+IHRtcExpdmVuZXNzRm9yI3tAb3Bjb2RlLmNhcGl0YWxpemVkX25h
bWV9KHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBzd2l0Y2ggKGNoZWNrcG9pbnQpIHsKKwor
ICAgIH0KK30KK0VPRgorICAgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvT3Bjb2RlLnJiCmluZGV4IGRhYjg2ODZjYTMzYTEwMmM5YmZhMWRmMTgwM2ViYjRmMGFiMjQ0
ODUuLmNmZDlkZjE1MTE0N2E4NmRhNGJjNzViZTQ2YTY3ODI1ZTI1Mzc1ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNz
IE9wY29kZQogICAgIGF0dHJfcmVhZGVyIDphcmdzCiAgICAgYXR0cl9yZWFkZXIgOm1ldGFkYXRh
CiAgICAgYXR0cl9yZWFkZXIgOmV4dHJhcworICAgIGF0dHJfcmVhZGVyIDpjaGVja3BvaW50cwog
CiAgICAgbW9kdWxlIFNpemUKICAgICAgICAgTmFycm93ID0gIk9wY29kZVNpemU6Ok5hcnJvdyIK
QEAgLTQ1LDEyICs0NiwxNCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgdGlkCiAgICAgZW5kCiAK
LSAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRh
LCBtZXRhZGF0YV9pbml0aWFsaXplcnMpCisgICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFt
ZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0bXBzLCBj
aGVja3BvaW50cykKICAgICAgICAgQHNlY3Rpb24gPSBzZWN0aW9uCiAgICAgICAgIEBuYW1lID0g
bmFtZQogICAgICAgICBAZXh0cmFzID0gZXh0cmFzIHx8IHt9CiAgICAgICAgIEBtZXRhZGF0YSA9
IE1ldGFkYXRhLm5ldyBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzCiAgICAgICAgIEBh
cmdzID0gYXJncy5tYXAud2l0aF9pbmRleCB7IHwoYXJnX25hbWUsIHR5cGUpLCBpbmRleHwgQXJn
dW1lbnQubmV3IGFyZ19uYW1lLCB0eXBlLCBpbmRleCArIDEgfSB1bmxlc3MgYXJncy5uaWw/Cisg
ICAgICAgIEB0bXBzID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5t
YXAgeyB8KGNoZWNrcG9pbnQsIF8pfCBjaGVja3BvaW50IH0gdW5sZXNzIGNoZWNrcG9pbnRzLm5p
bD8KICAgICBlbmQKIAogICAgIGRlZiBjcmVhdGVfaWQhCkBAIC0xMTgsNiArMTIxLDggQEAgY2xh
c3MgT3Bjb2RlCiAgICAgICAgIDw8LUVPRgogc3RydWN0ICN7Y2FwaXRhbGl6ZWRfbmFtZX0gOiBw
dWJsaWMgSW5zdHJ1Y3Rpb24gewogICAgICN7b3Bjb2RlSUR9CisgICAgI3t0ZW1wc30KKyAgICAj
e2NoZWNrcG9pbnRWYWx1ZXN9CiAKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQpAQCAtMTMyLDYgKzEz
NywxOCBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJRFR5cGV9IG9w
Y29kZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAgICBkZWYgY2hlY2twb2ludFZhbHVlcwor
ICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAgICBbImVudW0gQ2hl
Y2twb2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8Y2hlY2twb2lu
dHwgIiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0pLmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZD
aGVja3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4oIlxuIikKKyAgICBlbmQKKworICAgIGRlZiB0
ZW1wcworICAgICAgICByZXR1cm4gaWYgQHRtcHMubmlsPworCisgICAgICAgIFsiZW51bSBUbXBz
IDogdWludDhfdCB7Il0uY29uY2F0KEB0bXBzLm1hcCB7fCh0bXAsIHR5cGUpfCAiICAgICAgICAj
e3RtcH0sIn0pLnB1c2goIiAgICB9OyIpLmpvaW4oIlxuIikKKyAgICBlbmQKKwogICAgIGRlZiBl
bWl0dGVyCiAgICAgICAgIG9wX3dpZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYsIG9wY29kZUlE
VHlwZSwgMCkKICAgICAgICAgb3Bfd2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUzMiwgb3Bjb2Rl
SURUeXBlLCAwKQpAQCAtMjAwLDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bj
b2RlU2l6ZSBfX3NpemUsIGJvb2wgcmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRlY29kZUdlbmVy
YXRvcj4KICAgICBzdGF0aWMgYm9vbCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRvciogZ2VuI3t0
eXBlZF9hcmdzfSN7bWV0YWRhdGFfcGFyYW19KQogICAgIHsKKyAgICAgICAgI3shQGNoZWNrcG9p
bnRzLm5pbD8gPyAiZ2VuLT5zZXRVc2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAgICAgICAgIGlm
IChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2VuLT5hbGlnbldp
ZGVPcGNvZGUxNigpOwogICAgICAgICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lk
ZTMyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9u
LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4IDIw
NGFjNzU5ZTEzZWZmMTUxZjhjZDE3N2YzYmYxYjcwZTA3NzljYWEuLjY2ODU1YmE2NTAwODBlNGMy
M2NjMGViZWMxMGU3OTQ5Y2RlNzY4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL1NlY3Rpb24ucmIKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgogICBlbmQKIAog
ICBkZWYgY3JlYXRlX29wY29kZShuYW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUubmV3KHNlbGYs
IG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0s
IGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSkKKyAgICAgIE9wY29kZS5uZXcoc2VsZiwg
bmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwg
Y29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdLCBjb25maWdbOnRtcHNdLCBjb25maWdbOmNo
ZWNrcG9pbnRzXSkKICAgZW5kCiAKICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFtZSwgb3Bjb2Rl
cywgY29uZmlnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmNwcAppbmRleCBmNjM5NGFjNzEwNzEyNWI3Y2FiMjFhZDJiOTExM2MwNzk1MzZhNjAwLi5l
ZjdmNmM5NGY0MTY4YjRhMjg0NjA1M2E1ZDAxM2JlMTEyMjBkZWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtNTAsNyArNTAsNyBA
QCB2b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihDYWxs
RnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbAogICAgIEFTU0VSVChnbG9iYWxFeGVjLT5pc0RlcHJl
Y2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpKTsKIH0KIAotYm9vbCBDYWxsRnJhbWU6OmNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKK2Jvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkp
OwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewpAQCAtOTAsMTIgKzkwLDEy
IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25z
dAogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKTsKKyAgICBy
ZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
XS50YWcoKTsKIH0KIAogU1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6OnVuc2FmZUNh
bGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50XS51bnNhZmVUYWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS51bnNhZmVUYWcoKTsKIH0KIAog
Q2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdApAQCAtMTA1LDcg
KzEwNSw3IEBAIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QK
IAogU1VQUFJFU1NfQVNBTiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJ
bmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1
bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpICYgKHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSA+PiBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQpKSk7
CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMTE3LDMzICsxMTcsMzQgQEAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxGcmFt
ZTo6c2V0Q3VycmVudFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZwYykp
KTsKLSAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gY2FsbFNp
dGUuYml0cygpOworICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KV0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CiB9CiAKIHVuc2lnbmVkIENhbGxG
cmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGNvZGVCbG9jaygpKTsKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgcmV0
dXJuIGNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldChjdXJyZW50VlBDKCkpOyAgICAgCiB9CiAK
ICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1l
OjpjdXJyZW50VlBDKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7
CiAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsU2l0ZUJpdHNB
c0J5dGVjb2RlT2Zmc2V0KCkpLnB0cigpOwogfQogCiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVu
dFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXgodnBjKSk7Ci0gICAgdGhpc1tDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGNhbGxTaXRl
LmJpdHMoKSk7CisgICAgdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpXS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKKyAgICBBU1NFUlQoY3VycmVudFZQ
QygpID09IHZwYyk7CiB9CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRl
Y29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBBU1NF
UlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRl
Qml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5iaXRz
KCk7CiB9CiAKQEAgLTE2NSw4ICsxNjYsOCBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0
ZWNvZGVJbmRleCgpCiAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICB9CiAjZW5kaWYKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQo
KSk7Ci0gICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNl
dCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKKyAgICBy
ZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKTsKIH0KIAogQ29kZU9yaWdpbiBD
YWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTgwLDcgKzE4MSw3IEBAIENvZGVPcmlnaW4gQ2Fs
bEZyYW1lOjpjb2RlT3JpZ2luKCkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb2RlT3Jp
Z2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICByZXR1cm4gQ29kZU9yaWdpbihCeXRlY29k
ZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgIHJldHVybiBDb2Rl
T3JpZ2luKGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCkpOwogfQogCiBSZWdpc3Rlciog
Q2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IGNmYjc3MTg1NjAzOTkzMzkxMDA0ZmMxMzIx
MTgzODQyM2M1ZGM2YTkuLjY0NDkwZTdhNzA3ZWViMDFiYTA3YWNhMzMyNjIzYWRlMTNlMGM5NDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKICNpbmNsdWRlICJWTS5o
IgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKKyNpbmNsdWRlIDx3dGYvRW51bUNsYXNzT3Bl
cmF0b3JPdmVybG9hZHMuaD4KIAogbmFtZXNwYWNlIEpTQyAgewogCkBAIC00NiwxOCArNDcsMjQg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0Owog
ICAgICAgICAKICAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KQotICAgICAgICB7IH0KKyAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpCisgICAgICAgIHsgCisgICAgICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKTsKKyAgICAgICAgfQogCi0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fYnl0ZWNvZGVJbmRleDsgfQotICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJ
bmRleCA9PSBvdGhlci5tX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9iaXRzOyB9CisgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9iaXRzID09
IG90aGVyLm1fYml0czsgfQogCi0gICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCk7IH0KKyAgICAgICAgdWludDMyX3QgYml0cygpIGNv
bnN0IHsgcmV0dXJuIG1fYml0czsgfQogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KGJpdHMo
KSk7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBi
aXRzKQorICAgICAgICAgICAgOiBtX2JpdHMoYml0cykKKyAgICAgICAgeyB9CiAgICAgcHJpdmF0
ZToKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVpbnQz
Ml90IG1fYml0cyB7IEJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSB9OwogICAgIH07CiAKICAgICBj
bGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAg
LTY1LDcgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBEaXNwb3NhYmxlQ2FsbFNp
dGVJbmRleCgpID0gZGVmYXVsdDsKIAogICAgICAgICBleHBsaWNpdCBEaXNwb3NhYmxlQ2FsbFNp
dGVJbmRleCh1aW50MzJfdCBiaXRzKQotICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXg6OmZyb21CaXRzKGJpdHMpKQorICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KGJp
dHMpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC03OCwyNCArODUsMjcgQEAgbmFtZXNwYWNl
IEpTQyAgewogICAgIC8vIGFybTY0XzMyIGV4cGVjdHMgY2FsbGVyIGZyYW1lIGFuZCByZXR1cm4g
cGMgdG8gdXNlIDggYnl0ZXMgCiAgICAgc3RydWN0IENhbGxlckZyYW1lQW5kUEMgewogICAgICAg
ICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lOwotICAgICAgICBh
bGlnbmFzKENQVVJlZ2lzdGVyKSBjb25zdCBJbnN0cnVjdGlvbiogcmV0dXJuUEM7CisgICAgICAg
IGFsaWduYXMoQ1BVUmVnaXN0ZXIpIHZvaWQqIHJldHVyblBDOwogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBzaXplSW5SZWdpc3RlcnMgPSAyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSAvIHNp
emVvZihSZWdpc3Rlcik7CiAgICAgfTsKICAgICBzdGF0aWNfYXNzZXJ0KENhbGxlckZyYW1lQW5k
UEM6OnNpemVJblJlZ2lzdGVycyA9PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2Yo
UmVnaXN0ZXIpLCAiQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzIGlzIGluY29ycmVj
dC4iKTsKIAotICAgIHN0cnVjdCBDYWxsRnJhbWVTbG90IHsKLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgY29kZUJsb2NrID0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxOwotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBhcmd1bWVudENvdW50ID0gY2FsbGVlICsgMTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRDb3VudCAr
IDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0aGlzQXJn
dW1lbnQgKyAxOworICAgIGVudW0gY2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7CisgICAgICAg
IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKKyAgICAgICAg
Y2FsbGVlID0gY29kZUJsb2NrICsgMSwKKyAgICAgICAgYXJndW1lbnRDb3VudCA9IGNhbGxlZSAr
IDEsCisgICAgICAgIHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQgKyAxLAorICAgICAgICBm
aXJzdEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsgMSwKICAgICB9OwogCisgICAgT1ZFUkxPQURf
TUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoQ2FsbEZyYW1lU2xv
dCkKKyAgICBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRI
X0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQorCiAgICAgLy8gUmVwcmVzZW50cyB0aGUgY3VycmVu
dCBzdGF0ZSBvZiBzY3JpcHQgZXhlY3V0aW9uLgogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gbW9zdCBmdW5jdGlvbnMuCiAgICAgY2xhc3MgQ2FsbEZyYW1lIDogcHJpdmF0
ZSBSZWdpc3RlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgPSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgMTsK
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSArIDE7CiAKICAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdmVyeSBzcGVjaWZp
YyBjaXJjdW1zdGFuY2VzCiAgICAgICAgIC8vIHdoZW4geW91J3ZlIGd1YXJhbnRlZWQgdGhlIGNh
bGxlZSBjYW4ndCBiZSBhIFdhc20gY2FsbGVlLCBhbmQgY2FuCkBAIC0xMDYsMTAgKzExNiwxMCBA
QCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgY2VsbCwgYW5k
IGlmIGl0J3Mgbm90LCB3ZSB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgIGlubGluZSBKU1Zh
bHVlIGd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU09i
amVjdCoganNDYWxsZWUoKSBjb25zdDsKLSAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25z
dCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5wb2ludGVy
KCkpOyB9Ci0gICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBj
b25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2Fu
VW5zYWZlUG9pbnRlcigpKTsgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsg
cmV0dXJuIENhbGxlZUJpdHModGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSldLnBvaW50ZXIoKSk7IH0KKyAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxsZWVCaXRzIHVu
c2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tzdGF0aWNfY2FzdDxp
bnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CiAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Q7Ci0gICAgICAgIENvZGVCbG9jayoqIGFk
ZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sq
Kj4odGhpcyArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7IH0KKyAgICAgICAgQ29kZUJsb2Nr
KiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PENvZGVC
bG9jayoqPih0aGlzICsgc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsgfQogICAgICAgICBpbmxpbmUgU1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sqIHVuc2FmZUNvZGVC
bG9jaygpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNTY29wZSogc2NvcGUoaW50IHNjb3BlUmVn
aXN0ZXJPZmZzZXQpIGNvbnN0OwogCkBAIC0xNDYsNyArMTU2LDcgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENhbGxlckZyYW1lQW5kUEMsIHJldHVyblBDKTsgfQogICAgICAgICBBYnN0
cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBDKHZtLCB0
aGlzKTsgfQogCi0gICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBj
b25zdDsKKyAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3Q7
CiAgICAgICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3Q7CiAK
ICAgICAgICAgdW5zaWduZWQgY2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdDsKQEAgLTE4MiwxNSAr
MTkyLDEzIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgc3RhdGljIHZvaWQgaW5pdERlcHJl
Y2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihDYWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbGVl
KiBnbG9iYWxDYWxsZWUpOwogCiAgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBj
b2RlZnJhbWUgKG9yIGNvbnN0YW50IGZyb20gdGhlIENvZGVCbG9jaykuCi0gICAgICAgIFJlZ2lz
dGVyJiByKGludCk7CiAgICAgICAgIFJlZ2lzdGVyJiByKFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAg
ICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBub24tY29uc3RhbnQKLSAgICAgICAgUmVnaXN0
ZXImIHVuY2hlY2tlZFIoaW50KTsKKyAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIGtu
b3duIG5vbi1jb25zdGFudAogICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihWaXJ0dWFsUmVn
aXN0ZXIpOwogCiAgICAgICAgIC8vIEFjY2VzcyB0byBhcmd1bWVudHMgYXMgcGFzc2VkLiAoQWZ0
ZXIgY2FwdHVyZSwgYXJndW1lbnRzIG1heSBtb3ZlIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uLikK
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpIC0gMTsgfQotICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRdLnBheWxvYWQoKTsgfQorICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCldLnBheWxvYWQoKTsgfQogICAgICAgICBzdGF0aWMgaW50IGFyZ3Vt
ZW50T2Zmc2V0KGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJn
dW1lbnQgKyBhcmd1bWVudCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldElu
Y2x1ZGluZ1RoaXMoaW50IGFyZ3VtZW50KSB7IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICsgYXJndW1lbnQpOyB9CiAKQEAgLTIzOSw3ICsyNDcsNyBAQCBuYW1lc3BhY2UgSlND
ICB7CiAKICAgICAgICAgSlNWYWx1ZSBhcmd1bWVudEFmdGVyQ2FwdHVyZShzaXplX3QgYXJndW1l
bnQpOwogCi0gICAgICAgIHN0YXRpYyBpbnQgb2Zmc2V0Rm9yKHNpemVfdCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxOyB9CisgICAgICAgIHN0YXRpYyBpbnQgb2Zmc2V0
Rm9yKHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgeyByZXR1cm4gQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAK
ICAgICAgICAgc3RhdGljIENhbGxGcmFtZSogbm9DYWxsZXIoKSB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgICAgIGJvb2wgaXNEZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSBjb25zdApA
QCAtMjUxLDEwICsyNTksMTAgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBib29sIGlzU3Rh
Y2tPdmVyZmxvd0ZyYW1lKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNXYXNtRnJhbWUoKSBjb25z
dDsKIAotICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3Vu
dCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRdLnBheWxvYWQoKSA9IGNvdW50OyB9CisgICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylb
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5bG9hZCgp
ID0gY291bnQ7IH0KICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2FsbGVlKEpTT2JqZWN0Kik7CiAg
ICAgICAgIGlubGluZSB2b2lkIHNldENvZGVCbG9jayhDb2RlQmxvY2sqKTsKLSAgICAgICAgdm9p
ZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4odmFsdWUpOyB9CisgICAgICAg
IHZvaWQgc2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVy
blBDID0gdmFsdWU7IH0KIAogICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJ
bmxpbmVzLmgKaW5kZXggYTk3ZGVjYTUzYmNlMTc5Mjg5YjBjMzgwZDA0ZThmMmE4NjA0NzdkMS4u
ZWU3ZWMyYWIxMDRhN2EzNGQ5OGIwZjQzOGY2NDRjMmRjYTFjNTE2OCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCkBAIC0z
Miw1MCArMzIsMzkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBSZWdpc3RlciYgQ2Fs
bEZyYW1lOjpyKGludCBpbmRleCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMt
PmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KGluZGV4KSkKLSAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJmNv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkpOwotICAgIHJldHVybiB0aGlzW2luZGV4
XTsKLX0KLQogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKIHsKLSAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOwotfQotCi1pbmxpbmUgUmVnaXN0ZXIm
IENhbGxGcmFtZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHRoaXNbaW5k
ZXhdOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVnaXN0ZXIqPigmdGhpcy0+Y29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIo
cmVnKSk7CisgICAgcmV0dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIFJlZ2lz
dGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBy
ZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0KCkpOworICAgIEFTU0VSVCghcmVnLmlzQ29uc3Rh
bnQoKSk7CisgICAgcmV0dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIEpTVmFs
dWUgQ2FsbEZyYW1lOjpndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlXS5qc1ZhbHVlKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpXS5qc1ZhbHVlKCk7CiB9CiAKIGlubGluZSBKU09iamVjdCogQ2Fs
bEZyYW1lOjpqc0NhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20o
KSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5vYmplY3QoKTsKKyAg
ICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLm9i
amVjdCgpOwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBDYWxsRnJhbWU6OmNvZGVCbG9jaygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rl
cjo6Y29kZUJsb2NrKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBT
VVBQUkVTU19BU0FOIENvZGVCbG9jayogQ2FsbEZyYW1lOjp1bnNhZmVDb2RlQmxvY2soKSBjb25z
dAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6
OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjphc2FuVW5zYWZlQ29kZUJsb2Nr
KCk7CiB9CiAKIGlubGluZSBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjpsZXhpY2FsR2xvYmFs
T2JqZWN0KFZNJiB2bSkgY29uc3QKQEAgLTEwMiwxMiArOTEsMTIgQEAgaW5saW5lIGJvb2wgQ2Fs
bEZyYW1lOjppc1dhc21GcmFtZSgpIGNvbnN0CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0
Q2FsbGVlKEpTT2JqZWN0KiBjYWxsZWUpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0
aGlzKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gY2FsbGVlOworICAgIHN0YXRpY19jYXN0PFJl
Z2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9
IGNhbGxlZTsKIH0KIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDb2RlQmxvY2soQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2tdID0gY29kZUJsb2NrOworICAgIHN0YXRpY19jYXN0PFJlZ2lz
dGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXSA9
IGNvZGVCbG9jazsKIH0KIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRTY29wZShpbnQgc2Nv
cGVSZWdpc3Rlck9mZnNldCwgSlNTY29wZSogc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQyMDljM2ExYmU0ZjU4ZGFlYTgwN2UzYmFmZWYwZDRiYTAyZmY0NmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQnl0ZWNvZGVJbmRleC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBnZXRUbXAoc2l6ZV90IG9mZnNl
dCkgCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWlu
dDY0X3QpKQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPih0bXBzW29mZnNldF0p
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MzJf
dCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihU
KSA9PSBzaXplb2YodWludDE2X3QpKQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxU
PihzdGF0aWNfY2FzdDx1aW50MTZfdD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ4X3QpKTsK
KyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDhfdD4o
dG1wc1tvZmZzZXRdKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXg7CisgICAgdm9pZCogbmV4dEluc3RydWN0aW9uSnVtcFRhcmdldDsKKyAgICB1
aW50NjRfdCB0bXBzW21heE51bUNoZWNrcG9pbnRUbXBzXTsKK307CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGRhYTk0
Yzg5ZjkwMDVhOTk3MmZjMGUzYjAyZWI4OTNkMjExY2RkOTcuLmMxOWQ1MGQzNDVkNDlmZTRmZjcy
ZDU1MmMxZjQzOGExOTdlNGJlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJ5
dGVjb2Rlcy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRj
aFNjb3BlLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEaXJl
Y3RBcmd1bWVudHMuaCIKQEAgLTEyMyw3ICsxMjQsNyBAQCBKU1ZhbHVlIGV2YWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxlckNhbGxTaXRlSW5kZXggPSBjYWxsZXJGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOwog
ICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2Vk
UihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CisgICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNo
ZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKS5SZWdpc3Rlcjo6c2NvcGUo
KTsKICAgICBVbmxpbmtlZENvZGVCbG9jayogY2FsbGVyVW5saW5rZWRDb2RlQmxvY2sgPSBjYWxs
ZXJDb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICBib29sIGlzQXJyb3dGdW5j
dGlvbkNvbnRleHQgPSBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkg
fHwgY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKTsKQEAg
LTIxMyw2ICsyMTQsOSBAQCB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdAogICAgIH0KICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKICAgICAKKyAgICBpZiAobGVuZ3RoID4gbWF4QXJn
dW1lbnRzKQorICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlKTsKKwogICAgIGlmIChsZW5ndGggPj0gZmlyc3RWYXJBcmdPZmZzZXQpCiAgICAgICAgIGxl
bmd0aCAtPSBmaXJzdFZhckFyZ09mZnNldDsKICAgICBlbHNlCkBAIC0yNDksNyArMjUzLDcgQEAg
dW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIGxv
YWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1bWVudHMs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQordm9pZCBsb2FkVmFyYXJncyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1Zh
bHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCiB7CiAgICAg
aWYgKFVOTElLRUxZKCFhcmd1bWVudHMuaXNDZWxsKCkpIHx8ICFsZW5ndGgpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI2MSwzMSArMjY1LDMxIEBAIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpCiAgICAg
c3dpdGNoIChjZWxsLT50eXBlKCkpIHsKICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1R5cGU6CiAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+
KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50
cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0
LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNjb3BlZEFyZ3Vt
ZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PFNjb3Bl
ZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PFNj
b3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAg
ICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1lbnRz
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9B
cmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7
CiAgICAgICAgIHJldHVybjsgCiAgICAgZGVmYXVsdDogewogICAgICAgICBBU1NFUlQoYXJndW1l
bnRzLmlzT2JqZWN0KCkpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7CiAgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSkgewogICAgICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmplY3Qp
LT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0
KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHVuc2ln
bmVkIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGggJiYgb2JqZWN0LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaSArIG9mZnNldCk7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihm
aXJzdEVsZW1lbnREZXN0ICsgaSkgPSBvYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBvYmplY3QtPmdldEluZGV4UXVp
Y2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgaSArIG9m
ZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwot
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHZhbHVlOwor
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHZhbHVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICB9IH0KQEAgLTI5Nyw4ICszMDEsNyBAQCB2b2lkIHNldHVwVmFyYXJn
c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDYWxsRgogICAgIAogICAgIGxvYWRWYXJhcmdzKAogICAgICAgICBnbG9iYWxPYmplY3QsCi0g
ICAgICAgIGNhbGxGcmFtZSwKLSAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0KDApLAorICAgICAgICBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxs
RnJhbWUtPnIoY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDAp
KSksCiAgICAgICAgIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwogICAgIAogICAgIG5ld0Nh
bGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobGVuZ3RoICsgMSk7CkBAIC01
MzgsOCArNTQxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5j
b2RlQmxvY2soKTsKIAogICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBpZiAo
IW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAg
ICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBjaGVja3BvaW50cy4KKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICAgICAgICAgIGlmIChtX3JldHVyblBDID09ICZMTEludDo6Y2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50KQorICAgICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT52bSgpLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1fY2FsbEZyYW1lKTsK
KyNlbmRpZgorICAgICAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKICAgICAgICAgICAg
ICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9j
aywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAgICAgICBpZiAobV9o
YW5kbGVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpA
QCAtNTYxLDYgKzU2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3VsZFN0b3BVbndpbmRp
bmcpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCisgICAgICAgIG1f
cmV0dXJuUEMgPSBtX2NhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAgICAgICByZXR1
cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2ICs2MDYsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1fY29k
ZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11dGFibGUgY29uc3Qg
dm9pZCogbV9yZXR1cm5QQyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lOTElORSBIYW5kbGVy
SW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
RXhjZXB0aW9uKiBleGNlcHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
T2JqZWN0KgogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+
IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAgaWYgKGlzSlND
YWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU08KICAgICB9
CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBp
ZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICBpZiAoVU5MSUtF
TFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50
cykpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5
YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIy
YWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNp
Z25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0m
LCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90
IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2Vk
U3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFs
dWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBs
b2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpT
VmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9p
ZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxl
ciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmly
c3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NG
cmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENh
bGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRz
LCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lk
IHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmlu
ZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3
ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAg
dm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNh
bGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxG
cmFtZTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJs
b2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3
ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2Nr
ICYmICFpc0lubGluZWQpIHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBp
ZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAg
ICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29k
ZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCmluZGV4IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1MmRlZjJkNzFiYzIu
LmUwNmNiNDliMjk1ZGU1ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2NDcsMjggQEAg
cHVibGljOgogICAgIH0KICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZp
cnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVu
dHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZy
b20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9Ci0gICAg
dm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBH
UFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywg
R1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgdG8pOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyNjQoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0g
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkNjQoQWRkcmVz
cyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQ2NChB
ZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAg
ICB9CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAg
ICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBl
bnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9p
ZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2
b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0R2V0
Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8pCkBAIC02OTYs
MTkgKzY5NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlci4gT24g
c29tZSBwbGF0Zm9ybXMsIHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgdGhl
CiAgICAgLy8gImxpbmsgcmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVybiBhZGRyZXNzIGlu
IHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRy
eSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJl
ZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihm
cm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkp
KTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
ZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rlcikp
IC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UKLSAgICB2b2lk
IGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJv
bSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJl
Zm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewot
ICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRy
eSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0
YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAg
ICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3Vl
KFRydXN0ZWRJbW0zMiB0YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxG
cmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1YWxSZWdpc3Rl
ciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rl
cikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0b3JlUHRyKHRhZywg
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0
YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVy
biBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRk
cmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNU
bXAoKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSArMTE2NCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAg
ICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdp
c3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpOwogICAgIH0KLSAg
ICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3Mg
dGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3Bl
cmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3OCwzMCArMTE4
MCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgp
KTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZp
cnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0
KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAg
ICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFu
ZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBw
YXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIC8vIEFj
Y2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0aWMgQWRkcmVzcyBj
YWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVT
bG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHNsb3QgPj0g
Q2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxl
ckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NFUlQoc2xvdC5vZmZz
ZXQoKSA+PSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOworICAgICAgICByZXR1
cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90
IC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7CiAgICAgfQog
CiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIHN0YXRp
YyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAg
ICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KS5vZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVz
cyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVl
RnJhbWVUYWdTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0g
ICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBz
dGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0
KFBheWxvYWRPZmZzZXQpOwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVy
RnJhbWVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJl
Z2lzdGVyKDApKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lzdGVyU2V0IHBy
ZXNlcnZlZCkKQEAgLTE1MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFT
U0VSVCghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpOwog
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICByZXR1
cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0dXJuIGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5NjkwZTA5YzhiNTcy
NzBkZWY3Zjg3YTQ2Y2MyYjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1M2Y4ODgwYjk4Mzdi
NWM2NGQ0YzU2NDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZy
YW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQog
I2VuZGlmCiAKICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5j
YWxsZWUudmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXco
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEu
YXJnc1tpXS5pc0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5p
c0xvY2FsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5oCmluZGV4IDYyNDM5YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUuLjRjNmFh
MzJmNGY1ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VS
VCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRS
ZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkg
fTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAg
ICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAg
ICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlz
Q2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292
ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVk
UmVjb3ZlcnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgIHN3aXRj
aCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAg
ICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKaW5kZXggMjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4u
ODczMTVlZjg0NzdhYzEyYTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBO
RXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0g
ICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklE
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZp
cnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRl
QmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNl
LCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAg
IC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNj
cmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMg
ZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7
Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihW
aXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVy
TW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRo
YXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZh
aWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAK
LSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdz
IGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1Zh
bHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAg
ICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRv
dWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3Qg
Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3Vi
bGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29s
IGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0
TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVt
aXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lk
IGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAK
ICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxG
cmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0
ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRh
ZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAg
IHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lk
IGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQg
YmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihp
bnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZh
bHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9y
ZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1p
dFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVt
aXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVy
SUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBU
cnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAg
IHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFs
c2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7
CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rl
cik7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQ
YXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9u
ICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50
MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVy
cyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2
b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBS
ZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lk
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2
b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVn
VDApOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNl
bGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1Zh
bHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0
b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAg
IHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAg
ICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
dW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3Rl
cklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwot
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQg
VlJlZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVy
SUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdp
c3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFi
bGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZS
ZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBh
dGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGlu
dCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50
IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5z
aWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsK
IApAQCAtNjg1LDggKzY3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGlu
dCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQg
ZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29w
ZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVD
bG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVn
KTsKQEAgLTY5NCwyMCArNjg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFn
LCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpT
VmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAg
ICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQp
OworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBv
aW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9T
ZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5k
LCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBX
YXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAg
ICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdp
c3RlcihpbnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3Rlcik7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5k
Q29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KGludCBzcmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
cik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7
CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAg
ICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNv
bnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7
CkBAIC03MzQsNyArNzI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQo
IWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0
KTsKIApAQCAtNzU0LDEzICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJl
dHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9u
VHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgot
ICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0
LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVy
YXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewog
ICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAg
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBP
cGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4u
KTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04
NjQsNyArODU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3Jj
Mik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMy
NjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFVuc2lnbmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3
MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwg
dGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2Rl
IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQg
aW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIs
IHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
QW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGlu
dCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3Ay
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5
dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0
ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEs
IGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBX
ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xv
dyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQg
SklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwot
ICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0
ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5
dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQx
NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtl
IHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAg
ICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQg
SklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1p
dEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5
OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlm
dEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmls
ZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBB
cml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBh
bmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBw
cm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVj
dGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4
YjM0MDcyZmM1N2MwZTVhYzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJm
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklU
Ojpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAg
ICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2
KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCAr
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAg
ICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAg
ICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9m
aWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBi
eXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0
ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1
ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMg
PSBieXRlY29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRl
Y29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVh
bCByZWdpc3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFy
QXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxs
ZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2Fs
bGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAg
ICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThi
ZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0
NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxG
cmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFi
ZWU5M2IxMGFiMzQuLmM2NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzllMzExNzY0ZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFy
cmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91
YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Rv
dWJsZSgpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENv
bnN0YW50T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29u
c3RhbnQoKSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVn
aXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3Io
ZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Myw3
ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQog
Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU1LDcg
KzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
LCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZSh2UmVnKSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHJlZykp
CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2Nr
LT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjMs
MjYgKzM2NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxX
QVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitB
TFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQz
MigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERv
dWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3Rh
bnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEluaXRSZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJl
Z2lzdGVySUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92
ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0ZvcihpbmRl
eCksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQo
VmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlmIChtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5p
c0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5k
ZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA2
LDEzNiArNDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUm
IHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJbW0zMih2
LnRhZygpKSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAg
ICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNW
YWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0
U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJl
Z2lzdGVySUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7CiAK
ICAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBh
eWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAgZW1pdExv
YWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBp
bmRleCB9OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFz
ZQotICAgICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBsb2FkMzIo
dGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywg
YmFzZSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDMyKHBh
eWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zvcih0YXJn
ZXQsIGJhc2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxv
YWQpOworICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklE
IHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9h
ZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwgUmVn
aXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnMiwg
UmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRMb2FkKGlu
ZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9h
ZDEpOworICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0TG9hZChy
ZWcxLCB0YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3Vi
bGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAg
ICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1Q
dHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91
YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRv
RG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZh
bHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5k
ZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIqIGJ5dGVQ
b2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgIH0g
ZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFs
dWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyksIHZhbHVl
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklE
IHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRh
cmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRhcmdldCwg
YmFzZSkpOwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3Rv
cmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0
YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIo
aW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsK
ICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9v
bCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxS
ZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsK
LSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkp
OworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4
SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
dGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9v
bChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXls
b2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwog
ICAgIGlmICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJl
Z2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5k
ZXgpKTsKKyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50
LCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJbW0zMihj
b25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3Jl
MzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3Rv
cmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOwor
ICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkp
CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJ
Zk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
UmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewot
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxS
ZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYg
b3AsIGludDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGlu
dCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJ
bnQzMigpOwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QKICNl
bHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0
aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwpA
QCAtNTcxLDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRkcmVzc0Zv
cihzcmMpLCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJl
Z3MgZHN0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQ
UigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwg
aW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMu
aXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBS
ZWdpc3RlcklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkK
LXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lz
dGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAg
bW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50
IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0g
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJl
c3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJU
b0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
ZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgpKTsKLSAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4
KS5hc0ludDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3Io
aW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3Io
cmVnKSwgdmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVtcCBKSVQ6
OmVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0MTFiZTljZmI4
MGY4MDgwNmY3ODhmNmMxLi42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQyMTlhMWU5YTdlNWFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2LDEwICs1
NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03Nyw3ICs3
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTExMCw3
ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAgICAgfQog
fQogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5t
X29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEyOSw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFz
X2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0
YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwog
CkBAIC0xNTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
Zj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29k
ZS5tX3Byb3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAogICAg
IC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3Rp
dmVseSkgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNp
bmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2Ug
aXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAg
LTIwNCw4ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAtMjE3LDgg
KzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwg
PSBicmFuY2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzQ2VsbFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlw
ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTMwNyw4
ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAg
ICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0
aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2Rl
Lm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1ICszNjAsMTUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCBy
ZWdUMCk7CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZh
bHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKICAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3ICszNzcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5MCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0g
ICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfanVu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVk
T3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBA
IC00NTcsNyArNDU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnVuZGVm
aW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwpAQCAtNDcwLDggKzQ3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFu
dE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9p
bnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAg
ICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICAKQEAgLTQ4NSwxOCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQo
KSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
ICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJl
Z1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAg
YWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAg
LTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BS
KTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpAQCAtNTQ4LDkg
KzU0OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmlj
dEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmlj
dEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01OTIsOCArNTky
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGludCBzcmMx
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jo
cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBAIC02NTAsOCAr
NjUwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3RvX251
bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50
IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwog
ICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CkBAIC02NjQs
OCArNjY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50IGRzdFZSZWcg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0LDIwICs2ODQsMjAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1Qw
KTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwxMCArNzI4LDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0
KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9y
ZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVn
VDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4
Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9p
bmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEu
bV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcgKzc0OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7
CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpT
VmFsdWVSZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAgLTc2NiwxMCAr
NzY2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJ
bnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVu
dFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9k
c3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaElt
bT4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAg
ICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5l
ZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBT
aW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwogICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRl
ZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9k
ZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNpemVfdCB0YWJs
ZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZz
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zm
c2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRh
YmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBA
IC04MzQsOCArODM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMx
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtOTAzLDcgKzkw
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKICAgICAv
LyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90
IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gQ29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKIApAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
Z1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC05
MjQsNyArOTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9
ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRo
aXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJp
ZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVl
OwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJl
RGF0YVJlZyA9IHJlZ1Q0OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBs
b2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVy
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKIH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVy
blZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtOTk2LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1t
MzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAyNCwxMCArMTAyNCwx
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2ZDdXN0b20+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFu
Y2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3Ig
PSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5j
ZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29u
c3RydWN0b3IsIHJlZ1QxKTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAg
IGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTE1LDEyICsxMTE1
LDEyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKIApAQCAtMTE2MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNl
bmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5m
dW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIwNywxMCArMTIwNywx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgdmFsdWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1f
YXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
Mih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAg
ICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsK
IH0KQEAgLTEyMTksOCArMTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzaXplSW5kZXgg
PSBieXRlY29kZS5tX2xlbmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2Rl
Lm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzaXplSW5kZXgsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwKQEAgLTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKQEAgLTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAg
IApAQCAtMTMzMCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQo
KTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEzOTAsOSArMTM5
MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAg
IGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0x
NDE0LDkgKzE0MTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5v
ZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBUeXBlTG9j
YXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAg
IGludCB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1f
dGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZVRvUHJvZmlsZSwgcmVnVDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdAogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMg
bXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcg
PSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tl
dFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2Vu
UHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQog
CkBAIC0xNTIzLDggKzE1MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNj
cmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLm9mZnNldCgpLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1NDUsNyArMTU0NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3Vu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFi
bGVSZWdzKHJlZ1QwLCByZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9T
a2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
LCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcg
KzE1ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0x
NTk2LDcgKzE1OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVtcCBhcmd1bWVudE91
dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVz
dWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJndW1lbnRPdXRPZkJv
dW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3MzQzMGU1YzFmN2Eu
LmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRh
Lm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRD
YXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtOTQz
LDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcp
OwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBK
U1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFi
OGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2VmODVmMGFjMTE5ZjIy
ZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVj
CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKQogICAgICAgICAg
ICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVC
bG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAg
ICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAgaWYgKGJ5dGVjb2Rl
SW5kZXgpCiAgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVz
ID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1
ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKworICAg
ICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwogICAgICAgICBpbnQg
bG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQor
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5k
LnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVl
c1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5q
c1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29k
ZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2
ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+
YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNv
ZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAg
cHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTA3LDgg
KzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBKU1Njb3BlKiBzY29w
ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0g
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAg
YXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcihz
Y29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+
bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1
c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0lu
c3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIp
OwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTT2Jq
ZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRl
Y29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVs
ZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3Bl
LgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRv
U2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHIKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7
Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVl
KCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0
SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVs
ZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmlu
ZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVj
NjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsK
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKQEAgLTExNyw4ICsx
MTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91
c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJs
ZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKICAgICAgICAgc3Rv
cmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Us
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMs
IEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVj
b2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1
bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAgICAgLy8gc2Ny
YXRjaDogcmVnVDIKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVn
VDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBA
QCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGludCBi
YXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAg
ICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgICAg
ICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtMzM3LDM2ICszMzcs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJl
Z1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNl
dCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRl
ciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIs
IHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7
CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNl
dHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
aW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAg
LTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0
ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAg
LTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhp
c0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9ICEh
KGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgLy8gSW4gb3JkZXIg
dG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9m
ZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyArNjU3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3Bl
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCkBA
IC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1
Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVn
VDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBsb2FkUHRyKHJlZywg
cmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1
Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5LDE3ICs5MTksMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2Nv
cGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpT
VmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIo
cmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGly
ZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNo
cG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1
ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtOTUwLDgg
Kzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0
UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBAIC0xMDg2LDggKzEw
ODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1l
bnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7
CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
QXJndW1lbnRzPigpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFy
cmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsx
MTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2ln
bmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxp
bmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQs
OCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2lu
dGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZp
ZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1
YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTEx
OTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVy
LCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90
Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQg
YmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0lu
dGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5o
CmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1YzEuLmZhNWQwYWFi
NGE1ZDgxMmRlMDExYjM2ZDU0YzMzYzA4MGQ3ZDlkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRK
U0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7
Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lz
dGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRE
b3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsKKyAgICAgICAg
aW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQg
ZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAg
ICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVh
bFJlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxs
RnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAg
IHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5
LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmly
dHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1p
dFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rl
ciBlbnRyeSk7CiAKICAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBA
IC02NCwzNiArNjQsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJ
RCBwYXlsb2FkKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBwYXlsb2FkKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxS
ZWdpc3RlckluZGV4KSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlND
ZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZp
cnR1YWxSZWdpc3RlciksIHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpT
Q2VsbCh2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdp
c3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVy
IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIo
Tm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAg
SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAg
ICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2
aXJ0dWFsUmVnaXN0ZXJJbmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsK
KyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7
CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5z
aWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KTsKLSAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBz
Y3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwg
c2NyYXRjaCk7CiAgICAgICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRj
aCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdElu
dCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4
KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsK
ICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMp
OwotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBk
c3QpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0
KTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAg
IH0KQEAgLTEwMSwyMyArMTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lz
dGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGRzdCk7CiAgICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAg
ICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkK
KyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2Fk
SW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAg
ICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRz
dCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAg
ICAgICAgIEp1bXAgbm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHpl
cm9FeHRlbmQzMlRvUHRyKGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAg
IH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBk
c3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAg
SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAg
ICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7Cisg
ICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAg
ICAgICBKdW1wIG5vdE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAg
ICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMjYgKzEyOSwyNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdp
c3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50
ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCB0byk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50
cnkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSk7CiAjZWxzZQog
ICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKICNlbmRpZgogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZp
cnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIodmFsdWUpLCBhZGRyZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRl
eCAzODg3MzA1MmQxMjg1MmZjNmJiOTE0MmQ0NTYwN2FlOGUxOWE2NzBhLi4wYmE3M2VmOGMxMzRl
YmJiZDFkMDRhNGIxNzIxNGY0ZmE3MzUxODNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIG51bVVzZWRTbG90CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJl
Z2lzdGVyKDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9
IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsK
KyAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIERhdGFGb3JtYXRJbnQz
Mik7CiAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldCgwKSk7CiAgICAgfQogICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZh
c3RDYXNlKHZtLCBqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgYXJndW1lbnRDb3VudFJlY292ZXJ5LCBmaXJzdEFyZ3VtZW50UmVnLCBm
aXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAppbmRleCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEz
ZGYzNmE3MjQ5YjZjMzQzLi45MzNjYTliZTEwMmUwZWRmOTRiYjRlYWU4MjgyMTQ4MjI5YzgyNmY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtK
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQu
aApAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
dm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAg
ICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBzY3Jh
dGNoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1bWVu
dChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChz
cmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFy
Z3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2FkSW50
MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRlNmRi
NDRiZGFmOWU4ZTgwZjIyYWEuLmMzNzZkYmUyY2Q3ZDZkZDNmYTU0ODdiNTdiNTg5NDdmNmRmYmEz
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAK
QEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgw
KTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCk7CisgICAgaml0LmxvYWQ2
NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6
cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJZk5vdEludDMyKEdQUklu
Zm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJbnQzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludERhdGEuaAppbmRleCBhZThkZWUyOWY5ODljNmEwMjU1MDE1ZjVmYWE2MTU2NmQ2MTk2
MDAzLi5hMjM4MDI3ZDNiY2FhNzAzNzExYmM0YmZmMGMxMDYyNTNlMGQ5MTk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCkBAIC00Myw2ICs0Myw5IEBAIHR5cGVkZWYg
dm9pZCAoKkxMSW50Q29kZSkoKTsKIAogbmFtZXNwYWNlIExMSW50IHsKIAorCitleHRlcm4gIkMi
IHZvaWQgSlNDX0hPU1RfQ0FMTCBjaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQoKTsKK2V4
dGVybiAiQyIgdm9pZCBKU0NfSE9TVF9DQUxMIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxp
bmVkX2NhbGxfZW50cnlwb2ludCgpOwogZXh0ZXJuICJDIiBKU19FWFBPUlRfUFJJVkFURSBPcGNv
ZGUgZ19vcGNvZGVNYXBbbnVtT3Bjb2RlSURzICsgbnVtV2FzbU9wY29kZUlEc107CiBleHRlcm4g
IkMiIEpTX0VYUE9SVF9QUklWQVRFIE9wY29kZSBnX29wY29kZU1hcFdpZGUxNltudW1PcGNvZGVJ
RHMgKyBudW1XYXNtT3Bjb2RlSURzXTsKIGV4dGVybiAiQyIgSlNfRVhQT1JUX1BSSVZBVEUgT3Bj
b2RlIGdfb3Bjb2RlTWFwV2lkZTMyW251bU9wY29kZUlEcyArIG51bVdhc21PcGNvZGVJRHNdOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXgg
MzU3YTQ2ZThlNTc4OTdmMjc4NWNkMzM5ZmNiZTJiYzBjOTBjZWRiMi4uZjYyMTMxYzczNzFkNjM0
NTFhZDllYTk4MDJmYzI2ZWNiNmY4ODBlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJy
YXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1
ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpT
VmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBW
aXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihv
cGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyBy
ZXR1cm4gY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5l
IEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJh
bmQpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihv
cGVyYW5kKS5qc1ZhbHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBz
ZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBz
ZWNvbmQpOyAgICAgICAgXApAQCAtMTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhieXRlY29kZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNo
ZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFz
VmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAg
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAt
MTY4OSw3ICsxNjkwLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZv
cndhcmRBcmd1bWVudHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNh
bGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2
bS52YXJhcmdzTGVuZ3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxs
RnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2Fs
bEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAg
LTE3MjUsNyArMTcyNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2
YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2Fs
bGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7
CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVl
RnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7
CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJu
UEMocmV0dXJuUG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNl
dENvZGVCbG9jayhudWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpA
QCAtMTkzMCw3ICsxOTMxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2Zp
bGVfY2F0Y2gpCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFk
YXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmls
ZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBd
ID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFu
ZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjQgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExM
SU5UX0VORF9JTVBMKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2
b2lkIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gc2lkZVN0YXRlLmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5h
c1VJbnQzMigpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZp
bGwoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikg
eworICAgICAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5y
KGJ5dGVjb2RlLm1fYXJndW1lbnRzKS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMSk7CisgICAgfSk7CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7Cisg
ICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJ
RCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxP
YmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJh
bmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNl
CisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2Fs
bEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CisgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9
IHJlc3VsdDsKK30KKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0
cnVjdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykK
K3sKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuaykgeworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0
cigpOworICAgICAgICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50
cnlQdHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KG5leHRQQywgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworI2lm
IEVOQUJMRShKSVQpCisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMu
bmV4dCgpLmluZGV4KCk7CisgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENv
ZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KG51bGxwdHIsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxs
KENhbGxGcmFtZSogY2FsbEZyYW1lLCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUpOworZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9p
bmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSBy
ZXN1bHQpCit7CisgICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5nIGNoZWNrcG9pbnRzIGRvIHJp
Z2h0IG5vdyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdlIGNhbiBqdXN0IGRvIHRoYXQg
aGVyZSBhbmQgcmV0dXJuLgorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50
T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+
b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDYWxsVmFyYXJn
cz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1
ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBvcF90YWls
X2NhbGxfdmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRoZSB0aGluZyBpdCB3YXMgY2Fs
bGluZyB3YXMgaW5saW5lZC4KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGF0
Y2hOZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1Bh
dGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KENhbGxGcmFtZSogY2Fs
bEZyYW1lKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3Bv
aW50X29zcl9leGl0KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2st
PnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZt
LmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIEFTU0VSVChi
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMt
Pm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFy
YXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xv
YmFsT2JqZWN0LCBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIGhh
bmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFz
PE9wQ29uc3RydWN0VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UocGMubmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX3JldCwgIldlIHN0cm9uZ2x5IGFzc3Vt
ZSBhbGwgdGFpbCBjYWxscyBhcmUgZm9sbG93ZWQgYnkgYW4gb3BfcmV0LiIpOworICAgICAgICBo
YW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5h
czxPcFRhaWxDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFr
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQocmV0dXJuVG9UaHJvdyh2bSksIDApOwor
CisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQor
CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxv
d19lcnJvcihWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0ZyYW1lKQogewogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gdm0tPnRvcENhbGxGcmFtZTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOwotCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxGcmFtZSkKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0g
Y2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCp2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggZTE3MzRkY2Y2
MWI0Y2ZjNTUxMmZhMjg1NjAxYmNhYjMwYzg4ZjJlNC4uOTNmNjllYzc3NGQxNmQ4MmNlYzBiMTMw
NWYyYTA4ZjgzNWI4ZDI1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0
dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wTmFtZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JF
eGl0UmV0dXJuTGFiZWwob3BOYW1lLCBzaXplKQogCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFm
dGVyQ2FsbCgpCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwor
ICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVByb2Zp
bGUob2Zmc2V0LCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4
MzksMTMgKzE4MzksMTcgQEAgZW5kKQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFj
cm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNo
LCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRo
KGZyYW1lU2xvd1BhdGgpCittYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQp
CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3Zt
W3QzXSwgdDMKICAgICBidHB6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgotICAg
IGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0aW9u
OgorICAgIGptcCBleGNlcHRpb25UYXJnZXQKKy5ub0V4Y2VwdGlvbjogICAgCitlbmQKKworbWFj
cm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNo
LCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQYXRo
KGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21f
c2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQogICAgIGlmIEpT
VkFMVUU2NAogICAgICAgICBtb3ZlIHIxLCBzcApAQCAtMTk5OSw3ICsyMDAzLDYgQEAgb3AobGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAg
aW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKEludGVybmFsRnVuY3Rpb246Om1fZnVuY3Rp
b25Gb3JDb25zdHJ1Y3QpCiBlbmQpCiAKLQogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNh
biBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNl
IG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJ
VC4gV2UgYXNzZXJ0CiAjIGFzIG11Y2guCkBAIC0yMDQ1LDMgKzIwNDgsMjAgQEAgb3Aod2FzbV9m
dW5jdGlvbl9wcm9sb2d1ZV9ub190bHMsIG1hY3JvICgpCiBlbmQpCiAKIGVuZAorCitpZiBub3Qg
KENfTE9PUCBvciBDX0xPT1BfV0lOKQorICAgIGdsb2JhbCBfY2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50CisgICAgX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfZW50cnlwb2ludDoKKyAgICAgICAgbW92ZSByMCwgYTIKKyAgICAgICAg
Y2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRf
Y2FsbCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19w
YXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMQorCisgICAgZ2xvYmFsIF9jaGVja3BvaW50
X29zcl9leGl0X2VudHJ5cG9pbnQKKyAgICBfY2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50
OgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4gcHJvYmFibHkgZGlzcGF0Y2ggdG8gdGhlIGNoZWNr
cG9pbnQgaGFuZGxlciBkaXJlY3RseSBidXQgdGhpcyB3YXMgZWFzaWVyIAorICAgICAgICAjIGFu
ZCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBmb3IgcGVyZm9ybWFuY2UuCisgICAgICAgIGNhbGxT
bG93UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCisgICAgICAgIGJyYW5jaElm
RXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAgICAg
ICBqbXAgcjEKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCAzZGQyZWI0OGNiYmE2ZWY1Y2Q5ODg2MzljNzkx
MWUyMmE3MTMzMTQ4Li40MTFkZjJjNjc1MjMzMGIzN2I5NmFiY2VkODdhODQ0NmE4NzU2OTk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIsMTQgQEAgbWFjcm8gbmV4dEluc3RydWN0aW9uV2lkZTMy
KCkKICAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAorbWFj
cm8gc3RvcmVQQygpCisgICAgc3RvcmVpIFBDLCBMTEludFJldHVyblBDW2Nmcl0KK2VuZAorCitt
YWNybyBsb2FkUEMoKQorICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKK2VuZAorCiBt
YWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAg
IGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMs
IDFdLCBkc3QKIGVuZApAQCAtOTIsNyArMTAwLDcgQEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywg
Y2FsbGluZyBieXRlY29kZSBpcyBjbGFpbWluZyBpbnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2Vk
LgogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkK
LSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZFBD
KCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVj
dCwgbV9kc3QsIHQxKQpAQCAtMzkwLDcgKzM5OCw3IEBAIGVuZAogCiAjIENhbGwgYSBzbG93IHBh
dGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFj
dGlvbikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAg
IHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAK
ICAgICBtb3ZlIFBDLCBhMQpAQCAtMzk5LDIwICs0MDcsMjAgQEAgbWFjcm8gY2FsbENhbGxTbG93
UGF0aChzbG93UGF0aCwgYWN0aW9uKQogZW5kCiAKIG1hY3JvIGNhbGxUcmFwSGFuZGxlcih0aHJv
d0hhbmRsZXIpCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0K
KyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIs
IGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Nsb3dfcGF0aF9oYW5kbGVf
dHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxvYWRpIEFyZ3VtZW50Q291
bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBD
CiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNo
VG9KSVQoCiAgICAgICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlaSBQ
QywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgICAgICBzdG9yZVBDKCkK
ICAgICAgICAgICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICAgICAgICAgIG1vdmUgY2Zy
LCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTQyMSw3ICs0MjksNyBAQCBtYWNybyBj
aGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAogICAgICAg
ICAgICAgam1wIHIwLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIC5yZWNvdmVyOgotICAgICAgICAg
ICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAgICAg
bG9hZFBDKCkKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTE3NjgsNiArMTc3Niw4IEBAIG1hY3Jv
IHB1dEJ5VmFsT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBvc3JFeGl0UG9pbnQpCiAgICAg
ZW5kKQogZW5kCiAKKworCiBwdXRCeVZhbE9wKHB1dF9ieV92YWwsIE9wUHV0QnlWYWwsIG1hY3Jv
IChzaXplLCBkaXNwYXRjaCkKIC5vc3JSZXR1cm5Qb2ludDoKICAgICBnZXR0ZXJTZXR0ZXJPU1JF
eGl0UmV0dXJuUG9pbnQob3BfcHV0X2J5X3ZhbCwgc2l6ZSkKQEAgLTIwNTcsNyArMjA2Nyw3IEBA
IG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBw
cmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9y
ZXEgdDIsIENhbGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJn
YywgdDIpCi0gICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJd
CisgICAgICAgIHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQ
YXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAgICBwcmVwYXJlQ2Fs
bCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVU
YXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4IDg0MGY4OWI4OGQ0MjBjYzNiNzVjODNkNmM1NzgyNDE1
NDAyZjMzNjYuLjhmNTA1Y2M2OTljZDRhZTM3ZWYzNDUwMGZkZmJlNjk5OTgwN2NkYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKQEAgLTEzMyw2ICsxMzMsMTcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBvdmVyZmxvd0NoZWNrTm90TmVlZGVkKCkgeyBjbGVhck5lZWRz
T3ZlcmZsb3dDaGVjaygpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgZmlsbChzaXplX3QgY291bnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAg
ICAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAgICAgIGVuc3VyZUNhcGFjaXR5KGNvdW50KTsKKyAg
ICAgICAgaWYgKEJhc2U6Omhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgbV9zaXplID0gY291bnQ7CisgICAgICAgIGZ1bmMocmVpbnRlcnByZXRfY2FzdDxKU1Zh
bHVlKj4oJnNsb3RGb3IoMCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBleHBhbmRD
YXBhY2l0eSgpOwogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCBmOGQ5
Nzk5NTg3NDUyMjZhNDdlNmY4YjZjNTU4NjBjMThmY2U4N2ExLi5mZmI3NDU5YTZhZGNjYmFiMTZk
YThhNGVmOGIxNzExZDg3MmExYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xNzg4LDYgKzE3ODgsNyBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4
dFR5cGU7IH0KICAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2V2YWxDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWduZWQgaGFzQ2hlY2twb2ludHMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCkBAIC0xODIwLDYgKzE4MjEsNyBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKICAgICB1bnNpZ25l
ZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6IDI7CisgICAg
dW5zaWduZWQgbV9oYXNDaGVja3BvaW50cyA6IDE7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0
dXJlczsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC0yMDE4LDYgKzIwMjAs
NyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhE
ZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqCiAKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1f
aGFzQ2hlY2twb2ludHMoY2FjaGVkQ29kZUJsb2NrLmhhc0NoZWNrcG9pbnRzKCkpCiAKICAgICAs
IG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKCkpCiAgICAgLCBtX3BhcnNlTW9k
ZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKCkpCkBAIC0yMjA2LDYgKzIyMDksNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29ucwogICAgIG1fcGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VN
b2RlOwogICAgIG1fY29kZUdlbmVyYXRpb25Nb2RlID0gY29kZUJsb2NrLm1fY29kZUdlbmVyYXRp
b25Nb2RlOwogICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsKKyAgICBtX2hh
c0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAKICAgICBtX21ldGFk
YXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9y
YXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5k
ZXggZjM1OGQ0OGE1MGRlNzNlYWIzODU2OTliM2E2ZjUxMTNiYmJlOWJiYS4uZTI3ZmUzY2E5Nzhi
Mzk0NDgyNjE2N2Q0YTA2MWEyZWFkNGY5MjYxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05OCw4ICs5OCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIEJFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAgICAgICAgXAog
ICAgIFNFVF9QQ19GT1JfU1RVQlMoKQogCi0jZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1l
LT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAo
Y2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpKQorI2RlZmluZSBHRVQob3BlcmFuZCkgKGNh
bGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkKKyNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNh
bGxGcmFtZS0+cihvcGVyYW5kKSkKIAogI2RlZmluZSBSRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQp
IGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQp
OyAgICAgICAgXApAQCAtMTEzOSw4ICsxMTM5LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKLSAgICBpbnQg
c2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJl
bnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3Bl
KCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFi
bGUpLmpzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29k
ZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0g
anNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsKQEAgLTExNTUs
OCArMTE1NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpCiAg
ICAgSlNPYmplY3QqIG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNvZGUubV9uZXdTY29wZSkuanNWYWx1
ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAg
ICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZzZXQoKTsKLSAgICBK
U1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJl
Z2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihieXRlY29kZS5tX2N1cnJlbnRTY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAg
ICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNj
b3BlLCBuZXdTY29wZSkpOwogfQogCkBAIC0xMTY1LDcgKzExNjMsNyBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwp
CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3Bl
Rm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU1Zh
bHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQ
VElPTigpOwpAQCAtMTE3OSw3ICsxMTc3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jl
c29sdmVfc2NvcGUpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2
ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8gUHJveHkgY2FuIHRocm93IGFu
IGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5zY29wYWJsZXMu
CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xNDI0LDcgKzE0MjIsNyBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRl
cmZseS5vZmZzZXQoKSkpOworICAgIEFTU0VSVChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZs
eS5pc0NvbnN0YW50KCkpOwogICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0
ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29k
ZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAgICBhdXRvJiBw
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGU7CiAKQEAgLTE0NDMsNyArMTQ0MSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9u
ZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5l
dyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0
byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgog
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICBjb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2
bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29k
ZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwogICAgIH0KIApAQCAtMTQ4OCw0ICsxNDg2LDE2IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9zcHJlYWQpCiAgICAgUkVUVVJOKEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGVGcm9t
QXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwgYXJyYXkpKTsKIH0KIAorZXh0ZXJuICJDIiB2b2lkIGR1
bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpOworZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdp
c3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpCit7CisgICAgZGF0YUxvZ0xuKFJhd1BvaW50ZXIoYml0
d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkpKTsKK30KKworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElu
c3RydWN0aW9uKiBwYyk7CisvLyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBTTE9XX1BB
VEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCAp
CisvLyB7CisKKy8vIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRiZDE5MmE2Yzc3ZWZjMDI2
ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQxYjc4ZTYzMTFiNjc1ZDFl
ZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0
cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVj
dERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0
KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1
Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdl
KQoreworICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVj
dCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9CisKK0pTT2JqZWN0
KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1
Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0
IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDYsMTAgKzUx
LDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2Jq
ZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJn
cywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNv
bnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBj
b25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0KIEpTT2JqZWN0KiBjb25z
dHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9i
amVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmExMWQ3Y2VlMjRkZmZhZTkx
OTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2JhZWI2Y2FjMTI2MjFmM2Jh
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0
YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaApA
QCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAKIC8vIENvbnZlbmllbmNl
IHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENhbGxEYXRhIGFuZCBDYWxs
VHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpTX0VYUE9SVF9QUklWQVRF
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9S
VF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNo
YXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBj
b25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsK
IAogQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3Ry
dWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlz
dCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFlZmFmZDQzYTAxYTVjODUu
LjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApAQCAtMTM3LDIw
ICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1
bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChpbmRleCwgaW50ZXJuYWxM
ZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYXBwZWRBcmd1bWVudHMp
IHsKICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGggKyBvZmZzZXQsIG1f
bGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0
YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0
OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0g
c3RvcmFnZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zm
c2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0KGdsb2JhbE9iamVj
dCwgaSk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGds
b2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHZW5lcmljQXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9B
cmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7
CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1lbnRzU2l6ZSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCmluZGV4
IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEuLjhkOTY0MmEyYzk0MDQw
ODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojppc01vZGlm
aWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAgfQogCi0gICAgdm9p
ZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVn
aXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAg
REVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4
ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVlYjI3MmNiYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKQEAg
LTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9kaWZpZWRBcmd1bWVudERl
c2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29s
IGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxl
bmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9IENhZ2VkQmFycmll
clB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2RpZmllZEFyZ3VtZW50c1B0
ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDIxODJh
NjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFiZjVmMmVlMTg1YjdkMTMz
MTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtMjk3LDcgKzI5Nyw3IEBA
IGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRv
cih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12
b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBH
ZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMwNSw5ICszMDUsOSBA
QCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkgKyBvZmZz
ZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRo
aXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0
RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERl
c3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmly
c3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNDRjN2U1
MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5MTcxMWVlZGJjMjhlMGU0
ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyCiAg
ICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0KIAotdm9pZCBKU0Fy
cmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICAg
ICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKTsK
ICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnRE
ZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwxMSArMTI5NCwxMSBAQCB2
b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYg
PSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQoKTsK
KyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYuZ2V0KCk7CiAgICAgfQog
ICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5y
KGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwor
ICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwg
aSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmluZGV4IDMxNzk0OWM1NzJh
MTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5MjU0Y2MxYTZjNDc5MDJi
NzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
QEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVy
Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDlj
MC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CiAgICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7
CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkp
ID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggYWNiNjg0ODE5MWExOTAzNTIyYjli
M2U0ZDAwZjk2OWU0MGI3ODE1YS4uMDdlMWE4YTEwYzNjZGM3MTE3YWNhM2RjNTQzZWQ3ZGRiMGQ0
MWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0
YWJsZUJ1dHRlcmZseS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
b2NrLmNwcAppbmRleCBhNmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2ODM0OTdlLi4x
NmFhMzY5ZjQ4NTA3MDYxYzA2MzYxNTE4YWUxNWQyYmM2OGZiNmRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTIwNCw2ICsyMDQsNyBAQCB2b2lkIEpTTG9j
azo6d2lsbFJlbGVhc2VMb2NrKCkKIHsgICAKICAgICBSZWZQdHI8Vk0+IHZtID0gbV92bTsKICAg
ICBpZiAodm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCF2bS0+aGFz
Q2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpLCAiUmVsZWFzaW5nIEpTTG9jayBidXQgcGVuZGluZyBj
aGVja3BvaW50IHNpZGUgc3RhdGUgc3RpbGwgYXZhaWxhYmxlIik7CiAgICAgICAgIHZtLT5kcmFp
bk1pY3JvdGFza3MoKTsKIAogICAgICAgICBpZiAoIXZtLT50b3BDYWxsRnJhbWUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5jcHAKaW5kZXggZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2ZGUzN2JhMC4u
NTk2ODA4Y2FmYzBiMGY0Yzg0NzBiZDc1OWVkOWY0OTE2YzY2NDQ4NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmNwcApAQCAtNzQsNyArNzQsNyBAQCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgZXhl
Y3V0YWJsZS0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbE9iamVj
dC0+dm0oKSwgZXhlY3V0YWJsZSwgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZSk7CiAKLSAgICBl
eGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVj
dC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKS5nZXQo
KSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOworICAgIGV4ZWN1dGFibGUt
Pm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBl
eGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
LT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgp
KSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKIAogICAgIHJl
dHVybiBleGVjdXRhYmxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAppbmRleCA0MTM4N2M4NTBhOTk1YWQ1NzQyMTA1MGNkZTg2Y2IyNTIxZTU0MTE2Li45MWVk
NzM5ZTI1ZjQ5MzhlZjUwMjcyN2RmNTE2ODBkODZjYTIwODdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTA5LDExICs1MDksOSBAQCBzdGF0aWMgdm9p
ZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBpZiAoT3B0aW9uczo6c29mdFJlc2Vy
dmVkWm9uZVNpemUoKSA8IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNl
cnZlZFpvbmVTaXplKQogICAgICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpID0g
T3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNpemU7CiAK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIC8vIEZJWE1FOiBNYWtlIHByb2JlIE9TUiBleGl0
IHdvcmsgb24gMzItYml0OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwot
I2VuZGlmCiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBPcHRp
b25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKaW5kZXggMDgxZDk3OGE3YjJhNjI2NmFj
NTUyYzM3OWQzODQ1MDA1ZGMxMWYxMC4uM2M3NDBkNDhmNjI0MWIwMjYwNWZiZjUyNWJkZGYyMzE5
MmQwOWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHMuY3BwCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnVu
bWFwQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKQogICAgICAgICBzdG9yYWdlKClbaSAtIG5h
bWVkTGVuZ3RoXS5jbGVhcigpOwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCmluZGV4IGY4NWU0N2RmYmVlOGNhN2MzNzA0ZjI5ZWQ0Y2IxYjRlOTcyMDQ0
NTcuLmU1OGNiMjJlZmQ0OGM2NzRiZjViMWIxMTI4MGI1MWFiYzBkZTA4NGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCkBAIC0xNDIsNyAr
MTQyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxTY29wZWRB
cmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX3RhYmxlLT5s
ZW5ndGgoKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDY0ZGRmY2IxYTI1NjBlNmZlMWI0NTRlNGZlZTE0
ODkyYWRjMDhhOWYuLjhmNmU1NjVlMjQ3ZTVhMjMxOTMzMTk4ODI4NjcyZTIxMDQ4ODE2NTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJCb29sZWFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFibGVzLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0xMDI3LDYgKzEw
MjgsMjAgQEAgdm9pZCBWTTo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJiBjb25zZXJ2YXRpdmVSb290cykKIH0KICNlbmRpZgogCit2b2lkIFZNOjphZGRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9hZCkKK3sKKyAgICBBU1NFUlQoY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NoZWNr
cG9pbnRTaWRlU3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBWTTo6ZmluZENoZWNrcG9pbnRP
U1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gc2lkZVN0YXRlID0gbV9jaGVja3Bv
aW50U2lkZVN0YXRlLnRha2UoY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gc2lkZVN0YXRlOworfQor
CiB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mIHZtKQogewogICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKaW5kZXggMjgwODZjNGVkOTE2MDZjMjgxYjFhMWQ1YjdhMWRhYjA2MDg4MDcw
YS4uMjVjNGE1MTRhMThjNjcwZTY1NDMxYWI5Njg3ODgzMzgxZDcxZWMyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDMsNiArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5
OwogY2xhc3MgQ2FsbEZyYW1lOworc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwog
Y2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xhc3MgQ29tbW9uSWRlbnRpZmll
cnM7CkBAIC05NDksNiArOTUwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2F0aGVyU2NyYXRj
aEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAKKyAgICB2b2lkIGFkZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGU+IGZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSopOworICAgIGJv
b2wgaGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2twb2lu
dFNpZGVTdGF0ZS5zaXplKCk7IH0KKwogICAgIFZNRW50cnlTY29wZSogZW50cnlTY29wZTsKIAog
ICAgIEpTT2JqZWN0KiBzdHJpbmdSZWN1cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsgbnVsbHB0ciB9
OwpAQCAtMTIwMCw2ICsxMjA1LDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fc2NyYXRjaEJ1ZmZl
ckxvY2s7CiAgICAgVmVjdG9yPFNjcmF0Y2hCdWZmZXIqPiBtX3NjcmF0Y2hCdWZmZXJzOwogICAg
IHNpemVfdCBtX3NpemVPZkxhc3RTY3JhdGNoQnVmZmVyIHsgMCB9OworICAgIEhhc2hNYXA8Q2Fs
bEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPj4gbV9j
aGVja3BvaW50U2lkZVN0YXRlOwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9wcmltaXRpdmVH
aWdhY2FnZUVuYWJsZWQ7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxvd1Byb2ZpbGVy
PiBtX2NvbnRyb2xGbG93UHJvZmlsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcAppbmRleCA4MWM5ZjFmNjc0NzA3OWVkODMxMjY2MmMwODMwMGM2Y2MzNjI4
ZTM3Li5lMTQ4NDAwZDQ4N2RmYzY0ZTQ0MDU0ZGRhZGIwODU4OTcyZTM5YTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKQEAgLTM5Nyw4ICszOTcsOCBA
QCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ICAgIGNvbnN0IFJlZ2lzdGVyKiBpdDsKICAgICBjb25zdCBSZWdpc3RlciogZW5kOwogCi0gICAg
aXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICsgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7Ci0gICAgZW5kID0gY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7CisgICAgaXQgPSBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBlbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
ICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDEpOwogICAgIHdoaWxlIChpdCA+IGVu
ZCkgewogICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVn
aXN0ZXJOdW1iZXIgPSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGY2ODhh
N2M5ZTk0MjZkOWUwYmVhM2FmMGNmZmFmMmMyN2RkNWE1NjcuLjJmNGIxYzdkZTZhODdjNzQxMWU4
NmU4N2U3ZjE5MjQ3MzUyYzBmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC03MiwxMSArNzIsMTEgQEAgcHVibGljOgog
ICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzOyB9CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsgfQogCi0gICAgQUxXQVlTX0lOTElORSB1
aW50NjRfdCBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRz
W2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElO
RSBUeXBlIGdldENvbnN0YW50VHlwZShpbnQgaW5kZXgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElO
RSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElO
RSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOwot
ICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07CiAgICAgfQogCiAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVf
cHRyPEluc3RydWN0aW9uU3RyZWFtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRleCBhYjE3NDA2YWZiNzM0YTcwOGRmMTFkYmI2
ODAxNTE4Yjc2NjVmYjQyLi5lZTJiMzI3ZDJhZjU0NzE5Njg3OTY5YWMyNTJhODRjNzg4ZWY2ZTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRv
ci5jcHAKQEAgLTI0Miw2ICsyNDIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFBhcnNlcihG
dW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNl
cjsgfTsKIAorICAgIC8vIFdlIG5lZWQgdGhpcyBmb3IgYXV0b2dlbmVyYXRlZCB0ZW1wbGF0ZXMg
dXNlZCBieSBKUyBieXRlY29kZXMuCisgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2ludHMoKSBjb25z
dCB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9CisKICAgICB2b2lkIGR1bXAoY29uc3Qg
Q29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCBlMmE0YzQyNTMzYTJm
NDQ3ZGQzMjAyMDViNzc3Yjc4YjAzOWMwYjY4Li4yMDY5YWQ4YjI0YjczNjlkY2Q5ZDVmMGM3ZjU4
ZWVjOTJiMzVjNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJh
dGlvbnMuY3BwCkBAIC03NDMsNyArNzQzLDcgQEAgdm9pZCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25XYXNtVG9KU0V4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6RXhjZXAKICAg
ICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2Fs
bCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZwogICAgIC8vIHRvIHRoZSBleGNlcHRpb24g
aGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhh
Y2suCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0
MAotICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAg
ICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5t
b2R1bGUoKSk7CiAgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDkyN2E2
OTg0YTNiZTAxNGNmM2VhN2Q2N2YwMzQ1ODRlZWJlYjYwY2UuLjU0ZjYzNmFjMWI1MDc1ZDFjNjY3
YjM4YTkwMzEzMjkwZDVmMzMzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TbG93UGF0aHMuY3BwCkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgTExJbnQgewogCiAjZGVmaW5lIFJFQUQodmlydHVhbFJlZ2lzdGVyKSBcCiAgICAgKHZpcnR1
YWxSZWdpc3Rlci5pc0NvbnN0YW50KCkgXAotICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RF
X0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkpIFwKKyAgICAg
ICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVn
aXN0ZXIpKSBcCiAgICAgICAgIDogY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcikpCiAKIGlu
bGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBj
YWxsZWUsIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206Okluc3RhbmNl
KiBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDViZDdhYjQzZGUwNmY4OTNjMTY0ZDU5OWM2Y2M0ZjVmYjE3YjA1YmIuLjRlZTdmNTFlODI1ZWE2
NmZiNzMxYmI3MWVjODc3MGE3NDM2ZDJmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMzcyLDYgKzM3Miw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUy
NTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25h
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1
MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFF
QTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMzOEVCQTQyM0FCMDREMTAwMzgyNjYyIC8qIEVudW1DbGFzc09wZXJhdG9yT3Zl
cmxvYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudW1DbGFzc09wZXJh
dG9yT3ZlcmxvYWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNTM0RjI5MUVD
MEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5taWc7IHBhdGggPSBNYWNoRXhjZXB0aW9ucy5kZWZzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW9yaXR5UXVldWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NCw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3Mjk4MTUx
QTgyNUEwMDQxMjNGRiAvKiBkdG9hLmggKi8sCiAJCQkJRkUwNUZBRTYxRkRCMjE0MzAwMDkzMjMw
IC8qIER1bWJQdHJUcmFpdHMuaCAqLywKIAkJCQlBRDY1M0RBODIwMDZCNkMyMDBEODIwRDcgLyog
RHVtYlZhbHVlVHJhaXRzLmggKi8sCisJCQkJNTMzOEVCQTQyM0FCMDREMTAwMzgyNjYyIC8qIEVu
dW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmggKi8sCiAJCQkJMUFFQTg4RTExRDZCQkNGNDAwRTVB
RDY0IC8qIEVudW1UcmFpdHMuaCAqLywKIAkJCQlBRDdDNDM0QTFERDJBNEE3MDAyNjg4OEIgLyog
RXhwZWN0ZWQuaCAqLywKIAkJCQlBOEE0NzI5RjE1MUE4MjVBMDA0MTIzRkYgLyogRXhwb3J0TWFj
cm9zLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaCBiL1NvdXJjZS9X
VEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYzMmMzZWZjMDAwYmQxOGU5ZTM2OTQ1MmZh
ZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUzNjZhNzUwNTRkY2M2YzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5o
CkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbmV4dFBvc3NpYmx5VW5zZXQo
c2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFyKHNpemVfdCk7CiAgICAgdm9pZCBjbGVhckFs
bCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50NjRfdCBmaW5kUnVuT2ZaZXJvcyhzaXpl
X3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXplX3QgY291bnQoc2l6ZV90IHN0YXJ0ID0gMCkg
Y29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKQEAgLTEwMiw2ICsxMDMsMTIgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgICAgICB9
CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yPShib29sIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgQml0
bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CkBAIC0xMTEsNiArMTE4LDkg
QEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUpOyB9CiAgICAgCisgICAgaXRlcmF0b3Ig
b3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90
KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRDbGVhcihCaXRtYXAmKTsKICAgICB2b2lkIHNl
dEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAtMjI0LDYgKzIzNCwxMyBAQCBpbmxpbmUgdm9p
ZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpjbGVhckFsbCgpCiAgICAgbWVtc2V0KGJp
dHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFw
U2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7
ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRzW2ldOworfQorCiB0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0KHNpemVfdCBzdGFydCkgY29uc3QK
IHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAogICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5
cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0ZXJhdG9yCit7CisgICAgQVNTRVJUKGlu
ZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGluZGV4KTsKK30KKwor
dGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1
dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
IGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuICgqY29uc3RfY2FzdDxCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhpcykpW2luZGV4XTsKK30KKwogdGVtcGxhdGU8
c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHVuc2lnbmVkIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhhc2goKSBjb25zdAogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAppbmRleCBkYWU0YTcxYjI4ZDEzMDQyNGMwYmQ3MzFiZTQxNjQzZjA1MmIzZWE5Li4yYTMy
NjJjOWI4YjZkNTZkZTNjYTRkYTAxNTY5NmQ3NTI3YWE0YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dApAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgRHVtYlB0clRy
YWl0cy5oCiAgICAgRHVtYlZhbHVlVHJhaXRzLmgKICAgICBFbnVtVHJhaXRzLmgKKyAgICBFbnVt
Q2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCiAgICAgRXhwZWN0ZWQuaAogICAgIEV4cG9ydE1hY3Jv
cy5oCiAgICAgRmFzdEJpdFZlY3Rvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9FbnVt
Q2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oIGIvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0
b3JPdmVybG9hZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmRlNzNmNWIyZDdkNTc0NGEzZDA4NTc3Y2M3MjQ4
NzFlOTNlNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3Bl
cmF0b3JPdmVybG9hZHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dHlwZV90
cmFpdHM+CisKKyNkZWZpbmUgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihl
bnVtTmFtZSwgb3AsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoZW51bU5hbWUgZW51bUVudHJ5LCBU
IHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9uKSwgVD4gXAorICAg
IHsgXAorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KSBvcCB2YWx1ZTsg
XAorICAgIH0gXAorICAgICAgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBjb25z
dGV4cHIgYXV0byBvcGVyYXRvciBvcChUIHZhbHVlLCBlbnVtTmFtZSBlbnVtRW50cnkpIC0+IHN0
ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisgICAgICAg
IHJldHVybiB2YWx1ZSBvcCBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpOyBcCisgICAgfSBcCisK
KyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVN
X0NMQVNTX1dIRU4oZW51bU5hbWUsICssIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9B
RF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAtLCBlbmFibGVFeHByZXNz
aW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFt
ZSwgKiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVN
X0NMQVNTX1dIRU4oZW51bU5hbWUsIC8sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9B
RF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAlLCBlbmFibGVFeHByZXNz
aW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1Nf
V0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVN
X0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikKKworI2RlZmluZSBP
VkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgPT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9P
UEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAhPSwgZW5hYmxlRXhwcmVzc2lv
bikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUs
IDwsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9D
TEFTU19XSEVOKGVudW1OYW1lLCA8PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FE
X09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID4sIGVuYWJsZUV4cHJlc3Np
b24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCA+PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX1JFTEFUSU9OQUxf
T1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9B
RF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6
OmlzX2ludGVncmFsX3Y8VD4pCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRW
ZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAppbmRleCA4ODViN2IxNzNi
MTFhNjAxYmUyOWEzMzJhYjlkMmE0MTRkNTYyMTIyLi45MjA4OTVmYzQ5ZTcxYmY5NjY5MjIxYzEz
MWExNzQyZmI3NThmZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9y
LmgKKysrIGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCkBAIC00NTAsNyArNDUwLDcg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAh
ISgqbV93b3JkICYgbV9tYXNrKTsKICAgICB9CkBAIC00NjQsNiArNDY0LDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3Bl
cmF0b3J8PShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzID0gdmFsdWUgOiAqdGhp
czsgfQorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yJj0oYm9vbCB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUgPyAqdGhpcyA6ICp0aGlzID0gdmFsdWU7IH0KKwogcHJpdmF0ZToKICAgICB1aW50
MzJfdCogbV93b3JkIHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fbWFzayB7IDAgfTsKQEAg
LTUwOSw3ICs1MTIsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFs
bCgpOwogICAgIH0KLSAgICAKKworICAgIC8vIEZvciB0ZW1wbGF0aW5nIGFzIFZlY3Rvcjxib29s
PgorICAgIHZvaWQgZmlsbChib29sIHZhbHVlKSB7IHZhbHVlID8gc2V0QWxsKCkgOiBjbGVhckFs
bCgpOyB9CisgICAgdm9pZCBncm93KHNpemVfdCBuZXdTaXplKSB7IHJlc2l6ZShuZXdTaXplKTsg
fQorCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4s
IHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0
aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgpAQCAtNTg5LDQgKzU5Niw1IEBAIHB1YmxpYzoKIAogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6RmFzdEJpdFJlZmVyZW5jZTsKIHVzaW5nIFdU
Rjo6RmFzdEJpdFZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFj
Y2Vzcy5oIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKaW5kZXggNWE0ZTllZjQ0
OTRlZjQ2Y2E5ZTRlZWY3N2ZkY2MwZDYwZmFhNGExMS4uM2EzNWIzOGY0YzAyMzY3OWFjN2NmYzlj
NDY1NjA4NGEzOTE0ODNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNj
ZXNzLmgKKysrIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKQEAgLTM0LDcgKzM0
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIFR5
cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lkKiBwb2ludGVyKQogewotICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgVHlwZSBy
ZXN1bHQgeyB9OwogICAgIG1lbWNweSgmcmVzdWx0LCBwb2ludGVyLCBzaXplb2YoVHlwZSkpOwog
ICAgIHJldHVybiByZXN1bHQ7CkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBUeXBlIHVuYWxpZ25l
ZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxp
bmUgdm9pZCB1bmFsaWduZWRTdG9yZSh2b2lkKiBwb2ludGVyLCBUeXBlIHZhbHVlKQogewotICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7
CiAgICAgbWVtY3B5KHBvaW50ZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEwZDhlNzVkN2Vl
ZTJkNmFjNThlMDY4ZWUxODI2NGQ0OGRhZjZkMTMuLmM5ODlkMDRiOTI4NTVkNTk2ZjljNzA0MTkw
MTU0OTVjMjYxYmVjYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMi0xOCAgS2VpdGggTWlsbGVyICA8a2Vp
dGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRv
IGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZW1vdmUgcHJvYmUg
T1NSIGV4aXQgb3B0aW9uIHNpbmNlIHdlIGFyZSBub3QgdXNpbmcgdGhhdCBhbnltb3JlLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0xMi0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBHVEsgZ2FyZGVuaW5n
LiBNYXJrIFdlYktpdC5Gb2N1c2VkRnJhbWVBZnRlckNyYXNoIGFzIHRpbWVvdXQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGNkYmY5YzBkYmY5MzJlMjhjNmQ1YTgyMDhhMGE5OGNj
ZWU2YWVkOWYuLjVmYmMyMDllZGU0ZDM0NWE0NjA1YjAwZDI3MTcyMDQ1ZDA0OTJjZTYgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNDk4LDcgKzQ5OCw2IEBAIE5PX0NKSVRfT1BU
SU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0
ZXJXYXJtVXA9MTAwCiBCM08xX09QVElPTlMgPSBbIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MSJdCiBC
M08wX09QVElPTlMgPSBbIi0tbWF4REZHTm9kZXNJbkJhc2ljQmxvY2tGb3JQcmVjaXNlQW5hbHlz
aXM9MTAwIiwgIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MCJdCiBGVExfT1BUSU9OUyA9IFsiLS11c2VG
VExKSVQ9dHJ1ZSJdCi1QUk9CRV9PU1JfRVhJVF9PUFRJT04gPSBbIi0tdXNlUHJvYmVPU1JFeGl0
PXRydWUiXQogRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyItLWZvcmNlT1NSRXhpdFRvTExJ
bnQ9dHJ1ZSJdCiAKIHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1YnkvanNjLXN0cmVzcy10ZXN0
LXdyaXRlci0jeyR0ZXN0V3JpdGVyfSIKQEAgLTcxMyw3ICs3MTIsNyBAQCBkZWYgcnVuRlRMTm9D
SklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRlZiBydW5GVExO
b0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZnRs
LW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRy
dWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRv
cj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIFBST0JFX09TUl9FWElU
X09QVElPTiArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8t
Y2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIs
ICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRy
dWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUTm9QdXRTdGFja1ZhbGlkYXRlKCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MjksNyArNzI4LDcgQEAgZGVmIHJ1bkZU
TE5vQ0pJVE9TUlZhbGlkYXRpb24oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAog
CiBkZWYgcnVuREZHRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4o
ImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElP
TlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdF
Ul9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIEZPUkNFX0xMSU5UX0VY
SVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1
bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2M1
YWY0NGJiM2M0ZmNjMzc5OGZhZDQzNmNjYjFkODgzYjUxOWZhMS4uMWMxMDAwYjI5NjM4Yzk1NGM5
ODJhMDU4YTNjZDgzMjMyZjNiNmMxMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxOS0xMi0xOCAgS2VpdGgg
TWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3Vs
ZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9hcHBseS1vc3It
ZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzOiBB
ZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAgICAq
IHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzOiBBZGRlZC4K
KyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAgICAgICAg
KHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAgICAqIHN0cmVz
cy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzOgorICAg
ICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICogc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwt
d2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanM6CisKIDIwMTktMTItMTMgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgSlNGaXhl
ZEFycmF5LCBhbmQgdXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5IGluc3RlYWQKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhj
ZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1z
aG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJjNTBhYzBhMjMKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1v
bmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCkBAIC0wLDAgKzEsMzYgQEAKKworbGV0IGN1
cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJu
IGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5j
dGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdD
b3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChh
cnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5l
KHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xl
dCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsKKyAgICBpZiAobGVuZ3RoQ2Fs
bHMrKyAlIDEwID09IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigidGhyb3dpbmcgYW4gZXhj
ZXB0aW9uIGluIGxlbmd0aCIpOworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQKK30gfQorZm9y
IChsZXQgaSA9IDA7IGkgPCAxZTY7IGkrKykgeworICAgIHRyeSB7CisgICAgICAgIHRlc3QoYXJy
YXkpOworICAgIH0gY2F0Y2ggeyB9Cit9CisKK2N1cnJlbnRBcmdDb3VudCA9IDEwMDsKK2xlbmd0
aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVuZ3RoQ2FsbHMgIT09IDEpCisgICAg
dGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMgYi9KU1Rlc3RzL3N0cmVz
cy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhi
ZWU0NWNlMWM3MjgzNjUzODI3MDVkOTlkMzAxYWU2YmNiOGQ4N2EKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpz
CkBAIC0wLDAgKzEsMzEgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVj
dGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5l
KGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRl
ZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAw
OworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxl
bmd0aCgpIHsgbGVuZ3RoQ2FsbHMrKzsgcmV0dXJuIGN1cnJlbnRBcmdDb3VudCB9IH0KK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdChhcnJheSk7CisKKwordGVzdChhcnJh
eSk7CitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0ZXN0KGFycmF5
KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhD
YWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxp
bmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdz
LXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwppbmRleCAzNjE4ZjhjYmIzZDMy
MTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBjZjQ5ZDg4ZTNmZmU5MTJiMWUx
NmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhl
bi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2xv
YWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKQEAgLTE4LDgg
KzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOwogICAgIGlmIChh
LmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5i
ICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQot
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIg
KyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMubGVuZ3RoICE9PSBiLmMubGVu
Z3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0
Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5sZW5ndGg7CiAgICAgZm9yICh2
YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0p
CiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBp
ID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQt
Y291bnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVy
ZW50LWFyZ3VtZW50LWNvdW50LmpzCmluZGV4IDA0N2ZiMDFmODgzMTQ1Y2M3NTU0ZjVjZjcwMWE3
MDc0ZjI2N2RlZWUuLjUzZDc1MmRlY2Q3ZDBmMzFiYzJmMWQ3ODk5MWM2OTEwMWYwOGJmZjMgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJl
bnQtYXJndW1lbnQtY291bnQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwt
Y2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwpAQCAtMTgsOCArMTgsOCBAQCBu
b0lubGluZShiYXIpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFy
IHJlc3VsdCA9IGZvbyg0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0gICAgICAgIHRo
cm93ICJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0Owor
ICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVjdGVkIDQyLCBn
b3QgIiArIHJlc3VsdCk7CiAgICAgcmVzdWx0ID0gYmFyKDQwLCAyKTsKICAgICBpZiAocmVzdWx0
ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBmb3IgYmFyLCBleHBlY3RlZCA0
MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IEVycm9yKCJXcm9uZyByZXN1bHQgZm9y
IGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386041</attachid>
            <date>2019-12-18 17:27:48 -0800</date>
            <delta_ts>2019-12-18 18:25:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218172733.patch</filename>
            <type>text/plain</type>
            <size>667505</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi41YWZiZjFhODU4NGI0MzMx
OTIzMjZjNjZhYjJiOTU5N2QzNDU3ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGlu
ZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludERhdGEuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlND
OjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6ZHVtcFJlZ2lz
dGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAoSlND
OjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0
b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFu
dFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25z
dCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0ganNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2Jq
ZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBiZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29w
ZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdiMGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJl
Li41OWEwMDQzNDgyYWMyM2UwMmI4NmEzOTY5OThhM2IwNTg1MWIyNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxl
IG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJl
bmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0
b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RG
OjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGlnbmVkQWNjZXNzLmg6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRT
dG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2RjY2UwZjgxZWQ0NGM3NGQ2
MGVhNWEwYzYyOGQ4YmZhZDkzMzA4Zi4uY2NlZjFhZmQ0NWRhMTkzMDFjODZhOWY3NTcyMmJhZGEz
N2M4MzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTI1LDYgKzUy
NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL09wY29kZS5o
CiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAgYnl0ZWNvZGUvT3BlcmFuZHMuaAogICAg
IGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
aAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRiY2U1YmFjZWRjMDVjM2RjMGVhOGIwNDMzNDZkMTUxZDBkZWY0NDEuLmIyNjRmNGVkZDM5
NjI2OTA1ZTFiMjJhODJlMWU0MTUyMzU1Njc0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMzhFQkEzMjNBQjA0Qjgw
MDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZU
TFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRE
NyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERE
RUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzU5Nyw2ICszNTk5LDggQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFj
dFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9
IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMx
RDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
dGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29y
ZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEph
dmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMz
OEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2
MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBwYXRoID0gZnRsL0ZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURD
N0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFD
MzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzYxMSw2ICszNjE1LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3
NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0
QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjND
NTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9y
SGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJh
dG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYz
QzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFj
Y2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNz
Q2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkw
MDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MjEsNiArNTUyOCw3IEBACiAJCQkJMEY0ODUzMjYxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEz
RTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywKKwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAz
ODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLywKIAkJCQkwRjI1RjFBQjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJMEYyNUYxQUMxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01OTQ3LDYgKzU5NTUs
NyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJ
CQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJ
CUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJ
NTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgg
Ki8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAog
CQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdD
MUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2
LDcgKzg1ODUsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVy
YXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2
IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1
NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlB
MzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1
NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFD
NDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2
RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAw
MzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk4LDcgQEAK
IAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJ
CQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJ
CTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90
b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0
b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk5LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIw
Mjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMy
MjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNE
REExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMz
OEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyog
Q0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDMyLDYgKzk0NDUsNyBAQAogCQkJCTBG
OUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3Zl
cnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEVCQTMyM0FCMDRCODAw
MzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBl
dFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2Rl
ZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRi
MmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAot
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihG
dW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRy
PHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NF
UlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQq
IHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBm
M2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBm
MTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2Jl
RnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxU
PihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3Rlcikp
OwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJh
bmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBn
ZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFs
dWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFu
ZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZh
bHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
LCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRP
cGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQg
c2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZz
ZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNl
ZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxp
bmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRp
b24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0
IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAg
ICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFu
ZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJh
bmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9w
ZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVm
IEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQx
Nl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5k
OwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+
IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5k
PGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
RmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3Bl
cmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5n
VmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9w
ZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7
CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhW
ZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRP
cGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVy
YW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAg
VmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJ
bnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCA2MDA2
MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFiNGRiZDI2M2Y0
OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGpp
dC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAg
aWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAgICAgICAgICAg
YXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKQEAgLTE3
OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5h
bCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGpp
dC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMwZWU1OGY1ODgu
LjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFy
YW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBqaXQubWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4
Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2Nh
dGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAg
ICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQg
Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2Vu
ZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFz
cyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50
IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZp
cnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5h
bWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAg
cmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgs
MTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZz
ZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNz
IEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1l
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCkt
PmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZp
cnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIp
Iik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQg
Qnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRl
Y29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNv
ZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZh
bHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2Nr
LT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEw
NzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnBy
aW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1l
KGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVh
bFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1
bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCBy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmly
dHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAg
QmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNp
bmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVy
OwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29u
c3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3
ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1
MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lk
IEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAg
ICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApp
bmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4
ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQg
KzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5k
ZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisg
ICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAg
ICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkK
LSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNC
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAg
ICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hv
dWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hl
Y2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsg
fQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNr
ZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0
dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQog
CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAg
ICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBk
ZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJp
dHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNv
bnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhl
ci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3
OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
aW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAot
ICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50
MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisK
KyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1
aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNo
ZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0
KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5
dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAg
ICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAg
IHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDcx
YmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLmRmMGJkZWIxY2IwZjA1NDA4
MDdlOWFmYTdlMjkzMTRhMTcwYzI3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldh
dGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIs
CiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAg
ICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBh
cmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBk
ZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQog
CiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9wIDp0YWlsX2Nh
bGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5
UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1w
czogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRz
OiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6
IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBAIC04NDUs
NiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQK
KyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6
IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTIs
NyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdp
c3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhiNDNmNDQwLi43
ZGEyMmMyZDJjYzdiZmMxMWQxZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0ZXhwciBib29s
IGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCit7
CisgICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVt
VHlwZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5
aW5nX3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNpemVvZihJbnRU
eXBlMSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50
VHlwZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlw
ZTI+KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsK
KyAgICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKKwor
ICAgIGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN3aXRj
aCAoY29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5vcGNvZGVJRCgp
KSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwg
T3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFs
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZh
cmFyZ3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFs
dWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENvbnN0cnVjdFZh
cmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFy
Z3M6Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdD
b3VudCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIz
MjU5MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0
MjdlZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDgg
QEAgcHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4
TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxv
Y2smLCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShp
bnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3
NGU3OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4Mjgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
TG9jYWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCk7CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+
PSBvdXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFts
b2NhbF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAg
IHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBkMDc2MTA5YTFm
ZGE1Zjk0N2Y1MjBmZTUxNGRkLi42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVjYzYzNmVhMWVi
NWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRp
ZXMuaCIKQEAgLTQwNyw3ICs0MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9u
ZWRTeW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2Zp
bGVyT3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxv
d1Byb2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRj
aGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgog
ICAgICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJv
bFRhYmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7
CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxl
LT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0g
ICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRh
YmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3Rh
bnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIp
OwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3Jl
YXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBh
cmVkIGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0YXRpYyBib29s
IHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlv
biYgdHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXgg
Q29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAg
ICAgIGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENv
ZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZvaWQgQ29kZUJs
b2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNv
bnN0IE9wQ2F0Y2gmCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0ZXJzKCk7ICsr
aSkKICAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSk7CiAKLSAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHByb2ZpbGVzID0g
bWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+KGxpdmVPcGVy
YW5kcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3NpemUgPT0gbGl2
ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGVz
LT5tX3NpemU7ICsraSkKLSAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3Bl
cmFuZCA9IGxpdmVPcGVyYW5kc1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmlsZXMtPm1fYnVm
ZmVyLmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAgIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNp
Z25lZCYgbnVtYmUKIAogICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkp
IHsKICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQ
cm9maWxlcykgewotICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
ICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAppbmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1NmNlNTgxNTBm
NTM0MjY2Li4yNTA2NzI2M2UyNDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2MzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEsNiArMTYxLDcg
QEAgcHVibGljOgogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251
bUNhbGxlZUxvY2FsczsgfQogCiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251
bVZhcnM7IH0KKyAgICBpbnQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAogICAgIGludCog
YWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIyOSwyMCArMjMw
LDIwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkg
Y29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGlu
ZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGluZSBib29sIGlz
S25vd25Ob3RJbW1lZGlhdGUoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA9PSB0aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCisg
ICAgICAgIGlmIChyZWcgPT0gdGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9kZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRleCkuaXNDZWxs
KCk7CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KHJlZykuaXNDZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGlu
ZGV4KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOwor
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9CiAKICAgICBI
YW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWly
ZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4MSwxMCArNTgy
LDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7
IH0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyBy
ZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1
bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC03NzQs
NiArNzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRC
YXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAgIAorICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkgY29uc3Q7CiAg
ICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3Vu
dGVyOyB9CiAKICAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9
CkBAIC04NzQsNyArODc1LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRh
YmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
QnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxDb2RlQ2FjaGUg
bV9kaXJlY3RFdmFsQ29kZUNhY2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0MiwxMCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVj
dXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNlQ29uc3RhbnQo
aW50IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChyZWcu
aXNDb25zdGFudCgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3RhbnRJbmRleCgp
KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwogICAg
IH0KIAogICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4
IDIxMDY4MTNmMGExZWFhNTEzNGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5YTI4NmY4YWFi
ZjRkMzMyZmZmMWU3MWVhM2M4M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBhcHByb3hpbWF0ZUhhc2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9IG51bGxwdHIp
IGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAgIHZvaWQgd2Fs
a1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtVcElubGluZVN0
YWNrKGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBpbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0aGUg
aW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5n
IG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVz
cy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLjQ3YzY1
N2M4ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwx
MiArMjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNz
IGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVt
cHMuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1w
TGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1
YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29s
IHZpcnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBv
aW50KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xp
dmUocmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExp
dmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAg
Ly8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVt
IGNvbXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5p
c20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvciwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxG
YXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApp
bmRleCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5hMGFhN2MwOTI0
NGY5OTU2YmVmMWZiOTgzOGI1NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3Ry
dWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxp
bmVDb2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4
dXBzLgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERv
IG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBz
aWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0
eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVu
IHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24n
dCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVk
IG1hbnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJl
IGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFs
aXplIGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09m
ZnNldCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAg
ICwgdG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5k
KENhbGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiAr
MjIyLDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRt
cE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2Fs
bGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3Qg
cmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3LDkgKzI1Niw5
IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2Nr
OwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKKy8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQg
bm90IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENh
bGxlciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KLWlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNr
KGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSAqdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMzggQEAg
aW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVt
YXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2
ZUNoZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fs
a1VwSW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0
cnVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3Bl
cmFuZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQgb3BlcmFuZCkKK3sKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4g
b3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBp
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKwor
QUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVy
YW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBP
cGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3Bl
cmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/
IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2FsbEZyYW1lLT50
bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FMV0FZU19J
TkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3BlcmFuZChpbmxp
bmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1ZWIxYzY0YTU5
Li5lMDNmYTM5Mzk1OTU1NTJlYmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25jdXJy
ZW50SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVByb2Zp
bGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICA6IG1f
Ynl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQogICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkg
KyBtX29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFz
aCgpICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAgIH0KICAgICAK
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgsNyArNzksNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogCi0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJldHVybiBtX29w
ZXJhbmQ7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRlOiAKICAgICBC
eXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5SGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggMmI2
OWYzNmM3ZmJkYTEwNTU3ODlkZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5Yjk1NmY3OTc4
NmVjODdhYTJjNjlhOGJjMDY3MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApA
QCAtNDIsNyArNDIsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQubV9raW5kID0g
TGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2NrID0gY29kZUJs
b2NrOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0ga2V5LmJ5dGVj
b2RlSW5kZXgoKTsKLSAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJh
bmQoKS5vZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9w
ZXJhbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKENDYWxsSGVscGVy
cyYgaml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBM
YXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5s
YXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQu
b3BlcmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5
T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxv
Y2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0K
QEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpyZXBv
cnRWYWx1ZShKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIExhenlP
cGVyYW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlP
cGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVy
YW5kKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVy
YW5kLmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7
CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oCmluZGV4IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEyZGNmMzM1ZWM4
OGQuLjM2ZDM2OWYwYzAwZmJkNDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0
cnVjdCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZDsKKyAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9
IHU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCBm
MjlmZjlmOTczNmFlYjM3MzQ1OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li5jY2UwODAyZjg5ZDE3ODg2
ODA0NjA5MDdlOTg2YTcwNGJhNmUxZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExMSArMzUsMjE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9w
ZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1
bnNpZ25lZCBtYXhOdW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBv
bmUgdGhhdCBleGlzdHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBl
eGlzdCBiZXR3ZWVuIGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJh
bmQsIExvY2FsT3BlcmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1Ymxp
YzoKKyAgICBPcGVyYW5kKCkgPSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3QgT3BlcmFuZCYp
ID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsgfQor
CisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAgOiBt
X2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAgICAg
ICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5p
c0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3BlcmFu
ZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVyYW5k
KTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0KKyAg
ICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50NjRfdCo+KHRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWludDY0
X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBU
bXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9
CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVyYW5k
ICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50
KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcigp
LnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2Nh
bCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5l
IGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBBcmd1bWVudE9wZXJhbmQgfTsK
KyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lz
dGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25z
dCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1
cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIo
KSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6
aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1
ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKwor
aW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAg
T3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VS
VChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNz
ZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRz
KCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNM
aWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6
Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAot
ICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2Nh
bHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVf
djxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3Nh
bWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVm
VHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwg
Y29uc3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBP
cGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVt
VG1wcykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwg
bV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJh
aXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNp
emUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAg
ICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVt
VG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZl
Y3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVz
LmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhw
bGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6
ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3Vt
ZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAg
IHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51
bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxz
ICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhP
cGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBP
cGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3Qg
VCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51
bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZM
b2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJP
ZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVz
Lmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUp
OwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAg
ICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQor
ICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkg
LSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90
IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwg
bnVtYmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMo
KSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNp
emVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVu
dHMpOworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAg
IHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBp
ZHgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7Cisg
ICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51
bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90
IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5
cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCld
OyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBh
cmd1bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVz
W2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90
IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0
UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1
bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1
cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVf
dCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBS
ZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4
KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRL
aW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAo
b3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAg
ICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1
cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQorICAgIFJlZlR5
cGUgYXRGb3Ioc2l6ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBB
cmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBj
YXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwot
ICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6Cisg
ICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQogICAgIH0KICAgICB0ZW1w
bGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZvcihzaXplX3Qg
aWR4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBjb25zdAogICAg
IHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAg
c3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAg
ICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAg
ICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgp
OworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChp
ZHgpOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVf
dCBzaXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVu
c3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1
ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6
ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0g
bnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7Cisg
ICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOworICAgICAgICBz
aXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93
KG5ld1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRp
YWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1f
dmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gVCgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkKKyAgICAgICAg
ICAgIG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRleChvbGROdW1U
bXBzIC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7CisgICAgICAgIGlm
IChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0
aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplIC0g
b2xkTnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9jYWxJbmRleChv
bGROdW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlKQor
ICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0g
VCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0g
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBp
ZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZlRtcHMo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFs
dWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6
ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKworICAgICAg
ICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBp
IDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZh
bHVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlk
eCwgY29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3Miw3NiBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09IFQoKSk7CiAg
ICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRGb3JPcGVyYW5k
SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25z
dFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgoaW5kZXgpOyB9
CisKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25z
dAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJn
dW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAg
ICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCi0g
ICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBj
b25zdAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAg
ICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmRJbmRleChv
cC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChvcC52YWx1ZSgp
KTsKICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBSZWZUeXBl
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2Nh
bChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAg
ICB9CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisg
ICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlzVG1wKCkp
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3QgVCYgb3BlcmFu
ZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3Rf
Y2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAgIGNvbnN0IFQm
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5k
KSk7IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJh
bmQpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0K
ICAgICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgYm9vbCBo
YXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5k
LnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29sIGhhc09wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoT3BlcmFu
ZCBvcCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJlZy5vZmZzZXQo
KSk7CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AudmFs
dWUoKSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wLnZh
bHVlKCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc09w
ZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE9w
ZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChP
cGVyYW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy0+b3Bl
cmFuZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUpCi0gICAgewot
ICAgICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFsdWUpOwotICAg
IH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tp
bmRleF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4
XTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4g
YXQoaW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xvY2FsKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IG9w
ZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZUeXBlIGF0KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgUmVmVHlw
ZSBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0
UmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQotICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZzZXQoKTsK
LSAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgZWxzZSBp
ZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAg
ICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBpbmRleCAtIChu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAg
ICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1
bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xv
Y2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kp
CkBAIC0yNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFT
U0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAg
LTI2NSw5ICszNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRz
IG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVj
dG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBt
X251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9u
dW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2
YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBA
IC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFu
ZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAg
ICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnBy
aW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQg
T3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIs
IGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7
CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJP
ZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5k
ZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2Nh
bEluZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRl
eCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1w
IiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJj
MTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2Rl
VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQor
ICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFy
c2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUp
CiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmlu
ZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMwODJiMGEyNjNj
MzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Np
b25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYg
ZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29s
IGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAg
IHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisK
ICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7
IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0
ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0
YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0
YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQxOSw2ICs0MjEs
NyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2ln
bmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhB
Z2UpOworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3Vy
cmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTEx
ODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5YTY5ZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3
NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5
dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1
Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3Np
emUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUg
c3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxl
cwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1
ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1fc2l6ZSAq
IHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyhtX3NpemUgKiBz
aXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVy
LmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZt
X2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
fQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0u
flZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ld
Ln5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAg
ICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7CisgICAgTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVm
M2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCkBAIC0zNSwy
MiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1i
ZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSk7CiAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOwor
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51
bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CiAg
ICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJl
cihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJv
eGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBjYXNlIEJvb2xl
YW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJu
IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAj
ZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKICNl
bmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZDhm
MThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJiYmNjNGZmOTdh
NjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4NmJhYjEyZjZj
Y2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRk
ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJl
Z2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdp
c3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBi
b29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lz
dGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8IDA7CiB9CiAK
LWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wg
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3Bl
cmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBmcmllbmQgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGludCk7CiAKKyAg
ICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZm
ZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZ2lz
dGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+KTsKIAogICAg
IFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50
IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wg
aXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVy
KTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50Pihz
bG90KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3Zp
cnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNM
b2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJl
Z2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzSGVhZGVy
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdp
c3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
cnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NF
UlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lz
dGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0
YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29u
c3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lz
dGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxS
ZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZm
ZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMgaW50IGxvY2Fs
VG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAgIHN0YXRpYyBp
bnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQog
ICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CmluZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMuLjhkMmE3ZmI4
MjQ3NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0x
MTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6
ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAgICBtX3BhcmFt
ZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1ldGVy
ID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgp
KTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFy
YW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb2RlIGJsb2Nr
IGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IHBh
cmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgotICAgIG1f
dGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkp
OyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAgICAgYm9vbCBu
b25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVv
Zj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
PigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAg
ICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAg
ICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkg
ewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsK
KyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAg
ICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJl
Z2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0
dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZh
bHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAg
ICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAt
MzIyOSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNh
bGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6
ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRz
IDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZz
ZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMx
ZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZm
ZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0
aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wg
aXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
OyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0
SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4
IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTliMTIzZDRkODli
YTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50
IGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBpbmRleCkKICAg
ICAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVl
OwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWEx
ZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAK
QEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9p
ZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAg
ICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9
CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVh
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBE
T01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAg
IG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOwor
ICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91
dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2
ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFu
Z2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3Zh
bHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKwor
ICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChm
YWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBh
eWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFu
ZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBi
b29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
QVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtp
bmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNv
ZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAm
JiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0
SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0K
KyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFu
ZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFj
dEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRh
Y2I1NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uNWQ5ZTE3YzkwYTJjNWI1MTgy
YjM2NTYxMjg3NjFkODUzNzE4NDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4
MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFs
dWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgp
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9j
YWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
dXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0
YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5k
KGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3Vs
ZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAo
dmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3Rh
dGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0
ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJn
dW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVu
dCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0
dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJU
KCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1
OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sg
aWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVy
bgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBt
X3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFr
ZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMzU4LDcgKzIzNjQsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFyZ3Vt
ZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUub3Bl
cmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9s
ZGluZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmgKaW5kZXggZDczMjQ3YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4u
ODljMDhmYTA4MGNlYTMyZmQ5YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYy
ZWRhNGFkODhlOWI5N2FhZDVmNGY5MzkyMzc2MjE5NTJhZWY4NC4uMTU1MTg2ZDBiZjgyMjVmMTkx
NTVmYzgzM2IzMzAwMGE3ZjVkOTllZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSAr
MzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNw
cmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+
YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgpAQCAtNDkzLDEwICs0OTYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0
byBhbiBhcmd1bWVudCBvciBsb2NhbCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQg
U2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXJlZy5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJl
ZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAg
ICAgICAgICB9CkBAIC01NjAsMTYgKzU2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9j
ayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKTsKQEAg
LTYyNyw3ICs2MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCBoZWFwKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2sgJiYgIWhlYXAucGF5bG9h
ZCgpLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTgwNiw3ICs4MDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNhZmVUb0dldFN0YWNrID0gaW5kZXggPj0gbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9
IGluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0gaW5kZXggPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSkgLSAxOwpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRl
ciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNB
cnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8q
IGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGls
ZCgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0
aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50KSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVk
SW50MzIpKSwKQEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJ
bmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZh
cmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocmVnLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
S2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJl
ZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRo
RXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSwgRWRnZSh2YWx1ZSkpOwpAQCAtOTM1LDcgKzk1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVu
dENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRD
b3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVBcmd1bWVudENvdW50IC0g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwpAQCAtOTgzLDcgKzEwMDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBm
cmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGZyYW1lQXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOyBsb2FkSW5kZXggPCBmcmFtZUFyZ3VtZW50Q291bnQ7ICsrbG9hZEluZGV4KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKQEAgLTEwMTksOSArMTAzNyw3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NE
YXRhLT5vZmZzZXQ7CkBAIC0xMDMwLDcgKzEwNDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID49IDEpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2
YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCB2
YXJhcmdzRGF0YS0+bGltaXQsIHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApp
bmRleCA2MjYxMTIzY2JmZWMzZWJhMTk1ZDA5YjkzMTAyNmYyNmM3MjU4NDc2Li5hOGQzODQ2NWNl
NDhhOWQ4ZjU0MjAwYmM3NDk2Y2I3NGFlOGQ2NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCkBAIC0zMiwxMSArMzIsMTUg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKKyAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSkKICAgICAgICAgcmV0dXJuIChyZWcuaXNBcmd1bWVudCgpICYmIHJlZy50b0FyZ3VtZW50KCkp
IHx8IHJlZy5pc0hlYWRlcigpOwotICAgIAorCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbAogICAgICAgICAmJiByZWcgPT0gVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQ2LDE5ICs1MCwxOSBAQCBib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBXZSBkbyBub3QgaW5jbHVkZSBmaXh1cHMg
aGVyZSBzaW5jZSBpdCBpcyBub3QgcmVsYXRlZCB0byB8YXJndW1lbnRzfCwgcmVzdCBwYXJhbWV0
ZXJzLCBhbmQgdmFyYXJncy4KLSAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICB1bnNpZ25lZCBudW1B
cmd1bWVudHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFN0
YXJ0ID0KICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKICAgICByZXR1cm4gcmVnID49IGFy
Z3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51bUFyZ3VtZW50czsKIH0KIAot
Ym9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJl
Z2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRh
dGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgcmVnKTsK
KyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9CiAKIE5vZGUqIGVtaXRDb2Rl
VG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNl
dCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2lu
KQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2ln
bmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgYWRkVGhpcykKIHsKICAgICBH
cmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApAQCAtNjksMTEgKzczLDE0IEBA
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9t
Q2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyCi0gICAg
ICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLAorICAg
ICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAgICAgYXJndW1lbnRzLT5vcCgp
KTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkKKyAgICAgICAg
cmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGFy
Z3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9yaWdpbiwgYWRkVGhpcyk7CisK
ICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsK
LSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSAwOworICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IGFkZFRoaXM7CiAgICAgICAg
IEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRWZWN0b3IoKTsKICAgICAgICAg
Tm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpAQCAtMTAzLDcgKzExMCw3IEBA
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKIAogICAgIGlmIChhcmd1
bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50
b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50
cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSkpOworICAg
ICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJh
bmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRoaXMpKTsKICAgICB9
CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAgLTExMyw3ICsxMjAsNyBAQCBO
b2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwog
ICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
ICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+PSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0gbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0IEBAIE5vZGUqIGVtaXRDb2Rl
VG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJP
bmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tlZCksCiAgICAgICAg
IEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1i
ZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAg
IG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCArICFh
ZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkg
ewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1Y2UgYSBuZWdhdGl2
ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJlY3QgdGhhdCBoZXJl
LgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwgCiAgICAgICAgICAg
ICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMCksIEludDMyVXNl
KSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUlu
ZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1
bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5kZXggOWE3NzE4ZmJi
ZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5ZTgxNjIyZDQwMjQ2ZTIzNTVk
NTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5s
aW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCk7Citib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5kKTsKIAogTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYsIE5v
ZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luKTsKKyAgICBJbnNl
cnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdp
biwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2MyOGJkNC4uODk3Yzcw
ZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAgLTEzOSw4ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQog
ICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFs
dWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5k
KGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYg
bG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwo
aW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXgg
Nzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJhNS4uYzJiNTVhYTVjNGE1MjI5
YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZh
aWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVC
eUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5k
czxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwg
bV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsK
KyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xv
Y2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBsb2NhbHND
b3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAg
ICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1NTI1NjAyM2RkY2YyODBkYzU5
NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0ZTIzYzAyNWYyYWJl
NGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxp
dHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9y
PgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBj
b25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNs
b3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBj
b25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxh
YmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICBBdmFpbGFiaWxpdHkgYXZh
aWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAgICAgIGlmICghYXZhaWxhYmls
aXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCAwNTg0NDk2M2U2MTBlZDI5
M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYxNTYxOGI4MDY0YTNhN2IyZDc4
NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5z
aWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNv
dW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1U
bXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVC
ZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgsMTEgQEAgQmFzaWNC
bG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51
bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBp
c1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
LSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVl
c0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVs
bFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1U
bXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBz
KQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRp
b25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYgKzcwLDE1IEBAIHZvaWQgQmFz
aWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAgICBpbnRlcnNl
Y3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2FscywgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKHVu
c2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7Cisg
ICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRUYWls
LmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRI
ZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKK30K
Kwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWluYWwoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggYjVhZGYwOTEyZDA5NDJi
ZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRjNmY0ZDFiMDg1YmM4ZTA2MjU0
ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
QEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4gQmxvY2tOb2RlTGlz
dDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAgICBC
YXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVk
IG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxz
LCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAg
fkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKICAg
ICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAppbmRleCA3NTA4
ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4wMDhjZjUyMjY5NTdjOWE4MzU4
NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNCbG9jaz4mJiBibG9j
aykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgs
IGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFk
b3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKKyAgICBS
ZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJ
bmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCks
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSwgZXhlY3V0
aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgIGF1dG8qIHJl
c3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92ZShibG9jaykpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQwOGI3Li4wMTM0MjEyNzQ3NjAx
MTIzNGMxNGExMWFmYWNmYzQyNTI5MTU5ODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYgKzExMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJlcigxKSkpCiAgICAg
ICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkKICAgICAg
ICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCisgICAgICAg
ICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAgICwgbV9wYXJhbWV0
ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1f
aW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0K
IAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQorICAgIHsKKyAgICAg
ICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZVRtcHM6IHRyeWluZyB0byByYWlzZSBtX251bVRtcHMg
ZnJvbSAiLCBtX251bVRtcHMsICIgdG8gIiwgbmV3TnVtVG1wcywgIlxuIik7CisgICAgICAgIGlm
IChuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5l
bnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIH0KKworCiAgICAgLy8gSGVscGVyIGZvciBtaW4g
YW5kIG1heC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wg
aGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKQEAgLTI3MCwyNSArMjgyLDMzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3Np
YmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHVu
bGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAg
IAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcHJvZ3Jlc3NDaGVja3BvaW50KCkKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpICsgMSk7CisgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisgICAgICAgIG1fZXhpdE9LID0g
dHJ1ZTsKKyAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisgICAgICAgIHByb2Nlc3NTZXRM
b2NhbFF1ZXVlKCk7CisgICAgfQorCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVy
YW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICBy
ZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOwogICAgIH0KICAgICAK
ICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVj
dGlvbi4KLSAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
Tm9kZSogZ2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
b3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgLy8g
SXMgdGhpcyBhbiBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAgcmV0
dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogCi0gICAgICAgIC8v
IE11c3QgYmUgYSBsb2NhbC4KLSAgICAgICAgcmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOworICAg
ICAgICByZXR1cm4gZ2V0TG9jYWxPclRtcChvcGVyYW5kKTsKICAgICB9CiAKICAgICBOb2RlKiBn
ZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCkBAIC0yOTgsOCArMzE4LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0YW50cy5zaXplKCk7CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25z
dGFudEluZGV4XSkgewogICAgICAgICAgICAgICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2Nr
ID0gKm1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiA9IGNvZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5k
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdl
dENvbnN0YW50KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
SW5kZXggPj0gb2xkU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93
KGNvbnN0YW50SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gb2xkU2l6ZTsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQpAQCAtMzU4LDkgKzM3OCwx
MCBAQCBwcml2YXRlOgogICAgICAgICAvLyBpbml0aWFsaXppbmcgbG9jYWxzIGF0IHRoZSB0b3Ag
b2YgYSBmdW5jdGlvbi4KICAgICAgICAgSW1tZWRpYXRlTmFrZWRTZXQKICAgICB9OwotICAgIE5v
ZGUqIHNldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1v
ZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKworICAgIE5vZGUqIHNldERpcmVjdChPcGVyYW5kIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewot
ICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFs
dWUpOworICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUp
OwogCiAgICAgICAgIC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhp
dCBzdGF0ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKQEAgLTM3NCw3
ICszOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhl
Y3V0ZSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVl
KCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVl
dWUuc2l6ZSgpOyArK2kpCkBAIC0zOTIsMTggKzQxMywxNyBAQCBwcml2YXRlOgogICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpID09IG1fY3VycmVudEluZGV4KTsKICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1
cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRz
LnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwogICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQog
CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBv
cGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCi0gICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgTm9kZSogZ2V0TG9jYWxPclRtcChPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotCi0g
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KGxvY2FsKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9j
YWwoKSk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdv
IGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAg
ICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkg
aXMgcmVxdWlyZWQgZm9yCkBAIC00MjgsMjAgKzQ0OCwyNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAog
ICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQotICAgIE5vZGUqIHNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2lu
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKKyAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNl
bWFudGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1v
ZGUgPSBOb3JtYWxTZXQpCiAgICAgeworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
IG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3Jp
Z2luQ2hhbmdlKG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAg
ICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KSB7Ci0gICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChvcGVyYW5kKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKSA+PSBtX251bVRtcHMpIHsKKyAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKmlubGlu
ZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIG9wZXJhbmQ6ICIsIG9w
ZXJhbmQsICIgYnV0IGN1cnJlbnQgbnVtYmVyIG9mIHRtcHMgaXM6ICIsIG1fbnVtVG1wcywgIiBj
b2RlIGJsb2NrIGhhczogIiwgbV9wcm9maWxlZEJsb2NrLT5udW1UbXBzKCksICIgdG1wcy4iKTsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAh
PSBJbW1lZGlhdGVOYWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAg
ICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFu
ZCA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3Bl
UmVnaXN0ZXIoKSkKICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQog
CkBAIC00NTEsNyArNDc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRh
LT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpLCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3Jh
cGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0g
bm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODMsMjAgKzUwOSwyMSBA
QCBwcml2YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBO
b2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCisgICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmln
aW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKICAgICB7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5n
ZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudCA9IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShyZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4
Y2VwdCBmb3IgJ3RoaXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8g
dGhlbiBtYWtlIHN1cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1
bWVudCB8fCBtX2dyYXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNl
dE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzMiwxNCArNTU5LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZC5vZmZzZXQoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsK
ICAgICAgICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICAKLSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1l
bnRQb3NpdGlvbihPcGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1
bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1l
bnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU1MCw5ICs1Nzks
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoLmhhc0RlYnVnZ2VyRW5h
YmxlZCgpKTsKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzV2l0aEZpeHVwLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2Fs
bEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlu
bGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFw
T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNh
bGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKS0+bnVtUGFyYW1l
dGVycygpOwogCkBAIC01NzUsNiArNjA0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxs
TGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1w
cyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQgdG8gdGhlIHN0YWNrLgogICAgICAgICAg
ICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRlY29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRM
aXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxh
dGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsgbG9jYWwtLTsp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBA
IC01ODQsMjcgKzYxNCwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0g
ICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hE
aXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJn
dW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaERpcmVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9j
YWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFv
cGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwg
IW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02MTQsMjYgKzY0NCwyNSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7
CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9HcmFwaChub2RlVHlwZSwgT3BJbmZvKHZh
cmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAg
ICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAgIH0KIAot
ICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAg
IGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxvY2FsPihvcGVyYW5kLCBmaW5kQXJndW1l
bnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaChJbmxpbmVTdGFj
a0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERp
cmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVz
aERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07
CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwg
YWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAg
ICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1
dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRv
IGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQp
IHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2Fs
RGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRv
bUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1wbChj
dXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0
KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3OTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVk
Z2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxkMSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhv
cGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZhbHVlKCkpLCBjaGlsZDEpOworICAgIH0K
ICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBp
bmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVk
Z2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAg
LTEwOTEsOCArMTEyNSwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIG51bWJlciBvZiBhcmd1
bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2Vk
IGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRl
bXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBmb3IgdGhlIGZ1bmN0aW9uLgogICAgIHVu
c2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBtYXggbnVtYmVyIG9mIHRlbXBzIHVzZWQg
Zm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhpdCB0byBjaGVja3BvaW50LgorICAgIHVu
c2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBv
ZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KICAgICAvLyBwcmVhbGxvY2F0ZSBm
b3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZyb20gdGhpcyBmcmFtZS4gVGhpcwogICAg
IC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1lIHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6
ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5NSwxNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0Cisg
ICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkg
KyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKIAotICAgICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAgICB9CiAgICAgfTsK
ICAgICAKQEAgLTExNzUsMTMgKzEyMTQsOCBAQCBwcml2YXRlOgogICAgIElDU3RhdHVzQ29udGV4
dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAgICAgc3RydWN0IERlbGF5ZWRTZXRMb2Nh
bCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFsdWU7Ci0gICAgICAgIFNldE1vZGUgbV9z
ZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXllZFNldExvY2FsKCkgeyB9Ci0gICAgICAg
IERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQorICAgICAgICBEZWxheWVk
U2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAgICAgICA6IG1fb3JpZ2luKG9yaWdpbikK
ICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCkBAIC0xMTk0LDggKzEyMjgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRN
b2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsKG1fb3JpZ2luLCBtX29w
ZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5z
ZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAg
ICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOworICAgICAgICBPcGVyYW5k
IG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKKyAgICAgICAg
U2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8RGVsYXllZFNldExv
Y2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4LDcgKzEyNDcsNyBAQCBwcml2YXRlOgog
QmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVj
b2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxv
Y2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRz
IG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVn
aW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUo
KSkKQEAgLTEyMjAsNyArMTI1OSw3IEBAIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxv
Y2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2lj
QmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAg
ICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNv
ZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFz
aWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgp
LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2lj
QmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhX
VEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwpAQCAtMTQyMyw3ICsxNDYyLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ly8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUgaXMgVmFyYXJncywgd2UgZG8gbm90IGtu
b3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxseSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3Mu
IFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1
bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdo
aWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMg
bWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSB4a0xvYWRW
YXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKICAg
ICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVtcCBpbnRvLgogICAgICAgICAgICAgaWYg
KGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0x
NDQ5LDcgKzE0ODgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWls
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAvLyBXZSBt
dXN0IHNldCB0aGUgY2FsbGVlIHRvIHRoZSByaWdodCB2YWx1ZQogICAgICAgICBpZiAoc3RhY2tF
bnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGlmIChzdGFja0VudHJ5LT5t
X2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAgICBzZXREaXJl
Y3Qoc3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7CisgICAgICAgICAgICAgICAg
c2V0RGlyZWN0KHJlbWFwT3BlcmFuZChzdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgYWRkVG9HcmFwaChTZXRDYWxsZWUsIGNhbGxUYXJnZXROb2Rl
KTsKIApAQCAtMTYxNCwxNiArMTY1MywxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAg
IEFTU0VSVCghKG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHMgJSBzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpKSk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCA9IHJlZ2lzdGVyT2Zm
c2V0IC0gbnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90czsKICAgICAKLSAgICBpbnQgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLm9mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnM7CisgICAgT3BlcmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZp
cnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyk7CiAgICAgCiAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lU3RhcnQpLnRvTG9jYWwoKSArIDEgKworICAgICAg
ICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2FsKCkgKyAxICsKICAgICAgICAgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsK
ICAgICAKKyAgICBlbnN1cmVUbXBzKChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFt
ZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSAr
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51
bVRtcHMoKSk7CisKICAgICBzaXplX3QgYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFwaC5t
X2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsKIAogICAgIGlmIChyZXN1bHQuaXNWYWxpZCgpKQot
ICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KTsK
KyAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCku
dmlydHVhbFJlZ2lzdGVyKCk7CiAKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlh
YmxlID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAtMTYz
Niw3ICsxNjc3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKIAogICAgIElubGluZVN0YWNr
RW50cnkqIGNhbGxlclN0YWNrVG9wID0gbV9pbmxpbmVTdGFja1RvcDsKICAgICBJbmxpbmVTdGFj
a0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxl
ZS5mdW5jdGlvbigpLCByZXN1bHQsCi0gICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRp
b25CbG9jayk7CisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnZpcnR1YWxSZWdpc3Rlcigp
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOwog
CiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5z
LgogICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKQEAgLTE2NzEs
OSArMTcxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIEhvd2V2ZXIs
IHdoZW4gd2UgYmVnaW4gZXhlY3V0aW5nIHRoZSBjYWxsZWUsIHdlIG5lZWQgT1NSIGV4aXQgdG8g
YmUgYXdhcmUgb2Ygd2hlcmUgaXQgY2FuIHJlY292ZXIgdGhlIGFyZ3VtZW50cyB0byB0aGUgc2V0
dGVyLCBsb2M5IGFuZCBsb2MxMC4gVGhlIE1vdkhpbnRzIGluIHRoZSBpbmxpbmVkCiAgICAgICAg
IC8vIGNhbGxlZSBtYWtlIGl0IHNvIHRoYXQgaWYgd2UgZXhpdCBhdCA8SEVSRT4sIHdlIGNhbiBy
ZWNvdmVyIGxvYzkgYW5kIGxvYzEwLgogICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7
CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQub2Zmc2V0
KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1
bWVudFRvR2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChE
ZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvR2V0LCB2YWx1
ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
NzE3LDE2ICsxNzU4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIElu
IHN1Y2ggY2FzZXMsIHdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgZnJhbWVzLgogICAgICAgICBpZiAo
cmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwICE9IHJlZ2lzdGVyT2Zmc2V0KSB7CiAgICAgICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dl
dCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1
bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOwotICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHZh
bHVlKTsKICAgICAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRM
b2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHZhbHVlLCBJbW1lZGlh
dGVOYWtlZFNldCB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgYXJpdHlGaXh1cENvdW50OyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIGluZGV4KSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIE9wZXJh
bmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwg
dW5kZWZpbmVkKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNl
dExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb1NldCwgdW5kZWZpbmVkLCBJ
bW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAgfQogCkBAIC0xODkzLDEyICsxOTM0LDEyIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxs
VmFyaWFudCwgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudCk7CiAgICAgICAgIAogICAgICAg
ICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9Ci0gICAgICAgIG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsK
KyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCkpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAg
ICAgICAgZW5zdXJlTG9jYWxzKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
KS50b0xvY2FsKCkpOwogICAgICAgICAKICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBp
bnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkub2Zmc2V0KCk7CisgICAgICAgIGludCBy
ZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsK
ICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2Fk
VmFyYXJnc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVy
KHJlbWFwcGVkQXJndW1lbnRTdGFydCArIDEpOwpAQCAtMTkwNiwxMSArMTk0NywyNCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZz
ZXQ7CiAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CiAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKQotICAg
ICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEp
LCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKworICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnQ7Cisg
ICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnQgPSBhZGRUb0dyYXBoKEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlubGluZUNhbGxGcmFtZSgpLT5pc1ZhcmFyZ3MoKSkKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZ2V0RGlyZWN0KHJlbWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUoKSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAg
ZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0
YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
d2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQp
OworICAgICAgICAgICAgYXV0byBhcmdDb3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChPcGVyYW5kKFRtcE9wZXJhbmQsIE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7Cisg
ICAgICAgICAgICBzZXREaXJlY3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0
aCwgT3BJbmZvKGRhdGEpLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzQ2hlY2tw
b2ludCgpOworCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0
YSksIGdldExvY2FsT3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBu
ZWVkIHRvIGtlZXAgYWxpdmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAv
LyBhbmQgYXJndW1lbnRzQXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdl
IG9ubHkgbmVlZCBhIFBoYW50b20gZm9yCkBAIC0xOTIyLDE0ICsxOTc2LDE0IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2
ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAv
LyBiZWZvcmUgU1NBLgogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3Vu
dFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBl
ZFJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoZGF0YS0+Y291bnQpOwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQg
d2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24n
dAogICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJn
dW1lbnREZWZpbml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAg
ICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnBy
ZWRpY3QoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9m
aXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFk
ZFRvR3JhcGgoU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRW
YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCks
IHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsK
ICAgICAgICAgdW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTE5NTMsNyArMjAwNyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVu
dHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERl
ZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVu
dCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1T
ZXRBcmd1bWVudHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjA1Myw3ICsyMTA3LDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0
OiAiLCByZWdpc3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcs
ICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlh
dGVTZXRXaXRoRmx1c2gpOwogCkBAIC01MTAyLDcgKzUxNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdl
eHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlz
Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVu
UmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC01MTEyLDcgKzUxNjYsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlzLT5pbmxpbmVDYWxsRnJhbWUo
KTsKICAgICAgICAgICAgIE5vZGUqIGxlbmd0aDsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNM
ZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdExlbmd0
aDsKICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDw9IGJ5dGVjb2RlLm1fbnVt
UGFyYW1ldGVyc1RvU2tpcCkKICAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVt
YmVyKDApOwpAQCAtNjE3OCw3ICs2MjMyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3Vy
cmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAmJiBtX2N1cnJlbnRC
bG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5vcCgpID09IENvdW50
RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIq
IGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAg
ICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVm
ZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNh
dGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGgg
dGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5t
X29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIyMywxNCArNjI3NywxNCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTG9j
YWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hMb2NhbCwgT3BJbmZv
KG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVtYmVyT2ZMb2NhbHNd
KSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCksIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUp
OwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAo
bnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Q
b2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1f
c3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0g
anVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4MjYsOCArNjg4MCw4IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNh
c2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFu
dCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJs
ZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJv
emVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsK
KyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2Rl
Lm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9H
cmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBPcEluZm8oaW5pdGlh
bFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBsZXhpY2Fs
RW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2OTExLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIC8vIGxvYWRzIGZyb20gdGhl
IHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0aGF0IHdvdWxkIHByZXZlbnQgdGhlIERGRyBmcm9t
IHRyYWNraW5nIHRoZQogICAgICAgICAgICAgLy8gYnl0ZWNvZGUtbGV2ZWwgbGl2ZW5lc3Mgb2Yg
dGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAg
ICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAg
IE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNh
bGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4oKm1fdm0pKQogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9uLT5zY29wZSgpKTsKQEAgLTcy
NzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5l
U3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxv
Y2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAg
ICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVy
LT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zm
c2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZz
ZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5j
YWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzYzOCw3
ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc2NTgsMjQgKzc3MTQsMjQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJl
c2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5
cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVy
YW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0g
KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5s
aW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVu
dHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRv
QXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5v
ZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5l
Q2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFt
ZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRG
bHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAgLTc3NDAsNiArNzc5Niw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5t
X3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxz
OwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IDhlOWJiNGFjYmU1
NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNiZmQuLjNkYzc1NjhmMWVlMmM2OTc3MjI2OGNjOTZk
ZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2Uu
Y3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0
SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhh
bmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2
ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJh
bmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKTsKICAgICAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3Zl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZh
bHVlKCksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0
YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFs
dWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKaW5kZXggZDk4
ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0MjZhZjBmMjM4Mi4uNTc3MGYwOTg5NDJjODk2Yjdh
Y2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC01Niw2ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKICAgICAgICAgcHJvcGFnYXRlUGhp
czxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5k
PigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIGNvbXB1
dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFk
ZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2Fs
aXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZh
cmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdl
dExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2Nh
bCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6
ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2Nh
bCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5k
KCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9u
aWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlh
YmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxp
emVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9y
PFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+
CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAg
ICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNzAsMTUgKzI4
MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50
b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFy
aWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
c3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUt
Pm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZs
dXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgVG1wT3BlcmFuZD4obm9kZSwg
dmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2Fs
aXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFy
aWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCkKQEAgLTI4OSw2ICszMTEs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgY2xlYXJWYXJpYWJsZXM8QXJndW1lbnRP
cGVyYW5kPigpOwogICAgICAgICBjbGVhclZhcmlhYmxlczxMb2NhbE9wZXJhbmQ+KCk7CisgICAg
ICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBB
c3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVz
IHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16
ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcg
KzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+
CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFj
a0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/
IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBo
aVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7
CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBm
YWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVj
dG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlm
IChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9h
cmd1bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAg
ICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiBy
ZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDogcmV0
dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiByZXR1cm4gbV90
bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0ZsdXNoZWQoKQpAQCAtNTIxLDYg
KzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAgICAgVmVjdG9yPFBoaVN0
YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fZmx1c2hlZExv
Y2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5NDcxYjVhNjE2NjdjZS4uNGNj
ZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazogewogICAgICAgICAgICAgQVNT
RVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChoZWFwLnBh
eWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAg
ICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
OworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2Fk
KCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAg
ICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigpOwogICAgICAgICAgICAgZWxz
ZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWNsb2Ji
ZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3RhY2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWly
LmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgp
LnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0g
cGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIyNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOwog
ICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOwot
ICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBhYnN0
cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFs
dWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFj
dEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpLCBudWxscHRy
KTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3IEltcHVyZURhdGFTbG90IHts
b2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2lkZVN0YXRlOgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdGFjazog
ewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSA9
PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsK
ICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgp
CiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CkBAIC0yOTgsNyAr
Mjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBhbmQgbm93
IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAgLy8KICAgICAvLyBPYnZpb3Vz
bHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFja01hcCBzaW5jZSBpdCBkb2Vz
IG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8aW50MzJfdCwgc3RkOjp1bmlx
dWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJfdD46Okhhc2gsIFdURjo6
U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90
PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOwogICAgIE1hcCBtX2ZhbGxi
YWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA4OWJjNjQxZjUyNmJiNTNmZjAzN2Y3M2NmOTUwYmFj
NjQ2ZDQ5OTU0Li44MmYzY2E2NDE4NGY5MTkzNjUwMzliMTMyMjE3ZGQ5OWVhOTcxMDUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTExLDkgKzExMSw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgLy8gc2NhbiB3b3VsZCByZWFkLiBUaGF0
J3Mgd2hhdCB0aGlzIGRvZXMuCiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5lQ2Fs
bEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5p
bmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzcGVj
aWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2RlcyBjYW4gcmVhZCBmcm9tIHRoZSBzY29wZQpAQCAt
NDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
IAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5Nyw3ICs0OTcsNyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3Qg
V3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZsdXNoOgotICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNzY0LDEyICs3NjQsMTIgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxl
ZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3Rh
Y2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAo
U3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIExhenlOb2Rl
KG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBTZXRDYWxsZWU6Ci0gICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7CkBAIC03ODAsNyArNzgwLDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAgICBjYXNlIFNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgpAQCAtNzg4LDM2ICs3ODgsNDMgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwo
KSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlO
b2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldExvY2Fs
OgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQo
KSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFw
KFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFj
dEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAg
ICAgICByZWFkKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFw
KSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChT
dGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICB3cml0ZSho
ZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2Rl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAg
ICAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAg
ICAgIHdyaXRlKEhlYXApOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRh
LT5jb3VudCkpOworICAgICAgICByZXR1cm47ICAKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJh
cmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nh
c3Q8aW50PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRh
LT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAgICAgCkBAIC04MjYsOSArODMzLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgcmVhZChTdGFjayk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFw
KFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEt
PmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRh
LT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAgIHdy
aXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKaW5kZXggOTU4NjZhN2Y5MWE3
MTQ0MmRhMWM0ZjdlNDcwMGQwOWNkMmFjMzBmMy4uMTU3NDZjMDU0ZjBkZjMzYmEzMmQzOWZhZmUw
MmRiYmQ3ZDI5MTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21iaW5lZExpdmVuZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuY3BwCkBAIC0zOSw3ICszOSw3IEBAIHN0YXRpYyB2b2lkIGFkZEJ5dGVj
b2RlTGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1h
cCwKIHsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgbm9kZS0+b3Jp
Z2luLmZvckV4aXQsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAg
ICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VT
dGFydGluZ1dpdGhMb2NhbCgKICAgICAgICAgICAgICAgICByZWcsCiAgICAgICAgICAgICAgICAg
WyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwCmluZGV4IDc5ODdiODcwZmQ1MDlmOTMwMDA3ZTM1NmFjMDU1ZWE2NmJm
ZTdhZGIuLjdmZmQ0ZDM1YjZjZjVjOWRlMzgxZTdkYTYxMzMyZmQ1MjQ5NjU1YTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcApAQCAtNTYsNyArNTYsNyBA
QCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQogICAgICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5z
aWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3Jp
Z2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChp
bmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJ
bmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkBAIC02NCwxMyArNjQsMTMgQEAgQ2FsbFNpdGVJ
bmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9y
aWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tp
bmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChpbmRleCk7
CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6bGFzdENhbGxTaXRlKCkgY29uc3QKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5zaXplKCkpOwotICAgIHJldHVybiBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSkpOworICAgIHJl
dHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lucy5zaXplKCkgLSAxKTsKIH0K
IAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAppbmRleCAzYjE2NWYyYzQw
MjEwMDNkMDQxY2NhNmQ5YWUwY2ZlN2FlODI3MTNmLi4xODUzNjZkMDRlMjYzZWU5ZWQ5NjRjODZh
N2VkOTUyNGE5NWJiOWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgzLDcgKzM4Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5VmFsIGluIHN1Y2ggc3RhdGljYWxs
eS1vdXQtb2YtYm91bmRzIGFjY2Vzc2VzOyB3ZSBqdXN0IGxvc2UgQ0ZBIHVubGVzcwogICAgICAg
ICAgICAgICAgIC8vIEdDU0UgcmVtb3ZlcyB0aGUgYWNjZXNzIGVudGlyZWx5LgogICAgICAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCkgLSAx
KQpAQCAtNDA0LDcgKzQwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCArIDEpLCBGbHVzaGVkSlNWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkgJiYgaW5kZXgg
PCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkgeworICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICBlbGlt
aW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggODU0MTIzMTQ3NDFlNmYxMTI2MWYyZTk3YzQ5
ZmU2NDRkYWU3YmFmNy4uZjM4YzgzZmRkMzBjMmY1M2IzZDUwOTNmNDBiMmM3MGU5NTMxMDQ4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjk0LDYgKzI5NCw3
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEluQnlW
YWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKKyAg
ICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE51
bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoVmFsaWRS
YWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCmluZGV4
IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1ZmJjNDM5ZDUzYmE5
NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0IHRoZSBERkcg
aXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAgIC8vIG1ha2Ug
c3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9uIHRo
ZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpOwot
ICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElT
dHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWVlMWYwMDczYjBmNGJiY2M0NzM0ZWI2NDFlNDY0OGMz
MDU1YTI0NC4uY2EzM2RiMjI3ZDRiOTI3NzNmYTg2ZDcyZWUzZDRkMWI4NWJmOTgzZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yNDMyLDYgKzI0
MzIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAg
ICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisKKwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAg
ICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBm
b3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ2NCw4ICsyNDcyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgUHJvZmls
ZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgY2FzZSBOZXdQ
cm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxL
aWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCmluZGV4
IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLjkzM2EyYmRlMjJlMTY2
YzJhZWI2ZDRhYzFiYmU5Y2UxZTVjZWQ1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJuYWwgeworY29uc3Rl
eHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMgZm9yIGZpbmRpbmcg
dGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBTU0EuIFRoaXMgYWNj
b3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMgaXMgdXN1YWxseSB1
c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBwb2ludHMgd2hlcmUg
YSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3aGVyZSB0aGUgbm9k
ZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9ncmFtIHBvaW50cyB3
aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAg
IAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JFeGl0OwogICAg
IAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3BlcmFuZCBhbHJlYWR5
Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBsaXZlIGF0IHRo
ZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAobm9kZUFmdGVyLT5j
b250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gbm9kZUFm
dGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2Rl
KHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAgICAgICAgICBh
bHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGVBZnRlci0+
dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKG9w
ZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKKyAgICAgICAg
ICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03
MCw4ICs3NCwyNCBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgIC8vIG90aGVyIGxvb3As
IGJlbG93LgogICAgIGF1dG8qIGJlZm9yZUlubGluZUNhbGxGcmFtZSA9IGJlZm9yZS5pbmxpbmVD
YWxsRnJhbWUoKTsKICAgICBpZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1lID09IGFmdGVyLmlubGlu
ZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlubGluZUNh
bGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwogICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGJlZm9y
ZUlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhZnRlci5ieXRlY29kZUluZGV4KCkuY2hl
Y2twb2ludCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5j
aGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSk7CisKKyAg
ICAgICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29k
ZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGF1dG8gbGl2ZUFm
dGVyID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2Rl
SW5kZXgoKSk7CisgICAgICAgICAgICBpbnQgdG1wT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZy
YW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAgICAgICAgICAg
bGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFm
dGVyKTsKKworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90
IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoT3BlcmFuZChUbXBPcGVyYW5kLCB0bXAg
KyB0bXBPZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgLy8gTm8gbG9jYWxz
IGNhbiBkaWUgYXQgYSBjaGVja3BvaW50LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZyYW1lID8gYmVm
b3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAgICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOwog
ICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVsbExpdmVuZXNzLmdl
dExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2lu
dDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUFmdGVyID0g
ZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3ND
YWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwpAQCAtODIsMTcgKzEwMiwyMSBAQCB2b2lkIGZv
ckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSog
bm9kZUFmdGVyLCBjb25zdAogICAgICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgCisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhZnRlci5ieXRlY29kZUluZGV4KCku
Y2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmluZyBhY3Jvc3MgYSBjaGVja3BvaW50IGJ1dCBiZWZv
cmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFuIGlubGluZUNhbGxGcmFtZS4iKTsKKwogICAgIC8v
IERldGVjdCBraWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQgaXMga2lsbGVkIGlm
IGl0IHdhcyBsaXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBCaXRWZWN0b3IgbGl2ZUFm
dGVyID0gZ3JhcGgubG9jYWxzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwotICAgIGdyYXBoLmZvckFs
bExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBncmFwaC5s
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOworICAgIHVuc2lnbmVkIG51bUxvY2Fs
cyA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKKyAg
ICBncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGJlZm9y
ZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBpZiAo
cmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3RlZCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9Mb2NhbCgpKSkKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyAr
IG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAgICAgICAgaWYgKGxp
dmVBZnRlci5nZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOwogICAgICAgICB9
KTsKIH0KICAgICAKQEAgLTEwNSw3ICsxMjksOCBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXRO
b2RlSW5kZXgoCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWVuSW5DbG9zdXJlRmxh
ZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxsZWRGdW5jdG9yRmxhZyA9
IDI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IGZsYWdzOwotICAgIAorCisgICAgQVNT
RVJUKG5vZGVJbmRleCk7CiAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwog
ICAgIAogICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKQEAgLTEyMCwxNSArMTQ1LDEzIEBAIHZvaWQg
Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7
CiAKLSAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOwotICAgIGlmIChub2RlSW5kZXgpCi0gICAg
ICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKKyAgICBOb2RlKiBiZWZvcmUg
PSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CiAKICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygK
ICAgICAgICAgZ3JhcGgsIGJlZm9yZSwgbm9kZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAgICAgICAgICAgICAgICBy
ZWcsCisgICAgICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUq
IG5vZGUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZ3MuZ2V0KG5v
ZGUpICYgc2VlbkluQ2xvc3VyZUZsYWc7CiAgICAgICAgICAgICAgICAgfSwKQEAgLTE1OSw2ICsx
ODIsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAgICAvLyBTdGFydCBhdCB0aGUgc2Vj
b25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8gb25seSBpbnNwZWN0
IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVwIHRvIG5vZGVJbmRl
eCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0aGUgZnVuY3RvciBo
YXMgbm90aGluZyB0byBkby4KICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDE7IG5vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgIGRhdGFMb2dMbklm
KEZvckFsbEtpbGxzSW50ZXJuYWw6OnZlcmJvc2UsICJsb2NhbCBhdmFpbGFiaWxpdHkgYXQgaW5k
ZXg6ICIsIG5vZGVJbmRleCwgIiAiLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSk7
CiAgICAgICAgIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICBncmFw
aCwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHksIGJsb2NrLCBub2RlSW5kZXgsCiAg
ICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKaW5kZXggYjMyMGY3MDdjOTVmMTIzOTM4NTFiYzNiMmIyYjQyYjk1NmRkMGJmNS4u
MDcxZGUyMzkyYjljNWM5Mjg2ZGU5Yzc4NzhmZTlhZjAwYzBiNGU0MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTMwOCw4ICszMDgsOCBAQCB2b2lkIEdyYXBoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwg
RHVtcENvbnRleAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKSB7
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+
dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0Rh
dGEpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpOwotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFy
aWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZh
cmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgICAgICAgICAgb3BlcmFu
ZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CiAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFj
aGluZToiLCBvcGVyYW5kKTsKQEAgLTMxNywxMyArMzE3LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1w
Q29udGV4CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNTdGFja0FjY2Vzc0RhdGEoKSkgewogICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7CisgICAgICAgIG91dC5wcmludChj
b21tYSwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIGlmIChkYXRhLT5tYWNoaW5lTG9jYWwuaXNW
YWxpZCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBkYXRhLT5t
YWNoaW5lTG9jYWwpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmZvcm1hdCk7CiAg
ICAgfQotICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZExvY2FsKCkpIAotICAgICAgICBvdXQucHJp
bnQoY29tbWEsIG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgaWYgKG5vZGUtPmhhc1VubGlu
a2VkT3BlcmFuZCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKTsKICAgICBpZiAobm9kZS0+aGFzVmVjdG9yTGVuZ3RoSGludCgpKQogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJ2ZWN0b3JMZW5ndGhIaW50ID0gIiwgbm9kZS0+dmVjdG9yTGVuZ3Ro
SGludCgpKTsKICAgICBpZiAobm9kZS0+aGFzTGF6eUpTVmFsdWUoKSkKQEAgLTUxNSw5ICs1MTUs
MTAgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
IGNoYXIqIHByZWZpeFN0ciwgQmFzaWNCbG9jayoKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5w
aGlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbaV07CisgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+b3AoKSA9PSBQaGkpOwogICAgICAg
ICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9
PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+bG9jYWwo
KSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgb3V0LnBy
aW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+b3BlcmFuZCgpLCAiLCIs
IHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+
Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGls
ZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7
CkBAIC04ODQsNyArODg1LDcgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2lj
QmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAgICAgICAgYm9v
bCBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+b3Bl
cmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKQogICAgICAgICAgICAgICAg
IHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtODkzLDkgKzg5NCw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Js
b2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3Vic3RpdHV0ZShibG9jaywgaW5k
ZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICBOb2RlKiBvbGRUYWls
Tm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+
bG9jYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKTsKICAgICAgICAg
ICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPSBuZXdHZXRM
b2NhbDsKKyAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkgPSBuZXdHZXRMb2NhbDsKICAgICAgICAgICAgIHNo
b3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTEzMywzNiArMTEzNCw1NiBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6a2lsbHNGb3IoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgcmV0dXJuIGtpbGxzRm9yKGJhc2VsaW5l
Q29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOwogfQogCi1ib29sIEdyYXBoOjppc0xpdmVJ
bkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
Citib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNoZWNraW5nIG9m
IG9wZXJhbmQgaXMgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgYm9vbCBpc0NhbGxlck9y
aWdpbiA9IGZhbHNlOworCiAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0ciA9ICZjb2RlT3Jp
Z2luOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IFZpcnR1
YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBjb2RlT3JpZ2luUHRy
LT5zdGFja09mZnNldCgpKTsKKyAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
UHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNh
bGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCisgICAgLy8gdGhlIHJl
dHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KKyAgICBmb3IgKDsgY29kZU9y
aWdpblB0cjsgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZSA/ICZpbmxpbmVDYWxsRnJh
bWUtPmRpcmVjdENhbGxlciA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
VG1wKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcE9mZnNldCA9IGlubGluZUNhbGxGcmFt
ZSA/IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG9wZXJhbmRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpOwor
CisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC52YWx1ZSgpID49IDApOworICAgICAgICAgICAg
Ly8gVGhpcyB0bXAgc2hvdWxkIGhhdmUgYmVsb25nZWQgdG8gc29tZW9uZSB3ZSBpbmxpbmVkLgor
ICAgICAgICAgICAgaWYgKG9wZXJhbmRJbmRleCA+IHRtcE9mZnNldCArIG1heE51bUNoZWNrcG9p
bnRUbXBzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBvcGVyYW5kSW5kZXgg
PCB0bXBPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1
dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmln
aW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gYml0TWFwLmdldChv
cGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBjb2RlT3JpZ2luUHRyLT5z
dGFja09mZnNldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJyZWcgPSAiLCByZWcsICJcbiIpOwogCi0gICAgICAgIGF1dG8qIGlubGluZUNh
bGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBpZiAo
b3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkgKyBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgeworICAgICAgICBpZiAob3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkgKyBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgewogICAgICAgICAgICAgaWYgKHJlZy5pc0Fy
Z3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWcub2Zmc2V0KCkg
PCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAKIAogICAgICAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKLSAgICAgICAgICAgICAgICAgICAg
JiYgcmVnLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgeworICAgICAgICAgICAg
ICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9v
a3MgbGlrZSBhIGNhbGxlZS5cbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgcmVn
Lm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJMb29rcyBsaWtlIHRoZSBhcmd1bWVudCBjb3VudC5cbiIpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNzYsNDIgKzExOTcsNDEgQEAgYm9vbCBHcmFwaDo6aXNM
aXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7
Ci0gICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNl
dCgpLCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgq
Y29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNz
LnZpcnR1YWxSZWdpc3RlcklzTGl2ZShyZWcsIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2
ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3
b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQgd2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2Fs
bF92YXJhcmdzIGlubGluaW5nLgotICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmIHJlZy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYm
IHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5k
bGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAg
ICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAg
ICAgICBjb2RlT3JpZ2luUHRyID0gJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAg
ICAgICBpc0NhbGxlck9yaWdpbiA9IHRydWU7CiAgICAgfQorCisgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7CisgICAgcmV0
dXJuIHRydWU7ICAgIAogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQorQml0VmVjdG9yIEdyYXBoOjpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0
LmVuc3VyZVNpemUoYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsK
LSAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMg
PSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0
LmVuc3VyZVNpemUobnVtTG9jYWxzICsgYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZlRtcHMoKSk7CisgICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAg
ICBjb2RlT3JpZ2luLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1Nl
dChyZWcudG9Mb2NhbCgpKTsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9w
ZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAgICAgICAgcmVzdWx0LnF1
aWNrU2V0KG9mZnNldCk7CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0x
NjM1LDggKzE2NTUsOCBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2Rl
KiBub2RlID0gb3BlcmFuZE5vZGU7IG5vZGU7KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nl
c1N0YWNrKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+
bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBu
b2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NB
ICYmIG5vZGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQg
YXJndW1lbnQgPSBub2RlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAg
IE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fcm9vdFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52
YWx1ZVthcmd1bWVudF07CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRj
aCBTZXRBcmd1bWVudERlZmluaXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2Vs
bDoKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1ODQxCkBAIC0xNjU2LDcgKzE2NzYsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJl
bgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCksIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAppbmRleCBmYWI5Y2YwMmEyNTk3NmVmNDdkMTc5MDViYWQ5Y2UwM2UzODJiY2U1
Li5mN2ExZDgyMTRjMzAyZDdkOTZhYzJhNzdhMDE4NjZhOWQxMTlmNTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAg
Ly8gUXVpY2tseSBxdWVyeSBpZiBhIHNpbmdsZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBw
b2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5IHF1ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2Fu
dCB0byBrbm93IGFsbCBvZiB0aGUKICAgICAvLyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRo
aXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVjaCBzbG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29k
ZSgpLgotICAgIGJvb2wgaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmln
aW4pOworICAgIGJvb2wgaXNMaXZlSW5CeXRlY29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAg
ICAKLSAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2
ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNr
bHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRo
ZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50
cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwgcHJlc3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFs
bExpdmVJbkJ5dGVjb2RlKCkgdG8KICAgICAvLyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlz
IGlzIG11Y2ggZmFzdGVyIHRoYW4gY2FsbGluZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2gg
bG9jYWwuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExv
Y2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB2b2lkIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAg
ICAvLyBTdXBwb3J0IGZvciBub3QgcmVkdW5kYW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVj
ZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBvZiBhIHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25s
eSB0aGUgY2FsbGVlIGtub3dzIHRoYXQgYXJndW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBj
YXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAgLTg4MSw2ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1UbXBzKCkpOworICAgICAgICAgICAgICAg
IGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29k
ZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5m
b3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgICAgICBmdW5j
dG9yKHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1w
KSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTkwNCw5ICs5MTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
Ly8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZl
IHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCisgICAgLy8gR2V0IGEgQml0VmVj
dG9yIG9mIGFsbCBvZiB0aGUgbG9jYWxzIGFuZCB0bXBzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlz
IG1vc3RseSB1c2VmdWwgaWYKICAgICAvLyB5b3Ugd2FudCB0byBjb21wYXJlIHR3byBzZXRzIG9m
IGxpdmUgbG9jYWxzIGZyb20gdHdvIGRpZmZlcmVudCBDb2RlT3JpZ2lucy4KLSAgICBCaXRWZWN0
b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CisgICAgQml0VmVjdG9yIGxvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsKIAogICAgIExpdmVuZXNzQ2FsY3Vs
YXRpb25Qb2ludCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludChDb2RlT3JpZ2lu
IG9yaWdpbiwgYm9vbCBpc0NhbGxlck9yaWdpbikKICAgICB7CkBAIC05MzgsMTIgKzk0NiwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9y
ZVVzZTsKICAgICB9CiAgICAgCi0gICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgYXJndW1lbnRz
IGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxs
Ci0gICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNl
IGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgorICAgIC8vIFRlbGxzIHlv
dSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMg
aXMgYSBzbWFsbAorICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNPclRtcHNMaXZlSW5C
eXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKLSAgICAgICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rv
cik7CisgICAgICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2lu
LCBmdW5jdG9yKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFz
IGJlaW5nIGxpdmUuCiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KQpAQCAtMTEx
NCw2ICsxMTIyLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+
IG1fYmFja3dhcmRzQ0ZHOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3Jz
PiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVp
dmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOworICAgIHVuc2ln
bmVkIG1fdG1wczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25l
eHRNYWNoaW5lTG9jYWw7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAK
aW5kZXggOTlhZWZmY2RjMDVhMTFjNDViMDU3NDEyNTBmNGQyYWViNGUyMjhjZC4uMjAyZDIyNTA1
M2ZhOWRmYmU1YzIzYzY0YmNmOGJlMzg0ZTNlNzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTQ1LDggKzQ1
LDggQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dy
YXBoKGdyYXBoKQogICAgICwgbV9hYnN0cmFjdFZhbHVlcygqZ3JhcGgubV9hYnN0cmFjdFZhbHVl
c0NhY2hlKQotICAgICwgbV92YXJpYWJsZXMobV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBncmFwaC5tX2xvY2FsVmFycykKLSAgICAsIG1fYmxvY2soMCkKKyAgICAsIG1fdmFy
aWFibGVzKE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAg
ICAsIG1fYmxvY2sobnVsbHB0cikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCmluZGV4IGJmNWVhZDE4ZWMxNjQ3ZWUx
Njc2Njg4MzU3NDAxZmE3ZmVjNzEyOTkuLjE4NjVlNmExZWZmYzNkYWFlZmU1ODRjYTg2MmM0OWJj
MzY4NTg1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgKQEAgLTE2NywxMyArMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFibGVzW2luZGV4XSk7CiAgICAgfQogCi0gICAgQWJz
dHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVy
YW5kKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1f
dmFyaWFibGVzLm9wZXJhbmRJbmRleChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIEFic3Ry
YWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIHRoaXMt
Pm9wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSk7IH0KLSAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBs
b2NhbChzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3Zh
cmlhYmxlcy5sb2NhbEluZGV4KGluZGV4KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDNkODQzY2U1OGYyMGI0MTE2MzM5ZmNkYTk1ODhhZWJh
NmI3YThjMmUuLjUzZGI5Y2QxNGNhYzZiNmU2NjgyZWZkZjRiYTc5NDg5N2NhNWQ1YTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC04NSw4ICs4
NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0
VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKLSAgICBhdXRv
IG9zckV4aXRUaHVua0xhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9z
ckV4aXRUaHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENv
ZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5m
byYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZh
aWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJlSnVtcHM7CkBAIC05NywxMyArOTUsNyBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlk
Q2FsbEZyYW1lKCk7CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS5vc3JF
eGl0SW5kZXgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKLSAg
ICAgICAgICAgIEp1bXAgdGFyZ2V0ID0ganVtcCgpOwotICAgICAgICAgICAgYWRkTGlua1Rhc2so
W3RhcmdldCwgb3NyRXhpdFRodW5rTGFiZWxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHRhcmdldCwgb3NyRXhpdFRodW5rTGFiZWwp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5tX3Bh
dGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CisgICAgICAgIGluZm8ubV9wYXRjaGFibGVK
dW1wID0gcGF0Y2hhYmxlSnVtcCgpOwogICAgIH0KIH0KIApAQCAtNTk1LDExICs1ODcsMTIgQEAg
dm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywg
SklUQ29tcGlsZXI6OkxhYmVsIGJsb2MKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKworICAg
ICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+b3BlcmFuZCgpLmlzVG1wKCkpOworICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkgIT0gdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdz
LmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgT1NSRW50cnlSZXNodWZmbGluZygKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpLCB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNo
aW5lTG9jYWwoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IDY4Y2E5OGRm
NmY1YzRiN2I2MzcyY2MxNTgxOGVjMjU3MjgyZjg5ZDkuLjUwZjFkODkzZGEzMDIxMDJiOTVlNzhh
YzYwNDM5ZDg2MjM2ZjNjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgKQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGVtaXRTdG9y
ZUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSkKICAgICB7Ci0gICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVBy
ZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA0MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5M2UwOGFj
MjVjYTYzMTM0Li40NWVjYjQ2YWEyNDQzYmExYjk1NTcxNmJjMWY0MmE3MDhhMWEwNDg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJl
c2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGlzVmFsaWRGbHVz
aExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBib29sIGlzVmFsaWRGbHVzaExvY2F0aW9uKEJhc2lj
QmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAg
ICAgewogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IG1lYW50IHRvIGJlIGZhc3QuIFdlIGp1
c3QgdXNlIGl0IGZvciBhc3NlcnRpb25zLiBJZiB3ZSBnb3QgbGl2ZW5lc3Mgd3JvbmcsCiAgICAg
ICAgIC8vIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIGZhbHNlIGZvciBhIEZsdXNoIHRoYXQg
d2UgaW5zZXJ0LgpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gZmx1c2hJ
c0RlZmluaXRlbHlJbnZhbGlkID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5k
ZXgpIHsKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gaW5kZXg7IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2Nr
LT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPmxvY2FsKCkg
PT0gb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2Vz
U3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5vcGVyYW5kKCkgPT0gb3BlcmFuZCkgewog
ICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE1LDggKzExNSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2goQmFzaWNCbG9jayogYmxvY2ssIEluc2VydGlv
blNldCYgaW5zZXJ0aW9uU2V0KQogICAgIHsKICAgICAgICAgSGFuZGxlckluZm8qIGN1cnJlbnRF
eGNlcHRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQXRD
YXRjaEhlYWQ7Ci0gICAgICAgIGxpdmVBdENhdGNoSGVhZC5yZXNpemUobV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBPcGVyYW5kczxi
b29sPiBsaXZlQXRDYXRjaEhlYWQoMCwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1i
ZXJPZlRtcHMoKSk7CiAKICAgICAgICAgSGFuZGxlckluZm8qIGNhY2hlZEhhbmRsZXJSZXN1bHQ7
CiAgICAgICAgIENvZGVPcmlnaW4gY2FjaGVkQ29kZU9yaWdpbjsKQEAgLTEzMywxMSArMTMyLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZy
YW1lKTsKICAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxv
Y2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgewotICAg
ICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmZpbGwoZmFsc2UpOwogCiAgICAgICAgICAgICAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChoYW5k
bGVyLT50YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0xp
dmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJh
bWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29k
ZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAoT3BlcmFu
ZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQub3Bl
cmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlZEhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyOwpAQCAtMTU2LDEyICsx
NTUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhhbmRsZXJSZXN1bHQ7
CiAgICAgICAgIH07CiAKLSAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3Vy
cmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1l
bnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbnVsbHB0cik7
CisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0FjY2Vz
c0RhdGEoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLCBudWxscHRyKTsKIAog
ICAgICAgICBhdXRvIGZsdXNoRXZlcnl0aGluZyA9IFsmXSAoTm9kZU9yaWdpbiBvcmlnaW4sIHVu
c2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50RXhjZXB0
aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYg
bGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhl
YWQub3BlcmFuZChvcGVyYW5kKSkgewogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1Zh
bGlkRmx1c2hMb2NhdGlvbihibG9jaywgaW5kZXgsIG9wZXJhbmQpKTsKIApAQCAtMTc4LDYgKzE3
Nyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IDA7IGxv
Y2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyBsb2NhbCsrKQog
ICAgICAgICAgICAgICAgIGZsdXNoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcCA9IDA7IHRtcCA8IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZUbXBzKCk7ICsrdG1wKQorICAgICAgICAgICAgICAgIGZsdXNoKE9wZXJh
bmQoVG1wT3BlcmFuZCwgdG1wKSk7CiAgICAgICAgICAgICBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkpOwogICAgICAgICB9OwogCkBAIC0xOTIs
OSArMTkzLDggQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY3Vy
cmVudEV4Y2VwdGlvbkhhbmRsZXIgJiYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+
b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dE1heWJlKSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9k
ZS0+bG9jYWwoKTsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxp
dmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgp
KSB7Ci0KKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7
CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNo
SGVhZC5vcGVyYW5kKG9wZXJhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1Zh
bGlkRmx1c2hMb2NhdGlvbihibG9jaywgbm9kZUluZGV4LCBvcGVyYW5kKSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjdXJy
ZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7CkBAIC0yMDcsNyArMjA3LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNT
dGFjayhtX2dyYXBoKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyKSB7CkBAIC0yMTYsOSArMjE2LDkgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlz
VG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKG9wZXJhbmQp
OwogICAgICAgICByZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFz
ZS5jcHAKaW5kZXggNzNhM2Q3NWI3NjBiNTJiOTY3NjM3MTMzZDZhMGZlZmIwMGViZWQ4Ny4uZmZm
OTZiZmNmNjI5ZWI0ZDA1MmU3YjE0MjdiMmI2N2IwNTRjMWEwMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCkBAIC04NSw3
ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3RhdGUuZmlsbChFcG9jaCgpKTsKICAgICAg
ICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgIGJsb2NrLT50ZXJt
aW5hbCgpLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgICAg
IG1fc3RhdGUub3BlcmFuZChyZWcpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBNb3ZIaW50KSB7Ci0gICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9j
aCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAg
ICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVy
YW5kKCkpOwogICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCAiLCBub2Rl
LCAiOiBjdXJyZW50ID0gIiwgY3VycmVudEVwb2NoLCAiLCBsb2NhbCA9ICIsIGxvY2FsRXBvY2gs
ICJcbiIpOwogICAgICAgICAgICAgICAgIGlmICghbG9jYWxFcG9jaCB8fCBsb2NhbEVwb2NoID09
IGN1cnJlbnRFcG9jaCkgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3N0
YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IEVwb2NoKCk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IEVwb2NoKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtYXlFeGl0KG1f
Z3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGlmIChub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBmb3JBbGxL
aWxsZWRPcGVyYW5kcygKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgYmxvY2stPmF0KG5v
ZGVJbmRleCAtIDEpLCBub2RlLAotICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYSBiaXQgc2xvcHB5
IC0gaXQgbWlnaHQgY2xhaW0gdG8ga2lsbCBhIGxvY2FsIGV2ZW4gaWYKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGl0J3Mgc3RpbGwgbGl2ZSBhZnRlci4gV2UgbmVlZCB0byBwcm90ZWN0IGFn
YWluc3QgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFu
ZChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKG9w
ZXJhbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1v
dmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgcmVnLCAiXG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChyZWcpID0gY3VycmVudEVw
b2NoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3Bl
cmFuZCBhdCAiLCBub2RlLCAiOiAiLCBvcGVyYW5kLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKaW5kZXggMzkxNTkzNzIyOWYyOGE3YWEyZTY1NWY1MjUxZjk2ZjQwNGUz
M2I0Ni4uYjgwMTU1ZTkzNTYyOWRmMmNkZTM5YWI2NDYzNDQwMDQ3MGM3OGM4ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTI1MCwxMyArMjUwLDEzIEBAIHN0cnVjdCBTdGFj
a0FjY2Vzc0RhdGEgewogICAgIHsKICAgICB9CiAgICAgCi0gICAgU3RhY2tBY2Nlc3NEYXRhKFZp
cnR1YWxSZWdpc3RlciBsb2NhbCwgRmx1c2hGb3JtYXQgZm9ybWF0KQotICAgICAgICA6IGxvY2Fs
KGxvY2FsKQorICAgIFN0YWNrQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQsIEZsdXNoRm9ybWF0
IGZvcm1hdCkKKyAgICAgICAgOiBvcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICwgZm9ybWF0KGZv
cm1hdCkKICAgICB7CiAgICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbDsKKyAg
ICBPcGVyYW5kIG9wZXJhbmQ7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbDsKICAg
ICBGbHVzaEZvcm1hdCBmb3JtYXQ7CiAgICAgCkBAIC05MDIsNiArOTAyLDcgQEAgcHVibGljOgog
ICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CisgICAgICAgIGNh
c2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTkyMyw5ICs5
MjQsMTEgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZC
b3VuZHM6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBj
aGlsZDEoKTsKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczoKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVy
biBjaGlsZDIoKTsKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxs
Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKQEAgLTk3Myw5
ICs5NzYsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxWYXJpYWJsZUFj
Y2Vzc0RhdGEqPigpLT5maW5kKCk7CiAgICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCgpCisgICAgT3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5vcGVyYW5kKCk7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNo
aW5lTG9jYWwoKQpAQCAtOTgzLDcgKzk4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwoKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBoYXNVbmxpbmtlZExvY2FsKCkKKyAgICBib29sIGhhc1VubGlua2VkT3BlcmFuZCgpCiAgICAg
ewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlM
b2NhbDoKQEAgLTk5NiwxMCArOTk5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5saW5rZWRMb2NhbCgpCisgICAgT3BlcmFuZCB1bmxp
bmtlZE9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1VubGlua2VkTG9jYWwoKSk7
Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vcEluZm8uYXM8aW50MzJfdD4oKSk7
CisgICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZE9wZXJhbmQoKSk7CisgICAgICAgIHJldHVybiBP
cGVyYW5kOjpmcm9tQml0cyhtX29wSW5mby5hczx1aW50NjRfdD4oKSk7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgaGFzU3RhY2tBY2Nlc3NEYXRhKCkKQEAgLTEzNTAsNyArMTM1Myw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBib29sIGhhc0xvYWRWYXJhcmdzRGF0YSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09IEZvcndhcmRWYXJhcmdzOworICAg
ICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09IEZvcndhcmRWYXJhcmdz
IHx8IG9wKCkgPT0gVmFyYXJnc0xlbmd0aDsKICAgICB9CiAgICAgCiAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBsb2FkVmFyYXJnc0RhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCmluZGV4IDI0YzczM2QzODcwMjc5ZjRhNTZiNGU2ODhiZjBiZjA2YWMyNGMxZDQuLmUzZTlj
MzJmOGQwODEzYTZhZGEyMmFhY2NkMzc0NDJkNGViZDlkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTc0LDYgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBcCisgICAgLyogVGhl
c2UgYXJlIHVzZWQgaW4gU1NBIGZvcm0gdG8gcmVwcmVzZW50IHRvIHRyYWNrICovXAogICAgIG1h
Y3JvKFB1dFN0YWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oS2lsbFN0YWNrLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0U3RhY2ssIE5vZGVSZXN1bHRKUykgXApA
QCAtMjAyLDYgKzIwMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBt
YWNybyhHZXRCeVZhbFdpdGhUaGlzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHMsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhWYXJhcmdzTGVuZ3RoLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oTG9hZFZhcmFy
Z3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGb3J3YXJkVmFyYXJncywgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dEJ5VmFsRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUhhc1ZhckFyZ3MpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCmluZGV4IDMyODBm
ODdhNjI2N2RmMDM0Yzg0ZTMzMTg1MzBjNzQxOWU1NWU5N2UuLjQyNDdkZWFlYzdjYmJjZTYwODNh
YTg3MzJiOWMyNzdmNWVmZDI4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcApAQCAtMzUs
MTEgKzM1LDkgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKLW5hbWVzcGFjZSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
SW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KIAog
Y2xhc3MgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShn
cmFwaCwgIk9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMiKQpAQCAtNzUsOCArNzMsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlOiAiKTsKICAgICAgICAgICAgIG1fZ3JhcGgu
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICAgICAgYmxvY2stPmF0KDApLT5vcmln
aW4uZm9yRXhpdCwKLSAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsK
LSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhyZWcsICIgIik7CisgICAgICAgICAgICAgICAg
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhvcGVy
YW5kLCAiICIpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgZGF0YUxvZ0xuKCIi
KTsKICAgICAgICAgfTsKQEAgLTkxLDcgKzg5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkJlZm9yZSBjaGFuZ2luZyBCbG9jayAjIiwgYmxv
Y2stPmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTA2LDcgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwgPSBjYWxjdWxhdG9yLm1fYXZh
aWxhYmlsaXR5OwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogCi0gICAgICAgICAg
ICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiQWZ0ZXIgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAgICAg
ICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAgICAg
IH0KQEAgLTEyMCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwogICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLnBydW5l
QnlMaXZlbmVzcygKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHN1Y2Nlc3Nvci0+
YXQoMCktPm9yaWdpbi5mb3JFeGl0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJBZnRlciBwcnVuaW5nIEJsb2NrICMiLCBzdWNjZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoc3VjY2Vzc29yKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGR1bXBCeXRlY29kZUxpdmVuZXNzQXRIZWFkKHN1Y2Nlc3Nvcik7CkBAIC0yMDgs
MjggKzIwNiwyOCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0
ZU5vZGUoTm9kZSogbm9kZSkKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFB1
dFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEt
PmxvY2FsKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7CisgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hl
ZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgS2lsbFN0
YWNrOiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKS5zZXRGbHVzaChGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkpOworICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKS5zZXRGbHVzaChGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRh
LT5mbHVzaGVkQXQoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
ZGF0YS0+b3BlcmFuZCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5v
ZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZShub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFpvbWJpZUhpbnQ6
IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlVW5hdmFpbGFi
bGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNDIsMTUgKzI0MCwxOCBAQCB2b2lk
IExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPQotICAgICAgICAgICAgQXZhaWxhYmls
aXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9IEF2YWlsYWJp
bGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIHsKLSAgICAgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0
Lm9mZnNldCgpICsgaSkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNl
dCgpICsgaSkpKTsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
ZGF0YS0+c3RhcnQgKyBpKSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRB
dChGbHVzaGVkSlNWYWx1ZSwgZGF0YS0+bWFjaGluZVN0YXJ0ICsgaSkpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI3MiwyMCArMjczLDIwIEBAIHZvaWQgTG9jYWxPU1JB
dmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgLy8gUmVjb3Jk
IGhvdyB0byByZWFkIGVhY2ggYXJndW1lbnQgYW5kIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudENvdW50ID0KLSAgICAgICAgICAgICAgICBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExv
Y2F0aW9uKEFyZ3VtZW50Q291bnRQTG9jLCBub2RlKSwgYXJndW1lbnRDb3VudCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
IHsKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBjYWxsZWUgPSBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSk7CiAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExv
Y2F0aW9uKEFyZ3VtZW50c0NhbGxlZVBMb2MsIG5vZGUpLCBjYWxsZWUpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyAr
K2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDEpOyArK2kpIHsKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1
bWVudCA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
aSkpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0
aW9uKEFyZ3VtZW50UExvYywgbm9kZSwgaSksIGFyZ3VtZW50KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA0NDk3MzA4MzljOTQ0NTA3
MjU3MWE1YjBjN2M5NGI4NDNlODkwZGM3Li5lZTVmN2YzZDY4ZTJlYTBlYjFkZGVmMTM5ZmY5Mzli
NmFkODlkOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApA
QCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvCiAgICAgCiAgICAgLy8g
NykgRml4IHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgdGhlIHJpZ2h0IGNvZGUgYmxvY2suCiAgICAg
Ci0gICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAxIC0gQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSA9IGNvZGVCbG9jazsKKyAgICAqYml0d2lzZV9jYXN0PENvZGVCbG9jayoq
PihwaXZvdCAtIChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKyAxKSkgPSBjb2RlQmxvY2s7CiAg
ICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgZGF0YUxvZ0YoIiAg
ICBPU1IgcmV0dXJuaW5nIGRhdGEgYnVmZmVyICVwLlxuIiwgc2NyYXRjaCk7CkBAIC0zODIsMTAg
KzM4MiwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4g
cHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgYXV0byBpbnN0cnVjdGlv
biA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsRnJhbWUtPmJ5dGVj
b2RlSW5kZXgoKSk7CiAgICAgQVNTRVJUKGluc3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAg
ICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKS5tZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CisgICAgVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+
YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9idWZmZXI7CiAgICAg
SlNWYWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1v
bi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IDA7Ci0gICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYg
cHJvZmlsZSkgeworICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcihwcm9m
aWxlLm1fb3BlcmFuZCkuaXNMb2NhbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBk
YXRhQnVmZmVyW2luZGV4XSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFu
ZCkuanNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCBkYzc2YmNiYWVkNDFlZWUw
NjNkZmRiZWE4NDUwNjY1NTNkMGNiNGQ2Li42MDk2ODY2M2I2NGMyYjY4NTRlNDYxNjFmOTQ5OTQ2
NTdlMWFlZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTAyLDEwICsxMDIsMTAgQEAg
cHVibGljOgogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZp
b3VzSGVhZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBsb2NhbHNbbG9jYWxd
ID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJs
ZS0+cHJlZGljdGlvbigpLCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgb3JpZ2luLAotICAgICAgICAg
ICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAg
ICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5s
b2NhbCgpLm9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92
SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIo
KSksCiAgICAgICAgICAgICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggMThjNjQxNDc5MzQy
NDY5YjQxY2E4Zjk4ZjMwOGIzYTRjOTMzYmE5OC4uMDVkZTk1OGNhZWVmMWI4ZjA5ZTMyZDA5N2E4
ZmUzMmQ2Nzc0MjAxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNs
dWRlICJCeXRlY29kZVVzZURlZi5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCkBAIC00Nyw4OTUgKzQ4LDYgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBQcm9iZSBiYXNlZCBPU1IgRXhpdC4KLQot
dXNpbmcgQ1BVU3RhdGUgPSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0ID0gUHJvYmU6
OkNvbnRleHQ7Ci11c2luZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGljIHZvaWQgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1w
VG9UYXJnZXQoUHJvYmU6OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250
ZXh0JiwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0KLXN0YXRpYyBK
U1ZhbHVlIGpzVmFsdWVGb3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBzb3VyY2UpCi17
Ci0gICAgaWYgKHNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsK
LSAgICAgICAgc3RkOjptZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4oc291cmNlLmJh
c2UoKSkgKyBzb3VyY2Uub2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZShjcHUuZ3ByPEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsKLSNlbHNlCi0g
ICAgaWYgKHNvdXJjZS5oYXNLbm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShzb3Vy
Y2UudGFnKCksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwgY3B1Lmdwcjxp
bnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBl
cnM6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBj
YWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lz
dGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJl
Z2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVUNQVVJlZ2lzdGVyKiBw
aHlzaWNhbFN0YWNrRnJhbWUgPSBjb250ZXh0LmZwPFVDUFVSZWdpc3Rlcio+KCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9u
dFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAvLyBUaGUgY2FsbGVlIHNhdmVkIHZhbHVlcyBjb21lIGZyb20gdGhlIG9yaWdp
bmFsIHN0YWNrLCBub3QgdGhlIHJlY292ZXJlZCBzdGFjay4KLSAgICAgICAgLy8gSGVuY2UsIHdl
IHJlYWQgdGhlIHZhbHVlcyBkaXJlY3RseSBmcm9tIHRoZSBwaHlzaWNhbCBzdGFjayBtZW1vcnkg
aW5zdGVhZCBvZgotICAgICAgICAvLyBnb2luZyB0aHJvdWdoIGNvbnRleHQuc3RhY2soKS4KLSAg
ICAgICAgQVNTRVJUKCEoZW50cnkub2Zmc2V0KCkgJSBzaXplb2YoVUNQVVJlZ2lzdGVyKSkpOwot
ICAgICAgICBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBwaHlzaWNhbFN0YWNrRnJh
bWVbZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKV07Ci0gICAgfQotfQotCi0v
LyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0
YXRpYyB2b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaykKLXsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLSAgICBB
U1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxs
ZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVy
U2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVn
aXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVy
Q291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5
ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0
KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGFjay5zZXQo
Y29udGV4dC5mcCgpLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihl
bnRyeS5yZWcoKS5ncHIoKSkpOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxw
ZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFy
ZzxWTSo+KCk7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
LSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRy
eUZyYW1lKTsKLSAgICBVQ1BVUmVnaXN0ZXIqIGNhbGxlZVNhdmVCdWZmZXIgPSByZWludGVycHJl
dF9jYXN0PFVDUFVSZWdpc3Rlcio+KGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVm
ZmVyKTsKLQotICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVz
dG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHNpemVfdCB1aW50cHRyT2Zmc2V0ID0gZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQ
VVJlZ2lzdGVyKTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAg
ICBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBjYWxsZWVTYXZlQnVmZmVyW3VpbnRw
dHJPZmZzZXRdOwotICAgICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgY29udGV4dC5mcHIoZW50cnkucmVnKCkuZnByKCkpID0gYml0d2lzZV9jYXN0PGRvdWJsZT4o
Y2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8g
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVk
IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0g
ICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsK
LSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1dG8mIHN0YWNrID0gY29u
dGV4dC5zdGFjaygpOwotCi0gICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5
UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVCdWZmZXIgPSBl
bnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lz
dGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBh
bGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
Z2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxs
Q2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVu
dHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnkucmVn
KCkuaXNHUFIoKSkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRy
eS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkp
OwotICAgICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RhY2su
c2V0KGNhbGxlZVNhdmVCdWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjxVQ1BVUmVn
aXN0ZXI+KGVudHJ5LnJlZygpLmZwcigpKSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2FsbGVlLXNhdmVkIGZsb2F0
aW5nIHBvaW50IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQot
fQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JDb3B5Q2FsbGVlU2F2
ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBj
b250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyIG9mZnNldFZpcnR1
YWxSZWdpc3RlciwgYm9vbCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAgICBGcmFtZSBmcmFt
ZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7
Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lz
dGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3Rl
clNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2
ZXMtPnNpemUoKTsKLQotICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBSZWdp
c3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRT
YXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICB1aW50cHRyX3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlmICh3YXND
YWxsZWRWaWFUYWlsQ2FsbCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5yZWcoKSkp
Ci0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0cl90Pihl
bnRyeS5vZmZzZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJW
YWx1ZSA9IGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBmcmFtZS5z
ZXQob2Zmc2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9mZnNldCgp
LCBzYXZlZFJlZ2lzdGVyVmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1CRVJfT0Zf
Q0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNh
dmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVDYWxsZWVT
YXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQot
c3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29u
dGV4dCYsIENvZGVCbG9jayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNlbmRpZiAv
LyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpTQ2VsbCog
Y3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rp
b24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250
ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0g
ICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc3Rk
OjptYXgobGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgLSAxKSk7Ci0gICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVu
dHM6OmNyZWF0ZSgKLSAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVj
dEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJlc3VsdC0+
c2V0Q2FsbGVlKHZtLCBjYWxsZWUpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4dC5m
cDxSZWdpc3Rlcio+KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCA6IDApOwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFjaygp
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3VsdC0+
c2V0SW5kZXhRdWlja2x5KHZtLCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdGF0aWMgSlNDZWxsKiBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdF
eGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50
Q291bnQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VS
VCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAg
ICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUpOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3Vu
dCAtIDE7Ci0gICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6OmNy
ZWF0ZUVtcHR5KAotICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1
Y3R1cmUoKSwgY2FsbGVlLCBsZW5ndGgpOwotCi0gICAgdm9pZCogZnJhbWVCYXNlID0gY29udGV4
dC5mcDxSZWdpc3Rlcio+KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCA6IDApOwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwgY29udGV4dC5zdGFj
aygpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMo
Q29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERGRzo6SklUQ29kZSogZGZn
SklUQ29kZSwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQotewotICAg
IEZyYW1lIGZyYW1lKGNvbnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIEhhc2hN
YXA8TWluaWZpZWRJRCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBo
YW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQg
b3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRl
ZAotICAgICAgICAgICAgJiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgTWlu
aWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwotICAgICAgICBhdXRvIGl0ZXIgPSBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOwotICAgICAgICBpZiAoaXRlciAhPSBhbHJl
YWR5QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGZyYW1lLm9wZXJhbmQoaXRlci0+dmFsdWUpKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPQotICAgICAgICAgICAgZGZnSklUQ29kZS0+bWluaWZpZWRERkcuYXQoaWQpLT5pbmxp
bmVDYWxsRnJhbWUoKTsKLQotICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7Ci0gICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0g
MDsKLQotICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7Ci0gICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGNh
bGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnJhbWUub3BlcmFuZChzdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVj
b3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7Ci0KLSAgICAgICAgaW50MzJfdCBhcmd1bWVudENv
dW50OwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGZyYW1lLm9wZXJhbmQ8aW50
MzJfdD4oc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2Fk
T2Zmc2V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0KLSAgICAgICAgSlNDZWxs
KiBhcmd1bWVudHNPYmplY3Q7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKLSAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0
KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291
bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhh
dFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlQ2xv
bmVkQXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFt
ZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgSlNWYWx1ZShhcmd1bWVudHNPYmplY3QpKTsKLQotICAgICAgICBhbHJlYWR5QWxsb2NhdGVk
QXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgZm9sbG93aW5n
IGlzIGEgbGlzdCBvZiBleHRyYSBpbml0aWFsaXphdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUg
aW4gb3JkZXIKLS8vIG9mIG1vc3QgbGlrZWx5IG5lZWRlZCAobG93ZXIgZW51bSB2YWx1ZSkgdG8g
bGVhc3QgbGlrZWx5IG5lZWRlZCAoaGlnaGVyIGVudW0gdmFsdWUpLgotLy8gRWFjaCBsZXZlbCBp
bml0aWFsaXphdGlvbiBpbmNsdWRlcyB0aGUgcHJldmlvdXMgbG93ZXIgZW51bSB2YWx1ZSAoc2Vl
IHVzZSBvZiB0aGUKLS8vIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2YWx1ZSBiZWxvdykuCi1l
bnVtIGNsYXNzIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB7Ci0gICAgTm9uZSwKLSAgICBTcGVj
dWxhdGlvblJlY292ZXJ5LAotICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwKLSAgICBBcnJheVByb2Zp
bGVVcGRhdGUsCi0gICAgT3RoZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQo
Q29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIEFTU0VSVCgmY2Fs
bEZyYW1lLT5kZXByZWNhdGVkVk0oKSA9PSAmdm0pOwotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQu
Y3B1OwotCi0gICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFi
b3V0IHRvIGV4aXQgb3B0aW1pemVkIGNvZGUuIFNvLCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0
aW1pemVkCi0gICAgICAgIC8vIGNvZGUgcnVubmluZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAg
ICAgIHZtLmhlYXAuc2V0RXhwZWN0RG9lc0dDKHRydWUpOwotICAgIH0KLQotICAgIGlmICh2bS5j
YWxsRnJhbWVGb3JDYXRjaCkgewotICAgICAgICBjYWxsRnJhbWUgPSB2bS5jYWxsRnJhbWVGb3JD
YXRjaDsKLSAgICAgICAgY29udGV4dC5mcCgpID0gY2FsbEZyYW1lOwotICAgIH0KLQotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQo
Y29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
REZHSklUKTsKLQotICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3Qg
R0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFs
bHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
Ci0KLSAgICB1aW50MzJfdCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7Ci0gICAgREZHOjpK
SVRDb2RlKiBkZmdKSVRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIE9T
UkV4aXQmIGV4aXQgPSBkZmdKSVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0KLSAgICBBU1NF
UlQoIXZtLmNhbGxGcmFtZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQp
OwotICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigp
IHx8ICFleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKTsKLQotICAgIGlmIChVTkxJS0VMWSghZXhp
dC5leGl0U3RhdGUpKSB7Ci0gICAgICAgIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmU7Ci0KLSAg
ICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9jayBvbmNlIGZvciBlYWNo
IE9TUkV4aXQgcmVjb3JkLiBUaGUgY29tcHV0ZWQKLSAgICAgICAgLy8gcmVzdWx0cyB3aWxsIGJl
IGNhY2hlZCBpbiB0aGUgT1NSRXhpdFN0YXRlIHJlY29yZCBmb3IgdXNlIG9mIHRoZSByZXN0IG9m
IHRoZQotICAgICAgICAvLyBleGl0IHJhbXAgY29kZS4KLQotICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAg
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0
VHlwZSgpKSk7Ci0KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBudWxs
cHRyOwotICAgICAgICBpZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpIHsKLSAg
ICAgICAgICAgIHJlY292ZXJ5ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhp
dC5tX3JlY292ZXJ5SW5kZXhdOwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
ID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9u
TGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVO
TElLRUxZKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpKQotICAgICAgICAgICAgZXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291
cmNlKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAg
ICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKTsK
LSAgICAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9
PSBCYWRJbmRleGluZ1R5cGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgICAgICAgICBhcnJheVByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+Z2V0QXJyYXlQcm9m
aWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJy
YXlQcm9maWxlKQotICAgICAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGludDMyX3QgYWN0aXZlVGhyZXNob2xkID0gYmFzZWxpbmVDb2RlQmxvY2stPmFkanVz
dGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkpOwotICAgICAgICBkb3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVz
YWdlSGV1cmlzdGljc0FuZENvbnZlcnRUb0ludChhY3RpdmVUaHJlc2hvbGQsIGJhc2VsaW5lQ29k
ZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGFkanVzdGVkVGhyZXNob2xkID4gMCk7Ci0gICAgICAg
IGFkanVzdGVkVGhyZXNob2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhy
ZXNob2xkKGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKLQot
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNv
ZGVCbG9jayk7Ci0gICAgICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4
aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms7Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgICAgIGlmIChl
eGl0VG9MTEludCkgewotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9
IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQ
dHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tG
b3JFeGl0LT5qaXRDb2RlTWFwKCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwotICAg
ICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAg
ICAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIFZlY3RvcjxV
bmRlZmluZWRPcGVyYW5kU3Bhbj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICBkZmdK
SVRDb2RlLT52YXJpYWJsZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5t
X2NvZGVPcmlnaW4sIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgs
IG9wZXJhbmRzLCAmdW5kZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90IHN0
YWNrUG9pbnRlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXpl
b2YoUmVnaXN0ZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9T
UkV4aXRTdGF0ZShleGl0LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywg
V1RGTW92ZSh1bmRlZmluZWRPcGVyYW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zm
c2V0LCBhY3RpdmVUaHJlc2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJh
eVByb2ZpbGUsIGV4aXRUb0xMSW50KSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNv
bXBpbGF0aW9uKSkgewotICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9
ICp2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0gICAgICAgICAgICBQcm9maWxlcjo6Q29tcGls
YXRpb24qIGNvbXBpbGF0aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5j
b21waWxhdGlvbi5nZXQoKTsKLQotICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2Zp
bGVyRXhpdCA9IGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0KAotICAgICAgICAgICAgICAgIGV4aXRJ
bmRleCwgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9j
b2RlT3JpZ2luKSwKLSAgICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0g
VW5jb3VudGFibGVJbnZhbGlkYXRpb24pOwotICAgICAgICAgICAgZXhpdC5leGl0U3RhdGUtPnBy
b2ZpbGVyRXhpdCA9IHByb2ZpbGVyRXhpdDsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpPdGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cHJpbnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUtPmV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCA9IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDsKLQotICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VE
RkdPU1JFeGl0KCkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nRigiREZHIE9TUiBleGl0ICMldSAo
JXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0gICAgICAgICAgICAgICAg
ZXhpdEluZGV4LCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKLSAgICAgICAg
ICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxv
Y2spLmRhdGEoKSwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1
bXBDb250ZXh0PihvcGVyYW5kcykpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBP
U1JFeGl0U3RhdGUmIGV4aXRTdGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLSAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gZXhpdFN0YXRlLmJhc2VsaW5lQ29kZUJsb2NrOwot
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0
VHlwZSgpKSk7Ci0KLSAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0
U3RhdGUub3BlcmFuZHM7Ci0gICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZp
bmVkT3BlcmFuZFNwYW5zID0gZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLQotICAg
IGNvbnRleHQuc3AoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQ
b2ludGVyT2Zmc2V0OwotCi0gICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRv
IHdoaWxlIGxvb3AgaXMgc28gd2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0
ZS4KLSAgICBkbyB7Ci0gICAgICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3Rh
dGljX2Nhc3Q8RXh0cmFJbml0aWFsaXphdGlvbkxldmVsPihleGl0U3RhdGUuZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsKTsKLQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFNwZWN1bGF0aW9uUmVj
b3ZlcnkKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0aW9uIHJlY292ZXJ5IGZp
cnN0IGJlY2F1c2UgYXJyYXkgcHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9maWxpbmcKLSAgICAgICAg
Ly8gbWF5IHJlbHkgb24gYSB2YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBIb3dldmVyLCB0aGF0IGRv
ZXNuJ3QgbWVhbiB0aGF0IGl0IGlzIGxpa2VseQotICAgICAgICAvLyB0byBoYXZlIGEgcmVjb3Zl
cnkgdmFsdWUuIFNvLCB3ZSdsbCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VMWS4KLSAgICAgICAgU3Bl
Y3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVjb3Zlcnk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShyZWNvdmVyeSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnkt
PnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAg
ICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3Zl
cnktPmRlc3QoKSkgLSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+c3JjKCkpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgotICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1Lmdw
cjxpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAg
ICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3ByPHVpbnQzMl90PihyZWNv
dmVyeS0+ZGVzdCgpKSAtIHJlY292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+
IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1Zh
bHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpIF4gSlNWYWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXph
dGlvbiBsZXZlbDogVmFsdWVQcm9maWxlVXBkYXRlCi0gICAgICAgIEpTVmFsdWUgcHJvZmlsZWRW
YWx1ZTsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAg
IHByb2ZpbGVkVmFsdWUgPSBqc1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwot
ICAgICAgICAgICAgaWYgKE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4
aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5yZXBvcnRWYWx1ZShw
cm9maWxlZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlv
biBsZXZlbDogQXJyYXlQcm9maWxlVXBkYXRlCi0gICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSA9IGV4aXRTdGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VS
VCghIWV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChleGl0Lm1fa2lu
ZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpOwotICAgICAg
ICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
T3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZSwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gcHJvZmlsZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGV4aXQubV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAg
ICAgIGJvb2wgZG9Qcm9maWxlID0gIWluc3RydWN0aW9uLT5pczxPcEdldEJ5SWQ+KCkgfHwgaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKS5tZXRhZGF0YShwcm9maWxlZENvZGVCbG9jaykubV9t
b2RlTWV0YWRhdGEubW9kZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Ci0gICAgICAgICAg
ICBpZiAoZG9Qcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBwcm9maWxlZFZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAg
IGFycmF5UHJvZmlsZS0+b2JzZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1vZGVzRnJvbVN0cnVjdHVy
ZShzdHJ1Y3R1cmUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQ
cm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gRXh0
cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogT3RoZXIKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQu
bV9raW5kID09IEdlbmVyaWNVbndpbmQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5n
IGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJp
Y1Vud2luZCgpLgotICAgICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBm
cmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIEFT
U0VSVChjb250ZXh0LmZwKCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGV4aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgICAgICBleGl0U3Rh
dGUucHJvZmlsZXJFeGl0LT5pbmNDb3VudCgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRl
eHQsIHZtLm9zckV4aXRJbmRleCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxlIChmYWxzZSk7IC8vIEVu
ZCBleHRyYSBpbml0aWFsaXphdGlvbi4KLQotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250
ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVCghKGNvbnRleHQuZnA8dWludHB0cl90PigpICYgMHg3
KSk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIEFT
U0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID09IEpT
VmFsdWU6Ok5vdENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0
IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAv
LyBOb3RlOiB3ZSBuZWVkIHRvIHJlY292ZXIgdmFsdWVzIGJlZm9yZSByZXN0b3JpbmcgY2FsbGVl
IHNhdmUgcmVnaXN0ZXJzIGJlbG93Ci0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3ZlcnkgbWF5IHJl
bHkgb24gdmFsdWVzIGluIHNvbWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotCi0gICAgaW50
IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFz
ZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAg
ICBzaXplX3QgbnVtYmVyT2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUoKTsKLSAgICBzaXplX3Qg
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zLnNpemUoKTsK
LQotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsKLSAgICBzaXplX3QgbmV4
dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgaWYgKG51bVVu
ZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9
IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4
OwotCi0gICAgSlNWYWx1ZSB1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwotICAgIGZvciAoc2l6
ZV90IHNwYW5JbmRleCA9IDA7IHNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFuczsg
KytzcGFuSW5kZXgpIHsKLSAgICAgICAgYXV0byYgc3BhbiA9IHVuZGVmaW5lZE9wZXJhbmRTcGFu
c1tzcGFuSW5kZXhdOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSBzcGFuLm1pbk9mZnNldDsK
LSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSBmaXJzdE9mZnNldCArIHNwYW4ubnVtYmVyT2ZSZWdp
c3RlcnM7Ci0KLSAgICAgICAgZm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RPZmZzZXQ7IG9mZnNldCA8
IGxhc3RPZmZzZXQ7ICsrb2Zmc2V0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvZmZz
ZXQsIHVuZGVmaW5lZCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG51bWJlck9mT3BlcmFuZHM7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAg
ICAgaWYgKFVOTElLRUxZKGluZGV4ID09IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgpKSB7Ci0g
ICAgICAgICAgICBpbmRleCArPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNw
YW5JbmRleCsrXS5udW1iZXJPZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFVu
ZGVmaW5lZFNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgICAg
ICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25l
eHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWcuaXNM
b2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5v
ZmZzZXQoKTsKLQotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5V
bnNhZmVKU1ZhbHVlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbkZQ
UjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmZwcjxKU1ZhbHVl
PihyZWNvdmVyeS5mcHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBjcHUuZ3ByPEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkudGFnR1BS
KCkpLCBjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIoKSkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAg
ICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8SlNDZWxs
Kj4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5h
c2FuVW5zYWZlVW5ib3hlZENlbGwoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjcHUuZ3ByPGJvb2w+KHJl
Y292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBj
YXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNlbHNlCi0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkucGF5bG9hZCgpKSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5H
UFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1Lmdw
cjxpbnQzMl90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDMyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0
X3Q+KHJlY292ZXJ5LmdwcigpKSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQ1MigpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1Mklu
R1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5n
cHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5mcHIoKSkpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWREb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9wZXJhbmQsIHJlY292ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNh
c2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9u
J3QgZG8gdGhpcywgeWV0LgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUg
c2F2ZXMgYW5kIHRoZW4gc2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAg
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGNvZGVCbG9jayk7Ci0gICAgc2F2ZUNhbGxl
ZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgY3B1LmdwcihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPSBzdGF0aWNfY2Fz
dDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBjcHUuZ3ByKEdQ
UkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0
ZXI+KEpTVmFsdWU6Ok5vdENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhl
IHN0YWNrIGFyZSByZWNvdmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3Vt
ZSB0aGF0IGFyZ3VtZW50cwotICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVm
ZXIgdG8gZWFjaCBvdGhlci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBv
bmx5Ci0gICAgLy8gcmVmZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkg
d2UgbmVlZCB0byBkbyB0aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAg
IC8vIE5vdGUgdGhhdCB3ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBt
aWdodCBzdGlsbCBiZSBtYXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUg
Y2FsbCBmcmFtZSBzY29wZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4K
LQotICAgIERGRzo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoY29udGV4dCwgY29kZUJsb2NrLCBkZmdK
SVRDb2RlLCBvcGVyYW5kcyk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRl
IGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQg
YWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0
aGUgZXhlY3V0ZQotICAgIC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQg
cGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGls
bCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1l
J3MKLSAgICAvLyBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5n
IGlzIHRydWU6Ci0gICAgLy8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4
aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2
ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0g
ICAgLy8gICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUg
KGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBj
YWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdz
IGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRv
Ci0gICAgLy8gICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2
ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4
aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8v
ICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50
IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUK
LSAgICAvLyAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlv
biBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2Qg
bGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2Vy
Ci0gICAgLy8gKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVs
YXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9y
bSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJl
cXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIg
d2lsbCBuZXZlcgotICAgIC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxs
IG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBp
ZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAg
ICAvLyBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0
YWtlIGNhcmUgb2YgKGQpLAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3
b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUg
aWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0g
ICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1
Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3Vn
aCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0
byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotCi0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+
dXBkYXRlT1NSRXhpdENvdW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShleGl0U3RhdGUp
ID09IENvZGVCbG9jazo6T3B0aW1pemVBY3Rpb246OlJlb3B0aW1pemVOb3cpKQotICAgICAgICB0
cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coYmFzZWxpbmVDb2RlQmxvY2ssIGNvZGVCbG9jaywgJmV4
aXQpOwotCi0gICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0LCBiYXNlbGluZUNvZGVC
bG9jaywgZXhpdCk7Ci0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNvbnRleHQsIHZtLCBjb2Rl
QmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJh
c2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKLXsKLSAgICBhdXRvJiBj
cHUgPSBjb250ZXh0LmNwdTsKLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFj
aygpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0
YWNrIHdoZW4gcGVyZm9ybWluZyBhbiBPU1IgZXhpdAotICAgIC8vIGluIHByZXNlbmNlIG9mIGlu
bGluZWQgdGFpbCBjYWxscy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ3NTExCi0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVy
bW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICBmcmFtZS5zZXRPcGVyYW5k
PENvZGVCbG9jayo+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVD
b2RlQmxvY2spOwotCi0gICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKLSAgICBmb3Ig
KGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdp
bi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxs
RnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgp
OwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqY29kZU9yaWdpbiwgb3V0ZXJtb3N0QmFz
ZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxl
ckNhbGxLaW5kOwotICAgICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZy
YW1lLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKLSAg
ICAgICAgdm9pZCogY2FsbGVyRnJhbWUgPSBjcHUuZnAoKTsKLQotICAgICAgICBib29sIGNhbGxl
cklzTExJbnQgPSBmYWxzZTsKLQotICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAgICAgICAgICAgIHZvaWQq
IHJldHVyblBDID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkp
OwotI2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICB2b2lkKiBvbGRFbnRyeVNQID0gY3B1LmZw
PHVpbnQ4X3QqPigpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgdm9p
ZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0
dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICByZXR1cm5QQyA9IHJl
dGFnQ29kZVB0cihyZXR1cm5QQywgYml0d2lzZV9jYXN0PFB0clRhZz4ob2xkRW50cnlTUCksIGJp
dHdpc2VfY2FzdDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJh
bWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIHJldHVyblBD
KTsKLSAgICAgICAgICAgIGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
T3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5l
Q29kZUJsb2NrKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgg
PSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFy
Z2V0ID0gY2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRl
Y29kZUluZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOwotCi0gICAgICAg
ICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAg
Y2FsbGVyRnJhbWUgPSBjcHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxs
RnJhbWUoKS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BV
KEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwot
ICAgICAgICAgICAganVtcFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9j
YXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8
dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVC
bG9jayk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxs
ZWUgc2F2ZSByZWdpc3RlcnMuCi0gICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBh
IHRhaWwgY2FsbCB0aGF0IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwg
d2UgbmVlZCB0bwotICAgICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFn
IHJlZ2lzdGVycyBhbHJlYWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFt
ZS4KLSAgICAgICAgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29k
ZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0
cnVlQ2FsbGVyKTsKLQotICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lz
dGVyczo6bWV0YWRhdGFUYWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+bWV0YWRhdGFUYWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJh
bWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2Vs
aW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAg
ICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NF
UlQoY2FsbGVyRnJhbWUpOwotICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdp
bi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWlu
dDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1Zh
bHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwotI2Vsc2UgLy8gVVNFKEpT
VkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1
ZTo6Q2VsbFRhZykpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWVDb25zdGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRp
bmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAot
ICAgIH0KLQotICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdp
biBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSNlbHNlCi0g
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5l
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkp
LnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7
Ci0jZW5kaWYKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRleHQsIFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9T
UkV4aXQmIGV4aXQpCi17Ci0gICAgT1NSRXhpdFN0YXRlKiBleGl0U3RhdGUgPSBleGl0LmV4aXRT
dGF0ZS5nZXQoKTsKLQotICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsgLy8gVGhlIG9wdGltaXpp
bmcgY29tcGlsZXIgZXhwZWN0cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNoYW5pc20gd2lsbCBleGVj
dXRlIHRoaXMgZmVuY2UuCi0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoYmFzZWxpbmVDb2RlQmxv
Y2spOwotCi0gICAgLy8gV2UgYmFycmllciBhbGwgaW5saW5lZCBmcmFtZXMgLS0gYW5kIG5vdCBq
dXN0IHRoZSBjdXJyZW50IGlubGluZSBzdGFjayAtLQotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qg
a25vdyB3aGljaCBpbmxpbmVkIGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVlIHByb2ZpbGUgdGhhdAot
ICAgIC8vIHdlJ2xsIHVwZGF0ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBjYXNlIG9mICJmKCkgeyBh
KCk7IGIoKTsgfSIsIGlmIGJvdGgKLSAgICAvLyBhIGFuZCBiIGFyZSBpbmxpbmVkLCB3ZSBtaWdo
dCBleGl0IGluc2lkZSBiIGR1ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQKLSAgICAvLyBmcm9tIGEu
Ci0gICAgLy8gRklYTUU6IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgc2hvdWxkIHJlbWVt
YmVyIHdoaWNoIENvZGVCbG9jayBvd25zCi0gICAgLy8gdGhlIHZhbHVlIHByb2ZpbGUuCi0gICAg
SW5saW5lQ2FsbEZyYW1lU2V0KiBpbmxpbmVDYWxsRnJhbWVzID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpOwotICAgIGlmIChpbmxpbmVD
YWxsRnJhbWVzKSB7Ci0gICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgOiAqaW5saW5lQ2FsbEZyYW1lcykKLSAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgIH0KLQotICAg
IGF1dG8qIGV4aXRJbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUoKTsKLSAgICBpZiAoZXhpdElubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29udGV4dC5m
cCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRJbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotICAgIHZvaWQqIGp1bXBUYXJnZXQg
PSBleGl0U3RhdGUtPmp1bXBUYXJnZXQ7Ci0gICAgQVNTRVJUKGp1bXBUYXJnZXQpOwotCi0gICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgLy8gU2luY2Ugd2UncmUg
anVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0g
ICAgICAgIHZtLmNhbGxGcmFtZUZvckNhdGNoID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwot
ICAgIH0KLQotICAgIHZtLnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsK
LQotICAgIGlmIChleGl0U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKLSAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGlu
ZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRy
KCk7Ci0KLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJs
ZUdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0
YVRhYmxlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50
OjpSZWdpc3RlcnM6OnBiR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0Zv
ckV4aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExM
SW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpKTsKLSNlbHNlCi0gICAgICAgIGNvbnRl
eHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KCZjdXJyZW50SW5zdHJ1Y3Rpb24pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICB2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhy
b3cgPSAmY3VycmVudEluc3RydWN0aW9uOwotICAgIH0KLQotICAgIGNvbnRleHQucGMoKSA9IHVu
dGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQg
cHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29u
c3QgT1NSRXhpdCYgZXhpdCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQu
ZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7Ci0gICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKTsKLSAgICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KTsKLQotICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7
Ci0gICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9m
ZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKLSAgICBpZiAo
YWx0ZXJuYXRpdmUpIHsKLSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJleGVjdXRlQ291
bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLAotICAgICAgICAgICAg
IiwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+cmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIG9wdGltaXphdGlvbkRlbGF5Q291
bnRlciA9ICIsIGFsdGVybmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGRhdGFMb2coIm5vIGFsdGVybmF0aXZlIGNvZGUgYmxvY2sgKGkuZS4g
d2UndmUgYmVlbiBqZXR0aXNvbmVkKSIpOwotICAgIGRhdGFMb2coIiwgb3NyRXhpdENvdW50ZXIg
PSAiLCBjb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCksICJcbiIpOwotICAgIGRhdGFMb2coIiAg
ICBHUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBHUFJSZWcgZ3ByID0g
R1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZ3By
TmFtZShncHIpLCAiOiIsIFJhd1BvaW50ZXIoY29udGV4dC5ncHI8dm9pZCo+KGdwcikpKTsKLSAg
ICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgRlBScyBhdCB0aW1lIG9m
IGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgRlBSUmVnIGZwciA9IEZQUkluZm86OnRvUmVnaXN0
ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0LmZwck5hbWUoZnByKSwgIjoiKTsK
LSAgICAgICAgdWludDY0X3QgYml0cyA9IGNvbnRleHQuZnByPHVpbnQ2NF90PihmcHIpOwotICAg
ICAgICBkb3VibGUgdmFsdWUgPSBjb250ZXh0LmZwcihmcHIpOwotICAgICAgICBkYXRhTG9nRigi
JWxseDolbGYiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7Ci0gICAgfQot
ICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLS8vIEpJVCBiYXNlZCBPU1IgRXhpdC4KLQogT1NSRXhp
dDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6
IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5z
ZW1hbnRpYywgaml0LT5tX29yaWdpbi53YXNIb2lzdGVkKQogICAgICwgbV9qc1ZhbHVlU291cmNl
KGpzVmFsdWVTb3VyY2UpCkBAIC05NTgsMTUgKzcwLDE4IEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpIGNvbnN0CiAK
IHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZN
JiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQogewotICAgIEhh
c2hNYXA8TWluaWZpZWRJRCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBz
IHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KKyAgICBIYXNoTWFwPE1pbmlm
aWVkSUQsIFZpcnR1YWxSZWdpc3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFw
cyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCiAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAg
aW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogCiAgICAgICAg
IGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENy
ZWF0ZWQKICAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAg
ICBNaW5pZmllZElEIGlkID0gcmVjb3Zlcnkubm9kZUlEKCk7CiAgICAgICAgIGF1dG8gaXRlciA9
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyICE9
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZW5kKCkpIHsKQEAgLTk4Nyw3ICsxMDIsNyBAQCB2
b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYg
dm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8
IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgaml0LmxvYWRQ
dHIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC05OTcsNyArMTEyLDcgQEAgdm9p
ZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZt
LCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBqaXQubG9hZDMyKAot
ICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEz
OCw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBq
aXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5k
KSk7CiAKLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQp
OworICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsODQgQEAgdm9pZCBP
U1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JF
eGl0JiBleGl0LCBjb25zdAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0u
dG9wRW50cnlGcmFtZSk7CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tD
b250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
c2hvdWxkbid0IHVzZSBhIHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmpl
Y3RzIGlzIHRyaWNreSBvdGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+
IHZhbHVlcyhvcGVyYW5kcy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb3BlcmFuZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVl
c1tpXSA9IG9wZXJhbmRzLnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAg
ICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7Cisg
ICAgICAgIGppdC5wcm9iZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNv
bnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChD
YWxsRnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7
CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGU+KCk7CisKKyAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9p
bnRUbXBzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1
ZXNbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZG8gd2hhdCB0aGUgRlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMg
aW50byB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVj
b3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVu
Y29kZShyZWNvdmVyeS5jb25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF0pKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRp
c3BsYWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50
bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRt
cFNjcmF0Y2hbaSArIHRtcE9mZnNldF0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5i
b3hlZENlbGxJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5K
U1N0YWNrOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAg
c2lkZVN0YXRlLT50bXBzW2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1Q
dHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxs
RnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNv
ZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJh
bWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byog
aW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAg
ICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
OyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3Rh
dGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAg
ICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0
cyBpbnRvIHRoZSBzdGFjay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBv
cGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYg
KHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJh
c2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkK
KyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4
KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgICAgICBpZiAob3BlcmFu
ZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5i
YXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkp
CisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0
ZDU0ZjFhMDRlYjhlLi45ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEyMzAwYjJiMTYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUwLDggKzE1MCw2IEBA
IHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAgIGZyaWVuZCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZyYW1lKik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOwotCiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wTG9jYXRpb247
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4IDMxMDk2M2Q4NDQz
NmM1MzMyNzg0ZjBhMjkyYTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0MDBhYmFhY2VjMGFm
YmMzYzEyNDM1ZGI5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRC
YXNlLmgKQEAgLTcwLDYgKzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgICAgIHJl
dHVybiBtX2tpbmQgPT0gR2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNFeGl0aW5nVG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCk7CisgICAg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAppbmRleCAyZmYzZWE4YjVmYmI2ZjNmMjcyMWQ1MDI0NDU2Mjk4YjA4
NGQ1MTE1Li4yMWJlZTgyODM0YTc4MDc0MjI0NzI3ZDg5OWYyYmMyZjZiODVhYTg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1
ZGUgIkJ5dGVjb2Rlcy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgi
CiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRo
dW5rcy5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTE0Myw2ICsx
NDYsOSBAQCB2b2lkKiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeQogewogICAgIGNhbGxlcklzTExJbnQgPSBP
cHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCisgICAgaWYgKGNh
bGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oJkxMSW50OjpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2Vu
dHJ5cG9pbnQpOworCiAgICAgdm9pZCoganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xM
SW50KSB7CkBAIC0yMzgsNyArMjQ0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVz
ZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3Jl
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3Jp
Z2luKiBjb2RlT3JpZ2luOwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdp
bjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdp
biA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxD
YWxscygpKSB7CkBAIC0zMDUsMzMgKzMxMSwzNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxs
ZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMo
KTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9j
YXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxp
bmVDb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXgoKSkpLmJpdHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkKLSAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQo
KSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9y
ZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNl
dChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nh
c3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJs
eUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhl
bHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAg
aml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSk7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBw
YXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAv
LyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBk
aWQgaW5saW5lIHRhaWwgY2FsbHMKICAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29k
ZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5dGVjb2Rl
SW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKICNlbHNl
Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNv
ZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkp
LnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5i
eXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihp
bnN0cnVjdGlvbikpLmJpdHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwor
ICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CiAgICAgfQogfQogCkBAIC0zODIsMTEgKzM4OSwxMiBAQCB2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYg
ZXhpdCkKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhp
dC0+aml0VHlwZSgpKSk7CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0OworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQ7CiAgICAgYm9vbCBl
eGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tG
b3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAo
ZXhpdFRvTExJbnQpIHsKICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVu
dEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVj
b2RlSW5kZXgpLnB0cigpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gZGVzdGluYXRpb24gPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSA/IENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oJkxMSW50OjpjaGVj
a3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQpKSA6IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRp
b25IYW5kbGVyKCkpIHsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIpOwpAQCAtNDAyLDcg
KzQxMCwxNCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICNlbmRpZgogICAgICAgICBqdW1wVGFy
Z2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRk
cmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5k
KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIEJ5dGVjb2RlSW5k
ZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAg
ICBCeXRlY29kZUluZGV4IGluZGV4Rm9yQ2hlY2twb2ludFJldHVybiA9IGNvZGVCbG9ja0ZvckV4
aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRleCk7CisgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmpp
dENvZGVNYXAoKS5maW5kKGluZGV4Rm9yQ2hlY2twb2ludFJldHVybik7CisgICAgICAgIGlmIChl
eGl0SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBjaGVja3BvaW50UmV0dXJuVGFy
Z2V0ID0gY29kZUxvY2F0aW9uOworICAgICAgICAgICAgY29kZUxvY2F0aW9uID0gQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPigmTExJbnQ6OmNoZWNr
cG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCkpOworICAgICAgICB9CisKICAgICAgICAgQVNTRVJU
KGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRh
Z2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNiNGIwM2RjMTk5
Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9kZSgpKSAhPSBl
c2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvcklu
ZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFrZVZhbGlkRXhp
dChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1hdGVyaWFsaXph
dGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaApp
bmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43N2VmY2ZiMjQ4
MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGlj
aXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHN0YXRpY19j
YXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBsaWNpdCBPcElu
Zm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBiOTQ4OGExMDMy
ODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3NzY5MmRiMTA3
Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
QEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
cmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKIAogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFy
Z3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IG1hbmRh
dG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudCB7IGZpcnN0
RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBK
U1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKICAg
ICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBs
b2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFt
ZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAtIDEpOwogICAg
IAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsr
aSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZp
bmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCArIGkpID0ganNV
bmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhiZmFlNGU5NGQw
OTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi4yYjEwNWIyY2FkZTdiN2Q1NTg5ZmFkZWFmYjAyYmMw
OTY0NWUwOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00MywxMSArNDMsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwotfQotCiBjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAg
ICAgUGhhbnRvbUluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShn
cmFwaCwgInBoYW50b20gaW5zZXJ0aW9uIikKQEAgLTYyLDcgKzU5LDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4gVGhhdCBjYXVz
ZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCk7
CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2co
IkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFw
aC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTcyLDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQog
ICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAgICAgaWYgKERG
R1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFudG9tIGluc2Vy
dGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTEw
MywyMiArMTAwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5nSW5k
ZXggPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlv
blBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMu
b3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5
YmU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQsMzggKzEzMSw0MiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAg
ICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2UsICIgdG8gIiwgY3VycmVu
dEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3VycmVudEVwb2No
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+
c2V0RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFs
cmVhZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAg
ICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3Bl
cmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJh
bmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQpOwogCiAgICAgICAgICAg
ICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAg
aWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09
IGFscmVhZHlLaWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxsZWQgYnkgc2V0IGxvY2Fs
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVz
Lm9wZXJhbmQocmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCisgICAgICAg
ICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCk7IAor
ICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiB3YXMgbm90IGRl
ZmluZWQgaW4gdGhpcyBibG9jay4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51
bGxwdHI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVk
IHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0
aGUgbGFzdAogICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhl
IGxhc3QgZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBj
dXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0g
Y3VycmVudEVwb2NoKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVwb2NoICIsIGN1cnJlbnRF
cG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLCAiXG4i
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcg
UGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGluZyBhIG5ldyB1
c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRo
ZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOwpA
QCAtMTc5LDE0ICsxODAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAKICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXlF
eGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBkb2VzIGV4aXQs
IHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgIC8v
IHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYWxy
ZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IG9wZXJh
bmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQo
bG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJh
bmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVk
T3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLCBwcm9j
ZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IGE1OGUxNzk2NTYwZmM2ZDk0YmI0NjNk
MTQyOTg4NmUwNzhmMGFmY2MuLmY1ZjA5NmM4ZWI1NmQ0NWZhOTg5YmI0OTM2ZjcyZDQ0ODE5NWEx
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxJ
ZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBoZWFwLm9wZXJh
bmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02OCw3
ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdyaXRlcyB0byBh
bHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJlcml6ZSgpLgog
ICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNhbGxJZkFwcHJv
cHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0
aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3RhY2spOwogICAg
ICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5wYXls
b2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAoKS5v
cGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2FsbElmQXBwcm9w
cmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVy
YW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKaW5kZXgg
NDQ3ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4uNWI0Zjk5MjkzNDExNzlj
MjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcApAQCAtNzIsNyAr
NzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBj
b25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dy
YXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAg
ICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVz
dEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggODA1MDUxNmNi
ZmVjYzg0ZmUxOTU4NDI4YTBjZjg3Y2Q1NGVlMTE3Yi4uMjIxYzUwMWRiZDE0YzA0NTcyYTdmZTFk
MTliZTZkMzE5N2MxM2YzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEzNjUsNiArMTM2
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21i
aWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4IDg3Mjc3NjBjNmVj
YmRiMzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcuLmZkNjEyM2ZhOWYxZDUyOWU0YzJlZTJjMGU3
ZWRmNjNmMDdmNzhkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQdXRT
dGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgog
ICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShn
cmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhpcyBpcyBpbXBvcnRh
bnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAg
ICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAg
ICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCwxMSArODUsOCBAQCBwdWJsaWM6
CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgpOwog
ICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVy
YW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAg
ICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXZlQXRI
ZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdLmZp
bGwoZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29s
PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNlKTsKKyAgICAgICAg
ICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGJvb2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAxLDM0IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgt
LTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIsIGxpdmUsICJc
biIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZp
cnR1YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVI
YW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7CisgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxPcGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFu
ZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJhbmQsICIgaXMg
bGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRzLmFw
cGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAg
ICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5vZGUtPm9wKCkg
PT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5v
cCgpID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG9wID0gbm9k
ZS0+b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IFB1
dFN0YWNrIHx8IG9wID09IFZhcmFyZ3NMZW5ndGggfHwgb3AgPT0gTG9hZFZhcmFyZ3MgfHwgb3Ag
PT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AgPT0gS2lsbFN0YWNrKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkg
eyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsg
fSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6
IHdyaXRlcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiB3cml0
ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHJl
YWRzKQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHJlYWRzKQog
ICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMzQsNyArMjI5LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBkZWZlcnJlZCA9IGRl
ZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1
dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQg
YXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFjaykgewpAQCAtMjYx
LDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzOTgKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc0NvbmZsaWN0aW5nID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPT0gQ29u
ZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVy
YW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9PSBDb25mbGljdGluZ0ZsdXNo
OwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsICFpc0NvbmZsaWN0aW5nKTsKQEAgLTI3NSwxNyArMjcwLDIwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2Rl
LT5vcCgpID09IFB1dFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
IlNldHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFu
ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0g
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0g
S2lsbFN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHNpbmsgYSBQdXRTdGFjayBwYXN0IGEgS2lsbFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdG
bHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBmb3IgIiwgbm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MywxNiArMjkxLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBE
ZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAg
YXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndh
cmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwgbm9kZSwgIiBhdCBv
cGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJp
emUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVy
LCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJh
bmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRhaWxbYmxvY2tdKQpA
QCAtMzEzLDEzICszMTMsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkg
ewogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDb25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFuZEZvckluZGV4
KGkpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nl
c3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNz
b3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIs
IGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayks
ICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAi
LCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwg
ZGVmZXJyZWRbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zNTIsMTAgKzM1MiwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFuZHNMaWtlLCBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmQ+IGluZGV4VG9P
cGVyYW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChp
KSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisKICAgICAgICAg
ICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1bGF0b3IubmV3
VmFyaWFibGUoKTsKICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFu
ZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3BlcmFuZC5zaXplKCkg
PT0gdmFyaWFibGUtPmluZGV4KCkpOwpAQCAtMzcwLDEyICszNzAsMTIgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHB1dFN0YWNr
c1RvU2luay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3
RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFu
ZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRT
dGFjazoKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJp
YWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTM4Niw3ICszODYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAogICAgICAgICAgICAg
WyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2Nr
KSAtPiBOb2RlKiB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBp
bmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChv
cGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zOTcsNyAr
Mzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcg
UGhpIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGgu
YWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxp
ZEV4aXQoKSk7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbWFwcGlu
Zy5maWxsKG51bGxwdHIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAg
T3BlcmFuZCBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUg
PSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIFNT
QUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChi
bG9jaywgdmFyaWFibGUpOwpAQCAtNDIxLDE1ICs0MjEsMTUgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVyRHVtcChibG9jayks
ICI6ICIsIG1hcHBpbmcsICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKFNT
QUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxv
Y2spKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRv
T3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgo
KV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dCgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBw
aW5nICIsIG9wZXJhbmQsICIgdG8gIiwgcGhpRGVmLT52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAg
ICAgICAgICB9CkBAIC00MzcsMTUgKzQzNywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkZWZl
cnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsK
ICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICAgICAg
ICAgIE9wZXJhbmQgb3BlcmFuZCA9IGRhdGEtPm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5jaGlsZDEoKS5ub2Rl
KCksICIgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3Bl
cmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC00NTMsMTYgKzQ1MywxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0
YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZl
cnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
Q29uY3JldGUoZm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpICE9IENvbmZsaWN0
aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpICE9IENvbmZsaWN0
aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZXJl
IGlzIG5vIGRlZmVycmFsLiBObyBkZWZlcnJhbCBtZWFucyB0aGF0IHRoZSBtb3N0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlIHZhbHVlIGZvciB0aGlzIHN0YWNrIHNs
b3QgaXMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHN0YWNrLiBTbywKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGtlZXAgdGhlIEdldFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgbWFw
cGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC00NzIsMjAgKzQ3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8v
IGhhdmUgc3RvcmVkIGFuZCBnZXQgcmlkIG9mIHRoZSBHZXRTdGFjay4KICAgICAgICAgICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBmb3JtYXQgPT0gZGF0YS0+Zm9ybWF0LCBm
b3JtYXQsIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCk7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKGRhdGEt
Pm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IGluY29taW5n
LT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVu
dGl0eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNo
OworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZh
dWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCkBAIC00OTksNyAr
NDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2VydCBhIFB1dFN0
YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRTdGFj
ayBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CkBAIC01
MTMsNyArNTEzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAot
ICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBb
Jl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJh
bmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFyZ3MgYXJl
IHVuY29uZGl0aW9uYWwgd3JpdGVzIHRvIHRoZSBzdGFjawpAQCAtNTIxLDEzICs1MjEsMTMgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25zIHRoZXkgd3JpdGUg
dG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9jYXRpb25zIGRlYWQgcmlnaHQgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBMb2FkVmFyYXJncy9Gb3J3YXJkVmFyYXJncy4g
VGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2luawogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkg
PT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFy
Z3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAg
ICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3
cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQs
IExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9IH0KICAgICAgICAgICAgIH0KQEAgLTUzOSw4ICs1MzksOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0
b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAgICAgICBO
b2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRb
dmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkNyZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxv
Y2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JC
bG9ja10ub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBudWxscHRyLCBpc0NvbmNyZXRlKGZvcm1hdCksIGZvcm1hdCk7CkBAIC01ODUsNyAr
NTg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAg
ICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUHV0
U3RhY2sgc2lua2luZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcAppbmRleCA0MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMxMWQ2NzY4NjUwLi4w
NGYyYzBjZDM5OThiMTgxYjllOThiYmE0MjcwNDg4M2I0MGQyZDhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCkBAIC0xNTgs
NyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+bG9jYWwo
KSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPm9wZXJhbmQoKSwg
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudEdldHRlcnMu
YWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFk
ZChub2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUlu
ZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVy
IHRoYW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQo
dmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWFkTm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50
KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVh
bFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5v
ZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVG
b3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2lu
dCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBwaGlEZWYt
PnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNw
ZWNOb25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwg
cGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5vcmlnaW4u
ZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFj
aywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVu
bGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9y
aWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5LDE5
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSXNGbHVzaGVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
UHV0U3RhY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNj
ZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5s
b2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkp
OwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFw
cGluZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOwotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZh
cmlhYmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNoaWxk
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9k
ZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkp
LCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
Mzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZhdWx0
RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQyNSwxMiArNDI1
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGV4aXRPSy4KICAg
ICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihm
b3JtYXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNl
cnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPmxvY2FsKCksICIgcHJvcGFnYXRpbmcgIiwg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiIHRvICIsIHBoaU5v
ZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5n
IFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgcHJvcGFnYXRpbmcgIiwgdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICIgdG8gIiwgcGhpTm9k
ZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlv
blBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9w
ZXJhbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2luZCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMTViZTQyYWMzYjY5YWY0ZGM1ODM4YTE4ZGYzOWQwNzhj
YTMxNjkxOS4uOWEzMmQ2N2E1ODc0Mjk1ODViMzdkOWFlMWE2Y2ViYzVmYzk2MmNmZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTMyMiw2ICsz
MjIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAg
ICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBiNWExMWM1MWVmMTBjZjdhNmIyMzE3
MmQyZDhiZjhmNjc1ZTA1MmJkLi5iZTU4NWQ1ZDQzYzkyNzc4NzkyOTgzYjA5MzNmNWEyNjI4NTAz
MmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcApAQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1v
dkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVu
ZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51
bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZl
bnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoQWJvcnRSZWFzb24gcmVhc29uKQpAQCAt
MTgyNSw3ICsxODI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9j
aygpCiAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7CiAgICAgCiAgICAgZm9y
IChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvcklu
ZGV4KGkpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+dmFy
aWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICBjb250aW51
ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgpAQCAtMTgzNSwxMSArMTgz
NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgICAg
ICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVl
ZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgogICAgICAgICBmb3JtYXQgPSBkYXRhRm9ybWF0
Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsKLSAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFu
ZExvZygKLSAgICAgICAgICAgIFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKAotICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCksCi0gICAgICAgICAgICAgICAgZm9ybWF0KSk7CisgICAgICAgIERGR19B
U1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOworICAgICAgICBtX3N0cmVh
bS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKG9wZXJhbmQsIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAgICAgfQogCiAgICAgbV9vcmlnaW4gPSBOb2Rl
T3JpZ2luKCk7CkBAIC0xOTE5LDcgKzE5MTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVj
a0FyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAoZm9ybWF0ID09IEZsdXNoZWRKU1ZhbHVlKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVy
YW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIu
aXNBcmd1bWVudCgpKTsKIAogICAgICAgICBKU1ZhbHVlU291cmNlIHZhbHVlU291cmNlID0gSlNW
YWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAg
ICAgICAgCkBAIC03MzQxLDU0ICs3MzM5LDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTZXRGdW5jdGlvbk5hbWUoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKiBub2RlKQogewogICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogCiAgICAg
SlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAgICB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFyZ3VtZW50c1JlZ3Mg
PSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICB9CisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgSlNWYWx1ZU9wZXJh
bmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIGFyZ3VtZW50
c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0KTsKICAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdz
KCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIEdQUlRlbXBvcmFyeSBh
cmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7CisgICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5n
VGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhpcy5ncHIoKTsKICAgICB1bmxvY2soR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwogCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRo
YXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMg
aXMgc2FmZQotICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5
LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAgIC8vIHN0
YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhp
dCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgIC8vIHBhc3QgdGhlIHNpemlu
Zy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4
CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKIAotICAgIEdQUlJlZyBhcmdDb3VudEluY2x1
ZGluZ1RoaXNHUFIgPQotICAgICAgICBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncyk7CisgICAgaW50MzJSZXN1bHQoYXJn
Q291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2RlKTsgIAorfQogCi0gICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdU
aGlzR1BSKTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBu
b2RlKQoreworICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpOworCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291bnQodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyBhcmd1bWVu
dHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2pp
dC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAg
ICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRp
bmdUaGlzR1BSKSk7CisgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBF
ZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgp
LCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAorICAgICAgICAgICAg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0
YS0+bGltaXQpKSk7CiAKLSAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQ
UiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKworICAgIG1faml0LnN0b3JlMzIoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwogCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzUmVncywgZGF0
YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0b3J5TWluaW11
bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzUmVn
cywgZGF0YS0+b2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIG5vUmVzdWx0
KG5vZGUpOwpAQCAtNzM5OCwxNyArNzM5NywxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgIGlubGluZUNhbGxG
cmFtZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
CisgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKTsKICAgICBlbHNlCiAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAorICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jh
cnkgbGVuZ3RoKHRoaXMpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0g
ICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKyAgICBHUFJSZWcgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEdQUlJlZyBsZW5n
dGhHUFIgPSBhcmd1bWVudENvdW50LmdwcigpOwogICAgIEpTVmFsdWVSZWdzIHRlbXBSZWdzID0g
dGVtcC5yZWdzKCk7Ci0gICAgICAgIAotICAgIGVtaXRHZXRMZW5ndGgoaW5saW5lQ2FsbEZyYW1l
LCBsZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0gKi8gdHJ1ZSk7CisgICAgCisgICAgbV9qaXQu
bW92ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbGVuZ3RoR1BSKTsKICAgICBpZiAoZGF0
YS0+b2Zmc2V0KQogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoZGF0YS0+b2Zmc2V0
KSwgbGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC03NTY3LDcgKzc1NjgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCiAgICAg
YXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSgpOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKICAgICAgICAgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAga25vd25MZW5ndGggPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAga25vd25MZW5ndGgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDEpOwogICAgICAgICBsZW5ndGhJc0tub3duID0gdHJ1ZTsKICAgICB9IGVs
c2UgewogICAgICAgICBrbm93bkxlbmd0aCA9IFVJTlRfTUFYOwpAQCAtMTI0NDcsNyArMTI0NDgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVDYWxsRnJhbWUoKSkKICAgICAgICAgYXJndW1lbnRD
b3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CiAg
ICAgZWxzZQotICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWdp
c3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7CiAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdC5ncHIo
KSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBjNjRmOTc4YWRmODVm
YmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5Li4wM2Q0ODM1YmY0YjdhOGRlMDkzOWVmY2ZhMzcw
MjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxl
U2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdSZWdleHAoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncyhOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsKQEAgLTE2NjksMTUgKzE2NzAsMTYg
QEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJlZywgR1BSUmVn
KTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZv
cm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hp
bmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFieXRlY29k
ZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1
bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZl
bnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5lUmVnLCBmb3JtYXQpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX2N1cnJlbnROb2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPmxvY2Fs
KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKKyAgICAgICAgcmVjb3JkU2V0
TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3Jt
YXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZvJiBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4
IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2ZGJkMGQyYTA1NmRiODEuLjBhZjNmMTcxODE1NDEw
ZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgyOCw3ICsxODI4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSk7CiAKICAgICAgICAgLy8g
SWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRo
ZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRv
bid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
Wm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxp
bmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CisgICAgICAg
IHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkT3BlcmFuZCgpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgyNCw2ICszODI0LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVW
YXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExv
YWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhub2RlKTsKICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWViNWVhMjZhMzEwNWRkYjhhZmU3NjYyMTYzMzQ0Li43
YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZkYzkzYWM4NmM3YzUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTE5MzYsNyAr
MTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAg
ICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQg
dGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwg
dGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0yMDA3LDcgKzIwMDcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9k
ZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwor
ICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwg
VmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQsNiArNDQ2NCwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUp
OwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBj
b21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAg
Y2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2YWM3YTdkMzMzZTM5Njc5ZTI2NzU1OTA3NGU0NjRj
OWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2MTVmNjA0Mjc1MjIwNDc3YTIyYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdHJlYXQgYSB2YXJpYWJsZSBhcyBiZWlu
ZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2VzcyB0byBpdCAoU2V0TG9jYWwsIEdldExv
Y2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxvY2FsKS4KICAgICAgICAgCi0gICAgICAg
IEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAgICBPcGVyYW5kczxib29sPiB1c2VkT3BlcmFu
ZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3JhcGgoKS5tX3RtcHMsIGZhbHNlKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJv
bSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxzZTsKQEAgLTY3
LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisg
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2Vk
TG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB0cnVlKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRhLT5jb3VudCwgdHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250aWd1aXR5IG9m
IHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudHMuCiAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0
Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5z
dGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9m
ZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNh
c2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVl
ZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05Miw5ICs5MSw5
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRh
KiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChzdGFjay0+bG9jYWwudG9Mb2Nh
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoc3RhY2st
Pm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA4LDIxICsxMDcsMjEgQEAgcHVibGlj
OgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSAqaXRlcjsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdz
KCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCi0g
ICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgIHVzZWRP
cGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVw
LnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChW
aXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2Vk
TG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2Vk
T3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWwgPSBj
b2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgh
dXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRleChpKSkgewogICAgICAgICAgICAgICAgIGFs
bG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
dmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbG9jYWwgPSB2YXJp
YWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAgICAgICAgICBpZiAobG9jYWwgPj0gYWxsb2Nh
dGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3Bl
cmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJ
bmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBhbGxvY2F0aW9uLnNpemUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQorICAgICAgICAgICAgaWYgKGFsbG9j
YXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24o
YWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgdmFyaWFibGUt
Pm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YSkgewotICAgICAgICAgICAg
aWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tYWNo
aW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEt
Pm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxz
aXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5s
b2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3BlcmFuZC50b0xvY2FsKCkpID49IGFs
bG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5kLnRvTG9jYWwoKV0gPT0gVUlOVF9N
QVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24oYWxsb2NhdGlv
biwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWdu
KHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIo
YXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbih1c2VkT3BlcmFuZHMs
IGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0t
OykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFibGVEYXRhIGRhdGEgPSBtX2dyYXBoLm1faW5s
aW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbigKLSAgICAgICAg
ICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7CiAgICAgICAg
ICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQ
b3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0
ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIxNSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24s
IGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3Vu
dCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbih1c2VkT3BlcmFu
ZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAg
LTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgT3BlcmFu
ZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlv
biwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwoKV07Ci0gICAg
ICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisK
KyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgo
b3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bb3Bl
cmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAg
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAK
aW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMyY2U5NjFmZjlhMDcxMmExYTA1MS4uYjQ4YzZmN2Yx
OTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4YTcyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCkBAIC0yODUs
MTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGktLTspIHsKICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+b3BlcmFuZCgpID09IG9wZXJhbmQp
IHsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWwgPSBub2RlOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoYWNj
ZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgbG9jYWwpKSkK
KyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3Ry
YWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCmluZGV4
IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIwNzBiNmVlNmY0ZjhiZjkuLmYxYjFmZjY0ZGRhNTNj
ZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0
VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7
Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCAmdm0pOwotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCB0aHVu
ayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQo
bnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAppbmRleCAwNWE1MGE1
NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4MjA1ZDllLi44YjVjM2YwMWE0ODUyMGI3YWFhYWFl
YmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgK
QEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYp
OwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggNjBm
YmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1ZjU3MTNmMWQ3ZS4uNzk2NjVmOGFiODVmYzExMTZk
NjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0xNDYsNyArMTQ2LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY2hlY2tPcCA9IENoZWNrU3RydWN0
dXJlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNwZWNDZWxsQ2hlY2sgJiBTcGVjRW1w
dHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxvY2FsIC0g
KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKSkgPT0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0aGUgVERaIHZhbHVlLiBUaGUgY2FsbCBlbnRyeXBv
aW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFREWiwKQEAgLTE2OCw4ICsxNjgsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID09IG5vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
dmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5k
ZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAKQEAg
LTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFs
dWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICgh
bm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDllZTVlMDA3NDA5ZGY1Mjk0YmZjZjUxYjc3NmVi
OGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUzZGMzYzQ2YzBlMjRkNGRhMWNlMWIwY2Y1YjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC00ODMsNyArNDgz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNb
aV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2Rl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7
Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsK
KyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4o
bm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9h
ZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCkBAIC01MTksMTAg
KzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAgICAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRlY2Vzc29yc1tr
XTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNzb3Jz
W2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2Rl
ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZl
IGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJl
ZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2Nh
bCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJs
b2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2td
KSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmV2Tm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMsMTEgKzUzMywxMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2st
PnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRl
bHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0
aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
ay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdl
Lm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJs
b2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVk
Z2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
T3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAgICAgICAgIE9w
ZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBPcGVy
YW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRp
b25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBWQUxJREFURSgo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+
YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBAIC02NjgsMjQgKzY2NCwyNCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgp
KSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJs
b2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID09IG5vdFNl
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCAhIW5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBi
bG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBu
b2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
Pm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlY29yZCB0
aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBTZXRMb2NhbHMKICAgICAg
ICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBmbHVzaGluZy4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgIT0gbm90U2V0
KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sgdG8gaGF2ZSBhIHNlY29uZCBHZXRM
b2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAgICAgICAgICAgICAgICAvLyBibG9j
ayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERlZmluaXRlbHkgZm9yIHRoYXQgbG9jYWwuCi0gICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50TWF5YmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTY4LDI2ICs5NjQs
MjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAg
aWYgKCFibG9jaykgewotICAgICAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBudWxsIEJsb2Nr
ICIpOworICAgICAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIG51bGwgQmxvY2sgIik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhTG9nKGxvY2FsLCAi
IGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBCbG9j
ayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJs
b2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQorICAgICAgICBPcGVyYW5kIG9wZXJh
bmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2Nr
KQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxv
Y2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQs
ICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgTm9kZSogcHJl
dk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ss
IE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3Ig
IiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhw
cmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUs
IEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggMjZmMDMyOWQ1NDMwNDE1NzIw
NWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVjZGM5MmUyYzI0MTBhMzVjMDEzMTMxZmRjM2I3Y2Nj
MjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC00MSwxMSArNDEsOSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoK
ICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFz
ZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGluZyIpCkBAIC01Niw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zv
cm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2YXJhcmdzIGZvcndhcmRpbmc6XG4iKTsKICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCw3ICs4Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBjYWxscyBpbnRvIHRoaXMgZnVuY3Rpb24gdG8gYmUg
cmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBpbiBhIHNpbXBsZSBPKG4pIG1hbm5lci4KICAgICAg
ICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGJsb2NrLT5hdChjYW5kaWRhdGVOb2RlSW5k
ZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5n
IGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gV2Ug
ZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVyIENyZWF0ZUNsb25lZEFyZ3VtZW50cyBpZiB0aGUg
YnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3ICsxMDMsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBbJl0gewogICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBF
c2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH0KQEAgLTExNyw5ICsxMTUsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
IT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2RlLT51bmxpbmtlZE9wZXJhbmQoKS5pc1RtcCgpLCAi
V2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYSB0bXAgcmVmZXJyaW5nIHRvIGFuIGFyZ3VtZW50
cyBvYmplY3QuIik7CiAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsK
LSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlu
a2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChu
b2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2Nh
bHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKQor
ICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja1ZhcmFyZ3M6CkBAIC0xNDAsMTMg
KzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgc2F3RXNjYXBlID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgaWYgKHNhd0Vz
Y2FwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdz
OgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkKICAg
ICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKQEAgLTE1Nyw3ICsx
NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAg
ICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSB8fCBub2RlLT5jaGlsZDIoKSA9PSBj
YW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBj
YW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzTG9hZGVkRnJvbSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTIyNiw3ICsy
MjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2YWxpZEdldEJ5T2Zmc2V0KSB7CiAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBidXR0ZXJmbHkgOiBjYW5kaWRhdGVCdXR0ZXJmbGll
cykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGJ1dHRlcmZs
eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQnV0dGVyZmx5IGVz
Y2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNSwxMSArMjM1LDExIEBAIHByaXZhdGU6CiAK
ICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwKLSAgICAgICAgICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIHJlZywgIiB3aGlsZSB3ZSBhcmUgaW50ZXJl
c3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOworICAgICAgICAgICAg
ICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgb3Bl
cmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExv
Y2FscyksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9jYWxzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0tXSA9IHJlbGV2YW50TG9jYWxzLmxhc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5yZW1vdmVMYXN0KCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKQEAg
LTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNlckluZGV4ID0gIiwgbGFzdFVzZXJJbmRleCwgIiwg
IiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgpLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8v
IFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBEZXRlcm1pbmUgaWYgYmV0d2VlbiB0aGUgY2FuZGlk
YXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJlIGlzIGFueQpAQCAtMjYzLDE2ICsyNjMsMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6Ci0gICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJc
biIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAt
MjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPmxvY2FsKCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVy
ZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTI5NywxMyArMjk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5wYXlsb2FkKCku
dmFsdWUzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgaGVhcC5vcGVyYW5kKCkpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNJbnRlcmZlcmUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAg
ICAgICAgICAgICAgICBpZiAoZG9lc0ludGVyZmVyZSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTEsNyArMzEwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2UgY2FuIG1ha2UgdGhpcyB3b3JrLgot
ICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBXaWxsIGRvIGZv
cndhcmRpbmchXG4iKTsKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgCkBAIC0z
NDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0aGVzZS4KICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0
VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25T
ZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIC8qIGFkZFRoaXMgPSAqLyB0
cnVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQo
KSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndhcmRWYXJhcmdzKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4ZWJmZmI0MzVlZDRkYmY2MDJiZDYyYWVkNGMzNDMy
ZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMwODEyNWI0ZTZlY2M4OGE4N2M3ZDE3OWQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
Y3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
IFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKLSAgICA6IG1fbG9jYWwo
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1p
bigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICA6IG1fcHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAg
LCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2UpCkBAIC00NSwxMCAr
NDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQogICAgIGNs
ZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgIDogbV9sb2NhbChsb2NhbCkKLSAgICAsIG1fcHJl
ZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRh
KE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1f
YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxzZSkKICAg
ICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChmYWxzZSkKQEAgLTg3LDcgKzg2LDcg
QEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGlu
Z1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZhY2lsaXR5IGZvciBh
cmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgZm9yIGFyZ3VtZW50
cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJhbmQoKS5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgLy8gSWYgdGhl
IHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVkaWN0aW9uLCB0aGVuIHRoaXMgZG9lc24ndApA
QCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9y
U2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsKICAgICBBU1NFUlQoaXNSb290KCkpOwogICAgICAg
ICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJveCgpCisg
ICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJveCgpCiAgICAg
ICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzQXJyYXlJbmRleCkpCiAgICAgICAg
IHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUobV9kb3VibGVGb3JtYXRTdGF0ZSwg
Tm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgIApAQCAtMTc2LDcgKzE3NSw3IEBAIGJvb2wgVmFy
aWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUySW1wbCgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBXZSBwdW50IGZvciBtYWNoaW5lIGFyZ3VtZW50cy4KLSAg
ICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgYXJndW1lbnQtYXdh
cmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJnZXMgYWxsIG9mIGFuIChpbmxpbmVkIG9yIG1hY2hp
bmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEyMDQzZmEyNTRlNjA5NDIzMjAxNGEyODRlLi5iZTJm
YjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1NTczZmNlZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKQEAgLTQ4LDEyICs0OCwx
MiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxl
QWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhcmlhYmxlQWNjZXNzRGF0
YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgVmFyaWFibGVBY2Nl
c3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCk7CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKE9w
ZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAgT3BlcmFuZCBv
cGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2Nh
bCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOworICAgICAgICBBU1NFUlQobV9vcGVyYW5kID09
IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKICAgICB9CiAg
ICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBtYWNoaW5lTG9jYWwoKQpAQCAtMjA4LDEwICsyMDgs
MTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBj
b2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQogICAgIC8vIHVzYWdlIGZvciB2YXJp
YWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCiAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fYXJndW1lbnRB
d2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFuZCBtX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5vZGVGbGFncyBtX2ZsYWdzOwogCiAgICAgYm9vbCBt
X3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50LmNwcAppbmRleCAyOGU0MzdmZDUxZmVhNDk2OWViNDhlY2YwYzA1MDhmMGEzN2Rm
ODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBjNDNiZDM2ZWQ3MmUzZjljZmJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKQEAgLTU5LDExICs1
OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
ICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgiLCBpZCgpLCAiKSIpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgb3V0LnByaW50KCJNb3ZIaW50KCIsIGlk
KCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwgIikiKTsKKyAgICAgICAgb3V0LnByaW50KCJN
b3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJhbmQoKSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAi
U2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBi
eXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNo
aW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBvcGVyYW5kKCksCiAgICAgICAgICAgICAi
LCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgpKSwgIikiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3MjIzZGQ2ZjY5OWM2ZGJhZDZkMjI0NjdjOTgzNC4u
YzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFhYzQ4MTM4ZDM0ZTNmZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKQEAgLTY4LDYgKzY4LDEwIEBAIGVu
dW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50OF90IHsKIH07CiAKIHVuaW9uIFZhcmlhYmxlUmVw
cmVzZW50YXRpb24geworICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24oKSAKKyAgICAgICAgOiBv
cGVyYW5kKCkgCisgICAgeyB9CisKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHI7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5pb24gVmFyaWFibGVSZXByZXNlbnRhdGlvbiB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CiAgICAgfSBwYWly
OwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0dWFsUmVnOworICAgIE9wZXJhbmQgb3BlcmFuZDsK
IH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQgewpAQCAtMTYyLDcgKzE2Niw3IEBAIHB1YmxpYzoK
ICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC5pZCA9IGlkLmJpdHMoKTsK
ICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAg
cmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAg
ICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlcjsKICAgICAgICAg
ZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0
OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7CkBAIC0xODEsMTMgKzE4
NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNl
dExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRl
Y29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1h
dCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlw
ZSB3aGljaDsKICAgICAgICAgd2hpY2gudmlydHVhbFJlZyA9IG1hY2hpbmVSZWcub2Zmc2V0KCk7
CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAg
IHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQoKTsKKyAgICAg
ICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlT3BlcmFuZDsKICAgICAgICAgZXZl
bnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0g
Zm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7CkBAIC0xOTUs
MTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBldmVudDsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlkLCBWaXJ0dWFs
UmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChN
aW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVjb2RlUmVnKQogICAgIHsKICAgICAgICAgVmFyaWFi
bGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC5p
ZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRh
dGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9m
ZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVSZWc7CiAg
ICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnRFdmVudDsKICAgICAgICAgZXZlbnQubV93aGlj
aCA9IFdURk1vdmUod2hpY2gpOwogICAgICAgICBldmVudC5tX3JlcHJlc2VudGF0aW9uID0gV1RG
TW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0yNjUsMTMgKzI2OSwxMyBAQCBwdWJsaWM6CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsKTsKLSAgICAgICAg
cmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZpcnR1YWxSZWcp
OworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWdp
c3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8IG1fa2luZCA9PSBNb3ZIaW50RXZl
bnQpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0
KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9w
ZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnaXN0ZXIo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQzOWJiMDk0YzRiODY2ZTY3ZWQzZTJlZTFiNDg5NmFi
YjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIxYTM1YWY4ZDIxZGUzMmI1ZGRhMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
CkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6bG9nRXZlbnQoY29u
c3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7CiAgICAgZGF0YUxvZ0YoInNlcSMldToiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CiAgICAgZXZlbnQuZHVtcChXVEY6OmRhdGFGaWxl
KCkpOwotICAgIGRhdGFMb2dGKCIgIik7CisgICAgZGF0YUxvZ0xuKCIgIik7CiB9CiAKIG5hbWVz
cGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFt
OjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFwaCwKICAgICB1bnNpZ25lZCBpbmRleCwgT3BlcmFu
ZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVjb3ZlcmllcywgVmVjdG9yPFVuZGVmaW5lZE9wZXJh
bmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNwYW5zKSBjb25zdAogeworICAgIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6REZHSklUKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsK
KyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW52
YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwogICAgIHVu
c2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIGJvb2wgZmlyc3RVbmRl
ZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBAIC0xMzAsMzcgKzEzMiw0MiBAQCB1bnNpZ25lZCBW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBhdXRvIGZsdXNoVW5kZWZpbmVk
T3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgaWYgKGZpcnN0VW5kZWZp
bmVkID09IGludmFsaWRJbmRleCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IGZp
cnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGZpcnN0
VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292
ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSAtIDEpLm9mZnNldCgpOworICAgICAgICBp
bnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5k
ZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IGxhc3RPZmZz
ZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50IG1pbk9mZnNldCA9IHN0ZDo6bWluKGZpcnN0T2Zm
c2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAgdW5kZWZpbmVkT3BlcmFuZFNwYW5zLT5hcHBlbmQo
eyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0LCBpIC0gZmlyc3RVbmRlZmluZWQgfSk7CiAgICAg
ICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIH07CiAgICAgYXV0byByZWNv
cmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIC8vIFdlIHdh
bnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2YgYXJndW1lbnRzIGZyb20gdGhlIHNwYW4gb2YgbG9j
YWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFjZW50IG9wZXJhbmRzIGluZGV4ZXMuCi0gICAgICAg
IGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0Fy
Z3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpKQorICAgICAgICBpZiAoZmly
c3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAh
PSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKSkKICAgICAg
ICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4oaSk7CiAKICAgICAgICAgaWYgKGZpcnN0
VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkgewogICAgICAgICAgICAgZmlyc3RVbmRlZmluZWQg
PSBpOwotICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVy
aWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQg
PSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKTsKICAgICAg
ICAgfQogICAgIH07CiAKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZh
cmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSktPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVC
bG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBudW1WYXJp
YWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7CisgICAgICAgIG51bVRt
cHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0Owor
ICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5u
dW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5u
dW1UbXBzKCk7CisgICAgfQogICAgIAogICAgIC8vIENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2Un
cmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMgbXVzdCBiZSBhbiBhcmd1bWVudCBjaGVjawogICAg
IC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQg
dXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAogICAgIC8vIHJlZmxlY3QgdGhpcy4KICAgICBpZiAo
IWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgICAgICAv
LyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5
ZXQuCisgICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMsIDApOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3Bl
cmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVJl
Y292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudW1WYXJpYWJsZXM7CiAgICAgfQpAQCAt
MTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAgICAKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBh
IG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVudHMuCi0gICAg
T3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5k
U291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCBudW1UbXBz
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVyYW5kU291cmNlcy5zaXplKCk7IGktLTspCiAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAg
ICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+IGdlbmVyYXRpb25J
bmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgaW5kZXg7ICsraSkg
ewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCA9IGF0KGkpOworICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBldmVudCAiLCBldmVudCk7CiAgICAgICAg
IHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVzZXQ6CiAgICAgICAgICAg
ICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4LDIxICsyMDYsMjMgQEAgdW5zaWduZWQgVmFyaWFi
bGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291
cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAg
ICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZh
bHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5o
YXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJj
ZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldExvY2FsRXZlbnQ6Ci0gICAgICAg
ICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVy
KCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0
ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5l
UmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFu
ZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9w
ZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZTo6Zm9y
RGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kIHNvdXJjZXM6ICIsIG9w
ZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAvLyBTdGVwIDM6IENvbXB1dGUgdmFsdWUgcmVjb3Zl
cmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICB2YWx1ZVJlY292ZXJp
ZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PihPcGVyYW5kc0xpa2UsIG9wZXJhbmRTb3VyY2Vz
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOwog
ICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoKSkgewpAQCAtMjMwLDYg
KzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAg
ICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChzb3VyY2UuaWQoKSk7CiAgICAgICAg
IE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5nZXQoc291cmNl
LmlkKCkpOwogICAgICAgICBpZiAoIWluZm8uYWxpdmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgo
aSksICIgaXMgZGVhZC4iKTsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxl
ID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgICAgICAgICByZWNv
cmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjM3LDYgKzI0OCw3IEBAIHVuc2lnbmVkIFZhcmlh
YmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRy
eVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIG5vZGUpKSB7CisgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMu
b3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNvbnN0YW50LiIpOwogICAgICAgICAgICAgaWYgKHN0
eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkgewogICAgICAgICAgICAgICAg
IGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIG5vZGUtPmNvbnN0YW50KCkgPT0ganNVbmRlZmlu
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAg
LTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVj
dCgKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KLSAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQpOworICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKGluZm8udS5vcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7CiAgICAgfQogICAgIGlmIChzdHlsZSA9PSBS
ZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3Bl
cmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKaW5kZXggMDE1NzMwMDdlZGRkZDcw
ZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4uZTllNDNhYmZlYzQ4NWZlYzdlNjYzMTUxYzFjMjJl
YzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkgKzQyLDEyIEBAIHN0cnVjdCBVbmRlZmluZWRPcGVy
YW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50U3RyZWFtIDogcHVibGljIFZlY3Rv
cjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEFuZExvZyhjb25zdCBWYXJpYWJsZUV2ZW50
JiBldmVudCkKICAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgbG9nRXZl
bnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQoZXZlbnQpOwogICAgIH0KICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA3ODFiNzFlNjky
NDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEwNzZkZTU5ZGFhNGE3MjdkYWM3
ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgog
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBD
b25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNlIEJyYW5jaDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1NGYwOGVkYWYxM2ZiLi5jMDA0
ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCkBAIC0zMSw4ICsz
MSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIEZvck9TUkVudHJ5SklU
Q29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0ZWNvZGVJbmRleChVSU5UX01B
WCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6IG1fZW50cnlGYWlsdXJlQ291
bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNiNzgxY2ZiODliMTFjMzlmOThmN2E5YWJhM2QuLjQ1
ZTgxYmNkZGEyODgxNzNmZTE5OWU4NGM2N2I5Zjg4YzgwMjZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTIwOCw3ICsyMDgsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY2xlYXJTdGFja0ZyYW1lKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFtZVNpemUoKSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOwot
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNvZGVCbG9j
aywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50
SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsKQEAgLTI3NCw3ICsyNzQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBDb2RlQmxvY2sg
dG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVzZQogICAgICAgICAvLyB0aGF0
IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVkLgotICAgICAgICBtX291dC5z
dG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGNvZGVCbG9j
aygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgICAgIG1f
b3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oY29k
ZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENoZWNrLgogICAgICAgICB1
bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JF
eGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHB1YmxpYzoKIAog
ICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5
TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0g
T3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsK
KyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxh
YmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsK
ICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9
CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFs
dWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBAIC0xMjgxLDYgKzEyODEsOSBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAgICAgICAgICAgY29tcGlsZUNh
bGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJh
cmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyArMTk1Niw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NS
RW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExv
Y2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291
dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0
Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGls
ZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQpLCBkYXRhLT5m
b3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYsMTMgKzc5MjksMTMgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVTZXRDYWxs
ZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC03OTQ3
LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlU2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25z
dEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBtX291dC5zdG9yZTMyKG1f
b3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5
bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQpAQCAtOTU0Miw1MSArOTU0
NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgdm9pZCBjb21waWxlVmFy
YXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwot
ICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwo
CiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMy
KGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEg
Y2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdp
Y2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBW
TSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFu
Y2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25l
IHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAg
ICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwogICAgICAgICBMVmFsdWUgbGVu
Z3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMyT25lKTsKIAot
ICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUo
KSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aCwgbGVuZ3RoSW5jbHVk
aW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNsdWRpbmdUaGlzKTsKKyAgICB9
CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNs
dWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAogICAgICAg
ICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0
LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAorICAgICAgICAgICAgbV9vdXQu
Yml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhpcyksIG1fb3V0LmFib3ZlKGxl
bmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSkpOyAKKwog
ICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0
YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21w
dXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9v
ayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBp
cyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50
ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5s
U2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0
Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291dC5zdWIo
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAgICAgCiAgICAgICAgIHZtQ2Fs
bCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJhcmdzLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFjaGluZVN0YXJ0
KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwKLSAgICAgICAg
ICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7Cisg
ICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1h
bmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZh
cmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAg
ICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBp
ZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVu
dHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+
b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50
b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3By
ZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU5NSw1MCArOTU5OCwyNyBAQCBw
cml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwot
ICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
KyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJh
bWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAg
ICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRp
bmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0
aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBpZiAoYXJn
dW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtub3duTGVuZ3Ro
ID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAgaWYgKGtub3duTGVuZ3RoID49
IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtub3duTGVuZ3Ro
IC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGtub3du
TGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25M
ZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50
MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBh
Ym92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgotICAgICAgICAgICAgaWYgKCFk
YXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLnZh
bHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNM
YXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5j
b25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlv
bikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNM
ZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOwotICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIGxlbmd0
aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxl
bmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxKSk7Ci0gICAgICAgIH0K
LQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNl
dDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXM7IAor
ICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKKyAgICAgICAgICAgIExWYWx1
ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1YihjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291
dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CisgICAgICAgICAgICBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChm
aXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVy
bywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKKyAgICAgICAgfSBlbHNlIAor
ICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNhbGxlckxlbmd0aEluY2x1ZGluZ1Ro
aXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRpbmdU
aGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZh
cmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgbV9vdXQuYWJv
dmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsK
ICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5
bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAgICBMVmFsdWUg
c291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0Zv
cihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk2OTcsNjUgKzk2NzcsMjAgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwg
b3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlv
bnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5U
MzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9j
aygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGggPSBtX291dC5zdWIoYXJndW1lbnRzTGVuZ3Ro
LnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKLSAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQz
MihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29u
dGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdl
ckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZh
bHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIHNt
YWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOworICAgICAgICBy
ZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwg
bV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJl
ZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVGb3J3
YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxs
RnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gs
IFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRM
ZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCku
bm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKIAotICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7Ci0gICAgICAgIFZlY3RvcjxMVmFs
dWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgYXV0byBjb2xsZWN0QXJndW1lbnRDb3Vu
dCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0KSAtPiB2b2lk
IHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewotICAg
ICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldC0+b3Ao
KSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgQml0VmVj
dG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3RvcigpOwotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNoaWxkcmVuKCk7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFyZ2V0LCBpKS5ub2RlKCkpOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICArK251bWJlck9m
U3RhdGljQXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhh
bnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZTdGF0aWNBcmd1
bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxl
bmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7Ci0gICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAg
ICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRTcHJlYWRMZW5ndGhzLmVuc3VyZShp
bmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmdl
dFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUpOwotICAg
ICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0QXJndW1lbnRDb3VudChhcmd1bWVudHMpOwotICAg
ICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoMSArIG51
bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3By
ZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQo
bGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBzcGVj
dWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExWYWx1ZSB0
YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCi0g
ICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMsICZjYWNo
ZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBM
VmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFk
ID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUq
IHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CiAgICAgICAgICAgICBpZiAo
dGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0b3JlSW5kZXgpOwogCkBAIC05Nzk4LDggKzk3
MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0LT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0
YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsK
LSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGNhY2hl
ZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOworICAgICAgICAgICAgYXV0byBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0
YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOworICAgICAgICAg
ICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoZ2V0U3ByZWFkTGVuZ3Ro
RnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBtX291dC5uZXdCbG9jaygp
OwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHNjb3Bl
ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX291dC5zdG9yZVB0ciht
X2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2ZyYW1lKTsK
LSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKDApKSwgcGFj
a2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKLSAgICAgICAg
bV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsKKyAg
ICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdp
c3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVyRnJh
bWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxvYWRGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgcGFja2V0LCBtX2hlYXBzLlNo
YWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHNjb3Bl
LCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfc2NvcGUpOwogICAgIH0KICAg
ICAKQEAgLTEyMzE2LDcgKzEyMjUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQXJndW1lbnRzTGVu
Z3RoIGxlbmd0aDsKIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICBsZW5ndGgua25vd24gPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgIGxl
bmd0aC5rbm93biA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICBsZW5ndGguaXNLbm93biA9
IHRydWU7CiAgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5jb25zdEludDMyKGxlbmd0
aC5rbm93bik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjM0Niw3ICsxMjI4Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihmcmFt
ZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIHJldHVy
biB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIH0KICAg
ICAKICAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzYxMSw3ICsxNzU0Nyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1fZnRsU3RhdGUu
aml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAgICAgIG1fb3V0
LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxTaXRlSW5kZXguYml0
cygpKSwKLSAgICAgICAgICAgIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7
CisgICAgICAgICAgICB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8ICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1fb3V0LmFic29s
dXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0xNzcxOSw3ICsxNzY1NSw4IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVz
Y3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwK
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRz
KCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9j
YWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZlRt
cHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMTc4MjQsMTUgKzE3
NzYxLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXRE
ZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9s
b2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0
ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4u
bW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAgICAgICAgICAgICAgaWYgKGF2
YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkKLSAgICAgICAgICAgICAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBh
dmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIsIGF2YWls
YWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0
YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3Jh
cGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBleGl0T3JpZ2luKSkKKyAgICAgICAgICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2Rl
IGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBvcGVyYW5kLCAiLCBhdmFpbGFiaWxp
dHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZh
bHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOwogICAgICAg
ICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKQEAgLTE4
MTMyLDM5ICsxODA2OSwzOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFk
eVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgIH0K
ICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJh
bmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExW
YWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNbb3Bl
cmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVh
cHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCldLCBvZmZzZXQp
OwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgaW50IG9w
ZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQs
IFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBi
YXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBP
cGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBv
cGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zvcihp
bnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJl
c3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwgb2Zm
c2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJh
bmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwg
b3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9j
YWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLCBvZmZzZXQpOworICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCwgb2Zmc2V0KTsKICAgICB9Ci0gICAgVHlw
ZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxv
YWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Io
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Iob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0
YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihPcGVyYW5kIG9wZXJh
bmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAppbmRleCA5MzMx
NzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5Li4wOTFlN2YzYzliNDk4MzQwNzZh
OGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAg
ICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxuIik7CiAgICAg
CiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJn
dW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5hc2FuVW5zYWZl
SlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCk7
CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9IHZhbHVlcy5h
cmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZhbHVlICYmIHZh
bHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFyZ3VtZW50KQog
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYxOGUzLi4wNGM4
NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IoCiAgICAgRGF0
YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2
YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51
bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9wcm9maWxlRGF0
YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJv
ZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2FscykK
KyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2FscywgbnVtYmVy
T2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0lu
dGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayog
ZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXggZGE4N2NjZjMy
NzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMxZjZhZWNlMDk3
YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgK
QEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3QgT1NSRXhpdERl
c2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRhRm9ybWF0IHBy
b2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAotICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOworICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMs
IHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8g
dGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCiAgICAgLy8g
SWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdl
J2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4ODE3NmVlNzIu
LmEzNzg0MTBkYTliODAxNTcyNGE5ZGMxNmMzZmUxYWVjMDgwNTVkNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5o
IgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwxMSBAQAogI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUg
IkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgog
I2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0s
IHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAgICAg
c2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVD
b2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCisgICAgaWYg
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkp
IHsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRv
ci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7CisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAg
ICAgaml0LnByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
IGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4
IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlx
dWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAgICAgICBzaWRl
U3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisKKyAg
ICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RG
TW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IENv
ZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdp
biAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Cisg
ICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxD
YWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2Fs
bEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRl
Y29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAg
ICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAg
ICB9KTsKKyAgICB9CisKICAgICAvLyBOb3cgZ2V0IHN0YXRlIG91dCBvZiB0aGUgc2NyYXRjaCBi
dWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2suIFRoZSB2YWx1ZXMgYXJlCiAg
ICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1c3QgbW92ZSB0aGVtLgogICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0t
OykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1f
dmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKyAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpbmRl
eCk7CisKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNf
Y2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nh
c3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlZykpOworICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZv
OjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyh2bSwgaml0LCBleGl0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCmluZGV4IDdm
N2NkMzgzMjQ5NjFhOGZmNGU0NzI1OWE4ODRkZTg2ZDU2NGIxMTcuLjEwMmMxZTZhMWJkOWViM2I0
NzEzMzc0NGY4NDNlYzY0ZDYzYTE4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPcGVyYXRpb25zLmNwcApAQCAtNTA1LDcgKzUwNSw3IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoSlNHbG9iYWxPYmpl
Y3QqCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJm
bHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0
ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0
KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICAgICAg
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0
dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IDc0OTMzZGM2MDUxNWM1ZGEwMGVhMThmYzdkNWRi
M2FkOWNlNWU5Y2YuLmQ1N2ZiMWVlYTgwNDRhMzRiNzkxNzY4YTkwOTc2OTg5OThhYzMzOTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsMTUgKzY1NSwz
NyBAQCBMVmFsdWUgT3V0cHV0Ojpub3RaZXJvNjQoTFZhbHVlIHZhbHVlKQogICAgIHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2lu
KCksIHZhbHVlLCBpbnQ2NFplcm8pOwogfQogCi1MVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVl
IHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikKK0xWYWx1ZSBPdXRwdXQ6OnNl
bGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFNlbGVjdFByZWRp
Y3RhYmlsaXR5IHByZWRpY3RhYmlsaXR5KQogewogICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkg
ewogICAgICAgICBpZiAodmFsdWUtPmFzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB0YWtl
bjsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gbm90VGFrZW47CisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgfQotICAgIHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9y
aWdpbigpLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsKKworICAgIGlmIChwcmVkaWN0YWJpbGl0
eSA9PSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpCisgICAgICAgIHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdp
bigpLCB2YWx1ZSwgbGVmdCwgcmlnaHQpOworCisgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gbmV3QmxvY2soKTsKKyAgICBMQmFzaWNCbG9jayBsZWZ0VGFrZW5CbG9jayA9IG5ld0Jsb2Nr
KCk7CisgICAgTEJhc2ljQmxvY2sgcmlnaHRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsKKworICAg
IG1fYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgbV9wcm9jLCBCMzo6QnJh
bmNoLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhsZWZ0VGFrZW5C
bG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OlJpZ2h0TGlrZWx5
ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwKKyAgICAg
ICAgRnJlcXVlbnRlZEJsb2NrKHJpZ2h0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2Vs
ZWN0UHJlZGljdGFiaWxpdHk6OkxlZnRMaWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsIDog
RnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAgIExWYWx1ZSBwaGkgPSBjb250aW51YXRpb24t
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlBoaSwgbGVmdC0+dHlwZSgpLCBvcmln
aW4oKSk7CisKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIGxlZnQsIHBoaSk7CisgICAgbGVmdFRha2VuQmxvY2stPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1ZW50
ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3
PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHJpZ2h0LCBwaGkpOworICAgIHJp
Z2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9y
aWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOworCisgICAgbV9ibG9j
ayA9IGNvbnRpbnVhdGlvbjsKKyAgICByZXR1cm4gcGhpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojph
dG9taWNYY2hnQWRkKExWYWx1ZSBvcGVyYW5kLCBUeXBlZFBvaW50ZXIgcG9pbnRlciwgV2lkdGgg
d2lkdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAppbmRleCBjNTZiNGVmN2Uw
NjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1NzBjYTJlLi40YzAyYjM0MDg1MTQ2ZjdkZjAyNTYyN2Q1
ZmYzMWM3ODEwZDhmYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAg
LTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVk
ZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIkZUTENvbW1vblZhbHVl
cy5oIgorI2luY2x1ZGUgIkZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmgiCiAjaW5jbHVkZSAiRlRM
U3RhdGUuaCIKICNpbmNsdWRlICJGVExTd2l0Y2hDYXNlLmgiCiAjaW5jbHVkZSAiRlRMVHlwZWRQ
b2ludGVyLmgiCkBAIC0zNjUsNyArMzY2LDcgQEAgcHVibGljOgogICAgIExWYWx1ZSB0ZXN0SXNa
ZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzTnVsbChiaXRBbmQo
dmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0ZXN0Tm9uWmVyb1B0cihMVmFsdWUgdmFsdWUs
IExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3ROdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAK
LSAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90
VGFrZW4pOworICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExW
YWx1ZSBub3RUYWtlbiwgU2VsZWN0UHJlZGljdGFiaWxpdHkgPSBTZWxlY3RQcmVkaWN0YWJpbGl0
eTo6Tm90UHJlZGljdGFibGUpOwogICAgIAogICAgIC8vIFRoZXNlIGFyZSByZWxheGVkIGF0b21p
Y3MgYnkgZGVmYXVsdC4gVXNlIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2Vk
QWNjZXNzKCkgd2l0aCBhCiAgICAgLy8gbm9uLW51bGwgaGVhcCB0byBtYWtlIHRoZW0gc2VxX2Nz
dCBmZW5jZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVj
dFByZWRpY3RhYmlsaXR5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE4NTNiYTk4NTIyYWFhYzYxYjg0OTk1NTI3OTRh
NTA5MzBjN2Q2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0M6OkZUTCB7CisKK2VudW0gY2xhc3MgU2VsZWN0
UHJlZGljdGFiaWxpdHkgOiB1aW50OF90IHsKKyAgICBOb3RQcmVkaWN0YWJsZSwKKyAgICBQcmVk
aWN0YWJsZSwKKyAgICBMZWZ0TGlrZWx5LAorICAgIFJpZ2h0TGlrZWx5LAorfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKaW5kZXggNjkzNGMzZjBkMzc5MWY2
NGJhNDI5NjNlMDU1NjNkYmJjN2RkYTVhNC4uYzcyNmFkMjdjODE1YWM2N2E2NzBkMjU4MDRhYThj
YWUyMmIzYTBkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oCkBAIC0xMDAsNyArMTAwLDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAg
aWYgKGNhbGxTaXRlSW5kZXgpIHsKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGNhbGxPcGVyYXRp
b24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5jdGlvbiwgcmVz
dWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhNWY1Mjc3ZGQ2MzFhY2Q0Y2NiZWNk
MTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
IyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgQ2hlY2twb2ludAorICAgIGF0dHJfcmVh
ZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRlZnMKKyAgICBhdHRyX3JlYWRlciA6bmFtZQor
ICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgaW5kZXgs
IHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAaW5kZXggPSBpbmRleAorICAg
ICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9PSA6dXNl
IH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYg
PT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MobmFtZXNwYWNlKQorICAg
ICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNwYWNlfTo6I3tuYW1lfToKK0VPRgorICAgIGVu
ZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisgICAgZGVmIGluaXRpYWxpemUob3Bjb2RlLCB0
bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAdG1w
cyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwX3dpdGhfaW5k
ZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hlY2twb2ludC5uZXcobmFtZSwgaW5kZXgsIHRt
cHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcworICAgICAgICBAY2hlY2twb2ludHMu
ZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAgICBlbmQKKyAgICAgICAgRU9GPC0tCitCaXRN
YXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ije0BvcGNvZGUuY2FwaXRhbGl6ZWRfbmFtZX0o
dWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3aXRjaCAoY2hlY2twb2ludCkgeworCisgICAg
fQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9P
cGNvZGUucmIKaW5kZXggZGFiODY4NmNhMzNhMTAyYzliZmExZGYxODAzZWJiNGYwYWIyNDQ4NS4u
Y2ZkOWRmMTUxMTQ3YTg2ZGE0YmM3NWJlNDZhNjc4MjVlMjUzNzVmMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAgLTMwLDYgKzMwLDcgQEAgY2xhc3MgT3Bj
b2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAgICBhdHRyX3JlYWRlciA6bWV0YWRhdGEKICAg
ICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0cl9yZWFkZXIgOmNoZWNrcG9pbnRzCiAKICAg
ICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cgPSAiT3Bjb2RlU2l6ZTo6TmFycm93IgpAQCAt
NDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQogICAgICAgICB0aWQKICAgICBlbmQKIAotICAg
IGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1l
dGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBl
eHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMsIHRtcHMsIGNoZWNr
cG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNlY3Rpb24KICAgICAgICAgQG5hbWUgPSBuYW1l
CiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwge30KICAgICAgICAgQG1ldGFkYXRhID0gTWV0
YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMKICAgICAgICAgQGFyZ3Mg
PSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdfbmFtZSwgdHlwZSksIGluZGV4fCBBcmd1bWVu
dC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4ICsgMSB9IHVubGVzcyBhcmdzLm5pbD8KKyAgICAg
ICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcCB7
IHwoY2hlY2twb2ludCwgXyl8IGNoZWNrcG9pbnQgfSB1bmxlc3MgY2hlY2twb2ludHMubmlsPwog
ICAgIGVuZAogCiAgICAgZGVmIGNyZWF0ZV9pZCEKQEAgLTExOCw2ICsxMjEsOCBAQCBjbGFzcyBP
cGNvZGUKICAgICAgICAgPDwtRU9GCiBzdHJ1Y3QgI3tjYXBpdGFsaXplZF9uYW1lfSA6IHB1Ymxp
YyBJbnN0cnVjdGlvbiB7CiAgICAgI3tvcGNvZGVJRH0KKyAgICAje3RlbXBzfQorICAgICN7Y2hl
Y2twb2ludFZhbHVlc30KIAogI3tlbWl0dGVyfQogI3tkdW1wZXJ9CkBAIC0xMzIsNiArMTM3LDE4
IEBAIEVPRgogICAgICAgICAic3RhdGljIGNvbnN0ZXhwciAje29wY29kZUlEVHlwZX0gb3Bjb2Rl
SUQgPSAje25hbWV9OyIKICAgICBlbmQKIAorICAgIGRlZiBjaGVja3BvaW50VmFsdWVzCisgICAg
ICAgIHJldHVybiBpZiBAY2hlY2twb2ludHMubmlsPworCisgICAgICAgIFsiZW51bSBDaGVja3Bv
aW50cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChjaGVja3BvaW50cy5tYXB7IHxjaGVja3BvaW50fCAi
ICAgICAgICAje2NoZWNrcG9pbnR9LCIgfSkuY29uY2F0KFsiICAgICAgICBudW1iZXJPZkNoZWNr
cG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4iKQorICAgIGVuZAorCisgICAgZGVmIHRlbXBz
CisgICAgICAgIHJldHVybiBpZiBAdG1wcy5uaWw/CisKKyAgICAgICAgWyJlbnVtIFRtcHMgOiB1
aW50OF90IHsiXS5jb25jYXQoQHRtcHMubWFwIHt8KHRtcCwgdHlwZSl8ICIgICAgICAgICN7dG1w
fSwifSkucHVzaCgiICAgIH07Iikuam9pbigiXG4iKQorICAgIGVuZAorCiAgICAgZGVmIGVtaXR0
ZXIKICAgICAgICAgb3Bfd2lkZTE2ID0gQXJndW1lbnQubmV3KHdpZGUxNiwgb3Bjb2RlSURUeXBl
LCAwKQogICAgICAgICBvcF93aWRlMzIgPSBBcmd1bWVudC5uZXcod2lkZTMyLCBvcGNvZGVJRFR5
cGUsIDApCkBAIC0yMDAsNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxPcGNvZGVT
aXplIF9fc2l6ZSwgYm9vbCByZWNvcmRPcGNvZGUsIHR5cGVuYW1lIEJ5dGVjb2RlR2VuZXJhdG9y
PgogICAgIHN0YXRpYyBib29sIGVtaXRJbXBsKEJ5dGVjb2RlR2VuZXJhdG9yKiBnZW4je3R5cGVk
X2FyZ3N9I3ttZXRhZGF0YV9wYXJhbX0pCiAgICAgeworICAgICAgICAjeyFAY2hlY2twb2ludHMu
bmlsPyA/ICJnZW4tPnNldFVzZXNDaGVja3BvaW50cygpOyIgOiAiIn0KICAgICAgICAgaWYgKF9f
c2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMTYpCiAgICAgICAgICAgICBnZW4tPmFsaWduV2lkZU9w
Y29kZTE2KCk7CiAgICAgICAgIGVsc2UgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMzIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKaW5kZXggMjA0YWM3
NTllMTNlZmYxNTFmOGNkMTc3ZjNiZjFiNzBlMDc3OWNhYS4uNjY4NTViYTY1MDA4MGU0YzIzY2Mw
ZWJlYzEwZTc5NDljZGU3NjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
U2VjdGlvbi5yYgpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBTZWN0aW9uCiAgIGVuZAogCiAgIGRl
ZiBjcmVhdGVfb3Bjb2RlKG5hbWUsIGNvbmZpZykKLSAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFt
ZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29u
ZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdKQorICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1l
LCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25m
aWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10sIGNvbmZpZ1s6dG1wc10sIGNvbmZpZ1s6Y2hlY2tw
b2ludHNdKQogICBlbmQKIAogICBkZWYgYWRkX29wY29kZV9ncm91cChuYW1lLCBvcGNvZGVzLCBj
b25maWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwCmluZGV4IGY2Mzk0YWM3MTA3MTI1YjdjYWIyMWFkMmI5MTEzYzA3OTUzNmE2MDAuLmVmN2Y2
Yzk0ZjQxNjhiNGEyODQ2MDUzYTVkMDEzYmUxMTIyMGRlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZv
aWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFt
ZSogZ2xvYmFsRXhlYywgSlNDYWxsCiAgICAgQVNTRVJUKGdsb2JhbEV4ZWMtPmlzRGVwcmVjYXRl
ZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkpOwogfQogCi1ib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAorYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0
c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAg
ICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CkBAIC05MCwxMiArOTAsMTIgQEAg
Ym9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiAK
IHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJl
dHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpOworICAgIHJldHVy
biB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnRh
ZygpOwogfQogCiBTVVBQUkVTU19BU0FOIHVuc2lnbmVkIENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNp
dGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRdLnVuc2FmZVRhZygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGlu
dD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnVuc2FmZVRhZygpOwogfQogCiBDYWxs
U2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1
LDcgQEAgQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdAogCiBT
VVBQUkVTU19BU0FOIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUluZGV4
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVuc2Fm
ZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkgJiAoc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpID4+IEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCkpKTsKIH0K
IAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xMTcsMzMgKzExNywzNCBAQCBjb25zdCBJbnN0
cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIHZvaWQgQ2FsbEZyYW1lOjpz
ZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZShCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odnBjKSkpOwot
ICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5i
aXRzKCk7CisgICAgdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpXS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1l
OjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29k
ZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsK
KyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4g
Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGN1cnJlbnRWUEMoKSk7ICAgICAKIH0KIAogI2Vs
c2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1
cnJlbnRWUEMoKSBjb25zdAogewotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9m
ZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAg
ICByZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxTaXRlQml0c0FzQnl0
ZWNvZGVPZmZzZXQoKSkucHRyKCk7CiB9CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBD
KGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShj
b2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRdLnRhZygpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0
cygpKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCldLnRhZygpID0gY2FsbFNpdGUuYml0cygpOworICAgIEFTU0VSVChjdXJyZW50VlBDKCkg
PT0gdnBjKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2Rl
T2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChj
YWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRz
QXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJpdHMoKTsK
IH0KIApAQCAtMTY1LDggKzE2Niw4IEBAIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1lOjpieXRlY29k
ZUluZGV4KCkKICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAg
IH0KICNlbmRpZgotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsK
LSAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkp
OworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOworICAgIHJldHVy
biBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpOwogfQogCiBDb2RlT3JpZ2luIENhbGxG
cmFtZTo6Y29kZU9yaWdpbigpCkBAIC0xODAsNyArMTgxLDcgQEAgQ29kZU9yaWdpbiBDYWxsRnJh
bWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNvZGVPcmlnaW4o
aW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5k
ZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKSk7CisgICAgcmV0dXJuIENvZGVPcmln
aW4oY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKSk7CiB9CiAKIFJlZ2lzdGVyKiBDYWxs
RnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggY2ZiNzcxODU2MDM5OTMzOTEwMDRmYzEzMjExODM4
NDIzYzVkYzZhOS4uNjQ0OTBlN2E3MDdlZWIwMWJhMDdhY2EzMzI2MjNhZGUxM2UwYzk0MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtQ2xhc3NPcGVyYXRv
ck92ZXJsb2Fkcy5oPgogCiBuYW1lc3BhY2UgSlNDICB7CiAKQEAgLTQ2LDE4ICs0NywyNCBAQCBu
YW1lc3BhY2UgSlNDICB7CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAg
ICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKLSAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0g
ICAgICAgIHsgfQorICAgICAgICAgICAgOiBtX2JpdHMoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkK
KyAgICAgICAgeyAKKyAgICAgICAgICAgIEFTU0VSVCghYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpOworICAgICAgICB9CiAKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4
ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3Ro
ZXIubV9iaXRzOyB9CiAKLSAgICAgICAgdWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQorICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3Qg
eyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoYml0cygpKTsg
fQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMp
CisgICAgICAgICAgICA6IG1fYml0cyhiaXRzKQorICAgICAgICB7IH0KICAgICBwcml2YXRlOgot
ICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgdWludDMyX3Qg
bV9iaXRzIHsgQnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CiAgICAgfTsKIAogICAgIGNsYXNz
IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IDogcHVibGljIENhbGxTaXRlSW5kZXggewpAQCAtNjUs
NyArNzIsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIERpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIGV4cGxpY2l0IERpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAgICAgICA6IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleDo6ZnJvbUJpdHMoYml0cykpCisgICAgICAgICAgICA6IENhbGxTaXRlSW5kZXgoYml0cykK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTc4LDI0ICs4NSwyNyBAQCBuYW1lc3BhY2UgSlND
ICB7CiAgICAgLy8gYXJtNjRfMzIgZXhwZWN0cyBjYWxsZXIgZnJhbWUgYW5kIHJldHVybiBwYyB0
byB1c2UgOCBieXRlcyAKICAgICBzdHJ1Y3QgQ2FsbGVyRnJhbWVBbmRQQyB7CiAgICAgICAgIGFs
aWduYXMoQ1BVUmVnaXN0ZXIpIENhbGxGcmFtZSogY2FsbGVyRnJhbWU7Ci0gICAgICAgIGFsaWdu
YXMoQ1BVUmVnaXN0ZXIpIGNvbnN0IEluc3RydWN0aW9uKiByZXR1cm5QQzsKKyAgICAgICAgYWxp
Z25hcyhDUFVSZWdpc3Rlcikgdm9pZCogcmV0dXJuUEM7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IHNpemVJblJlZ2lzdGVycyA9IDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpIC8gc2l6ZW9m
KFJlZ2lzdGVyKTsKICAgICB9OwogICAgIHN0YXRpY19hc3NlcnQoQ2FsbGVyRnJhbWVBbmRQQzo6
c2l6ZUluUmVnaXN0ZXJzID09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdp
c3RlciksICJDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgaXMgaW5jb3JyZWN0LiIp
OwogCi0gICAgc3RydWN0IENhbGxGcmFtZVNsb3QgewotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNhbGxlZSA9IGNvZGVCbG9jayArIDE7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IGFyZ3VtZW50Q291bnQgPSBjYWxsZWUgKyAxOwotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIGludCB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50ICsgMTsK
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RBcmd1bWVudCA9IHRoaXNBcmd1bWVu
dCArIDE7CisgICAgZW51bSBjbGFzcyBDYWxsRnJhbWVTbG90IDogaW50IHsKKyAgICAgICAgY29k
ZUJsb2NrID0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzLAorICAgICAgICBjYWxs
ZWUgPSBjb2RlQmxvY2sgKyAxLAorICAgICAgICBhcmd1bWVudENvdW50ID0gY2FsbGVlICsgMSwK
KyAgICAgICAgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRDb3VudCArIDEsCisgICAgICAgIGZpcnN0
QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxLAogICAgIH07CiAKKyAgICBPVkVSTE9BRF9NQVRI
X09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQor
ICAgIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5U
RUdSQUxTKENhbGxGcmFtZVNsb3QpCisKICAgICAvLyBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0
YXRlIG9mIHNjcmlwdCBleGVjdXRpb24uCiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1
bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAgICBjbGFzcyBDYWxsRnJhbWUgOiBwcml2YXRlIFJl
Z2lzdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRl
clNpemVJblJlZ2lzdGVycyA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyAxOworICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBoZWFkZXJTaXplSW5SZWdpc3RlcnMgPSBzdGF0aWNf
Y2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpICsgMTsKIAogICAgICAgICAv
LyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiB2ZXJ5IHNwZWNpZmljIGNp
cmN1bXN0YW5jZXMKICAgICAgICAgLy8gd2hlbiB5b3UndmUgZ3VhcmFudGVlZCB0aGUgY2FsbGVl
IGNhbid0IGJlIGEgV2FzbSBjYWxsZWUsIGFuZCBjYW4KQEAgLTEwNiwxMCArMTE2LDEwIEBAIG5h
bWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gdG8gc2VlIGlmIGl0J3MgYSBjZWxsLCBhbmQgaWYg
aXQncyBub3QsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgaW5saW5lIEpTVmFsdWUg
Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTT2JqZWN0
KiBqc0NhbGxlZSgpIGNvbnN0OwotICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsg
cmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7
IH0KLSAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxsZWVCaXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0
IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNh
ZmVQb2ludGVyKCkpOyB9CisgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1
cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KV0ucG9pbnRlcigpKTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZl
Q2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGludD4o
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0uYXNhblVuc2FmZVBvaW50ZXIoKSk7IH0KICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdDsKLSAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVz
c09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0
aGlzICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsgfQorICAgICAgICBDb2RlQmxvY2sqKiBh
ZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2Nr
Kio+KHRoaXMgKyBzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOyB9
CiAgICAgICAgIGlubGluZSBTVVBQUkVTU19BU0FOIENvZGVCbG9jayogdW5zYWZlQ29kZUJsb2Nr
KCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU1Njb3BlKiBzY29wZShpbnQgc2NvcGVSZWdpc3Rl
ck9mZnNldCkgY29uc3Q7CiAKQEAgLTE0Niw3ICsxNTYsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0dXJuUEMpOyB9CiAgICAgICAgIEFic3RyYWN0
UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0dXJuIEFic3RyYWN0UEModm0sIHRoaXMp
OyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0
OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdDsKICAg
ICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdDsKIAogICAg
ICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0OwpAQCAtMTgyLDE1ICsxOTIs
MTMgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgdm9pZCBpbml0RGVwcmVjYXRl
ZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGds
b2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVm
cmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2NrKS4KLSAgICAgICAgUmVnaXN0ZXIm
IHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAg
Ly8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFudAotICAgICAgICBSZWdpc3RlciYg
dW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEga25vd24g
bm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rl
cik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBj
YXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAg
ICAgICBzaXplX3QgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgLSAxOyB9Ci0gICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dF0ucGF5bG9hZCgpOyB9CisgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KV0ucGF5bG9hZCgpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRP
ZmZzZXQoaW50IGFyZ3VtZW50KSB7IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVu
dCArIGFyZ3VtZW50KTsgfQogICAgICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0SW5jbHVk
aW5nVGhpcyhpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKyBhcmd1bWVudCk7IH0KIApAQCAtMjM5LDcgKzI0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsK
IAogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCk7
CiAKLSAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSB7IHJldHVybiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7IH0KKyAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Io
c2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KIAogICAg
ICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBub0NhbGxlcigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAg
ICAgICAgYm9vbCBpc0RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpIGNvbnN0CkBAIC0y
NTEsMTAgKzI1OSwxMCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIGJvb2wgaXNTdGFja092
ZXJmbG93RnJhbWUoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1dhc21GcmFtZSgpIGNvbnN0Owog
Ci0gICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7
IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dF0ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS5wYXlsb2FkKCkgPSBj
b3VudDsgfQogICAgICAgICBpbmxpbmUgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqKTsKICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVCbG9jayopOwotICAgICAgICB2b2lkIHNl
dFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPih2YWx1ZSk7IH0KKyAgICAgICAgdm9p
ZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMg
PSB2YWx1ZTsgfQogCiAgICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZSgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5s
aW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGlu
ZXMuaAppbmRleCBhOTdkZWNhNTNiY2UxNzkyODliMGMzODBkMDRlOGYyYTg2MDQ3N2QxLi5lZTdl
YzJhYjEwNGE3YTM0ZDk4YjBmNDM4ZjY0NGMyZGNhMWM1MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMyLDUw
ICszMiwzOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJh
bWU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29k
ZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5k
ZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOwot
fQotCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgQ2Fs
bEZyYW1lOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07
CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWdpc3Rlcio+KCZ0aGlzLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRSZWdpc3RlcihyZWcp
KTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgUmVnaXN0ZXIm
IENhbGxGcmFtZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVy
biB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CisgICAgQVNTRVJUKCFyZWcuaXNDb25zdGFudCgp
KTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBD
YWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
IWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxs
ZWVdLmpzVmFsdWUoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSldLmpzVmFsdWUoKTsKIH0KIAogaW5saW5lIEpTT2JqZWN0KiBDYWxsRnJh
bWU6OmpzQ2FsbGVlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsK
LSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLm9iamVjdCgpOworICAgIHJl
dHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ub2JqZWN0
KCk7CiB9CiAKIGlubGluZSBDb2RlQmxvY2sqIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpj
b2RlQmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIFNVUFBS
RVNTX0FTQU4gQ29kZUJsb2NrKiBDYWxsRnJhbWU6OnVuc2FmZUNvZGVCbG9jaygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6YXNh
blVuc2FmZUNvZGVCbG9jaygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsK
IH0KIAogaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6OmxleGljYWxHbG9iYWxPYmpl
Y3QoVk0mIHZtKSBjb25zdApAQCAtMTAyLDEyICs5MSwxMiBAQCBpbmxpbmUgYm9vbCBDYWxsRnJh
bWU6OmlzV2FzbUZyYW1lKCkgY29uc3QKIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDYWxs
ZWUoSlNPYmplY3QqIGNhbGxlZSkKIHsKLSAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMp
W0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBjYWxsZWU7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0
ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gY2Fs
bGVlOwogfQogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNldENvZGVCbG9jayhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKLSAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9ja10gPSBjb2RlQmxvY2s7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
Pih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldID0gY29k
ZUJsb2NrOwogfQogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNldFNjb3BlKGludCBzY29wZVJl
Z2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDIwOWMzYTFiZTRmNThkYWVhODA3ZTNiYWZlZjBkNGJhMDJmZjQ2YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldFRtcChzaXplX3Qgb2Zmc2V0KSAK
KyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50NjRf
dCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHRtcHNbb2Zmc2V0XSk7Cisg
ICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQzMl90KSkK
KyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09
IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0
YXRpY19jYXN0PHVpbnQxNl90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBzaXplb2YodWludDhfdCkpOworICAg
ICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50OF90Pih0bXBz
W29mZnNldF0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleDsKKyAgICB2b2lkKiBuZXh0SW5zdHJ1Y3Rpb25KdW1wVGFyZ2V0OworICAgIHVpbnQ2
NF90IHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZGFhOTRjODlm
OTAwNWE5OTcyZmMwZTNiMDJlYjg5M2QyMTFjZGQ5Ny4uYzE5ZDUwZDM0NWQ0OWZlNGZmNzJkNTUy
YzFmNDM4YTE5N2U0YmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNv
ZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2Nv
cGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFy
Z3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXgg
Y2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNh
bGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUo
KTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tl
ZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpLlJlZ2lzdGVyOjpzY29wZSgpOwog
ICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBj
YWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjEz
LDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVu
dHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3Ro
IC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UKQEAgLTI0OSw3ICsyNTMsNyBAQCB1bnNp
Z25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZh
cmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAo
VU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYxLDMxICsyNjUsMzEgQEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0
Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2Vs
bCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4o
Y2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9m
ZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRz
VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJn
dW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
Zmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVk
QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJ
bW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAg
IGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMu
aXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5j
b3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxl
bmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQg
aTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4
UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwor
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5
KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAg
ICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIH0gfQpAQCAtMjk3LDggKzMwMSw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJh
bWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENh
bGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAg
ICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFt
ZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwK
ICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZy
YW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsKQEAgLTUzOCw4
ICs1NDEsMTMgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVC
bG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9p
c1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAg
aWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBv
cnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklU
KQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMgPT0gJkxMSW50OjpjaGVja3BvaW50X29zcl9l
eGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQpCisgICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPnZtKCkuZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUobV9jYWxsRnJhbWUpOworI2Vu
ZGlmCisgICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewogICAgICAgICAgICAgICAg
IG1faGFuZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBS
ZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgICAgICAgICAgICAgIGlmIChtX2hhbmRs
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CkBAIC01
NjEsNiArNTY5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2hvdWxkU3RvcFVud2luZGluZykK
ICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKKyAgICAgICAgbV9yZXR1
cm5QQyA9IG1fY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCk7CiAgICAgICAgIHJldHVybiBT
dGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0KIApAQCAtNTk3LDYgKzYwNiw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYgbV9jb2RlQmxv
Y2s7CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgbXV0YWJsZSBjb25zdCB2b2lk
KiBtX3JldHVyblBDIHsgbnVsbHB0ciB9OwogfTsKIAogTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNl
cHRpb24qIGV4Y2VwdGlvbikKQEAgLTg2Niw3ICs4NzYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlQ2FsbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVj
dCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKQorICAgIGlm
IChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6ZSgpID4gbWF4
QXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJm
bG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAKICAgICBpZiAoaXNKU0NhbGwp
IHsKQEAgLTkzNSw3ICs5NDUsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25z
dHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTTwogICAgIH0KIAog
ICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChV
TkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgeworICAgIGlmIChVTkxJS0VMWSgh
dm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6ZSgpID4gbWF4QXJndW1lbnRzKSkg
ewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCmluZGV4IDg2YzMyNDY5MjA0ZTlhZTU5
MTFmZWNlYTkwMmFlOTdjYWI1NWQzYTAuLmZmMWI0ZTg2MTA0Yzk2MjU5Nzc5ZTI1Mjc5MjJhZjMz
NDdjZjI5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCkBAIC0xNzEsNyArMTcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhBcmd1bWVudHMgPSAweDEwMDAwOwogICAgIHVuc2lnbmVk
IHNpemVGcmFtZUZvclZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWTSYsIEpT
VmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmly
c3RWYXJBcmdPZmZzZXQpOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWTSYsIHVuc2lnbmVkIG51bVVzZWRTdGFj
a1Nsb3RzKTsKLSAgICB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiBleGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBz
b3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKKyAgICB2b2lkIGxvYWRW
YXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1
ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNl
dHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBD
YWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZh
ckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1l
QW5kU2V0VGhpcyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZy
YW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVp
bnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0
dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgdWludDMyX3QgbGVuZ3RoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXgg
ZDcxYTU5NzFkZGM4ZjBmNWVhNjc4ZDVmY2U0OGUzOTZlMjJhODc1NC4uODE4ZjRkYjJiNjdkZTM5
M2ExNzk4NGRkNTA2OGE4NDJkMjFmYjA1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZU9yaWdpbiogY29kZU9yaWdpbgogICAgICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZy
YW1lOwogICAgICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1l
OwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNW
YWxpZCgpKQotICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9m
ZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sg
PSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwpAQCAtNDgzLDcgKzQ4
Myw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJ
bmRlbnRlciBpbmRlbnQsIFdURjo6RnVuY3Rpb248CiAgICAgICAgIGlmIChjb2RlQmxvY2sgJiYg
IWlzSW5saW5lZCkgewogICAgICAgICAgICAgaW5kZW50Kys7CiAKLSAgICAgICAgICAgIGlmIChj
YWxsRnJhbWUtPmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpIHsKKyAgICAgICAgICAg
IGlmIChjYWxsRnJhbWUtPmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSkgewogICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIG91dC5wcmludChpbmRlbnQsIGJ5dGVjb2RlSW5k
ZXgsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCksICJcbiIpOwogI2lm
IEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKaW5kZXggMjIwMDljNWZkMmJhMjI3ZDQ3Y2ZlODU0OTM5ZjUyZGVmMmQ3MWJjMi4uZTA2
Y2I0OWIyOTVkZTVlYzdjMTlkYjI0ZTczMzg5YmEzNTVlZGVhNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC02NDcsMjggKzY0NywyOCBAQCBwdWJs
aWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVh
bFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwg
ZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KLSAgICB2b2lk
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJl
ZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlcjMyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJS
ZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCB0byk7CiAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlcjY0KGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXI2NChWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQ2NChBZGRyZXNzKGZy
b20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDY0KEFkZHJl
c3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0K
ICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIoR1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAg
IHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2
YWx1ZSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQq
IHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
ZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIodmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICB2b2lkIGVtaXRHZXRDYWxs
ZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJJRCB0bykKQEAgLTY5NiwxOSAr
Njk2LDE5IEBAIHB1YmxpYzoKICAgICAvLyBjYWxsZXIncyBmcmFtZSBwb2ludGVyLiBPbiBzb21l
IHBsYXRmb3JtcywgdGhlIGNhbGxlZSBpcyByZXNwb25zaWJsZSBmb3IgcHVzaGluZyB0aGUKICAg
ICAvLyAibGluayByZWdpc3RlciIgY29udGFpbmluZyB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhl
IGZ1bmN0aW9uIHByb2xvZ3VlLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQor
ICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZy
b20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKGZyb20s
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkpOwor
ICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRy
eS5vZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBw
cm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKICAgICB9CiAjZWxzZQotICAgIHZvaWQgZW1p
dFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBp
bnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3Jl
UHJvbG9ndWUoR1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAg
ICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICog
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQ
b2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgIH0K
IAotICAgIHZvaWQgZW1pdFB1dFRhZ1RvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoVHJ1
c3RlZEltbTMyIHRhZywgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRhZ1RvQ2FsbEZyYW1l
SGVhZGVyQmVmb3JlUHJvbG9ndWUoVHJ1c3RlZEltbTMyIHRhZywgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIodGFnLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
LSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgc3RvcmVQdHIodGFnLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsK
ICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTExNDgsOSArMTE0OCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNz
Rm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoT3BlcmFuZCBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgp
KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE2Myw5ICsxMTY0LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICBy
ZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVy
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCk7CiAgICAgfQotICAgIHN0
YXRpYyBBZGRyZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyB0YWdG
b3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5k
LmlzVG1wKCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBAIC0xMTc4LDMwICsxMTgwLDMx
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwog
ICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpOwog
ICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIHN0
YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7
CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNz
IHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUZyYW1lU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3Qo
VmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewotICAgICAgICBBU1NFUlQoc2xvdCA+PSBDYWxs
ZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJh
bWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKSk7CisgICAgICAgIEFTU0VSVChzbG90Lm9mZnNldCgp
ID49IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBD
YWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpLm9mZnNldCgpKTsKICAgICB9CiAKICAg
ICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCiAgICAgc3RhdGljIEFk
ZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1bWVudCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQp
Lm9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNh
bGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFt
ZVRhZ1Nsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2Fs
bGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBz
dGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBzbG90KQorICAgIHN0YXRp
YyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAg
ICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoUGF5
bG9hZE9mZnNldCk7CiAgICAgfQpAQCAtMTIxOCw3ICsxMjIxLDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJGcmFtZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gY2FsbGVlRnJhbWVTbG90KDApLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChWaXJ0dWFsUmVnaXN0
ZXIoMCkpLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9
CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoUmVnaXN0ZXJTZXQgcHJlc2Vy
dmVkKQpAQCAtMTUyNyw3ICsxNTMwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSk7CiAgICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIHJldHVybiBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50OwogICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCmluZGV4IDk2OTBlMDljOGI1NzI3MGRl
ZjdmODdhNDZjYzJiNTdlNGY3NjIwM2UuLjM5NWQ5MTMzYmNkOTQwNzUzZjg4ODBiOTgzN2I1YzY0
ZDRjNTY0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCkBAIC02MSw3ICs2MSw3IEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVT
aHVmZmxlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhCiAjZW5k
aWYKIAogICAgIEFTU0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRhLmNhbGxl
ZS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwotICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgZGF0YS5jYWxsZWUpOworICAgIGFkZE5ldyhDYWxs
RnJhbWVTbG90OjpjYWxsZWUsIGRhdGEuY2FsbGVlKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGF0YS5hcmdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVCghZGF0YS5hcmdz
W2ldLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5hcmdzW2ldLnZpcnR1YWxSZWdpc3RlcigpLmlzTG9j
YWwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgK
aW5kZXggNjI0MzliZGYzNDQzYjg3YmU5OTk2MDJmZDljM2ViYzk2YWY2YTlmNS4uNGM2YWEzMmY0
ZjU4NzYzODMxMDkzOGYwMGY5MmMwOTk4ZDY2Zjk0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaApAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKICAgICAgICAgQVNTRVJUKCFn
ZXROZXcoanNWYWx1ZVJlZ3MpKTsKLSAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292
ZXJ5IHsgZ2V0TmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSB9Owor
ICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSB9OwogICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkpOwogICAgICAg
ICBhZGROZXcoanNWYWx1ZVJlZ3MsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsKICAgICB9
CkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXNzdW1lQ2FsbGVlSXNDZWxs
KCkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgQ2FjaGVkUmVjb3Zlcnkm
IGNhbGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNv
dmVyeSA9ICpnZXROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgc3dpdGNoIChj
YWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNh
c2UgSW5QYWlyOgogICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAppbmRleCAyODAzMmEyMWFhY2I5YTJkOTMyMjg1ZmUxZjk2NWFkZTNlMjdhODBhLi44NzMx
NWVmODQ3N2FjMTJhNzNjNTcwYWVmOTEyNTBjNTY5YTRmMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTMzMSwxNiArMzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmlj
dEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9
OwogICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwotICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOworICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICB2
b2lkIGVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpOworICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdp
c3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCiAgICAgICAgIGVudW0gV3JpdGVCYXJy
aWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNo
b3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKICAgICAgICAgLy8g
dmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRj
aCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRo
ZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKLSAg
ICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1
YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
KTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0
aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFi
bGUgZm9yCkBAIC00MDQsMzIgKzQwNCwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBl
bnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIAotICAg
ICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0
KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVS
ZWdzIHNyYyk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKIAotICAgICAg
ICBpbnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAgZG91Ymxl
IGdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgaW50MzJfdCBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CisgICAgICAgIGRvdWJsZSBn
ZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3Ax
LCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CisgICAgICAgIGJvb2wgZ2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsKIAotICAgICAgICB2b2lkIGVtaXRMb2Fk
VGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRMb2FkUGF5
bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdExv
YWRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1p
dExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAogICAg
ICAgICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdp
c3RlcklEIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklE
IHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwg
UmVnaXN0ZXJJRCBwYXlsb2FkMik7CisgICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2Ug
PSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKLSAgICAgICAgdm9p
ZCBlbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1p
dFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNl
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBp
bmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAg
ICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2Fk
LCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxs
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2Up
OwotICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlRG91
YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0U3Rv
cmUoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFN0
b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZh
bHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0
ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNDZWxsID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3Rl
cklEIHZhbHVlKTsKIAotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsK
KyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZyk7CiAKICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgo
Y29uc3QgSWRlbnRpZmllciopOwogCkBAIC00MzgsMTcgKzQzOCwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwg
T3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9w
MiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0g
dHJ1ZSk7CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHZvaWQgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAgICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRz
dCk7Ci0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lz
dGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0
MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7Ci0gICAgICAgIHZvaWQg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7
CiAgICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChp
bnQgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUz
Ml82NCAqLyA9IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcGF5bG9hZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbWl0U3RvcmVD
ZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKICAgICAg
ICAgfQpAQCAtNDU2LDI5ICs0NDksMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXAg
ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVn
KTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwg
VmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50KFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAgICAgICAgIFBhdGNoYWJsZUp1
bXAgZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90TnVtYmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0
Y2gpOwogCi0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlVlJlZywg
Y29uc3QgSWRlbnRpZmllciopOworICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVJlZywgY29uc3QgSWRlbnRpZmllciopOwogCiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3Ay
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBA
IC02ODUsOCArNjc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRz
dCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZvaWQgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRW
YXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpA
QCAtNjk0LDIwICs2ODcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQ
UlJlZyBwYXlsb2FkKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1
ZSogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwogI2VuZGlmCi0gICAgICAg
IHZvaWQgZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7Cisg
ICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRT
ZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7
Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGlu
dCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVy
KGludCBkc3QpOworICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KTsKIAotICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICBKU1ZhbHVl
IGdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25z
dGFudEludChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50
IHNyYyk7CisgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsK
KyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKIAog
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KICAgICAg
ICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKQEAg
LTczNCw3ICs3MjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghaXRl
ci0+ZnJvbS5pc1NldCgpKTsKICAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICB2b2lkIGxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAogICAgICAgICAgICAgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwog
CkBAIC03NTQsMTMgKzc0NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJu
VHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFp
dHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFy
Z3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CkBAIC04MDQsNyArNzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25U
cmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwog
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTg2NCw3
ICs4NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAg
ICAgICB2b2lkIHByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXMoaW50IHNyYzEsIGludCBzcmMyKTsK
KyAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBz
cmMxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTQU1QTElO
R19GTEFHUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmlu
ZGV4IDM0NTg3NDRmYmNkZDUzYWNmOWE0MzMyOGJjNDk0YjBmZWRjYjg5M2YuLjNhMzJjMzI2MTg5
ZmFiMTk3ZDdjZjlmOTFkNWY2YjRiMzEwMjAyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5z
aWduZWQ+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMTcyLDEz
ICsxNzIsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIg
PSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChp
bnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9y
IHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1l
ZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQpAQCAtMjMwLDEzICsyMzAsMTMgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRK
dW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDApOwpAQCAtMjU2LDEzICsyNTYsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9w
MiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIGVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChkc3QsIG9wMSwgb3AyLCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDApOwpAQCAtMjg0LDEzICsyODQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwg
aW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7
CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKIAogICAgIC8vIFdlIGdl
bmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBh
dGg6CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdAogdm9pZCBKSVQ6
OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7Ci0gICAg
aW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29k
ZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC00MTUsOSArNDE1LDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE1vZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBB
U1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtNDkxLDkgKzQ5MSw5IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogdm9pZCBKSVQ6
OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGluZ1BvbGljeSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTM4LDggKzUzOCw4IEBAIHZvaWQgSklUOjplbWl0Qml0
QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxpCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEJpdG5vdD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01OTksOSArNTk5LDkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0
aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdodFNoaWZ0R2Vu
ZXJhdG9yOjpTaGlmdFR5cGUgc25pcHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CkBAIC02NzQsOCArNjc0LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IE4KIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1
bmN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIC8vIEFyaXRo
TmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBk
c3QuCkBAIC03MjQsOSArNzI0LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC03OTksNyArNzk5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpA
QCAtODQ1LDkgKzg0NSw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CkBAIC05MDYsOSArOTA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9u
Kgogdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
aXY+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggYmYyMzA2YmNlNGQ1NmYxMDlhMDM2MThiMzQw
NzJmYzU3YzBlNWFjMy4uYWY5ZWViNjI3OWNjZTRkMTFiOTM0YWUxZjFiNWM2ZTRkNjcyMmY3NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9w
JiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYsNyArNjYsNyBAQCBKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwog
CiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAg
ICAgc3RvcmUzMihyZWdUMCwgbWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUu
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKQEAgLTg1LDkgKzg1LDkgQEAgc3RkOjpl
bmFibGVfaWZfdDwKICwgdm9pZD4KIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50cy5vZmZzZXQoKTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29k
ZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2Rl
Lm1fZmlyc3RGcmVlLm9mZnNldCgpOyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0dWFsIHJl
Z2lzdGVyIGlmIHdlIG5ldmVyIHVzZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RWYXJBcmdP
ZmZzZXQgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QxKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZAogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9
IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0g
VXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggYjdkMGNhMjM1OGJlNTI1
MDE4YTNmNGU5NjE2ZDljYjg0OGZmZjUyMS4uZTA3YTgzM2Q0Yzg1M2I5YzdhMDJkZThiNzQ2MDFk
ZjMwNjZiYWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNl
cHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZyYW1l
KSwgIiBmb3IgY29kZSBibG9jayAiLCBjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBDUkFTSCgp
OworICAgICAgICBXVEZCcmVha3BvaW50VHJhcCgpOwogICAgIH0KICAgICAKICAgICBpZiAoYXV0
byogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggMjIxNDljOWJkMWI4ZWMxMTgxMmNiZTBiODU0MWJlZTkz
YjEwYWIzNC4uYzY2YzFiMTE5MDM2ODUxYzI3MmQwZDhhMjRlYmUzOWUzMTE3NjRlZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTQ4LDE5ICs0OCwyMCBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9yQXJyYXlN
b2RlKGNvbnN0IEluc3RydWN0aQogICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qo
KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
aW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3Rh
bnRPcGVyYW5kKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpOworICAgIEFTU0VSVChzcmMuaXNDb25zdGFu
dCgpKTsKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIGludCBlbnRyeSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkK
IHsKKyAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIoKSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRy
eSkpOwogICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTQzLDcgKzE0
NCw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxs
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xNTUsNyArMTU2
LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYg
bWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGlu
dCBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYg
bWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEpOwpAQCAtMTY3LDkgKzE2OCw5IEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lz
dGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZS
ZWcpKQorICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUocmVnKSkKICAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yODQsOSArMjg1LDkgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6c2FtcGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQog
I2VuZGlmCiAjZW5kaWYKIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNT
dHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxl
bmd0aCgpID09IDE7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKQEAgLTM2MywyNiAr
MzY0LDI2IEBAIGlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQ
cm9maWxlKiBwcm9maWxlKQogICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCi1BTFdBWVNf
SU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZ
U19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91Ymxl
KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5p
dFJlZ2lzdGVyKGludCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBtb3ZlKElt
bTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMzkwLDkgKzM5MSw5IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRU
YWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKICAgICBsb2FkMzIodGFnRm9yKGluZGV4KSwg
dGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBS
ZWdpc3RlcklEIHBheWxvYWQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQpCiB7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkgewogICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCku
cGF5bG9hZCgpKSwgcGF5bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MDYsMTM2
ICs0MDcsMTMzIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKICAgICBtb3ZlKEltbTMyKHYudGFn
KCkpLCB0YWcpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXQoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVt
aXRMb2FkKHNyYywgZHN0LnRhZ0dQUigpLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVl
UmVncyBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRTdG9y
ZShkc3QsIGZyb20udGFnR1BSKCksIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0
ZXJJRCBiYXNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKIAogICAg
IGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHBheWxvYWQgIT0gYmFzZSk7Ci0gICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9h
ZCk7Ci0gICAgICAgIGVtaXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICBlbWl0TG9hZFBh
eWxvYWQocmVnLCBwYXlsb2FkKTsKKyAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4
IH07CiAgICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCi0g
ICAgICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7CisgICAgICAgIGxvYWQzMih0YWdG
b3IocmVnLCBiYXNlKSwgdGFnKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNl
KSwgcGF5bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkMzIocGF5bG9h
ZEZvcih0YXJnZXQsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwg
YmFzZSksIHRhZyk7CisgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7
CisgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5
bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3Rl
cklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdp
c3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCiB7Ci0gICAgZW1pdExvYWQoaW5kZXgy
LCB0YWcyLCBwYXlsb2FkMik7Ci0gICAgZW1pdExvYWQoaW5kZXgxLCB0YWcxLCBwYXlsb2FkMSk7
CisgICAgZW1pdExvYWQocmVnMiwgdGFnMiwgcGF5bG9hZDIpOworICAgIGVtaXRMb2FkKHJlZzEs
IHRhZzEsIHBheWxvYWQxKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShp
bnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
aW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUo
YWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3Vi
bGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgY2hhciogYnl0ZVBvaW50
ZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOwogICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7
CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IocmVnKSwgdmFsdWUpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0
IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNl
KSk7Ci0gICAgc3RvcmUzMih0YWcsIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMy
KHBheWxvYWQsIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMih0YWcsIHRhZ0Zv
cihyZWcsIGJhc2UpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQg
aW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2Fk
Rm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAg
IGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGlu
ZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lz
dGVyIHJlZywgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAg
IHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9h
ZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVn
KSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0
b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5k
ZXhJc0NlbGwpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7Cisg
ICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0Nl
bGwpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdG
b3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQoraW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAg
aWYgKCFpbmRleElzQm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKIHsKLSAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihpbmRleCkp
OworICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHJlZykpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJl
Z2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0
YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3RvcmUzMihJ
bW0zMihjb25zdGFudC50YWcoKSksIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMy
KEltbTMyKGNvbnN0YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAg
c3RvcmUzMihJbW0zMihjb25zdGFudC50YWcoKSksIHRhZ0ZvcihyZWcsIGJhc2UpKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4KQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Tm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90
SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShl
bWl0SnVtcElmTm90SlNDZWxsKHJlZykpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdp
c3RlcklEIHRhZykKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewogICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lz
dGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbCh0YWcpKTsKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVy
biBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29u
c3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBv
cCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MSkpIHsKICAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMy
KCk7CkBAIC01NTUsMTEgKzU1MywxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUUzMl82NCkKIAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBT
RiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMu
aXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CkBAIC01
NzEsNDcgKzU2OSwzMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNy
YyksIGRzdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2FkR1BSKCkp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLm9mZnNldCgpLCBkc3QpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQg
c3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmly
dHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKIHsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIGRzdDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
ZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
c3JjMS5vZmZzZXQoKSwgZHN0MSwgc3JjMi5vZmZzZXQoKSwgZHN0Mik7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQo
ZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBm
cm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQotewot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKLX0KLQogQUxX
QVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJ
RCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3Zl
KHJlZzEsIHNjcmF0Y2gpOwpAQCAtNjI5LDI4ICs2MTIsMjggQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWcpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJl
ZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChS
ZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUo
aW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
RG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIo
JmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91Ymxl
KGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zv
cihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVl
KQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgp
KSB7Ci0gICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChpbmRleCkpOwotICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLmFz
SW50MzIoKSksIHZhbHVlKTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBB
U1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQocmVnKSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChyZWcpLmFzSW50MzIoKSksIHZhbHVlKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRl
eCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihyZWcp
LCB2YWx1ZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1p
dFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDdjZmEwOTVmMDBkMTdlMTQxMWJlOWNmYjgwZjgw
ODA2Zjc4OGY2YzEuLjYyNjMyZGE4NGFmZWY5NzgyMTE5MDNjNDg2ZDIxOWExZTlhN2U1YWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNTYsMTAgKzU2LDEw
IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTc3LDcgKzc3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bmQ+KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVn
aXN0ZXIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAtMTEwLDcgKzEx
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAg
ICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CiB9CiAK
QEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjksOSArMTI5LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNl
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgY29u
c3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdp
c3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKQEAg
LTE1NSw5ICsxNTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1f
cHJvdG90eXBlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAg
IFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCiAgICAgLy8g
TG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5
KSBpbnRvIHJlZ2lzdGVycy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ug
d2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBm
b3IgdGhlIHJlc3VsdC4KQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
UwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
JiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIApAQCAtMjA0
LDggKzIwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CkBAIC0yMTcsOCArMjE3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChyZWdUMCk7CkBAIC0yNDYsOCArMjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwpAQCAtMjc0LDggKzI3NCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNOdW1iZXI+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lz
dGVyLCByZWdUMCk7CkBAIC0yODYsOCArMjg2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtMzA3LDggKzMw
Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAv
LyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CkBAIC0zNDMsOCArMzQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9z
cmMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2MCwxNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLm9mZnNldCgpLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUub2Zmc2V0KCksIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1Qw
KTsKIAogICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNs
ZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxz
ZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MCwxNCArMzkwLDE0IEBAIHZvaWQgSklU
OjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsKLSAgICBp
bnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51
bGw+KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ1
Nyw3ICs0NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2pudW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpudW5kZWZpbmVk
T3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBA
IC00NzAsOCArNDcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3Bl
cmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVy
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFT
U0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IApAQCAtNDg1LDE4ICs0ODUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVn
VDEpLCB0YXJnZXQpOwogfQpAQCAtNTEwLDI2ICs1MTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcg
c2NyYXRjaDEgPSByZWdUMTsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICAg
ICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAg
IGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRK
dW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTM5
LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUaHJvdz4oKTsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9w
RW50cnlGcmFtZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CkBAIC01NDgsOSArNTQ4
LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFU
eXBlIHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBz
cmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5t
X3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKICAgICAKQEAgLTU5Miw4ICs1OTIsOCBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgaW50IHNyYzEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTY1MCw4ICs2NTAs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBpbnQgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAgICAg
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKQEAgLTY2NCw4ICs2
NjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC02ODQsMjAgKzY4NCwyMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwog
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RWUmVnID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtNzI4LDEwICs3MjgsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRk
cmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywg
Vk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2V4Y2VwdGlvbi5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2V4Y2VwdGlvbik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0
aW9uOjp2YWx1ZU9mZnNldCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aHJvd25WYWx1ZS5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IC8vIEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBP
U1IgZW50cnksIGluY2x1ZGluZwpAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1
ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC03NDksNyArNzQ5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAg
ICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVncyhyZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpAQCAtNzY2LDEwICs3NjYs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3Ry
dWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIGludCBjdXJyZW50U2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjdXJy
ZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwg
cmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigp
OwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBs
ZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7CiAgICAgc2l6ZV90
IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVs
dE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1
bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBq
dW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAg
LTgxMSw3ICs4MTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5k
ZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQp
OwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUg
PSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgz
NCw4ICs4MzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKQEAgLTg2Nyw4ICs4NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC05MDMsNyArOTAzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogICAgIC8vIG9i
amVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291
bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8
IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaikub2Zmc2V0KCkpOworICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwog
CkBAIC05MTMsNyArOTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDAp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNo
YWluKCkpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAgLTkyNCw3
ICs5MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1l
dGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJh
c2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAg
ICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRh
UmVnID0gcmVnVDQ7CkBAIC05NjUsMTMgKzk2NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4
KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVj
a190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zm
c2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwogfQogCkBAIC05ODUsNyArOTg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC05OTYsNyArOTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigw
eDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDI0LDEwICsxMDI0LDEwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1
c3RvbT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3Ig
PSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZh
bHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgcmVnVDEpOwpAQCAtMTEwNCw4ICsxMTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGUKIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld1JlZ2V4cD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganND
YXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1p
dFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTExMTUsMTIgKzExMTUsMTIg
QEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
RXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wp
OwogCkBAIC0xMTYxLDExICsxMTYxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNl
bHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlm
CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0
aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CkBAIC0xMjA3LDEwICsxMjA3LDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3QXJyYXk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCB2YWx1ZXNJbmRleCA9IGJ5dGVjb2RlLm1fYXJndi5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
c1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdj
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOwogfQpA
QCAtMTIxOSw4ICsxMjE5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNpemVJbmRleCA9IGJ5
dGVjb2RlLm1fbGVuZ3RoLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9s
ZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLApAQCAtMTIzNiw5ICsxMjM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwpAQCAtMTI4Miw5ICsxMjgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9w
ZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAgICAgCkBA
IC0xMzMwLDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAogICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTEzNDksMTAgKzEzNDksMTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOwot
ICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM5MCw5ICsxMzkwLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1
cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0MTQs
OSArMTQxNCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNl
dCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
MSk7CkBAIC0xNDQwLDcgKzE0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlv
biogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247Ci0gICAgaW50
IHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJn
ZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Q
cm9maWxlLCByZWdUMCk7CiAKQEAgLTE1MDksNyArMTUwOSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0
IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJl
Z1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVn
LCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9s
b2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAg
LTE1MjMsOCArMTUyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90
YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUu
b2Zmc2V0KCksIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIApAQCAtMTU0NSw3ICsxNTQ1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCksIHJlZ1QwKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJl
Z3MocmVnVDAsIHJlZ1QxKTsKQEAgLTE1NTYsNyArMTU1Niw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFJlc3RMZW5ndGg+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1
bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7
CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJl
Z1QwKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKQEAgLTE1ODYsNyArMTU4
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKQEAgLTE1OTYs
NyArMTU5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QyKTsKICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZC
b3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5k
ZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKyBpbmRleCksIHJlc3VsdFJlZ3MpOworICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRS
ZWdzKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBhcmd1bWVudE91dE9mQm91bmRz
LmxpbmsodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKaW5kZXggYWU1YjZhZDU0Y2E4MTM2ZWNhYzFiNjQxMWM5NTczNDMwZTVjMWY3YS4uYzQ2
Mzc5YTlmOWVjY2FlNzQ0YThlN2FjODA4NTUxZmViZjJmYTU3MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtOTMzLDcgKzkzMyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9i
dWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC05NDMsNyAr
OTQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiAg
ICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxl
QW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAzYjQ4NTBmYWI4ZDZm
YWU5MzBlOWU4NjkzYzQ0YmJmNGExZTQzOTNkLi44Y2I1NWZiNWI3ZWY4NWYwYWMxMTlmMjJlZTJh
ZDE5MWFjMTkwNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKQEAgLTE2NTQsMTggKzE2NTQsMTggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWMKICAg
ICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpCiAgICAgICAgICAgICBk
YXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2Nr
LCAiXG4iKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAg
dW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgICAgICBpZiAoYnl0ZWNvZGVJbmRl
eCkKICAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAw
OwotICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworCisgICAgICAg
IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcywgMCk7CiAgICAgICAgIGludCBsb2Nh
bHNVc2VkRm9yQ2FsbGVlU2F2ZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KENvZGVCbG9jazo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkp
OwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2FsKG9wZXJhbmQpICYmIFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9M
b2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ld
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFs
dWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CkBAIC0xNzgzLDcgKzE3ODMsNyBAQCBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZShWTSogdm1Qb2ludGVyLCB1aQogICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVz
c0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxP
cENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9m
aWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
cHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5MDcsOCArMTkw
Nyw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHNjb3BlCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIEpTU2NvcGUqIHNjb3BlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQoKTsKKyAgICBhdXRv
JiBzY29wZVNsb3QgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKHNjb3Bl
UmVnKSk7CisgICAgc2NvcGVTbG90ID0gc2NvcGVTbG90LlJlZ2lzdGVyOjpzY29wZSgpLT5uZXh0
KCk7CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9t
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkSGFzSW5zdGFu
Y2UpCkBAIC0yNDE2LDcgKzI0MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEZyb21TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0g
ICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CisgICAgSlNPYmplY3Qq
IHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fc2NvcGUpLmpzVmFsdWUoKSk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFy
IGlzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gQ2xvc3VyZVZhciBmb3IgZ2V0X2Zyb21fc2NvcGUuCkBA
IC0yNDU5LDggKzI0NTksOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29w
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cgogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKIAogICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAg
ICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsK
KyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
Y2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBHZXRQdXRJbmZv
JiBnZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFy
IGRvZXMgbm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERGRy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXgg
YWI5OWZkOTg3YjA2MWYyZTc2YTE3YzI4YmU4YzRlNzI2NWEyZDgxNS4uZTcyOWZjMDU4ZWM2OGVj
MTFmMzJkNTcwNzg5Yjc3YTA5NzVkMjZmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTCiB7CiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OwotICAgICAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIApAQCAtMTE3LDggKzExNyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBp
bnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9j
b2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogCkBAIC0xNzcsNyArMTc3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBp
bmRleGluZ1NoYXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjA4LDcgKzIwOCw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVt
cCYgYmFkCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgogICAgICAgICBzdG9yZTY0
KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQ1JBU0goKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
ICAgICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yNDksNyArMjQ5LDcgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSkKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUu
bV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgIEp1bXAgZW5kID0ganVtcCgp
OwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBAIC0yNzQsOCArMjc0LDggQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgT3AgYnl0ZWMKICAgICAvLyBwcm9wZXJ0eTogcmVnVDEKICAgICAvLyBzY3JhdGNo
OiByZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVnVDEpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMSwg
cmVnVDEsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTMwNCwxNCArMzA0LDE0IEBAIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIE9wIGJ5dGVjCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaW50IGJhc2U7
Ci0gICAgaW50IHByb3BlcnR5OwotICAgIGludCB2YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICAgICAgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwotICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICAgICAgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC0zMzcsMzYgKzMzNywzNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAg
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0
aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlci5vZmZzZXQoKSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIub2Zmc2V0KCks
IHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKQEAg
LTM3NSwxOCArMzc1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVy
QnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3Iub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZEpT
UmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwpAQCAtMzk1
LDkgKzM5NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1Qw
KTsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDg1LDggKzQ4NSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTEz
LDkgKzUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB0aGlzVlJlZyA9IGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2wKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
QEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5k
ZXgrK107CkBAIC01NzEsOCArNTcxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0
ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAvLyBJbiBvcmRlciB0byBi
ZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0
LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKQEAgLTYxNSw4ICs2MTUsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OwpAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKK3ZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKQEAgLTY3MCw4ICs2NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwog
ICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKQEAgLTc3
MCw3ICs3NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKIHsKICAgICBsb2FkUHRyKHN0cnVjdHVy
ZVNsb3QsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
CkBAIC03OTAsNyArNzkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQogICAgIGxvYWRQdHIocmVnLCByZWcp
OwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCkKK3ZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCBy
ZWdUMCk7CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVy
ZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CkBAIC05MTksMTcgKzkxOSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1
ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKICAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdU
MCwgb3BlcmFuZCk7CiB9Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGlu
ZGlyZWN0V2F0Y2hwb2ludFNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQogewogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2lu
dFNldCwgcmVnVDEpOwpAQCAtOTM4LDcgKzkzOCw3IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBX
CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC05NTAsOCArOTUw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUu
b2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJ
bmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKQEAgLTEwODYsOCArMTA4Niw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKQEAg
LTEwOTksOSArMTA5OSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1
bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50
czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKQEAg
LTExMTAsNyArMTExMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVCYXJyaWVy
KGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewog
ICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTMzLDcgKzExMzMs
NyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5z
aWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVy
TW9kZSBtb2RlKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
ICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKQEAgLTExNTAsOCArMTE1MCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0SW50ZXJuYWxGaWVsZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwpAQCAtMTE2NCw4ICsx
MTY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJu
YWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEludGVybmFsRmllbGQ+
KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTE3Niw3ICsxMTc2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJl
Z2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTE5OSw3
ICsxMTk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVu
c2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxs
LmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewpAQCAtMTQyNSw3ICsxNDI1LDcgQEAgSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVy
SUQgYmFzZSA9IHJlZ1QwOwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHkKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJm
YWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5k
ZXggMmNmOTE5OGY0MGVkYWFmNTNhNjFkYmYzMzkwYTZjN2RiMjg2YTVjMS4uZmE1ZDBhYWI0YTVk
ODEyZGUwMTFiMzZkNTRjMzNjMDgwZDdkOWQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtNDUsMTggKzQ1LDE4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAg
ICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCwgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJs
ZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0
ZXJJRCBzY3JhdGNoKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwoVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0
TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICBpbmxp
bmUgSnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3Qs
IFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBp
bmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIpOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihpbnQgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBpbnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAgdm9p
ZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJl
Z2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAg
ICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2
b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KTsKIAogICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKQEAgLTY0
LDM2ICs2NCwzNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBh
eWxvYWQpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjpl
bWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
IHBheWxvYWQpCiAgICAgewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lz
dGVySW5kZXgpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwo
dmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVh
bFJlZ2lzdGVyKSwgcGF5bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxs
KHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpK
dW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlckluZGV4KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVy
SW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJh
bmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RF
cXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
UmVnaXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJm
YWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmly
dHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAg
ICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAg
ICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1
YWxSZWdpc3RlckluZGV4KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAg
ICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
OworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpT
SW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25l
ZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXgpOwotICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0
Y2gpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3Jh
dGNoKTsKICAgICAgICAgSnVtcCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3JhdGNoLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90SW50ID0g
YnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpOwotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBz
Y3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHNj
cmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7
CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwog
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQpA
QCAtMTAxLDIzICsxMDEsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjpl
bWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
IGRzdCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
ZHN0KTsKICAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0KICAgICAK
LSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2Fk
SW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7
Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsK
KyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAg
ICAgSnVtcCBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAgemVyb0V4
dGVuZDMyVG9QdHIoZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAgICAgfQog
Ci0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9h
ZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAg
bG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAg
ICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAg
IEp1bXAgbm90TnVtYmVyID0gYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAgICAgIEp1
bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKQEAgLTEyOSwyNiArMTI5LDI2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIH0KICNlbmRpZgogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJm
YWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIFJlZ2lzdGVy
SUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRy
eSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQogICAgIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHRvKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkp
OworICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KTsKICNlbHNlCiAgICAg
ICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSkpOwogI2VuZGlmCiAgICAgfQogCi0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2
YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5KSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCmluZGV4IDM4
ODczMDUyZDEyODUyZmM2YmI5MTQyZDQ1NjA3YWU4ZTE5YTY3MGEuLjBiYTczZWY4YzEzNGViYmJk
MWQwNGE0YjE3MjE0ZjRmYTczNTE4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBlbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
bnVtVXNlZFNsb3QKICAgICAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0
ZXIoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXJndW1lbnRDb3VudFJlY292ZXJ5ID0gVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIpOworICAg
ICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgRGF0YUZvcm1hdEludDMyKTsK
ICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENh
c2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0
VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0YWIyNjcxNTVjMTNkZjM2
YTcyNDliNmMzNDMuLjkzM2NhOWJlMTAyZTBlZGY5NGJiNGVhZTgyODIxNDgyMjljODI2ZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBA
IC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1lbnQsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAg
ICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUoc3JjLCBkc3QsIHNjcmF0Y2gp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkQ2VsbEFyZ3VtZW50KGlu
dCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkSlNDZWxsKHNyYywg
ZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkSW50MzJBcmd1bWVudChpbnQgYXJndW1l
bnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1wJiBmYWlsVGFyZ2V0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBmYWlsVGFyZ2V0ID0gZW1pdExvYWRJbnQzMihz
cmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggNTI0MWU1ZjdjYzMzMmE2NGUwZGU2ZGI0NGJk
YWY5ZThlODBmMjJhYS4uYzM3NmRiZTJjZDdkNmRkM2ZhNTQ4N2I1N2I1ODk0N2Y2ZGZiYTMzMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAt
MTAzMiw4ICsxMDMyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBh
YnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdW5zaWdu
ZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApOwot
ICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKTsKKyAgICBqaXQubG9hZDY0KEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdU
MCk7CiAgICAgYXV0byBub3RJbnRlZ2VyID0gaml0LmJyYW5jaElmTm90SW50MzIoR1BSSW5mbzo6
cmVnVDApOwogCiAgICAgLy8gQWJzIEludDMyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5oCmluZGV4IGFlOGRlZTI5Zjk4OWM2YTAyNTUwMTVmNWZhYTYxNTY2ZDYxOTYwMDMu
LmEyMzgwMjdkM2JjYWE3MDM3MTFiYzRiZmYwYzEwNjI1M2UwZDkxOTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKQEAgLTQzLDYgKzQzLDkgQEAgdHlwZWRlZiB2b2lk
ICgqTExJbnRDb2RlKSgpOwogCiBuYW1lc3BhY2UgTExJbnQgewogCisKK2V4dGVybiAiQyIgdm9p
ZCBKU0NfSE9TVF9DQUxMIGNoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCgpOworZXh0ZXJu
ICJDIiB2b2lkIEpTQ19IT1NUX0NBTEwgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRf
Y2FsbF9lbnRyeXBvaW50KCk7CiBleHRlcm4gIkMiIEpTX0VYUE9SVF9QUklWQVRFIE9wY29kZSBn
X29wY29kZU1hcFtudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXTsKIGV4dGVybiAiQyIg
SlNfRVhQT1JUX1BSSVZBVEUgT3Bjb2RlIGdfb3Bjb2RlTWFwV2lkZTE2W251bU9wY29kZUlEcyAr
IG51bVdhc21PcGNvZGVJRHNdOwogZXh0ZXJuICJDIiBKU19FWFBPUlRfUFJJVkFURSBPcGNvZGUg
Z19vcGNvZGVNYXBXaWRlMzJbbnVtT3Bjb2RlSURzICsgbnVtV2FzbU9wY29kZUlEc107CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAzNTdh
NDZlOGU1Nzg5N2YyNzg1Y2QzMzlmY2JlMmJjMGM5MGNlZGIyLi5mNjIxMzFjNzM3MWQ2MzQ1MWFk
OWVhOTgwMmZjMjZlY2I2Zjg4MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBcnJheUNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAi
RXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC05OCw4ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgTExJbnQgewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAg
ICAgICAgICAgXAogICAgIExMSU5UX1NFVF9QQ19GT1JfU1RVQlMoKQogCi1pbmxpbmUgSlNWYWx1
ZSBnZXROb25Db25zdGFudE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFZpcnR1
YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJh
bmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQotaW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVy
biBjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9CitpbmxpbmUgSlNW
YWx1ZSBnZXROb25Db25zdGFudE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCku
anNWYWx1ZSgpOyB9CitpbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9wZXJh
bmQpLmpzVmFsdWUoKTsgfQogCiAjZGVmaW5lIExMSU5UX1JFVFVSTl9UV08oZmlyc3QsIHNlY29u
ZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZmlyc3QsIHNlY29u
ZCk7ICAgICAgICBcCkBAIC0xNTcxLDcgKzE1NzIsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5U
eXBlIGdlbmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZQogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsRnJhbWUgLSBieXRlY29kZS5tX2Fy
Z3Y7CiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KGJ5dGVjb2RlLm1fYXJnYyk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tl
ZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1
ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKICAgICAKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CkBAIC0xNjg5
LDcgKzE2OTAsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgICAgIHNldHVwRm9yd2Fy
ZEFyZ3VtZW50c0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVl
RnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIHZtLnZh
cmFyZ3NMZW5ndGgpOwogCiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFt
ZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9
IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJh
bWUtPnNldEN1cnJlbnRWUEMocGMpOwogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOwpAQCAtMTcy
NSw3ICsxNzI2LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24KICAgICAKICAgICBjYWxsZWVG
cmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKICAg
ICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFt
ZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAg
ICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRSZXR1cm5QQyhy
ZXR1cm5Qb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBjYWxsZWVGcmFtZS0+c2V0Q29k
ZUJsb2NrKG51bGxwdHIpOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CkBAIC0x
OTMwLDcgKzE5MzEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9j
YXRjaCkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEu
bV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7
CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBK
U1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5q
c1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTYxLDExICsxOTYyLDEyNCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfb3V0X29mX2xpbmVfanVtcF90YXJnZXQpCiAgICAgTExJTlRf
RU5EX0lNUEwoKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlPgorc3RhdGljIHZvaWQg
aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgT3Bjb2RlJiBieXRlY29kZSwgQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUmIHNpZGVTdGF0ZSkKK3sKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBzaWRlU3RhdGUuZ2V0VG1wPEpTVmFsdWU+KE9wY29kZTo6YXJnQ291bnQpLmFzVUlu
dDMyKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuZmlsbChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEsIFsmXSAoSlNWYWx1ZSogYnVmZmVyKSB7Cisg
ICAgICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYnVmZmVyLCBjYWxsRnJhbWUtPnIoYnl0
ZWNvZGUubV9hcmd1bWVudHMpLmpzVmFsdWUoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKTsKKyAgICB9KTsKKyAgICBpZiAoYXJncy5oYXNPdmVyZmxvd2VkKCkpIHsKKyAgICAg
ICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKKworICAgIEpTVmFsdWUgcmVzdWx0OworICAgIGlmIChPcGNvZGU6Om9wY29kZUlEICE9
IG9wX2NvbnN0cnVjdF92YXJhcmdzKQorICAgICAgICByZXN1bHQgPSBjYWxsKGdsb2JhbE9iamVj
dCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChj
YWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOworICAgIGVsc2UKKyAg
ICAgICAgcmVzdWx0ID0gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJh
bWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlKSwgYXJncywgIiIpOworCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKKyAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9kc3QpID0gcmVz
dWx0OworfQorCitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRpc3BhdGNoTmV4dEluc3RydWN0
aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmIHBjKQorewor
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
KSB7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCkucHRyKCk7
CisgICAgICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0
clRhZz4oKnBjLm5leHQoKS5wdHIoKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4
dFBDLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisjaWYgRU5B
QkxFKEpJVCkKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgIEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0
KCkuaW5kZXgoKTsKKyAgICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1h
cCgpLmZpbmQobmV4dEJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVs
bHB0ciwgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVy
blR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSk7CitleHRlcm4gIkMiIFNs
b3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGlu
ZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlIHJlc3Vs
dCkKK3sKKyAgICAvLyBTaW5jZSBhbGwgb3VyIGNhbGxpbmcgY2hlY2twb2ludHMgZG8gcmlnaHQg
bm93IGlzIG1vdmUgcmVzdWx0IGludG8gb3VyIGRlc3Qgd2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJl
IGFuZCByZXR1cm4uCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JT
aWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBz
aWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNv
ZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENhbGxWYXJhcmdzPigp
Lm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIocGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpk
ZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHNob3VsZCBuZXZlciByZXR1cm4gaWYgdGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5n
IHdhcyBpbmxpbmVkLgorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBkaXNwYXRjaE5l
eHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0o
KTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmlu
ZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgQVNTRVJUKGJ5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpKTsKKworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bj
b2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxP
YmplY3QsIHBjLT5hczxPcENhbGxWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgaGFuZGxl
VmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BD
b25zdHJ1Y3RWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShwYy5uZXh0KCktPm9wY29kZUlEKCkgPT0gb3BfcmV0LCAiV2Ugc3Ryb25nbHkgYXNzdW1lIGFs
bCB0YWlsIGNhbGxzIGFyZSBmb2xsb3dlZCBieSBhbiBvcF9yZXQuIik7CisgICAgICAgIGhhbmRs
ZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9w
VGFpbENhbGxWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7CisKKyAg
ICByZXR1cm4gZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKIGV4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vy
cm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvRnJhbWUpCiB7CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKCp2bSk7Ci0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bnVsbHB0cjsKICAgICBpZiAoY2FsbEZyYW1lKQogICAgICAgICBnbG9iYWxPYmplY3QgPSBjYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKnZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCBlMTczNGRjZjYxYjRj
ZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0Li45M2Y2OWVjNzc0ZDE2ZDgyY2VjMGIxMzA1ZjJh
MDhmODM1YjhkMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBtYWNybyBnZXR0ZXJT
ZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRS
ZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJD
YWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAg
bG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShv
ZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTgzOSwx
MyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFy
ZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBk
b0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZy
YW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJh
bWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNd
LCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCi0gICAgam1w
IF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246Cisg
ICAgam1wIGV4Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCittYWNybyBk
b0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZy
YW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJh
bWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93
X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYgSlNWQUxV
RTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0xOTk5LDcgKzIwMDMsNiBAQCBvcChsbGludF9p
bnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBpbnRl
cm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5jdGlvbkZv
ckNvbnN0cnVjdCkKIGVuZCkKIAotCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxp
bmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bj
b2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBX
ZSBhc3NlcnQKICMgYXMgbXVjaC4KQEAgLTIwNDUsMyArMjA0OCwyMCBAQCBvcCh3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlX25vX3RscywgbWFjcm8gKCkKIGVuZCkKIAogZW5kCisKK2lmIG5vdCAoQ19M
T09QIG9yIENfTE9PUF9XSU4pCisgICAgZ2xvYmFsIF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21f
aW5saW5lZF9jYWxsX2VudHJ5cG9pbnQKKyAgICBfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF9lbnRyeXBvaW50OgorICAgICAgICBtb3ZlIHIwLCBhMgorICAgICAgICBjYWxs
U2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxs
KQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhf
dHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIxCisKKyAgICBnbG9iYWwgX2NoZWNrcG9pbnRfb3Ny
X2V4aXRfZW50cnlwb2ludAorICAgIF9jaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQ6Cisg
ICAgICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSBkaXNwYXRjaCB0byB0aGUgY2hlY2twb2lu
dCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdhcyBlYXNpZXIgCisgICAgICAgICMgYW5kIHBy
b2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGZvciBwZXJmb3JtYW5jZS4KKyAgICAgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdCkKKyAgICAgICAgYnJhbmNoSWZFeGNl
cHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGpt
cCByMQorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCmluZGV4IDNkZDJlYjQ4Y2JiYTZlZjVjZDk4ODYzOWM3OTExZTIy
YTcxMzMxNDguLjQxMWRmMmM2NzUyMzMwYjM3Yjk2YWJjZWQ4N2E4NDQ2YTg3NTY5OTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCkBAIC00Miw2ICs0MiwxNCBAQCBtYWNybyBuZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQog
ICAgIGptcCBbdDEsIHQwLCBQdHJTaXplXSwgQnl0ZWNvZGVQdHJUYWcKIGVuZAogCittYWNybyBz
dG9yZVBDKCkKKyAgICBzdG9yZWkgUEMsIExMSW50UmV0dXJuUENbY2ZyXQorZW5kCisKK21hY3Jv
IGxvYWRQQygpCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQworZW5kCisKIG1hY3Jv
IGdldHVPcGVyYW5kTmFycm93KG9wY29kZVN0cnVjdCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9h
ZGIgY29uc3RleHByICVvcGNvZGVTdHJ1Y3QlXyVmaWVsZE5hbWUlX2luZGV4W1BCLCBQQywgMV0s
IGRzdAogZW5kCkBAIC05Miw3ICsxMDAsNyBAQCBlbmQKIAogIyBBZnRlciBjYWxsaW5nLCBjYWxs
aW5nIGJ5dGVjb2RlIGlzIGNsYWltaW5nIGlucHV0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQuCiBt
YWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAg
IGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkUEMoKQog
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwgUEIKICAgICBnZXQoc2l6ZSwgb3Bjb2RlU3RydWN0LCBt
X2RzdCwgdDEpCkBAIC0zOTAsNyArMzk4LDcgQEAgZW5kCiAKICMgQ2FsbCBhIHNsb3cgcGF0aCBm
b3IgY2FsbCBvcGNvZGVzLgogbWFjcm8gY2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9u
KQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgc3Rv
cmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAg
IG1vdmUgUEMsIGExCkBAIC0zOTksMjAgKzQwNywyMCBAQCBtYWNybyBjYWxsQ2FsbFNsb3dQYXRo
KHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQKIAogbWFjcm8gY2FsbFRyYXBIYW5kbGVyKHRocm93SGFu
ZGxlcikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAg
IHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAK
ICAgICBtb3ZlIFBDLCBhMQogICAgIGNDYWxsMihfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV90cmFw
cykKICAgICBidHBueiByMCwgdGhyb3dIYW5kbGVyCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCAr
IFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVu
ZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgY2hlY2tTd2l0Y2hUb0pJ
VCgKICAgICAgICAgMSwKICAgICAgICAgbWFjcm8oKQotICAgICAgICAgICAgc3RvcmVpIFBDLCBB
cmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICAgICAgICAgIHN0b3JlUEMoKQogICAg
ICAgICAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgICAgICAgICAgbW92ZSBjZnIsIGEw
CiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtNDIxLDcgKzQyOSw3IEBAIG1hY3JvIGNoZWNr
U3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgcjEsIHNwCiAgICAgICAgICAg
ICBqbXAgcjAsIEpTRW50cnlQdHJUYWcKICAgICAgICAgLnJlY292ZXI6Ci0gICAgICAgICAgICBs
b2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgICAgICAgICBsb2Fk
UEMoKQogICAgICAgICBlbmQpCiBlbmQKIApAQCAtMTc2OCw2ICsxNzc2LDggQEAgbWFjcm8gcHV0
QnlWYWxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG9zckV4aXRQb2ludCkKICAgICBlbmQp
CiBlbmQKIAorCisKIHB1dEJ5VmFsT3AocHV0X2J5X3ZhbCwgT3BQdXRCeVZhbCwgbWFjcm8gKHNp
emUsIGRpc3BhdGNoKQogLm9zclJldHVyblBvaW50OgogICAgIGdldHRlclNldHRlck9TUkV4aXRS
ZXR1cm5Qb2ludChvcF9wdXRfYnlfdmFsLCBzaXplKQpAQCAtMjA1Nyw3ICsyMDY3LDcgQEAgbWFj
cm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBh
cmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRkcCBjZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0
MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCB0
MikKLSAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAg
ICAgICAgc3RvcmVQQygpCiAgICAgICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudCArIFBheWxv
YWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMsIHNwCiAgICAgICAgIHByZXBhcmVDYWxsKCVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdl
dFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcmdMaXN0LmgKaW5kZXggODQwZjg5Yjg4ZDQyMGNjM2I3NWM4M2Q2YzU3ODI0MTU0MDJm
MzM2Ni4uOGY1MDVjYzY5OWNkNGFlMzdlZjM0NTAwZmRmYmU2OTk5ODA3Y2RhMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaApAQCAtMTMzLDYgKzEzMywxNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tOb3ROZWVkZWQoKSB7IGNsZWFyTmVlZHNPdmVy
Zmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVuY3RvciYgZnVuYykKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5zdXJlQ2FwYWNpdHkoY291bnQpOworICAgICAg
ICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVuYyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUq
Pigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGV4cGFuZENhcGFj
aXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eShpbnQgbmV3Q2FwYWNpdHkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCmluZGV4IGY4ZDk3OTk1
ODc0NTIyNmE0N2U2ZjhiNmM1NTg2MGMxOGZjZTg3YTEuLmZmYjc0NTlhNmFkY2NiYWIxNmRhOGE0
ZWY4YjE3MTFkODcyYTFhZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5jcHAKQEAgLTE3ODgsNiArMTc4OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Rlcml2ZWRDb250ZXh0VHlw
ZTsgfQogICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZh
bENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNpZ25lZCBoYXNDaGVja3BvaW50cygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKQEAgLTE4MjAsNiArMTgyMSw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOwogICAgIHVuc2lnbmVkIG1f
aGFzVGFpbENhbGxzIDogMTsKICAgICB1bnNpZ25lZCBtX2NvZGVUeXBlIDogMjsKKyAgICB1bnNp
Z25lZCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIAogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVz
OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTIwMTgsNiArMjAyMCw3IEBA
IEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29k
ZXImIGRlY29kZXIsIFN0cnVjdHVyZSoKIAogICAgICwgbV9kaWRPcHRpbWl6ZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQorICAgICwgbV9oYXND
aGVja3BvaW50cyhjYWNoZWRDb2RlQmxvY2suaGFzQ2hlY2twb2ludHMoKSkKIAogICAgICwgbV9m
ZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMoKSkKICAgICAsIG1fcGFyc2VNb2RlKGNh
Y2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKQEAgLTIyMDYsNiArMjIwOSw3IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zCiAgICAgbV9wYXJzZU1vZGUgPSBjb2RlQmxvY2subV9wYXJzZU1vZGU7
CiAgICAgbV9jb2RlR2VuZXJhdGlvbk1vZGUgPSBjb2RlQmxvY2subV9jb2RlR2VuZXJhdGlvbk1v
ZGU7CiAgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOworICAgIG1faGFzQ2hl
Y2twb2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVja3BvaW50czsKIAogICAgIG1fbWV0YWRhdGEu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVE
YXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBm
MzU4ZDQ4YTUwZGU3M2VhYjM4NTY5OWIzYTZmNTExM2JiYmU5YmJhLi5lMjdmZTNjYTk3OGIzOTQ0
ODI2MTY3ZDRhMDYxYTJlYWQ0ZjkyNjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTk4LDggKzk4LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAg
U0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUgR0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCi0jZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxs
RnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCisjZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZy
YW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpKQorI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZy
YW1lLT5yKG9wZXJhbmQpKQogCiAjZGVmaW5lIFJFVFVSTl9UV08oZmlyc3QsIHNlY29uZCkgZG8g
eyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAg
ICAgICBcCkBAIC0xMTM5LDggKzExMzksNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3Jl
YXRlX2xleGljYWxfZW52aXJvbm1lbnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOwotICAgIGludCBzY29w
ZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNj
b3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
KyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNv
ZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VUX0MoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSku
anNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1f
aW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGluaXRpYWxWYWx1ZSA9PSBqc1Vu
ZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBqc1REWlZhbHVlKCkpOwpAQCAtMTE1NSw4ICsx
MTU0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9zY29wZSkKICAgICBK
U09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29kZS5tX25ld1Njb3BlKS5qc1ZhbHVlKCku
dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIGlu
dCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlLm9mZnNldCgpOwotICAgIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0
ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBS
RVRVUk4oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUs
IG5ld1Njb3BlKSk7CiB9CiAKQEAgLTExNjUsNyArMTE2Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKICAg
ICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGVGb3JI
b2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOwotICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkp
LlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTVmFsdWUg
cmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwogCiAgICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7CkBAIC0xMTc5LDcgKzExNzcsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2
ZV9zY29wZSkKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Zhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2Nv
cGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGds
b2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKICAgICAvLyBQcm94eSBjYW4gdGhyb3cgYW4gZXJy
b3IgaGVyZSwgZS5nLiBQcm94eSBpbiB3aXRoIHN0YXRlbWVudCdzIEB1bnNjb3BhYmxlcy4KICAg
ICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTE0MjQsNyArMTQyMiw3IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVyPigpOwotICAgIEFTU0VSVChjb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5
Lm9mZnNldCgpKSk7CisgICAgQVNTRVJUKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lmlz
Q29uc3RhbnQoKSk7CiAgICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZs
eSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1f
aW1tdXRhYmxlQnV0dGVyZmx5KS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwogICAgIGF1dG8mIHByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTsKIApAQCAtMTQ0Myw3ICsxNDQxLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19h
cnJheV9idWZmZXIpCiAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1
dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFs
bG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBj
b2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIGNvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxv
Y2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CiAgICAgfQogCkBAIC0xNDg4LDQgKzE0ODYsMTYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3NwcmVhZCkKICAgICBSRVRVUk4oSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0ZUZyb21BcnJh
eShnbG9iYWxPYmplY3QsIHZtLCBhcnJheSkpOwogfQogCitleHRlcm4gIkMiIHZvaWQgZHVtcFJl
Z2lzdGVyKFVDUFVSZWdpc3RlciB2YWx1ZSk7CitleHRlcm4gIkMiIHZvaWQgZHVtcFJlZ2lzdGVy
KFVDUFVSZWdpc3RlciB2YWx1ZSkKK3sKKyAgICBkYXRhTG9nTG4oUmF3UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHZhbHVlKSkpOworfQorCisvLyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1
Y3Rpb24qIHBjKTsKKy8vIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIFNMT1dfUEFUSCBj
aGVja1BDKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsICkKKy8v
IHsKKworLy8gfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKaW5kZXggNGJkMTkyYTZjNzdlZmMwMjZlN2E5
NWE1YjdiZWM3MTI0MzY3N2U3OC4uNDdiMjQ3NDE4Y2E4OGVmZDFiNzhlNjMxMWI2NzVkMWVmYTVh
NWZmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0
YS5jcHAKQEAgLTM1LDYgKzM1LDExIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogSlNPYmplY3QqIGNv
bnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9y
T2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit7
CisgICAgcmV0dXJuIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBj
b25zdHJ1Y3Rvck9iamVjdCwgYXJncywgZXJyb3JNZXNzYWdlKTsKK30KKworSlNPYmplY3QqIGNv
bnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9y
T2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hh
ciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00NiwxMCArNTEsOSBA
QCBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgY29uc3RydWN0b3JPYmplY3QsIGNvbgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3Qs
IGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBj
b25zdHJ1Y3Rvck9iamVjdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3Ry
dWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0
cnVjdERhdGEsIGFyZ3MsIG5ld1RhcmdldCkpOyAgCiB9CiAKLQogSlNPYmplY3QqIGNvbnN0cnVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0
LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0cnVjdERhdGEuaAppbmRleCBkMGFlMDBiYTExZDdjZWUyNGRmZmFlOTE5MTE5
NjdlMDJhYTZlZGUzLi5mYjYxOTc0YTdkYjM5YzQ5MWY5ZjkzYmFlYjZjYWMxMjYyMWYzYmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCkBAIC02
MCw2ICs2MCw4IEBAIHN0cnVjdCBDb25zdHJ1Y3REYXRhIHsKIAogLy8gQ29udmVuaWVuY2Ugd3Jh
cHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEgYW5kIENhbGxUeXBl
IHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgogSlNfRVhQT1JUX1BSSVZBVEUgSlNP
YmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3Qs
IGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BS
SVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgZnVuY3Rp
b25PYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciog
ZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgY29uc3RydWN0b3IsIENvbnN0cnVjdFR5cGUsIGNvbnN0
IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0JiwgSlNWYWx1ZSBuZXdUYXJnZXQpOwogCiBB
TFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RU
eXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAKaW5kZXggYTY3OTVkYTFlZGNjZjMxMDIyYWMyZGQ5YWVmYWZkNDNhMDFhNWM4NS4uNGIz
NDYxZGUyMmU3NmY3ZGJlMzE4Mzk0MjQ1YTkzYzU3NTA5ZjM4NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCkBAIC0xMzcsMjAgKzEz
NywxOSBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVuc2ln
bmVkIGluZGV4KQogICAgIG1fbWFwcGVkQXJndW1lbnRzLmF0KGluZGV4LCBpbnRlcm5hbExlbmd0
aCgpKSA9IHRydWU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1
YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX21hcHBlZEFyZ3VtZW50cykgewog
ICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWluKGxlbmd0aCArIG9mZnNldCwgbV9sZW5n
dGgpOwogICAgICAgICB1bnNpZ25lZCBpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQg
PSBmaXJzdEVsZW1lbnREZXN0IC0gb2Zmc2V0OwogICAgICAgICBmb3IgKGkgPSBvZmZzZXQ7IGkg
PCBsaW1pdDsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0ICsgaSkgPSBzdG9y
YWdlKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRd
ID0gc3RvcmFnZSgpW2ldLmdldCgpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBp
KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBnZXQoZ2xvYmFs
T2JqZWN0LCBpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdlbmVyaWNBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0K
IAogdW5zaWduZWQgRGlyZWN0QXJndW1lbnRzOjptYXBwZWRBcmd1bWVudHNTaXplKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKaW5kZXggMGE2
YjFhMDY2MDkwZTJjYTVmNTZmNTBhOWM1M2EyY2ZjZTc3MmUwYS4uOGQ5NjQyYTJjOTQwNDA4MGI5
MTNhYzI3MGNkMDEzYzM5ZWNkYTgxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OmlzTW9kaWZpZWRB
cmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fbGVuZ3RoKTsKICAgICB9CiAKLSAgICB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNM
QVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgKaW5kZXggYjMxYjcwYWJkMDBjZWVhZjVlYmI3ZWUxZDQ2N2RhNDg4NzBk
NTFjMS4uMDc0YzIxNjJkOGRhMTY0NzA2ZjQwMDRiZGFiM2RhZWViMjcyY2JiYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaApAQCAtNTks
NyArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3Jp
cHRvcihWTSYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIGJvb2wgaXNN
b2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3Ro
KTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKIAogICAgIHVzaW5nIE1vZGlmaWVkQXJndW1lbnRzUHRyID0gQ2FnZWRCYXJyaWVyUHRy
PEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1vZGlmaWVkQXJndW1lbnRzUHRyIG1f
bW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKaW5kZXggMjE4MmE2MmIx
MzAzNDNhZjU2NzIxNzM2M2EzZjVjMWI4ODYxODFmZi4uZTBhYWJmNWYyZWUxODViN2QxMzMxNjAz
N2Q4YzFkODg4NDI0Njg1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCkBAIC0yOTcsNyArMjk3LDcgQEAgYm9v
bCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVu
c2lnbmVkIGluZGV4LCB1bnNpZ24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQg
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMzA1LDkgKzMwNSw5IEBAIHZv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGCiAgICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PFR5cGUqPih0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaSArIG9mZnNldCkp
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdGhpc09i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpXSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCAr
IGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVs
ZW1lbnREZXN0W2ldID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCA0NGM3ZTUyMGYx
YzBhMjQwYThiNjY2NWEyNzRhNTE0NDU5Mzg3NjYwLi42ZDA3NTkxNzExZWVkYmMyOGUwZTRkYTc4
NDk4MjJhYjhkNjZmNWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcApAQCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXIKICAgICAg
ICAgYXJncy5hcHBlbmQoZ2V0KGdsb2JhbE9iamVjdCwgaSkpOwogfQogCi12b2lkIEpTQXJyYXk6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTEyNjksNyArMTI2OSw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgICAgICAgICBk
b3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmF0KHRoaXMsIGkpOwogICAg
ICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3Rb
aSAtIG9mZnNldF0gPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjk0LDExICsxMjk0LDExIEBAIHZvaWQg
SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZl
Y3RvcltpXTsKICAgICAgICAgaWYgKCF2KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSB2LmdldCgpOworICAg
ICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gdi5nZXQoKTsKICAgICB9CiAgICAg
CiAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjYWxsRnJhbWUtPnIoZmly
c3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggMzE3OTQ5YzU3MmExMWI3
NWFkYzE4M2FjOWU0MTQ0ZjY2Y2Y2YWI1MC4uMzExNjViNWZmNDkyNTRjYzFhNmM0NzkwMmI3OTEw
YWM0YTdkOWJmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAt
MTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmNwcAppbmRleCBlMzJlOTQ5N2Q0NzgyOTUwMzNkYWE5OWE1OTM2ZGVhMTlhMWM0OWMwLi5l
NDkwOTc1NjE2ZGFkMzkxMTQyMzgyYzk5M2U3OGQxMmMxOTExYzJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCkBA
IC00NiwxMyArNDYsMTMgQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSk7CiB9CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVn
aXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Cit2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IHB1YmxpY0xlbmd0aCgpKQotICAgICAgICAgICAg
Y2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChpICsgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoaSArIG9mZnNldCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBq
c1VuZGVmaW5lZCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAppbmRleCBhY2I2ODQ4MTkxYTE5MDM1MjJiOWIzZTRk
MDBmOTY5ZTQwYjc4MTVhLi4wN2UxYThhMTBjM2NkYzcxMTdhY2EzZGM1NDNlZDdkZGIwZDQxZjNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxl
QnV0dGVyZmx5LmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCmluZGV4IGE2ZWIwZWE1ZjZhYWRlYjM3ZDI3Nzk0ZjdjOTEzZjY4MTY4MzQ5N2UuLjE2YWEz
NjlmNDg1MDcwNjFjMDYzNjE1MThhZTE1ZDJiYzY4ZmI2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjA0LDYgKzIwNCw3IEBAIHZvaWQgSlNMb2NrOjp3
aWxsUmVsZWFzZUxvY2soKQogeyAgIAogICAgIFJlZlB0cjxWTT4gdm0gPSBtX3ZtOwogICAgIGlm
ICh2bSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIXZtLT5oYXNDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKCksICJSZWxlYXNpbmcgSlNMb2NrIGJ1dCBwZW5kaW5nIGNoZWNr
cG9pbnQgc2lkZSBzdGF0ZSBzdGlsbCBhdmFpbGFibGUiKTsKICAgICAgICAgdm0tPmRyYWluTWlj
cm90YXNrcygpOwogCiAgICAgICAgIGlmICghdm0tPnRvcENhbGxGcmFtZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmNwcAppbmRleCBkYjA1MjU0ODgyNTMzOWE2YjEzMmJhNGU0NDJiMjExZDZkZTM3YmEwLi41OTY4
MDhjYWZjMGIwZjRjODQ3MGJkNzU5ZWQ5ZjQ5MTZjNjY0NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3Bw
CkBAIC03NCw3ICs3NCw3IEBAIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAKICAgICBleGVjdXRh
YmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5zZXQoZ2xvYmFsT2JqZWN0LT52
bSgpLCBleGVjdXRhYmxlLCB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlKTsKIAotICAgIGV4ZWN1
dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52
bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLmdldCgpKS0+
Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CisgICAgZXhlY3V0YWJsZS0+bV9t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1
dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNv
bnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUt
Pm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpKS5n
ZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOwogCiAgICAgcmV0dXJu
IGV4ZWN1dGFibGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CmluZGV4IDQxMzg3Yzg1MGE5OTVhZDU3NDIxMDUwY2RlODZjYjI1MjFlNTQxMTYuLjkxZWQ3Mzll
MjVmNDkzOGVmNTAyNzI3ZGY1MTY4MGQ4NmNhMjA4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01MDksMTEgKzUwOSw5IEBAIHN0YXRpYyB2b2lkIHJl
Y29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIGlmIChPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRa
b25lU2l6ZSgpIDwgT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVk
Wm9uZVNpemUpCiAgICAgICAgIE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPSBPcHRp
b25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZTsKIAotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgLy8gRklYTUU6IE1ha2UgcHJvYmUgT1NSIGV4aXQgd29y
ayBvbiAzMi1iaXQ6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3Nzk1NgogICAgIE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpID0gZmFsc2U7Ci0jZW5k
aWYKIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpCiAgICAgICAgIE9wdGlvbnM6
OmRpc2tDYWNoZVBhdGgoKSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCAwODFkOTc4YTdiMmE2MjY2YWM1NTJj
Mzc5ZDM4NDUwMDVkYzExZjEwLi4zYzc0MGQ0OGY2MjQxYjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5
ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5jcHAKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBB
cmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCiAgICAgICAgIHN0b3JhZ2UoKVtpIC0gbmFtZWRM
ZW5ndGhdLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2Jh
bE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmgKaW5kZXggZjg1ZTQ3ZGZiZWU4Y2E3YzM3MDRmMjllZDRjYjFiNGU5NzIwNDQ1Ny4u
ZTU4Y2IyMmVmZDQ4YzY3NGJmNWIxYjExMjgwYjUxYWJjMGRlMDg0YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKQEAgLTE0Miw3ICsxNDIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3Vt
ZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fdGFibGUtPmxlbmd0
aCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKaW5kZXggNjRkZGZjYjFhMjU2MGU2ZmUxYjQ1NGU0ZmVlMTQ4OTJh
ZGMwOGE5Zi4uOGY2ZTU2NWUyNDdlNWEyMzE5MzMxOTg4Mjg2NzJlMjEwNDg4MTY1NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkJvb2xlYW5PYmplY3QuaCIKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0YWJsZXMuaCIKICNpbmNs
dWRlICJCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTEwMjcsNiArMTAyOCwy
MCBAQCB2b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IGNvbnNlcnZhdGl2ZVJvb3RzKQogfQogI2VuZGlmCiAKK3ZvaWQgVk06OmFkZENoZWNrcG9pbnRP
U1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZT4mJiBwYXlsb2FkKQoreworICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2hlY2twb2lu
dFNpZGVTdGF0ZS5hZGQoY2FsbEZyYW1lLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBzaWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRT
aWRlU3RhdGUudGFrZShjYWxsRnJhbWUpOworICAgIHJldHVybiBzaWRlU3RhdGU7Cit9CisKIHZv
aWQgbG9nU2FuaXRpemVTdGFjayhWTSYgdm0pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VT
YW5pdGl6ZVN0YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAppbmRleCAyODA4NmM0ZWQ5MTYwNmMyODFiMWExZDViN2ExZGFiMDYwODgwNzBhLi4y
NWM0YTUxNGExOGM2NzBlNjU0MzFhYjk2ODc4ODMzODFkNzFlYzJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKQEAgLTEwMyw2ICsxMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBj
bGFzcyBDYWxsRnJhbWU7CitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFz
cyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsK
QEAgLTk0OSw2ICs5NTAsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVm
ZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKIAorICAgIHZvaWQgYWRkQ2hlY2twb2ludE9T
UlNpZGVTdGF0ZShDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGU+JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZT4gZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKik7CisgICAgYm9vbCBo
YXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja3BvaW50U2lk
ZVN0YXRlLnNpemUoKTsgfQorCiAgICAgVk1FbnRyeVNjb3BlKiBlbnRyeVNjb3BlOwogCiAgICAg
SlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CkBA
IC0xMjAwLDYgKzEyMDUsNyBAQCBwcml2YXRlOgogICAgIExvY2sgbV9zY3JhdGNoQnVmZmVyTG9j
azsKICAgICBWZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IG1fc2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6
ZV90IG1fc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgeyAwIH07CisgICAgSGFzaE1hcDxDYWxsRnJh
bWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNr
cG9pbnRTaWRlU3RhdGU7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1f
Y29udHJvbEZsb3dQcm9maWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNw
ZWN0b3IuY3BwCmluZGV4IDgxYzlmMWY2NzQ3MDc5ZWQ4MzEyNjYyYzA4MzAwYzZjYzM2MjhlMzcu
LmUxNDg0MDBkNDg3ZGZjNjRlNDQwNTRkZGFkYjA4NTg5NzJlMzlhMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcApAQCAtMzk3LDggKzM5Nyw4IEBAIHZv
aWQgVk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAg
Y29uc3QgUmVnaXN0ZXIqIGl0OwogICAgIGNvbnN0IFJlZ2lzdGVyKiBlbmQ7CiAKLSAgICBpdCA9
IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBlbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsKKyAgICBpdCA9IGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgKyAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkpOworICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyAo
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMSk7CiAgICAgd2hpbGUgKGl0ID4gZW5kKSB7
CiAgICAgICAgIEpTVmFsdWUgdiA9IGl0LT5qc1ZhbHVlKCk7CiAgICAgICAgIGludCByZWdpc3Rl
ck51bWJlciA9IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggZjY4OGE3Yzll
OTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2Ny4uMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3
ZTdmMTkyNDczNTJjMGY4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgY29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25z
dGFudHM7IH0KICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29u
c3QgeyByZXR1cm4gKm1faW5zdHJ1Y3Rpb25zOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2
NF90IGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5
cGUgZ2V0Q29uc3RhbnRUeXBlKGludCBpbmRleCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIHVp
bnQ2NF90IGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5
cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSk7Ci0gICAg
ICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF07CisgICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsKICAgICB9CiAKICAgICB2b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8
SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4IGFiMTc0MDZhZmI3MzRhNzA4ZGYxMWRiYjY4MDE1
MThiNzY2NWZiNDIuLmVlMmIzMjdkMmFmNTQ3MTk2ODc5NjlhYzI1MmE4NGM3ODhlZjZlOTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNw
cApAQCAtMjQyLDYgKzI0Miw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0
aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9
OwogCisgICAgLy8gV2UgbmVlZCB0aGlzIGZvciBhdXRvZ2VuZXJhdGVkIHRlbXBsYXRlcyB1c2Vk
IGJ5IEpTIGJ5dGVjb2Rlcy4KKyAgICB2b2lkIHNldFVzZXNDaGVja3BvaW50cygpIGNvbnN0IHsg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7IH0KKwogICAgIHZvaWQgZHVtcChjb25zdCBDb250
cm9sU3RhY2smLCBjb25zdCBTdGFjayopIHsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCmluZGV4IGUyYTRjNDI1MzNhMmY0NDdk
ZDMyMDIwNWI3NzdiNzhiMDM5YzBiNjguLjIwNjlhZDhiMjRiNzM2OWRjZDlkNWYwYzdmNThlZWM5
MmIzNWM3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVy
YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9u
cy5jcHAKQEAgLTc0Myw3ICs3NDMsNyBAQCB2b2lkKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldh
c21Ub0pTRXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcAogICAgIC8v
IGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZy
YW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCiAgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5k
bGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCi0g
ICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtDYWxsRnJhbWVTbG90OjpjYWxs
ZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIGJp
dHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVs
ZSgpKTsKICAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggOTI3YTY5ODRh
M2JlMDE0Y2YzZWE3ZDY3ZjAzNDU4NGVlYmViNjBjZS4uNTRmNjM2YWMxYjUwNzVkMWM2NjdiMzhh
OTAzMTMyOTBkNWYzMzNjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNs
b3dQYXRocy5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBM
TEludCB7CiAKICNkZWZpbmUgUkVBRCh2aXJ0dWFsUmVnaXN0ZXIpIFwKICAgICAodmlydHVhbFJl
Z2lzdGVyLmlzQ29uc3RhbnQoKSBcCi0gICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxP
Q0soKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKSkgXAorICAgICAgICA/
IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rl
cikpIFwKICAgICAgICAgOiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKSkKIAogaW5saW5l
IGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxl
ZSwgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6SW5zdGFuY2UqIGlu
c3RhbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWJk
N2FiNDNkZTA2Zjg5M2MxNjRkNTk5YzZjYzRmNWZiMTdiMDViYi4uNGVlN2Y1MWU4MjVlYTY2ZmI3
MzFiYjcxZWM4NzcwYTc0MzZkMmYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0zNzIsNiArMzcyLDcgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1Mjgx
IC8qIFNpZ25hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVBODIy
RjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzM4RUJBNDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JPdmVybG9h
ZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW51bUNsYXNzT3BlcmF0b3JP
dmVybG9hZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1MzRGMjkxRUMwRTEw
RTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1p
ZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTU0LDYgKzk1NSw3IEBACiAJCQkJQThBNDcyOTgxNTFBODI1
QTAwNDEyM0ZGIC8qIGR0b2EuaCAqLywKIAkJCQlGRTA1RkFFNjFGREIyMTQzMDAwOTMyMzAgLyog
RHVtYlB0clRyYWl0cy5oICovLAogCQkJCUFENjUzREE4MjAwNkI2QzIwMEQ4MjBENyAvKiBEdW1i
VmFsdWVUcmFpdHMuaCAqLywKKwkJCQk1MzM4RUJBNDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNs
YXNzT3BlcmF0b3JPdmVybG9hZHMuaCAqLywKIAkJCQkxQUVBODhFMTFENkJCQ0Y0MDBFNUFENjQg
LyogRW51bVRyYWl0cy5oICovLAogCQkJCUFEN0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBl
Y3RlZC5oICovLAogCQkJCUE4QTQ3MjlGMTUxQTgyNUEwMDQxMjNGRiAvKiBFeHBvcnRNYWNyb3Mu
aCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNlL1dURi93
dGYvQml0bWFwLmgKaW5kZXggNGM2ZjVkNDQyNjMyYzNlZmMwMDBiZDE4ZTllMzY5NDUyZmFmMWMx
MC4uYjQ2ZGE5ZTg1YWI5YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvQml0bWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKQEAg
LTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXpl
X3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7
CisgICAgdm9pZCBpbnZlcnQoKTsKICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNpemVfdCBy
dW5MZW5ndGgpIGNvbnN0OwogICAgIHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAwKSBjb25z
dDsKICAgICBzaXplX3QgaXNFbXB0eSgpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMywxMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAor
ICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3I9KGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fYml0bWFwLT5zZXQobV9pbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBCaXRtYXAq
IG1fYml0bWFwOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKQEAgLTExMSw2ICsxMTgsOSBAQCBw
dWJsaWM6CiAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgZmluZEJpdCgwLCB0cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgYml0bWFwU2l6ZSk7IH0KICAgICAKKyAgICBpdGVyYXRvciBvcGVy
YXRvcltdKHNpemVfdCk7CisgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpIGNv
bnN0OworCiAgICAgdm9pZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5k
Q2xlYXIoQml0bWFwJik7CiAgICAgCkBAIC0yMjQsNiArMjM0LDEzIEBAIGlubGluZSB2b2lkIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQoYml0cy5k
YXRhKCksIDAsIHNpemVvZihiaXRzKSk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT46OmludmVydCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytp
KQorICAgICAgICBiaXRzW2ldID0gfmJpdHNbaV07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPjo6bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewpA
QCAtNDA5LDYgKzQyNiwxOSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5
cGU+OjpvcGVyYXRvciE9KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5h
bWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgLT4gaXRlcmF0b3IKK3sKKyAgICBBU1NFUlQoaW5kZXgg
PCBzaXplKCkpOworICAgIHJldHVybiBpdGVyYXRvcigqdGhpcywgaW5kZXgpOworfQorCit0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBC
aXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29u
c3QgLT4gY29uc3QgaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT4qPih0aGlzKSlbaW5kZXhdOworfQorCiB0ZW1wbGF0ZTxzaXpl
X3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CmluZGV4IGRhZTRhNzFiMjhkMTMwNDI0YzBiZDczMWJlNDE2NDNmMDUyYjNlYTkuLjJhMzI2MmM5
YjhiNmQ1NmRlM2NhNGRhMDE1Njk2ZDc1MjdhYTRiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBA
IC01Niw2ICs1Niw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBEdW1iUHRyVHJhaXRz
LmgKICAgICBEdW1iVmFsdWVUcmFpdHMuaAogICAgIEVudW1UcmFpdHMuaAorICAgIEVudW1DbGFz
c09wZXJhdG9yT3ZlcmxvYWRzLmgKICAgICBFeHBlY3RlZC5oCiAgICAgRXhwb3J0TWFjcm9zLmgK
ICAgICBGYXN0Qml0VmVjdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFz
c09wZXJhdG9yT3ZlcmxvYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92
ZXJsb2Fkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmZGU3M2Y1YjJkN2Q1NzQ0YTNkMDg1NzdjYzcyNDg3MWU5
M2U2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRv
ck92ZXJsb2Fkcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0
cz4KKworI2RlZmluZSBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1O
YW1lLCBvcCwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwK
KyAgICBjb25zdGV4cHIgYXV0byBvcGVyYXRvciBvcChlbnVtTmFtZSBlbnVtRW50cnksIFQgdmFs
dWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBc
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpIG9wIHZhbHVlOyBcCisg
ICAgfSBcCisgICAgICBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0ZXhw
ciBhdXRvIG9wZXJhdG9yIG9wKFQgdmFsdWUsIGVudW1OYW1lIGVudW1FbnRyeSkgLT4gc3RkOjpl
bmFibGVfaWZfdDwoZW5hYmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAgcmV0
dXJuIHZhbHVlIG9wIHN0YXRpY19jYXN0PFQ+KGVudW1FbnRyeSk7IFwKKyAgICB9IFwKKworI2Rl
ZmluZSBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgKywgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09Q
RVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC0sIGVuYWJsZUV4cHJlc3Npb24p
IFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAq
LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgLywgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09Q
RVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICUsIGVuYWJsZUV4cHJlc3Npb24p
IFwKKworI2RlZmluZSBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRI
X0lOVEVHUkFMUyhlbnVtTmFtZSkgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgc3RkOjppc19pbnRlZ3JhbF92PFQ+KQorCisjZGVmaW5lIE9WRVJM
T0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVu
YWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19X
SEVOKGVudW1OYW1lLCA9PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJB
VE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICE9LCBlbmFibGVFeHByZXNzaW9uKSBc
CisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPCwg
ZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNT
X1dIRU4oZW51bU5hbWUsIDw9LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BF
UkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPiwgZW5hYmxlRXhwcmVzc2lvbikg
XAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID49
LCBlbmFibGVFeHByZXNzaW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVS
QVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX1JF
TEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNf
aW50ZWdyYWxfdjxUPikKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rv
ci5oIGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCmluZGV4IDg4NWI3YjE3M2IxMWE2
MDFiZTI5YTMzMmFiOWQyYTQxNGQ1NjIxMjIuLjkyMDg5NWZjNDllNzFiZjk2NjkyMjFjMTMxYTE3
NDJmYjc1OGZmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKQEAgLTQ1MCw3ICs0NTAsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAorICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICEhKCpt
X3dvcmQgJiBtX21hc2spOwogICAgIH0KQEAgLTQ2NCw2ICs0NjQsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRv
cnw9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgPSB2YWx1ZSA6ICp0aGlzOyB9
CisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3ImPShib29sIHZhbHVlKSB7IHJldHVybiB2
YWx1ZSA/ICp0aGlzIDogKnRoaXMgPSB2YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIHVpbnQzMl90
KiBtX3dvcmQgeyBudWxscHRyIH07CiAgICAgdWludDMyX3QgbV9tYXNrIHsgMCB9OwpAQCAtNTA5
LDcgKzUxMiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7
CiAgICAgfQotICAgIAorCisgICAgLy8gRm9yIHRlbXBsYXRpbmcgYXMgVmVjdG9yPGJvb2w+Cisg
ICAgdm9pZCBmaWxsKGJvb2wgdmFsdWUpIHsgdmFsdWUgPyBzZXRBbGwoKSA6IGNsZWFyQWxsKCk7
IH0KKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpIHsgcmVzaXplKG5ld1NpemUpOyB9CisK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6
ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
Yml0dmVjdG9yIGNoYW5nZWQuCkBAIC01ODksNCArNTk2LDUgQEAgcHVibGljOgogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAordXNpbmcgV1RGOjpGYXN0Qml0UmVmZXJlbmNlOwogdXNpbmcgV1RGOjpG
YXN0Qml0VmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaAppbmRleCA1YTRlOWVmNDQ5NGVm
NDZjYTllNGVlZjc3ZmRjYzBkNjBmYWE0YTExLi4zYTM1YjM4ZjRjMDIzNjc5YWM3Y2ZjOWM0NjU2
MDg0YTM5MTQ4M2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3Mu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaApAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgVHlwZSB1
bmFsaWduZWRMb2FkKGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWw8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxUeXBlPjo6dmFsdWUsICIiKTsKICAgICBUeXBlIHJlc3Vs
dCB7IH07CiAgICAgbWVtY3B5KCZyZXN1bHQsIHBvaW50ZXIsIHNpemVvZihUeXBlKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTQzLDcgKzQzLDcgQEAgaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9h
ZChjb25zdCB2b2lkKiBwb2ludGVyKQogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGlubGluZSB2
b2lkIHVuYWxpZ25lZFN0b3JlKHZvaWQqIHBvaW50ZXIsIFR5cGUgdmFsdWUpCiB7Ci0gICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWw8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxUeXBlPjo6dmFsdWUsICIiKTsKICAg
ICBtZW1jcHkocG9pbnRlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOwogfQogCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTBkOGU3NWQ3ZWVlMmQ2
YWM1OGUwNjhlZTE4MjY0ZDQ4ZGFmNmQxMy4uYzk4OWQwNGI5Mjg1NWQ1OTZmOWM3MDQxOTAxNTQ5
NWMyNjFiZWNjMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9t
aWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhp
dCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJlbW92ZSBwcm9iZSBPU1Ig
ZXhpdCBvcHRpb24gc2luY2Ugd2UgYXJlIG5vdCB1c2luZyB0aGF0IGFueW1vcmUuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBnYXJkZW5pbmcuIE1h
cmsgV2ViS2l0LkZvY3VzZWRGcmFtZUFmdGVyQ3Jhc2ggYXMgdGltZW91dApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKaW5kZXggY2RiZjljMGRiZjkzMmUyOGM2ZDVhODIwOGEwYTk4Y2NlZTZh
ZWQ5Zi4uNWZiYzIwOWVkZTRkMzQ1YTQ2MDViMDBkMjcxNzIwNDVkMDQ5MmNlNiAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC00OTgsNyArNDk4LDYgQEAgTk9fQ0pJVF9PUFRJT05T
ID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcD0xMDAKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZlbD0xIl0KIEIzTzBf
T1BUSU9OUyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFseXNpcz0x
MDAiLCAiLS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0gWyItLXVzZUZUTEpJ
VD10cnVlIl0KLVBST0JFX09TUl9FWElUX09QVElPTiA9IFsiLS11c2VQcm9iZU9TUkV4aXQ9dHJ1
ZSJdCiBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgPSBbIi0tZm9yY2VPU1JFeGl0VG9MTEludD10
cnVlIl0KIAogcmVxdWlyZV9yZWxhdGl2ZSAid2Via2l0cnVieS9qc2Mtc3RyZXNzLXRlc3Qtd3Jp
dGVyLSN7JHRlc3RXcml0ZXJ9IgpAQCAtNzEzLDcgKzcxMiw3IEBAIGRlZiBydW5GVExOb0NKSVRC
M08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJ
VFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtbm8t
Y2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIs
ICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRy
dWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BU
SU9OICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1jaml0
LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0t
dXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVROb1B1dFN0YWNrVmFsaWRhdGUoKm9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOSw3ICs3MjgsNyBAQCBkZWYgcnVuRlRMTm9D
SklUT1NSVmFsaWRhdGlvbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRl
ZiBydW5ERkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZGZn
LWVhZ2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyAr
IFBST0JFX09TUl9FWElUX09QVElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09Q
VElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuREZH
RWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA3YzVhZjQ0
YmIzYzRmY2MzNzk4ZmFkNDM2Y2NiMWQ4ODNiNTE5ZmExLi4xYzEwMDBiMjk2MzhjOTU0Yzk4MmEw
NThhM2NkODMyMzJmM2I2YzExIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9K
U1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJl
IGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2FwcGx5LW9zci1leGl0
LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanM6IEFkZGVk
LgorICAgICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxsZWUpOgorICAgICAg
ICAodGVzdCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6CisgICAgICAgICogc3Ry
ZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanM6IEFkZGVkLgorICAg
ICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxsZWUpOgorICAgICAgICAodGVz
dCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6CisgICAgICAgICogc3RyZXNzL2xv
YWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanM6CisgICAgICAg
IChjaGVja0VxdWFsKToKKyAgICAgICAgKiBzdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRo
LWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qczoKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJy
YXksIGFuZCB1c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRp
b25zLW9jY2FzaW9uYWxseS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3Vs
ZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjNmMTVhNmViOGMyN2NjMGFkMmU5ZjU5NTQxZmZlMmM1MGFjMGEyMwotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2Ut
ZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKQEAgLTAsMCArMSwzNiBAQAorCitsZXQgY3VycmVu
dEFyZ0NvdW50OworZnVuY3Rpb24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKKyAgICByZXR1cm4gY3Vy
cmVudEFyZ0NvdW50OworfQorbm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7CisKK2Z1bmN0aW9u
IGNhbGxlZSgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50
KCkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5
KSB7CisgICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwgYXJyYXkpOworfQorbm9JbmxpbmUodGVz
dCk7CisKK2xldCBsZW5ndGhDYWxscyA9IDA7CitjdXJyZW50QXJnQ291bnQgPSAyOworbGV0IGFy
cmF5ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkgeworICAgIGlmIChsZW5ndGhDYWxscysr
ICUgMTAgPT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aHJvd2luZyBhbiBleGNlcHRp
b24gaW4gbGVuZ3RoIik7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudAorfSB9Citmb3IgKGxl
dCBpID0gMDsgaSA8IDFlNjsgaSsrKSB7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdChhcnJheSk7
CisgICAgfSBjYXRjaCB7IH0KK30KKworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2Fs
bHMgPSAwOwordGVzdChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJv
dyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXBw
bHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2Fw
cGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJlZTQ1
Y2UxYzcyODM2NTM4MjcwNWQ5OWQzMDFhZTZiY2I4ZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKQEAg
LTAsMCArMSwzMSBAQAorCitsZXQgY3VycmVudEFyZ0NvdW50OworZnVuY3Rpb24gZXhwZWN0ZWRB
cmdDb3VudCgpIHsKKyAgICByZXR1cm4gY3VycmVudEFyZ0NvdW50OworfQorbm9JbmxpbmUoZXhw
ZWN0ZWRBcmdDb3VudCk7CisKK2Z1bmN0aW9uIGNhbGxlZSgpIHsKKyAgICBpZiAoYXJndW1lbnRz
Lmxlbmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigp
OworfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5l
ZCwgYXJyYXkpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2xldCBsZW5ndGhDYWxscyA9IDA7Citj
dXJyZW50QXJnQ291bnQgPSAyOworbGV0IGFycmF5ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3Ro
KCkgeyBsZW5ndGhDYWxscysrOyByZXR1cm4gY3VycmVudEFyZ0NvdW50IH0gfQorZm9yIChsZXQg
aSA9IDA7IGkgPCAxZTU7IGkrKykKKyAgICB0ZXN0KGFycmF5KTsKKworCit0ZXN0KGFycmF5KTsK
K2N1cnJlbnRBcmdDb3VudCA9IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOwor
CitpZiAobGVuZ3RoQ2FsbHMgIT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxz
KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQt
Y2FsbC1hbmQtZXhpdC1zdHJpY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhl
bi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCmluZGV4IDM2MThmOGNiYjNkMzIxMTM0
MGU2YTA3MjA3MmYxNDNlNWM0NmMyNDIuLmFhNzMyMzE5MGNmNDlkODhlM2ZmZTkxMmIxZTE2YWE0
N2Q1MGY5NGIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlu
bGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12
YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwpAQCAtMTgsOCArMTgs
OCBAQCBmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CiAgICAgaWYgKGEuYiAh
PSBiLmIpCiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAi
IHZlcnN1cyAiICsgYi5iOwotICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCi0gICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEu
YyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgaWYgKGEuYy5sZW5ndGggIT09IGIuYy5sZW5ndGgp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDog
IiArIGEuYy5sZW5ndGggKyAiIHZlcnN1cyAiICsgYi5jLmxlbmd0aDsKICAgICBmb3IgKHZhciBp
ID0gYS5jLmxlbmd0aDsgaS0tOykgewogICAgICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKICAg
ICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAi
ICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3Vu
dC5qcyBiL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQt
YXJndW1lbnQtY291bnQuanMKaW5kZXggMDQ3ZmIwMWY4ODMxNDVjYzc1NTRmNWNmNzAxYTcwNzRm
MjY3ZGVlZS4uNTNkNzUyZGVjZDdkMGYzMWJjMmYxZDc4OTkxYzY5MTAxZjA4YmZmMyAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1h
cmd1bWVudC1jb3VudC5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxs
LXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCkBAIC0xOCw4ICsxOCw4IEBAIG5vSW5s
aW5lKGJhcik7CiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICB2YXIgcmVz
dWx0ID0gZm9vKDQwLCAyKTsKICAgICBpZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cg
Ildyb25nIHJlc3VsdCBmb3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAg
ICAgIHRocm93IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAi
ICsgcmVzdWx0KTsKICAgICByZXN1bHQgPSBiYXIoNDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09
IDQyKQotICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBn
b3QgIiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3IgYmFy
LCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386047</attachid>
            <date>2019-12-18 18:25:08 -0800</date>
            <delta_ts>2019-12-18 19:25:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218182452.patch</filename>
            <type>text/plain</type>
            <size>668068</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi41YWZiZjFhODU4NGI0MzMx
OTIzMjZjNjZhYjJiOTU5N2QzNDU3ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGlu
ZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludERhdGEuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlND
OjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6ZHVtcFJlZ2lz
dGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAoSlND
OjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0
b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFu
dFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25z
dCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0ganNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2Jq
ZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBiZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29w
ZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdiMGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJl
Li41OWEwMDQzNDgyYWMyM2UwMmI4NmEzOTY5OThhM2IwNTg1MWIyNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxl
IG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJl
bmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0
b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RG
OjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGlnbmVkQWNjZXNzLmg6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRT
dG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2RjY2UwZjgxZWQ0NGM3NGQ2
MGVhNWEwYzYyOGQ4YmZhZDkzMzA4Zi4uY2NlZjFhZmQ0NWRhMTkzMDFjODZhOWY3NTcyMmJhZGEz
N2M4MzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTI1LDYgKzUy
NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL09wY29kZS5o
CiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAgYnl0ZWNvZGUvT3BlcmFuZHMuaAogICAg
IGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
aAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRiY2U1YmFjZWRjMDVjM2RjMGVhOGIwNDMzNDZkMTUxZDBkZWY0NDEuLmIyNjRmNGVkZDM5
NjI2OTA1ZTFiMjJhODJlMWU0MTUyMzU1Njc0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMzhFQkEzMjNBQjA0Qjgw
MDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZU
TFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRE
NyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERE
RUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzU5Nyw2ICszNTk5LDggQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFj
dFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9
IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMx
RDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
dGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29y
ZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEph
dmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMz
OEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2
MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBwYXRoID0gZnRsL0ZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURD
N0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFD
MzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzYxMSw2ICszNjE1LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3
NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0
QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjND
NTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9y
SGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJh
dG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYz
QzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFj
Y2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNz
Q2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkw
MDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MjEsNiArNTUyOCw3IEBACiAJCQkJMEY0ODUzMjYxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEz
RTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywKKwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAz
ODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLywKIAkJCQkwRjI1RjFBQjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJMEYyNUYxQUMxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01OTQ3LDYgKzU5NTUs
NyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJ
CQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJ
CUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJ
NTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgg
Ki8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAog
CQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdD
MUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2
LDcgKzg1ODUsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVy
YXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2
IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1
NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlB
MzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1
NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFD
NDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2
RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAw
MzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk4LDcgQEAK
IAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJ
CQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJ
CTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90
b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0
b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk5LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIw
Mjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMy
MjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNE
REExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMz
OEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyog
Q0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDMyLDYgKzk0NDUsNyBAQAogCQkJCTBG
OUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3Zl
cnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEVCQTMyM0FCMDRCODAw
MzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBl
dFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2Rl
ZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRi
MmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAot
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihG
dW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRy
PHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NF
UlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQq
IHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBm
M2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBm
MTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2Jl
RnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxU
PihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3Rlcikp
OwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJh
bmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBn
ZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFs
dWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFu
ZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZh
bHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
LCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRP
cGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQg
c2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZz
ZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNl
ZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxp
bmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRp
b24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0
IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAg
ICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFu
ZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJh
bmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9w
ZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVm
IEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQx
Nl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5k
OwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+
IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5k
PGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
RmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3Bl
cmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5n
VmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9w
ZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7
CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhW
ZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRP
cGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVy
YW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAg
VmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJ
bnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCA2MDA2
MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFiNGRiZDI2M2Y0
OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGpp
dC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAg
aWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAgICAgICAgICAg
YXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKQEAgLTE3
OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5h
bCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGpp
dC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMwZWU1OGY1ODgu
LjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFy
YW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBqaXQubWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4
Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2Nh
dGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAg
ICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQg
Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2Vu
ZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFz
cyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50
IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZp
cnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5h
bWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAg
cmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgs
MTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZz
ZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNz
IEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1l
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCkt
PmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZp
cnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIp
Iik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQg
Qnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRl
Y29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNv
ZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZh
bHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2Nr
LT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEw
NzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnBy
aW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1l
KGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVh
bFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1
bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCBy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmly
dHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAg
QmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNp
bmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVy
OwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29u
c3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3
ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1
MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lk
IEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAg
ICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApp
bmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4
ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQg
KzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5k
ZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisg
ICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAg
ICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkK
LSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNC
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAg
ICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hv
dWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hl
Y2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsg
fQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNr
ZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0
dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQog
CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAg
ICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBk
ZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJp
dHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNv
bnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhl
ci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3
OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
aW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAot
ICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50
MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisK
KyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1
aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNo
ZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0
KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5
dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAg
ICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAg
IHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDcx
YmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLmRmMGJkZWIxY2IwZjA1NDA4
MDdlOWFmYTdlMjkzMTRhMTcwYzI3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldh
dGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIs
CiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAg
ICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBh
cmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBk
ZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQog
CiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9wIDp0YWlsX2Nh
bGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5
UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1w
czogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRz
OiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6
IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBAIC04NDUs
NiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQK
KyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6
IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTIs
NyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdp
c3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhiNDNmNDQwLi43
ZGEyMmMyZDJjYzdiZmMxMWQxZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0ZXhwciBib29s
IGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCit7
CisgICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVt
VHlwZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5
aW5nX3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNpemVvZihJbnRU
eXBlMSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50
VHlwZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlw
ZTI+KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsK
KyAgICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKKwor
ICAgIGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN3aXRj
aCAoY29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5vcGNvZGVJRCgp
KSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwg
T3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFs
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZh
cmFyZ3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFs
dWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENvbnN0cnVjdFZh
cmFyZ3M6OmFyZ0NvdW50KSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFy
Z3M6Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdD
b3VudCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIz
MjU5MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0
MjdlZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDgg
QEAgcHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4
TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxv
Y2smLCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShp
bnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3
NGU3OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4Mjgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
TG9jYWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCk7CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+
PSBvdXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFts
b2NhbF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAg
IHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBkMDc2MTA5YTFm
ZGE1Zjk0N2Y1MjBmZTUxNGRkLi42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVjYzYzNmVhMWVi
NWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRp
ZXMuaCIKQEAgLTQwNyw3ICs0MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9u
ZWRTeW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2Zp
bGVyT3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxv
d1Byb2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRj
aGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgog
ICAgICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJv
bFRhYmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7
CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxl
LT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0g
ICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRh
YmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3Rh
bnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIp
OwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3Jl
YXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBh
cmVkIGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0YXRpYyBib29s
IHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlv
biYgdHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXgg
Q29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAg
ICAgIGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENv
ZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZvaWQgQ29kZUJs
b2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNv
bnN0IE9wQ2F0Y2gmCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0ZXJzKCk7ICsr
aSkKICAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSk7CiAKLSAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHByb2ZpbGVzID0g
bWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+KGxpdmVPcGVy
YW5kcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3NpemUgPT0gbGl2
ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGVz
LT5tX3NpemU7ICsraSkKLSAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3Bl
cmFuZCA9IGxpdmVPcGVyYW5kc1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmlsZXMtPm1fYnVm
ZmVyLmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAgIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNp
Z25lZCYgbnVtYmUKIAogICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkp
IHsKICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQ
cm9maWxlcykgewotICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
ICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAppbmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1NmNlNTgxNTBm
NTM0MjY2Li4yNTA2NzI2M2UyNDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2MzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEsNiArMTYxLDcg
QEAgcHVibGljOgogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251
bUNhbGxlZUxvY2FsczsgfQogCiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251
bVZhcnM7IH0KKyAgICBpbnQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAogICAgIGludCog
YWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIyOSwyMCArMjMw
LDIwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkg
Y29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGlu
ZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGluZSBib29sIGlz
S25vd25Ob3RJbW1lZGlhdGUoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA9PSB0aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCisg
ICAgICAgIGlmIChyZWcgPT0gdGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9kZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRleCkuaXNDZWxs
KCk7CisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KHJlZykuaXNDZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGlu
ZGV4KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOwor
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9CiAKICAgICBI
YW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWly
ZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4MSwxMCArNTgy
LDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7
IH0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyBy
ZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1
bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC03NzQs
NiArNzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRC
YXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAgIAorICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkgY29uc3Q7CiAg
ICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3Vu
dGVyOyB9CiAKICAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9
CkBAIC04NzQsNyArODc1LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRh
YmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
QnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxDb2RlQ2FjaGUg
bV9kaXJlY3RFdmFsQ29kZUNhY2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0MiwxMCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVj
dXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNlQ29uc3RhbnQo
aW50IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChyZWcu
aXNDb25zdGFudCgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3RhbnRJbmRleCgp
KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwogICAg
IH0KIAogICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4
IDIxMDY4MTNmMGExZWFhNTEzNGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5YTI4NmY4YWFi
ZjRkMzMyZmZmMWU3MWVhM2M4M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBhcHByb3hpbWF0ZUhhc2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9IG51bGxwdHIp
IGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAgIHZvaWQgd2Fs
a1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtVcElubGluZVN0
YWNrKGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBpbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0aGUg
aW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5n
IG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVz
cy5oCmluZGV4IGU0YTU3NWIwM2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLjQ3YzY1
N2M4ZGY5MDM4M2FmNjVlYjVjM2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwx
MiArMjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOworY2xhc3MgQ29kZUJsb2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNz
IGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVt
cHMuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1w
TGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1
YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29s
IHZpcnR1YWxSZWdpc3RlcklzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBv
aW50KSwgb3BlcmFuZCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xp
dmUocmVnKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExp
dmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAg
Ly8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVt
IGNvbXBhY3QuCisgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5p
c20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvciwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxG
YXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApp
bmRleCA5NzUwOGJiZjBjNDVjYjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5hMGFhN2MwOTI0
NGY5OTU2YmVmMWZiOTgzOGI1NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3Ry
dWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxp
bmVDb2RlQmxvY2s7CiAgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4
dXBzLgorICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERv
IG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBz
aWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0
eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVu
IHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24n
dCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVk
IG1hbnVhbGx5LgpAQCAtMTkxLDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJl
IGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFs
aXplIGV4cGxpY2l0bHkuCiAgICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09m
ZnNldCgwKQorICAgICAgICA6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAg
ICwgdG1wT2Zmc2V0KDApCisgICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5k
KENhbGwpCiAgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiAr
MjIyLDEyIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0VG1wT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRt
cE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRtcE9mZnNldCkgPT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2Fs
bGVyRnJhbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3Qg
cmV0dXJuUENPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3LDkgKzI1Niw5
IEBAIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2Nr
OwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVP
cmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBp
biBJbmxpbmVDYWxsRnJhbWUKKy8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQg
bm90IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENh
bGxlciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KLWlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0
aW9uJiBmdW5jdGlvbikKK2lubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNr
KGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSAqdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMzggQEAg
aW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVt
YXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2
ZUNoZWNrcG9pbnQoKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fs
a1VwSW5saW5lU3RhY2soWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0
cnVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3Bl
cmFuZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQgb3BlcmFuZCkKK3sKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4g
b3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBp
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKwor
QUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVy
YW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBP
cGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3Bl
cmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/
IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2FsbEZyYW1lLT50
bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FMV0FZU19J
TkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3BlcmFuZChpbmxp
bmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1ZWIxYzY0YTU5
Li5lMDNmYTM5Mzk1OTU1NTJlYmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25jdXJy
ZW50SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVByb2Zp
bGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICA6IG1f
Ynl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQogICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkg
KyBtX29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFz
aCgpICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAgIH0KICAgICAK
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgsNyArNzksNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogCi0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJldHVybiBtX29w
ZXJhbmQ7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRlOiAKICAgICBC
eXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5SGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggMmI2
OWYzNmM3ZmJkYTEwNTU3ODlkZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5Yjk1NmY3OTc4
NmVjODdhYTJjNjlhOGJjMDY3MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApA
QCAtNDIsNyArNDIsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQubV9raW5kID0g
TGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2NrID0gY29kZUJs
b2NrOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0ga2V5LmJ5dGVj
b2RlSW5kZXgoKTsKLSAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJh
bmQoKS5vZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9w
ZXJhbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKENDYWxsSGVscGVy
cyYgaml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBM
YXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5s
YXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQu
b3BlcmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5
T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxv
Y2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0K
QEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpyZXBv
cnRWYWx1ZShKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIExhenlP
cGVyYW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlP
cGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVy
YW5kKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVy
YW5kLmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7
CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oCmluZGV4IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEyZGNmMzM1ZWM4
OGQuLjM2ZDM2OWYwYzAwZmJkNDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0
cnVjdCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZDsKKyAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9
IHU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCBm
MjlmZjlmOTczNmFlYjM3MzQ1OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li5kNDljNmQ3NDdkNmJhNjJk
OTk1MDNiZTIzMjZiNGY5N2M3YzlhNWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDExMSArMzUsMjE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9w
ZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1
bnNpZ25lZCBtYXhOdW1DaGVja3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBv
bmUgdGhhdCBleGlzdHMgZm9yIGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBl
eGlzdCBiZXR3ZWVuIGJ5dGVjb2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJh
bmQsIExvY2FsT3BlcmFuZCwgVG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1Ymxp
YzoKKyAgICBPcGVyYW5kKCkgPSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3QgT3BlcmFuZCYp
ID0gZGVmYXVsdDsKKworICAgIE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIDogbV9raW5kKG9wZXJhbmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsgfQor
CisgICAgT3BlcmFuZChPcGVyYW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAgOiBt
X2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAgICAg
ICBBU1NFUlQoa2luZCA9PSBUbXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5p
c0xvY2FsKCkgPT0gKGtpbmQgPT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3BlcmFu
ZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVyYW5k
KTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0KKyAg
ICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KCp0aGlzKTsgfQorICAgIHN0YXRpYyBPcGVyYW5kIGZyb21CaXRzKHVpbnQ2NF90IHZhbHVlKTsK
KworICAgIGJvb2wgaXNUbXAoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gVG1wT3BlcmFuZDsg
fQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBBcmd1bWVu
dE9wZXJhbmQ7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0g
TG9jYWxPcGVyYW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKTsgfQorICAgIGJvb2wg
aXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gVG1wT3BlcmFuZCAmJiB2aXJ0dWFs
UmVnaXN0ZXIoKS5pc0hlYWRlcigpOyB9CisKKyAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsg
QVNTRVJUKGlzQXJndW1lbnQoKSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50
KCk7IH0KKyAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7IH0KKworICAgIGlubGluZSBib29sIGlzVmFs
aWQoKSBjb25zdDsKKworICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYp
IGNvbnN0OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgT3BlcmFuZEtpbmQgbV9raW5kIHsgQXJndW1lbnRPcGVyYW5kIH07CisgICAgaW50IG1f
b3BlcmFuZCB7IFZpcnR1YWxSZWdpc3Rlcjo6aW52YWxpZFZpcnR1YWxSZWdpc3RlciB9OworfTsK
KworQUxXQVlTX0lOTElORSBib29sIE9wZXJhbmQ6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYg
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkg
PT0gb3RoZXIudmFsdWUoKTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkgPT0gb3RoZXIu
dmlydHVhbFJlZ2lzdGVyKCk7Cit9CisKK2lubGluZSBib29sIE9wZXJhbmQ6OmlzVmFsaWQoKSBj
b25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA+PSAwOwor
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc1ZhbGlkKCk7Cit9CisKK2lubGluZSBPcGVy
YW5kIE9wZXJhbmQ6OmZyb21CaXRzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIE9wZXJhbmQgcmVz
dWx0ID0gYml0d2lzZV9jYXN0PE9wZXJhbmQ+KHZhbHVlKTsKKyAgICBBU1NFUlQocmVzdWx0Lmlz
VmFsaWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljX2Fzc2VydChzaXplb2Yo
T3BlcmFuZCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIk9wZXJhbmQ6OmFzQml0cygpIHJlbGllcyBv
biB0aGlzLiIpOwogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgotICAgIE9wZXJh
bmRzKCkKLSAgICAgICAgOiBtX251bUFyZ3VtZW50cygwKSB7IH0KLSAgICAKLSAgICBleHBsaWNp
dCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzKQorICAgIHVz
aW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4s
IEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OworICAg
IHVzaW5nIFJlZlR5cGUgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9v
bD4sIEZhc3RCaXRSZWZlcmVuY2UsIFQmPjsKKyAgICB1c2luZyBDb25zdFJlZlR5cGUgPSBzdGQ6
OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsK
KworICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6
ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCiAgICAg
ICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxz
KG51bUxvY2FscykKICAgICB7Ci0gICAgICAgIGlmIChXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVl
ZHNJbml0aWFsaXphdGlvbikgewotICAgICAgICAgICAgbV92YWx1ZXMucmVzaXplKG51bUFyZ3Vt
ZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3ZhbHVl
cy5maWxsKFQoKSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfQorICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAg
ICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CisgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8
VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCisgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7
CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2FscywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJh
bmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBz
LCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJn
dW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAgICB7Ci0gICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwor
ICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMp
OworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoT3Bl
cmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxW
YWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3Vt
ZW50cygpKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCiAg
ICAgewotICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMo
KSArIG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVy
LnNpemUoKSk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9Ci0g
ICAgCisKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251
bUFyZ3VtZW50czsgfQotICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzLnNpemUoKSAtIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgCisgICAgc2l6ZV90IG51
bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KKyAgICBzaXplX3Qg
bnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKworICAgIHNpemVfdCB0bXBJbmRleChz
aXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1w
cygpKTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpOworICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlkeCA8IG1fbnVtQXJndW1lbnRzKTsKKyAgICAg
ICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4
OwogICAgIH0KICAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbnVtQXJndW1lbnRzICsgaWR4OworICAgICAgICBBU1NF
UlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgaWR4OwogICAgIH0KKworICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0
dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIHRtcChzaXpl
X3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAot
ICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1
ZXNbYXJndW1lbnRJbmRleChpZHgpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXJndW1lbnQoc2l6
ZV90IGlkeCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudElu
ZGV4KGlkeCldOwotICAgIH0KKyAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0
dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgYXJn
dW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChp
ZHgpXTsgfQogICAgIAotICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVz
W2xvY2FsSW5kZXgoaWR4KV07IH0KLSAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgUmVmVHlwZSBsb2Nh
bChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAg
Q29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xv
Y2FsSW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5k
S2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5k
KSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZlRtcHMoKTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1
cm4gbnVtYmVyT2ZBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7
CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9m
TG9jYWxzKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBlIGF0Rm9yKHNp
emVfdCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVy
YW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3Bl
cmFuZDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVu
dE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0
dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAg
cmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0KICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QK
KyAgICBDb25zdFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3Bl
cmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJu
IHRtcChpZHgpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAg
Y2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKwor
ICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUg
PSBUKCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAg
IGlmIChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9j
YWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXpl
X3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51
bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsK
LSAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikg
ewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3ZhbHVl
c1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBp
KV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJlZFZh
bHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2Fs
czsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxz
ICsgaSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1
cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lkIGVu
c3VyZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7
Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUg
PD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVuc3Vy
ZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0
aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7
ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQm
IHZhbHVlKQpAQCAtMTY0LDg0ICsyNzIsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4
ID49IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRM
b2NhbChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChp
bnQgb3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIGdl
dEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
T3BlcmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAgc2l6
ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVy
biBhcmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwot
ICAgICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2Nh
bCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0
dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4g
bG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBv
cGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAgICBz
aXplX3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gb3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICgh
b3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAgfQog
ICAgIAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7
CisgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAg
VCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5cGUg
b3BlcmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4g
dG1wKG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJh
bmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFu
ZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQm
Pihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAg
Q29uc3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0gICAg
Ym9vbCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMo
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkp
IDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAgICAg
ICBpZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51
bWJlck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBv
cGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBvcGVy
YW5kLCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFu
ZCkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0
T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNvbnN0
IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0g
ICAgVCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBj
b25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsg
fQotCi0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5k
ZXggPCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9ySW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFJl
ZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisg
ICAgT3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkp
Lm9mZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9y
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4IDwg
bnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsK
KyAgICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgaW5kZXggLSAobnVtYmVyT2ZMb2Nh
bHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRP
cGVyYW5kRmlyc3RUaW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgc2V0QXJn
dW1lbnRGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
ZXRMb2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2YWx1
ZSk7Ci0gICAgfQotICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAtMjU3LDYg
KzM1Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFyZ3VtZW50
cygpID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQobnVtYmVy
T2ZMb2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJUKG51
bWJlck9mVG1wcygpID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiBtX3ZhbHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUsOSArMzY2
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVl
cyBhcmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1Bcmd1bWVu
dHM7CisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1
bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUg
dG1wcy4KKyAgICBTdG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRz
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmgKaW5kZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1NjZmZC4u
MGIxY2MxZjJkMTk3YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAsNiArMzAs
MTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgb3V0LnBy
aW50KCJ0bXAiLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2aXJ0dWFs
UmVnaXN0ZXIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAogewpAQCAtNDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4
LCAiOiIsIGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAg
ICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7ICsr
dG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGlu
Q29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgpAQCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkpOwog
ICAgIH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZU
bXBzKCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4
LCAiOiIsIHRtcCh0bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmNwcAppbmRleCBkNWRkZWU4ZDU2MDc3MDMyM2IxZmQ1ZjFhY2NjY2MwNTAyYzEyNjU0Li43ZTkz
MjYyZGZiMDk1OWRlYzJhOTI0MWZmOGM2MTFmMzNiOTJiNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTcyLDYg
KzcyLDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFz
Q2hlY2twb2ludHMoZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgpKQog
ICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwgbV9t
ZXRhZGF0YShVbmxpbmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCBhZDFmOTBi
NzBiZWI5ODE3ZjMyYmI4MGM1NDdhZTRiYWI2NjU1MWE1Li4zMDgyYjBhMjYzYzMwNjU1MjU0YWQ4
NmY5N2ZhMjMyMGRjNTBiNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtMTQxLDYgKzE0MSw5IEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXpl
KCk7IH0KICAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25J
bmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXNDaGVja3Bv
aW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lkIHNldEhh
c0NoZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAgLy8gU3Bl
Y2lhbCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAgdm9p
ZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2Nv
cGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OCw5ICsyMDEsOCBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsg
fQogICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZp
ZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MTksNiArNDIxLDcgQEAgcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBtX2FnZSA6
IDM7CiAgICAgc3RhdGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsKKyAgICBi
b29sIG1faGFzQ2hlY2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sg
bV9sb2NrOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAppbmRleCBiYmI4YTRiMjQ1MzEwNDAzYTdmY2VmMmIyMWUxMTgzM2VmYjkwMzY3
Li5lYjkxNzk0NTMwZGYxYTMyOTJkY2RiZWQzMTY0ZTljNzkwOWE2OWYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjggKzE3Niwy
OCBAQCBpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUluZGV4
KFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGUt
Pm1fYnl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQgOiBw
dWJsaWMgVmFsdWVQcm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFu
ZEJ1ZmZlciB7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyIHsK
ICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAg
ICAgewogICAgICAgICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZmIHRoYW4g
d2UgbmVlZC4gV2UgY291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAgICAgICAg
Ly8gdG8gYmUgbW9yZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIgPSBNYWxs
b2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD46Om1hbGxvYyhtX3NpemUgKiBzaXplb2YoVmFs
dWVQcm9maWxlQW5kT3BlcmFuZCkpOworICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkg
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0
KClbaV0pIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAotICAgIH5W
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKCkKKyAgICB+VmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0aW9uPgpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kQnVmZmVyIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgTWFsbG9jUHRy
PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+IG1fYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNv
dmVyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5j
cHAKaW5kZXggYzVjYTRkZTFlNGIzNjExMjE0YzM1YWIxZWEzMmRjMWNiZjQ1ZjNlOS4uYjEzOTQ3
ZjBlMThkZjA2M2E4OGIzZjIyN2NkY2RiZmVmZmVkYzMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMzUsMjIgKzM1LDIyIEBA
IEpTVmFsdWUgVmFsdWVSZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0g
ICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOwogICAgIGNhc2UgSW50NTJE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKKyAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUy
KCkpOwogICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJl
dHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVu
Ym94ZWRTdHJpY3RJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOwogICAgIGNhc2UgRG91
YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFO
KGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJsZSgp
KSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1
YWxSZWdpc3RlcigpKS51bmJveGVkRG91YmxlKCkpKTsKICAgICBjYXNlIENlbGxEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCkpLnVuYm94ZWRDZWxsKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2Vk
SW5KU1N0YWNrOgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogI2Vsc2UKLSAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpLnVuYm94ZWRCb29sZWFuKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CiAjZW5kaWYKICAgICBj
YXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm4gY29uc3RhbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCmluZGV4IGQ4ZjE4YzNmZTg1NTk0
ZjMyYTI5M2FmZDg5MDkyMjM2MTM2MmVhNjMuLjVlNDNiYzcyYmJjYzRmZjk3YTY4ZjgzZGE4MzA5
NGU1OGRhM2IzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmlydHVhbFJlZ2lzdGVyLmgKaW5kZXggMzYxOTUyOTQyZDJiODZiYWIxMmY2Y2NjN2NjMWJhMDIx
ZjVhZDA0OC4uZmQxNzAwNzE3YzNiZmYzYmFmMGMzYjAwMzE3NmZlNjY1OTI0ZGY0YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaApAQCAt
MzEsMTIgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVyYW5k
SXNMb2NhbChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwo
aW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPCAwOwogfQogCi1pbmxpbmUgYm9v
bCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdp
c3RlcklzQXJndW1lbnQoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPj0gMDsK
IH0KQEAgLTQ5LDI1ICs0OSwzMiBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW50LCBpbnQpOwogCisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsKKwogICAgIFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlcklEKik7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyKFJlZlB0cjxSZWdpc3RlcklEPik7CiAKICAgICBWaXJ0dWFsUmVn
aXN0ZXIoKQotICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHNfaW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKKyAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihpbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgIHsgfQogCiAgICAgZXhwbGljaXQgVmlydHVhbFJlZ2lzdGVyKGludCB2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQogICAg
IHsgfQogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lz
dGVyICE9IHNfaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzTG9jYWwoKSBj
b25zdCB7IHJldHVybiBvcGVyYW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBi
b29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdCBzbG90KQor
ICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHN0YXRpY19jYXN0PGludD4oc2xvdCkpCisgICAg
eyB9CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0
ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25z
dCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQor
ICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJn
dW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KLSAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7
IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
OyB9CisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0
ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNv
bnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxS
ZWdpc3Rlcik7IH0KICAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1l
bnQoKSk7IHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAg
ICBpbnQgdG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyIC0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQor
ICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50KCkpOyBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQog
ICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsgfQogICAg
IGludCBvZmZzZXRJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgKiBz
aXplb2YoUmVnaXN0ZXIpOyB9CiAKQEAgLTEwNiw5ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4OwotCiAgICAgc3RhdGljIGludCBsb2NhbFRvT3BlcmFuZChp
bnQgbG9jYWwpIHsgcmV0dXJuIC0xIC0gbG9jYWw7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRU
b0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMg
aW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBmODBh
N2M0ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2UzLi44ZDJhN2ZiODI0NzU4ZmQwNGFi
MDNiNzAyMDgyYmRiZjYzMTZiZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTE4Nyw3ICsxMTg3
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1l
dGVyKCkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAgICAgbV9wYXJhbWV0ZXJzLmdyb3co
bV9wYXJhbWV0ZXJzLnNpemUoKSArIDEpOwogICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lzdGVy
Rm9yKHJlZyk7Ci0gICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZy5vZmZzZXQoKSk7CisgICAgcGFy
YW1ldGVyLnNldEluZGV4KHJlZyk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwog
ICAgIHJldHVybiAmcGFyYW1ldGVyOwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMoRnVuY3Rpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBibG9jayBrbm93cyBhYm91
dCBhbGwgb2Ygb3VyIHBhcmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzCiAg
ICAgLy8gbmVlZGluZyBkZXN0cnVjdHVyaW5nIGFyZSBub3RlZC4KLSAgICBtX3RoaXNSZWdpc3Rl
ci5zZXRJbmRleChpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsgLy8gdGhpcwor
ICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KFZpcnR1YWxSZWdpc3Rlcihpbml0aWFsaXplTmV4
dFBhcmFtZXRlcigpLT5pbmRleCgpKSk7IC8vIHRoaXMKIAogICAgIGJvb2wgbm9uU2ltcGxlQXJn
dW1lbnRzID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
c2l6ZSgpOyArK2kpIHsKQEAgLTE2MzcsMTEgKzE2MzcsMTEgQEAgYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEVxdWFsaXR5T3BJbXBsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmUKIAogICAgIGlmIChtX2xhc3RJbnN0cnVjdGlvbi0+aXM8T3BUeXBlb2Y+KCkpIHsKICAg
ICAgICAgYXV0byBvcCA9IG1fbGFzdEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKTsKLSAgICAg
ICAgaWYgKHNyYzEtPmluZGV4KCkgPT0gb3AubV9kc3Qub2Zmc2V0KCkKKyAgICAgICAgaWYgKHNy
YzEtPnZpcnR1YWxSZWdpc3RlcigpID09IG9wLm1fZHN0CiAgICAgICAgICAgICAmJiBzcmMxLT5p
c1RlbXBvcmFyeSgpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoc3JjMi0+aW5kZXgoKSkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKSktPnRyeUdldFZhbHVlKCk7CisgICAgICAgICAg
ICAmJiBzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgICYm
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5n
ZXQoKS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNT
dHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVy
KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAidW5k
ZWZpbmVkIikgewogICAgICAgICAgICAgICAgIHJld2luZCgpOwogICAgICAgICAgICAgICAgIE9w
SXNVbmRlZmluZWQ6OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKQEAgLTMyMjksNiArMzIy
OSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIEFT
U0VSVChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKTsKICAgICBWYXJhcmdzT3A6OmVtaXQodGhpcywg
ZHN0LCBmdW5jLCB0aGlzUmVnaXN0ZXIsIGFyZ3VtZW50cyA/IGFyZ3VtZW50cyA6IFZpcnR1YWxS
ZWdpc3RlcigwKSwgZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBp
ZiAoVmFyYXJnc09wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0
dXJuIGRzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1ZmZl
ZjBlZjI2Y2I1MWU2ZjkuLjQyZGI5N2Q2NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2NTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKQEAgLTEwMDcsNiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIHNob3VsZEVtaXRDb250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVHZW5lcmF0aW9uTW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNv
bnRyb2xGbG93UHJvZmlsZXIpOyB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAg
ICB2b2lkIHNldFVzZXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9p
bnRzKCk7IH0KIAogICAgICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAppbmRleCAzNTYyMGExMTE2
MTFjNWUwYjgxMDFjZDQ1NTRjMDZiYzgwMzAzNzgwLi5mODE5YjEyM2Q0ZDg5YmEwNTk5MDhhYWFk
YzUwZjYyOWRiM2U0OTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL1JlZ2lzdGVySUQuaApAQCAtNjksMTIgKzY5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEluZGV4KGludCBpbmRleCkKKyAg
ICAgICAgdm9pZCBzZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpCiAgICAgICAgIHsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBtX2RpZFNldEluZGV4ID0gdHJ1ZTsKICNlbmRpZgot
ICAgICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpOwor
ICAgICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSBpbmRleDsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgc2V0VGVtcG9yYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RIZWFwLmNwcAppbmRleCBiODNmZWUwZDNjMDlkMTQ5N2FhN2VhMWRlM2UwNDkwNjJm
MjI2YzE0Li5lNjQwNzFiMWFhMGUzNDg5NDQzNDM5ZmYyOGZjYTI1MWI2MmI5NjVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCkBAIC00MCw2ICs0
MCwxNCBAQCB2b2lkIEFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogICAgICAgICBvdXQucHJpbnQodmFsdWUoKSk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RI
ZWFwOjpQYXlsb2FkOjpkdW1wQXNPcGVyYW5kKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzVG9wKCkpCisgICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgZWxzZQorICAg
ICAgICBvdXQucHJpbnQoT3BlcmFuZDo6ZnJvbUJpdHModmFsdWUoKSkpOworfQorCiB2b2lkIEFi
c3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmlu
dChraW5kKCkpOwpAQCAtNDksNiArNTcsMTMgQEAgdm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCIoIiwgRE9NSklUOjpIZWFw
UmFuZ2U6OmZyb21SYXcocGF5bG9hZCgpLnZhbHVlMzIoKSksICIpIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykgeworICAgICAgICBvdXQucHJpbnQo
IigiKTsKKyAgICAgICAgcGF5bG9hZCgpLmR1bXBBc09wZXJhbmQob3V0KTsKKyAgICAgICAgb3V0
LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBvdXQucHJpbnQoIigi
LCBwYXlsb2FkKCksICIpIik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oCmluZGV4IGJmOTkzNzc5NzA0NzAyZDhkNWIyMGI2YzJmNmY3Mzk1YWZlNmI4
NjguLjNjNGNlM2Q1ZDAyZGMzYTgxZjNhYTQyNGNmYzNmZDFjNDQ3YzUyOTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaApAQCAtMjgsNiArMjgsNyBAQAog
I2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiRE9NSklUSGVhcFJhbmdlLmgiCisjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAg
LTEyMywxMCArMTI0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbV92YWx1ZShiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisKKyAgICAgICAgUGF5
bG9hZChPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCi0gICAg
ICAgICAgICAsIG1fdmFsdWUob3BlcmFuZC5vZmZzZXQoKSkKKyAgICAgICAgICAgICwgbV92YWx1
ZShvcGVyYW5kLmFzQml0cygpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBQYXls
b2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICAgICAgOiBQYXlsb2FkKE9wZXJh
bmQob3BlcmFuZCkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4Myw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB2b2lkIGR1bXBBc09wZXJhbmQoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2lzVG9w
OwpAQCAtMjA0LDYgKzIxMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5k
ICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYga2luZCAhPSBXb3JsZCAmJiBraW5kICE9IEhlYXAg
JiYga2luZCAhPSBTaWRlU3RhdGUpOwogICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKGtpbmQsIHBh
eWxvYWQpOworICAgICAgICBBU1NFUlQodGhpcy0+a2luZCgpID09IGtpbmQgJiYgdGhpcy0+cGF5
bG9hZCgpID09IHBheWxvYWQpOwogICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAtMjE5LDYgKzIyNywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVChraW5kKCkgIT0gV29ybGQgJiYga2luZCgpICE9IEludmFsaWRBYnN0cmFj
dEhlYXApOwogICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwoKTsKICAgICB9CisgICAgT3BlcmFu
ZCBvcGVyYW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2sg
JiYgIXBheWxvYWQoKS5pc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OmZyb21CaXRz
KHBheWxvYWQoKS52YWx1ZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwIHN1cGVy
dHlwZSgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IDY0YWNiNTQwZDQwYWUx
Nzk4ZjdjMjIzNmQ4MWRmZTFjODQwOGQ1MzAuLjVkOWUxN2M5MGEyYzViNTE4MmIzNjU2MTI4NzYx
ZDg1MzcxODQ1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTM4MSw3ICszODEsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDogewog
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0
ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CisgICAgICAg
IEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRh
LT5vcGVyYW5kKCkpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBh
bHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFs
dWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IodmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1hdCgp
KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTM5Miw3ICszOTIsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVy
YW5kKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFkeSBi
ZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlzVHlw
ZSh0eXBlRmlsdGVyRm9yKGRhdGEtPmZvcm1hdCkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVl
KCkpCkBAIC00MDIsMTIgKzQwMiwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBtX3N0YXRlLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAg
ICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1l
bnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnREZWZpbml0ZWx5L1NldEFyZ3VtZW50TWF5YmUg
bWVhbnMKICAgICAgICAgLy8gdGhhdCBzb21lb25lIHNldCB0aGUgYXJndW1lbnQgdmFsdWVzIG91
dC1vZi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8gYQog
ICAgICAgICAvLyBub24tY2xlYXIgdmFsdWUuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS5v
cGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CkBAIC00NTgsNiArNDU4LDEy
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
c2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewog
ICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFyZ3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3Vu
dCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9lcywgaXQgc2hvdWxkIHR1cm4KQEAgLTQ3Niw3
ICs0ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgbV9zdGF0ZS5vcGVy
YW5kKGRhdGEtPmNvdW50KS5zZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQgLSAxOyBpLS07KQotICAgICAgICAgICAgbV9z
dGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAg
ICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydCArIGkpLm1ha2VIZWFwVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjM1OCw3ICsyMzY0LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXg7CiAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRJbmRleENoZWNrZWQuc2FmZUdldChhcmd1bWVudEluZGV4KSAh
PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3N0YXRlLm9wZXJhbmQoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCmlu
ZGV4IGQ3MzI0N2I5M2M1ZGM3ODZiNjE3YWE1YWFkYzJiMGY2MTUyODZiNWYuLjg5YzA4ZmEwODBj
ZWEzMmZkOWM1OTFmMzBmMWU3ZGQ0NmYxZDEyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bV92YXJpYWJsZXNbaV0tPmZpbmQoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2
YXJpYWJsZS0+b3BlcmFuZCgpOwogCiAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiAiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGFmMmVkYTRhZDg4ZTli
OTdhYWQ1ZjRmOTM5MjM3NjIxOTUyYWVmODQuLjE1NTE4NmQwYmY4MjI1ZjE5MTU1ZmM4MzNiMzMw
MDBhN2Y1ZDk5ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtMzU4LDkgKzM1OCwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAg
ICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5l
d0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9k
ZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFyZ3VtZW50c0No
aWxkKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxk
KCktPm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3
QXJyYXlCdWZmZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTQ5Mywx
MCArNDk2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGhlYXAub3BlcmFuZCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHJlZ2lzdGVyIG1heSBub3QgcG9pbnQgdG8gYW4gYXJndW1l
bnQgb3IgbG9jYWwsIGZvciBleGFtcGxlIGlmIHdlIGFyZSBsb29raW5nIGF0IFNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNI
ZWFkZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKHJlZykgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVy
YW5kLmlzSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlU
aGlzQmxvY2sub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0s
CiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgfQpA
QCAtNTYwLDE2ICs1NjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXND
bG9iYmVyZWRCeUJsb2NrIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJl
cmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSk7CkBAIC02MjcsNyArNjMw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgTm9PcENsb2JiZXJpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyZdIChBYnN0cmFjdEhlYXAgaGVhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFw
Lm9wZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04MDYsNyAr
ODA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzYWZlVG9HZXRTdGFjayA9IGluZGV4ID49IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9IGluZGV4IDwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAx
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhZmVUb0dldFN0YWNrICY9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpIC0gMTsKQEAgLTg0NSw5ICs4NDgsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNh
bmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBWYXJhcmdzTGVuZ3RoIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhpdE9L
LgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9y
aWdpbi5leGl0T0spOworICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5v
ZGUtPm9yaWdpbi53aXRoRXhpdE9LKHRydWUpOworCisKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
aW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgb3JpZ2luLCAvKiBhZGRUaGlzID0g
Ki8gdHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRh
dGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IApAQCAtODYyLDEwICs4NzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
dmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2Fu
RXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5j
b3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCksIEVk
Z2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0so
Y2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCkBA
IC04NzQsMTQgKzg5MSwxNSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
c3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+
c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZy5p
c0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5v
cmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZy5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdp
bi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHJlZyksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5F
eGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFs
dWUpKTsKQEAgLTkzNSw3ICs5NTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVBcmd1
bWVudENvdW50ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
QEAgLTk4Myw3ICsxMDAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVu
dENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3Vt
ZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsg
bG9hZEluZGV4IDwgZnJhbWVBcmd1bWVudENvdW50OyArK2xvYWRJbmRleCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBG
bHVzaGVkSlNWYWx1ZSk7CkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0
OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEt
PmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJnc0RhdGEt
PmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXggNjI2MTEy
M2NiZmVjM2ViYTE5NWQwOWI5MzEwMjZmMjZjNzI1ODQ3Ni4uYThkMzg0NjVjZTQ4YTlkOGY1NDIw
MGJjNzQ5NmNiNzRhZThkNjZkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCByZWcuaXNI
ZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwK
ICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC00NiwxOSArNTAsMTkgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgCiAgICAgLy8gV2UgZG8gbm90IGluY2x1ZGUgZml4dXBzIGhlcmUgc2luY2Ug
aXQgaXMgbm90IHJlbGF0ZWQgdG8gfGFyZ3VtZW50c3wsIHJlc3QgcGFyYW1ldGVycywgYW5kIHZh
cmFyZ3MuCi0gICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRTdGFydCA9CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CiAgICAgcmV0dXJuIHJlZyA+PSBhcmd1bWVudFN0YXJ0
ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9CiAKLWJvb2wgYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3RlciByZWcp
Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5k
IG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlk
YXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIHJlZyk7CisgICAgcmV0dXJu
IGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFy
Z3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbikKKyAgICBJbnNl
cnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5k
ZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7CiAgICAgR3JhcGgmIGdyYXBo
ID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3MywxNCBAQCBOb2RlKiBlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3Vt
ZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwg
YXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgotICAgICAgICB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwKKyAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5v
cCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSk7CiAKKyAgICBp
ZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisgICAgICAgIHJldHVybiBlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBhcmd1bWVudHMtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMpOworCiAgICAgaWYgKGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgIHVu
c2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsKKyAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwogICAgICAgICBCaXRWZWN0b3Iq
IGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAgICAgIE5vZGUqIGN1cnJl
bnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsxMTAsNyBAQCBOb2RlKiBlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAoYXJndW1lbnRzLT5vcCgp
ID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlC
dWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAg
ICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVy
YW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG5v
ZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRh
YmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CiAgICAgfQogICAgIAogICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIwLDcgQEAgTm9kZSogZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAKICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAhYWRkVGhpczsK
ICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAg
ICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAg
ICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhT
dWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAgICAgICBFZGdlKGFyZ3Vt
ZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50
Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDEgKyBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBub2RlSW5kZXgs
IG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgKyAhYWRkVGhpcyksIElu
dDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAgICAgICAg
Ly8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVnYXRpdmUgbnVtYmVyIGlm
IHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQgaGVyZS4KICAgICAgICAg
cmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAgICAgICAgRWRnZShyZXN1
bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRG
b3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQzMlVzZSkpOworICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2lu
LCBqc051bWJlcihhZGRUaGlzKSwgSW50MzJVc2UpKTsKICAgICAgICAgcmVzdWx0LT5zZXRSZXN1
bHQoTm9kZVJlc3VsdEludDMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCmluZGV4IDlhNzcxOGZiYmY1NDdiMmY2YWUx
MDFkYWYzNzRhMDZhMmMzZGRmMTIuLjc0ZjkzOWU4MTYyMmQ0MDI0NmUyMzU1ZDUwOThhOWVkMmE4
NTIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNV
dGlsaXRpZXMuaApAQCAtMzEsMTEgKzMxLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFt
ZSosIFZpcnR1YWxSZWdpc3Rlcik7Ci1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9k
ZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQpOworYm9vbCBhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCk7CiAKIE5vZGUqIGVtaXRDb2RlVG9H
ZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVu
dHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbik7CisgICAgSW5zZXJ0aW9uU2V0Jiwg
Tm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIGJvb2wgYWRk
VGhpcyA9IGZhbHNlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCmluZGV4IDk2
ZGFjMzlhNDQ0ZmZiZDNjZTU0M2Y1N2YzNmNkNjFkZWNjMjhiZDQuLjg5N2M3MGRmZmJhMDY2YjY0
OWNhZmRjYzFlZjA5MzM3NjgxMDRkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCkBAIC0xMzksOCArMTM5LDcgQEAgcHVibGlj
OgogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IH0KICAgICB1bnNpZ25l
ZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFu
ZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KLSAg
ICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0
VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4KTsgfQog
ICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9j
ay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCmluZGV4IDc3NDNlN2QwMWYx
Y2FkNzgxZDg0YWIwM2QzYzA5Yzc3ZjgwMjliYTUuLmMyYjU1YWE1YzRhNTIyOWIxYjFhNDQzMWMx
ODdhZGVmNDZjM2RiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5TWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCB2b2lkIEF2YWlsYWJpbGl0eU1h
cDo6cHJ1bmVIZWFwKCkKIAogdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyhH
cmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4gd2hlcmUpCiB7Ci0gICAgT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiBsb2NhbHNDb3B5KG1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksIG1fbG9jYWxzLm51
bWJlck9mTG9jYWxzKCksIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CisgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KE9wZXJhbmRzTGlrZSwgbV9sb2NhbHMsIEF2YWls
YWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUo
CiAgICAgICAgIHdoZXJlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAg
ICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgbG9jYWxzQ29weS5vcGVyYW5k
KHJlZykgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAgICAgICAgIH0pOwogICAgIG1fbG9jYWxz
ID0gV1RGTW92ZShsb2NhbHNDb3B5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5oCmluZGV4IDUzNTUyNTYwMjNkZGNmMjgwZGM1OTViMzNhN2M3ZmRl
YzU0ZTY0ZjAuLjgwYzEyYmYxODAyNWE1NjEwNTk2ZGEyNGUyM2MwMjVmMmFiZTRmMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaApAQCAtNjYs
OSArNjYsOSBAQCBzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKICAgICB9CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzRnVuY3RvciwgdHlwZW5hbWUgQWRkRnVuY3Rvcj4KLSAgICB2b2lk
IGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSGFzRnVu
Y3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCisgICAgdm9pZCBjbG9zZVN0YXJ0aW5n
V2l0aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3QgQWRkRnVu
Y3RvciYgYWRkKQogICAgIHsKLSAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1f
bG9jYWxzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9
IG1fbG9jYWxzLm9wZXJhbmQob3ApOwogICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5oYXNOb2Rl
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXggMDU4NDQ5NjNlNjEwZWQyOTNjNTYwZmFiZmQz
ODlhOWYzOTc4MGEwNy4uZTIxYjI4YjUyMjFmMTU2MThiODA2NGEzYTdiMmQ3ODY5MTM4NDIxZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCkBAIC0zMiw3
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotQmFzaWNCbG9j
azo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFy
Z3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKK0Jhc2lj
QmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBu
dW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywgZmxvYXQg
ZXhlY3V0aW9uQ291bnQpCiAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCiAgICAg
LCBpbmRleChOb0Jsb2NrKQogICAgICwgY2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkKFN0
cnVjdHVyZXNBcmVXYXRjaGVkKQpAQCAtNDgsMTEgKzQ4LDExIEBAIEJhc2ljQmxvY2s6OkJhc2lj
QmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMs
IHVuc2lnCiAgICAgLCBpc0xpbmtlZChmYWxzZSkKICNlbmRpZgogICAgICwgaXNSZWFjaGFibGUo
ZmFsc2UpCi0gICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0g
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdFRhaWwobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhl
YWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAg
ICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAg
ICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAg
ICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAs
IHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIGlu
dGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVt
VG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhl
Y3V0aW9uQ291bnQpCiB7CiB9CkBAIC03MCw2ICs3MCwxNSBAQCB2b2lkIEJhc2ljQmxvY2s6OmVu
c3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAgaW50ZXJzZWN0aW9uT2ZQYXN0
VmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1
bGxUb3AoKSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdO
dW1UbXBzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwor
ICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0
SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBz
KG5ld051bVRtcHMpOworICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVU
bXBzKG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Cit9CisKIHZvaWQgQmFz
aWNCbG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAg
ICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IGI1YWRmMDkxMmQwOTQyYmU5N2U5ODdjZGM4
OWY0YWUzNGQwYzBiYzguLjFkZDM4Yzc5MDhkYzZmNGQxYjA4NWJjOGUwNjI1NDgwZGI0NDk3Y2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00NiwxMSAr
NDYsMTIgQEAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVj
dCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygK
LSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVu
dHMsIHVuc2lnbmVkIG51bUxvY2FscywKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJl
Z2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQg
bnVtVG1wcywKICAgICAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwogICAgIH5CYXNpY0Jsb2Nr
KCk7CiAgICAgCiAgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKTsK
KyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcyk7CiAgICAgCiAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQogICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5kZXggNzUwOGUyMTlkYzdjNTgz
ZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOS4uMDA4Y2Y1MjI2OTU3YzlhODM1ODVjNWU1ZTJjMTI1
ZjJmOGNlNGIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a0luc2VydGlvblNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a0luc2VydGlvblNldC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBCbG9ja0luc2VydGlvblNl
dDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+JiYgYmxvY2spCiAKIEJhc2lj
QmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVj
dXRpb25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3
IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7CisgICAgUmVmPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCksIGV4ZWN1dGlvbkNvdW50KSk7
CiAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKICAgICBhdXRvKiByZXN1bHQgPSBibG9j
ay5wdHIoKTsKICAgICBpbnNlcnQoaW5kZXgsIFdURk1vdmUoYmxvY2spKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggN2U0YTlmZTYy
MzNiNzQ0OWU4Mjg2NjJjMWU0OTlkYzllODQ0MDhiNy4uMDEzNDIxMjc0NzYwMTEyMzRjMTRhMTFh
ZmFjZmM0MjUyOTE1OTg5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkpKQogICAgICAgICAsIG1fbnVt
QXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwgbV9udW1M
b2NhbHMobV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQorICAgICAgICAsIG1fbnVtVG1w
cyhtX2NvZGVCbG9jay0+bnVtVG1wcygpKQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkK
ICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGluZVN0YWNr
VG9wKDApCkBAIC0xMzksNiArMTQwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBo
LmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAKKyAgICB2b2lk
IGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKKyAgICB7CisgICAgICAgIFZFUkJPU0Vf
TE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20gIiwgbV9u
dW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOworICAgICAgICBpZiAobmV3TnVtVG1w
cyA8PSBtX251bVRtcHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbnVtVG1wcyA9
IG5ld051bVRtcHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlVG1wcyhu
ZXdOdW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZU1pbk1h
eChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CkBAIC0yNzAsMjUgKzI4MiwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlu
a0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMp
OwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2Nr
cywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2twb2ludCgpCisgICAgeworICAgICAgICBtX2N1
cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIG1fY3Vy
cmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBp
dCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAg
ICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgp
OworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0
YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCiAgICAgLy8gR2V0
L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAg
Tm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldERp
cmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXND
b25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52
aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgIC8vIElzIHRoaXMgYW4g
YXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAg
IHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRBcmd1
bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKIAotICAgICAgICAvLyBNdXN0IGJlIGEg
bG9jYWwuCi0gICAgICAgIHJldHVybiBnZXRMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJu
IGdldExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0KFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQpAQCAtMjk4LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYg
KGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0p
IHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
Y29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAg
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2Rl
QmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChv
cGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9s
ZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhjb25zdGFudElu
ZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7
IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM1OCw5ICszNzgsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rp
b24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsKLSAgICBOb2RlKiBzZXREaXJl
Y3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUg
PSBOb3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBOb2Rl
KiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAg
ICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKIAogICAgICAg
ICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFz
IGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CkBAIC0zNzQsNyArMzk1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUodGhpcyk7
CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsg
KytpKQpAQCAtMzkyLDE4ICs0MTMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgs
IG5vZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXko
bV9jdXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9u
KGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIC8vIFVz
ZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBh
IGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLQotICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7Cisg
ICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOworICAg
ICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkg
bGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0
cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVk
IGZvcgpAQCAtNDI4LDIwICs0NDgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxl
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9k
ZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJ
bmZvKHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBO
b2RlKiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQp
CisgICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdp
biwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFs
U2V0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlz
TG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZSht
X2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2ln
bmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2V0
TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewotICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFu
ZCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG9wZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7CisgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxsRnJhbWUo
KSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5kLCAiIGJ1
dCBjdXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBibG9jayBo
YXM6ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAiIHRtcHMuIik7CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRl
TmFrZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1bWVu
dFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2Nh
bChyZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICAg
ICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9jb2Rl
QmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVl
ZHNTY29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkp
CiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUxLDcg
KzQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVj
a0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgQmFk
SW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDksMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0QXJn
dW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5v
ZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVyYW5k
IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAg
ewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50
U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnQg
PSByZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3Vt
ZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
cmVnKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9yICd0
aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFrZSBz
dXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwgbV9n
cmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9IElt
bWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgp
ID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OSwxNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkg
LSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAg
ICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
Ci0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24o
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChv
cGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlv
bkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25G
b3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NTAsOSArNTc5LDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1Z2dlckVuYWJsZWQoKSk7CiAg
ICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhG
aXh1cC5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVt
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJh
bWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
OwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJhbmQoaW5s
aW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJl
bWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBtX2dyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51bVBhcmFtZXRlcnMoKTsKIApA
QCAtNTc1LDYgKzYwNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1l
KTsKICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0g
bV9ncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIC8vIE5vdGU6
IFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNhdXNlIHRtcHMgYXJlIG5vdCBy
ZXF1aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICBjb25z
dCBhdXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYnl0
ZWNvZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludChv
cmlnaW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBs
b2NhbCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9jYWxdKQpAQCAtNTg0LDI3ICs2
MTQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQgZmx1
c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaChPcGVyYW5kIG9wZXJh
bmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRp
b24ob3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9p
ZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50
UG9zaXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPEZsdXNoPihv
cGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxOb2RlVHlw
ZSBub2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9p
ZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0Nv
bnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGU7CiAgICAgICAgIApAQCAtNjE0LDI2ICs2NDQsMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAK
ICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJsZSkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkg
PSBub2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3Vt
ZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIHBo
YW50b21Mb2NhbERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHBoYW50
b21Mb2NhbERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBhZGRGbHVzaE9y
UGhhbnRvbUxvY2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24o
b3BlcmFuZCkpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRyeSogaW5s
aW5lU3RhY2tFbnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0g
KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVn
KTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1l
KiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBm
bHVzaEltcGwoaW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZsdXNoRGly
ZWN0KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsKLSAgICAg
ICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJl
Z2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OwotICAgICAgICBhdXRvIGFkZFBoYW50
b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykgeyBwaGFudG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERp
cmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGly
ZWN0KG9wZXJhbmQpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2NhbERpcmVj
dChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVudENvZGVP
cmlnaW4oKSwgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAgICAgfQog
CkBAIC03NjEsNiArNzkwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNoaWxkMSks
IEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgo
cmVzdWx0KTsKICAgICB9CisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BlcmFu
ZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQob3AgPT0gTW92
SGludCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFuZC5raW5k
KCkpLCBPcEluZm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAgTm9kZSog
YWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIEVkZ2Ug
Y2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAg
ewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCkBAIC0xMDkxLDggKzEx
MjUsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3Nl
ZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7Ci0gICAgLy8g
VGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBpbiB0aGUgZnVu
Y3Rpb24uCisgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jhcmllcykg
dXNlZCBieSB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251
bUxvY2FsczsKKyAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1wcyB1c2VkIGZvciBmb3J3YXJk
aW5nIGRhdGEgdG8gYW4gT1NSIGV4aXQgdG8gY2hlY2twb2ludC4KKyAgICB1bnNpZ25lZCBtX251
bVRtcHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJl
Z2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGFyZ3VtZW50
cyB0byBvdXRnb2luZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRoaXMKICAgICAvLyBudW1iZXIg
aW5jbHVkZXMgdGhlIENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGluaXRpYWxpemUgZm9yIHRoZSBj
YWxsZWUKQEAgLTExNTksMTQgKzExOTUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IH5JbmxpbmVTdGFja0VudHJ5KCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAorICAgICAgICBPcGVy
YW5kIHJlbWFwT3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpICsgbV9pbmxpbmVD
YWxsRnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCgh
b3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIG1faW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQogICAgIH07CiAgICAgCkBAIC0x
MTc1LDEzICsxMjE0LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayBtX2lj
Q29udGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgewotICAgICAg
ICBDb2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OwotICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKLSAg
ICAgICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQotICAgICAgICBEZWxheWVkU2V0
TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
Tm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExvY2FsKGNv
bnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQpAQCAt
MTE5NCw4ICsxMjI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICht
X29wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNl
dEFyZ3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3Zh
bHVlLCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWxPclRt
cChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwogICAgICAgICB9CisK
KyAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAgT3BlcmFuZCBtX29wZXJhbmQ7
CisgICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07CisgICAgICAgIFNldE1vZGUgbV9z
ZXRNb2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9z
ZXRMb2NhbFF1ZXVlOwpAQCAtMTIwOCw3ICsxMjQ3LDcgQEAgcHJpdmF0ZToKIEJhc2ljQmxvY2sq
IEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwotICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxv
Y2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVu
dHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0
ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5
cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29kZUJlZ2luCiAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCkpCkBAIC0xMjIw
LDcgKzEyNTksNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRh
YmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRl
Q29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2lj
QmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwg
bV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJs
b2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1
bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9j
a1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9j
aykpOwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTE0MjMsNyArMTQ2Miw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBDYWxsVmFyaWFudCBjCiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgIT0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSB0
YXJnZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZhcmFyZ3MsIHdlIGRvIG5vdCBrbm93IGhvdyBtYW55
IGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgZmlsbGVkIGJ5IExvYWRWYXJhcmdzLiBWYXJhcmdzIElu
bGluZUNhbGxGcmFtZSdzCi0gICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IExv
YWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUK
KyAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVt
YmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgeGtMb2FkVmFyYXJncy4gV2Ug
ImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCiAgICAgICAgICAgICAv
LyBhIGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50by4KICAgICAgICAgICAgIGlmIChjYWxsRnJhbWUt
PmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OSw3ICsxNDg4
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgLy8gV2UgbXVzdCBzZXQgdGhl
IGNhbGxlZSB0byB0aGUgcmlnaHQgdmFsdWUKICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1faW5s
aW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50
cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSks
IGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOworICAgICAgICAgICAgICAgIHNldERpcmVjdChy
ZW1hcE9wZXJhbmQoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAKQEAgLTE2
MTQsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShu
dW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwog
ICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJl
ck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0
ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0
ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAg
ZW5zdXJlVG1wcygobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2lubGlu
ZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpICsgY29kZUJsb2NrLT5udW1UbXBzKCkpOwor
CiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBv
c2l0aW9ucy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVz
dWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJl
c3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdp
c3RlcigpOwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxw
dHI7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzYsNyArMTY3Nyw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxs
ZXJTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxp
bmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24o
KSwgcmVzdWx0LAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOwor
ICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRo
aXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRl
Y29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBAIC0xNjcxLDkgKzE3MTIsOSBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJl
Z2luIGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9m
IHdoZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBh
bmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUg
bWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5
IGFuZCBsb2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBP
cGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICBh
ZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwgdmFsdWUp
OworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldCks
IHZhbHVlKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExv
Y2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIEltbWVkaWF0
ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxNywxNiArMTc1
OCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNoIGNhc2Vz
LCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zm
c2V0QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCBy
ZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9
IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBn
ZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1v
dkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJy
ZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQg
fSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBp
bmRleCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRU
b1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50
VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAgICAgICAg
ICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVmaW5lZCk7
CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1
cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFr
ZWRTZXQgfSk7CiAgICAgICAgIH0KIApAQCAtMTg5MywxMiArMTkzNCwxMiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZp
cnR1YWxSZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlhbnQsIGNh
bGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50IHJlbWFw
cGVkUmVnaXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVuc3Vy
ZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgp
KTsKICAgICAgICAgCiAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJlbWFwcGVk
QXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1
bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAog
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRh
LmFkZCgpOwogICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZEFy
Z3VtZW50U3RhcnQgKyAxKTsKQEAgLTE5MDYsMTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFs
UmVnaXN0ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OwogICAgICAg
ICBkYXRhLT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBk
YXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3Vt
ZW50c0FyZ3VtZW50KSk7CisKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0g
YWRkVG9HcmFwaChHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICBl
bHNlIGlmIChpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAg
YXJndW1lbnRDb3VudCA9IGdldERpcmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lKCks
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdz
LCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAg
ICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3Bl
cmFuZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICAgICAg
c2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhk
YXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQoKTsKKwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXRMb2Nh
bE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVw
IGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3Vt
ZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQg
YSBQaGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NiwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdp
c3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVh
c29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNT
QS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNv
dW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2Ug
dGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAg
Ly8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5p
dGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3Rs
eSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5i
b3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxv
Y2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVu
dENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVu
c2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDcsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRh
dG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBP
cEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxl
LT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRz
OwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNyw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygK
ICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0
ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZF
UkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAg
ICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZs
dXNoKTsKIApAQCAtNTEwMiw3ICs1MTU2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29k
ZS5tX3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJl
Z0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpz
Q29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdf
cmVnZXhwKTsKICAgICAgICAgfQpAQCAtNTExMiw3ICs1MTY2LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAg
ICAgICBOb2RlKiBsZW5ndGg7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRzTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDE7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3RMZW5ndGg7CiAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8PSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNU
b1NraXApCiAgICAgICAgICAgICAgICAgICAgIHJlc3RMZW5ndGggPSBqc051bWJlcigwKTsKQEAg
LTYxNzgsNyArNjIzMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQgbGltaXQpCiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+
c2l6ZSgpIHx8IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkgJiYgbV9jdXJyZW50QmxvY2stPnNpemUo
KSA9PSAxICYmIG1fY3VycmVudEJsb2NrLT5hdCgwKS0+b3AoKSA9PSBDb3VudEV4ZWN1dGlvbikp
OwogCi0gICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICAgICAgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fYnVmZmVyOwogCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgewogICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0
IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRo
cmVhZC4KQEAgLTYxOTUsNyArNjI0OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1f
bG9jayk7CiAKLSAgICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzTG9jYWwoKSkKQEAgLTYyMjMsMTQgKzYyNzcsMTQgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIG1fZXhpdE9L
ID0gZmFsc2U7IAogCiAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscyA9IDA7Ci0g
ICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGFkZFRvR3JhcGgoRXh0cmFjdENhdGNoTG9jYWwsIE9wSW5mbyhudW1iZXJPZkxv
Y2FscyksIE9wSW5mbyhsb2NhbFByZWRpY3Rpb25zW251bWJlck9mTG9jYWxzXSkpOwogICAgICAg
ICAgICAgICAgICsrbnVtYmVyT2ZMb2NhbHM7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8ocHJvZmlsZS5tX29wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICBsb2NhbHNUb1NldC51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIob3BlcmFu
ZCwgdmFsdWUpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG51bWJlck9mTG9j
YWxzKQpAQCAtNjM1OCw3ICs2NDEyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRy
OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXFQdHI+KCk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKSk7CisgICAgICAgICAgICBG
cm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQo
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGdldChi
eXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spLm1faGFzSnVtcGVkKSB7CkBAIC02ODI2LDggKzY4ODAsOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX2NyZWF0
ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKICAgICAg
ICAgICAgIEFTU0VSVChieXRlY29kZS5tX3N5bWJvbFRhYmxlLmlzQ29uc3RhbnQoKSAmJiBieXRl
Y29kZS5tX2luaXRpYWxWYWx1ZS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFs
dWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUub2Zmc2V0KCkp
KTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6
ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNv
ZGUubV9pbml0aWFsVmFsdWUub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBz
eW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7CisgICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZh
bHVlKSk7CiAgICAgICAgICAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29kZS5tX3Njb3BlKTsK
ICAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9ubWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRl
QWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwgT3BJbmZvKGluaXRpYWxWYWx1ZSksIHNj
b3BlKTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbGV4aWNhbEVudmlyb25tZW50
KTsKQEAgLTY4NTcsNyArNjkxMSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBsb2FkcyBmcm9tIHRoZSBzY29wZSByZWdp
c3RlciBsYXRlciwgYXMgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBERkcgZnJvbSB0cmFja2luZyB0
aGUKICAgICAgICAgICAgIC8vIGJ5dGVjb2RlLWxldmVsIGxpdmVuZXNzIG9mIHRoZSBzY29wZSBy
ZWdpc3Rlci4KICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgTm9kZSogY2Fs
bGVlID0gZ2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgICAgICBOb2RlKiByZXN1
bHQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFt
aWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCptX3ZtKSkKICAgICAgICAgICAgICAgICByZXN1
bHQgPSB3ZWFrSlNDb25zdGFudChmdW5jdGlvbi0+c2NvcGUoKSk7CkBAIC03Mjc1LDggKzczMjks
MTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnko
CiAgICAgICAgIC8vIFRoZSBvd25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2Ug
YWxyZWFkeSBoYXZlIGEgYmFycmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4g
ZmluaXNoZXMuCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVD
YWxsRnJhbWUgPyBtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsg
bV9jYWxsZXItPm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxG
cmFtZS0+c2V0U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPT0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBp
ZiAoY2FsbGVlKSB7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zl
cnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc2MzgsNyArNzY5NCw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5v
cGVyYW5kKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC03NjU4LDI0ICs3NzE0LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dWNjZXNzb3ItPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9
IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExp
dmVuZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkg
PSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxs
RnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50ID0gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFt
ZSwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQuaXNBcmd1
bWVudCgpICYmICFhcmd1bWVudC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRzID0gbV9pbmxp
bmVDYWxsRnJhbWVUb0FyZ3VtZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0FyZ3VtZW50KCld
LT5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNw
ZWNOb25lLCBvcCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwg
Rmx1c2gsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIFBoYW50b21M
b2NhbCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1c2hEaXJlY3Qs
IGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CkBAIC03NzQwLDYgKzc3OTYsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mQXJndW1lbnRzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIH0KIAorICAgIG1fZ3JhcGgubV90bXBzID0gbV9u
dW1UbXBzOwogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dy
YXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAppbmRleCA4ZTliYjRhY2JlNTUwMmRkYTdiMzc0
Nzg0YjVhODVmZmRlNzAzYmZkLi4zZGM3NTY4ZjFlZTJjNjk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2
MjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTcw
LDIyICsxNzAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAg
ICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVl
cyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CiAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNb
aV07CiAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNv
ZGU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAg
ICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxp
dmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5nICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KSwgIiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgIFdpZGVuaW5nICIsIG9wZXJhbmQsICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4i
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxv
Y2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgY2hhbmdlZCB8
PSB0YXJnZXQubWVyZ2VPU1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVlKCksIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3
Y2JjMTZiNjdkNjAyYmE2NDI2YWYwZjIzODIuLjU3NzBmMDk4OTQyYzg5NmI3YWNmODIzZmNhYjk0
NDRhMjI0Y2NlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHNwZWNpYWxDYXNlQXJndW1lbnRzKCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVy
YW5kPigpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAg
ICAgcHJvcGFnYXRlUGhpczxUbXBPcGVyYW5kPigpOwogICAgICAgICBjb21wdXRlSXNGbHVzaGVk
KCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwpAQCAt
MjExLDEwICsyMTIsMjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2Fs
KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9j
YWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxB
cmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3Vt
ZW50KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZv
cjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2Fs
KCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAg
ICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRM
b2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFu
ZCgpLnRvQXJndW1lbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIExvY2FsT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxG
b3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xv
Y2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUbXBP
cGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxUbXBPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdGVtcGxh
dGU8Tm9kZVR5cGUgbm9kZVR5cGUsIE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYg
KzI0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgIEFTU0VSVChvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAg
ICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjcwLDE1ICsyODIsMjUgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9k
ZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJn
dW1lbnQoKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8
bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2Nh
bCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFy
aWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFy
aWFibGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6
IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5
cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCku
dG9Bcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgTG9jYWxPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRv
bUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJs
ZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNo
T3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2
YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldChOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQobm9kZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5zZXRPcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSwgbm9kZSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpCkBAIC0yODksNiArMzExLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIGNsZWFyVmFyaWFibGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsK
ICAgICAgICAgY2xlYXJWYXJpYWJsZXM8TG9jYWxPcGVyYW5kPigpOworICAgICAgICBjbGVhclZh
cmlhYmxlczxUbXBPcGVyYW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0
IGFsbCBwaGkgcmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5n
cyB0aGF0CiAgICAgICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291
bnQsIGJ1dCBkb2Vzbid0IGFzc3VtZSB0aGF0IHRoZSByZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQg
cHJvcGFnYXRlUGhpcygpCiAgICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4
PiYgcGhpU3RhY2sgPSBvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50
UGhpU3RhY2sgOiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+JiBwaGlTdGFjayA9IHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpOwogICAgICAgICAK
ICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50
bHkuCiAgICAgICAgIG1fYmxvY2sgPSAwOwpAQCAtNDY2LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgog
ICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFj
a0VudHJ5LCAxMjg+JiBwaGlTdGFja0ZvcigpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtp
bmQgPT0gQXJndW1lbnRPcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlT
dGFjazsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgc3dpdGNoIChv
cGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogcmV0dXJuIG1fYXJn
dW1lbnRQaGlTdGFjazsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHJldHVybiBtX2xvY2Fs
UGhpU3RhY2s7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogcmV0dXJuIG1fdG1wUGhpU3RhY2s7
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21wdXRlSXNGbHVzaGVkKCkKQEAgLTUyMSw2ICs1NDcsNyBAQCBw
cml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50
cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAx
Mjg+IG1fbG9jYWxQaGlTdGFjazsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX3Rt
cFBoaVN0YWNrOwogICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xp
c3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4
IDIzODFjNmI4ZjhmNGJhNzYzNGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UuLjRjY2UxNzQ4ODNlMjA0
MTBkNjIyM2E2ZjQxNzJlZGRlNjk4YWFlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCkBAIC0xNDcsOCArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5w
YXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaGVhcC5wYXlsb2FkKCkudmFs
dWUoKSA9PSBoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgbV9hYnN0cmFj
dEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAg
ICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkp
OwogICAgICAgICAgICAgaWYgKGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAg
ICBtX2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE3Miw3
ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVyQ29uc2VydmF0
aXZlbHkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChw
YWlyLmtleS5oZWFwKCkua2luZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgp
LnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCku
dmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBhaXIua2V5KQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIyNiw4ICsyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
QWJzdHJhY3RIZWFwIGFic3RyYWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAgICAgICAgICAg
IGlmIChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAg
IEFTU0VSVChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVs
bHB0cik7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tN
YXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSwgbnVsbHB0cik7CiAgICAgICAg
ICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5v
ZGUsIDB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0OSw4ICsyNDcs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKLSAgICAgICAg
ICAgIEFTU0VSVChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24u
aGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZh
bHVlMzIoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFj
a01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQogICAgICAgICAg
ICAgICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAgICAgICAgICAg
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk4LDcgKzI5NSw3IEBAIHBy
aXZhdGU6CiAgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBvbmx5IGxpdmUg
aW4gbV9mYWxsYmFja1N0YWNrTWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5LCBUT1AgYWx3
YXlzIGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBh
IHVuaXF1ZSB2YWx1ZS4KLSAgICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1
cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czxpbnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKKyAgICBI
YXNoTWFwPGludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRI
YXNoPGludDY0X3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2
NF90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFw
OwogCiAgICAgTWFwIG1faGVhcE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKaW5kZXggODliYzY0MWY1MjZiYjUzZmYwMzdmNzNjZjk1MGJhYzY0NmQ0OTk1NC4u
ODJmM2NhNjQxODRmOTE5MzY1MDM5YjEzMjIxN2RkOTllYTk3MTA1MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhp
cyBkb2VzLgogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5s
aW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZy
YW1lKCkpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAg
ICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5IGFj
Y291bnQgd2hpY2ggbm9kZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0MSw3ICs0NDEs
NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFk
RnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IEtpbGxTdGFjazoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxp
bmtlZExvY2FsKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51
bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBjYXNl
IE1vdkhpbnQ6CkBAIC00OTcsNyArNDk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAg
ICByZXR1cm47CiAKQEAgLTc2NCwxMiArNzY0LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKLSAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU2V0Q2FsbGVlOgotICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczogewpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgfQogCiAgICAgY2FzZSBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoKLSAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIHJldHVybjsKIAogICAg
IGNhc2UgR2V0UmVzdExlbmd0aDoKQEAgLTc4OCwzNiArNzg4LDQzIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoK
LSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5s
b2NhbCgpKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlKSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkp
LCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5v
ZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBHZXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAo
U3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgcmVhZCho
ZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2Rl
KG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRT
dGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgd3JpdGUoaGVhcCk7CiAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2Fz
ZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShI
ZWFwKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsK
KyAgICAgICAgcmV0dXJuOyAgCisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAg
ICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkp
KTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBz
dGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApA
QCAtODI2LDkgKzgzMyw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQo
U3RhY2spOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0
YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBk
YXRhLT5jb3VudCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3
ZTQ3MDBkMDljZDJhYzMwZjMuLjE1NzQ2YzA1NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVu
ZXNzLmNwcApAQCAtMzksNyArMzksNyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVuZXNz
KEdyYXBoJiBncmFwaCwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAgICAg
Z3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0
LAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVy
YW5kIHJlZykgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRo
TG9jYWwoCiAgICAgICAgICAgICAgICAgcmVnLAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSog
bm9kZSkgLT4gYm9vbCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmNwcAppbmRleCA3OTg3Yjg3MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiLi43ZmZk
NGQzNWI2Y2Y1YzlkZTM4MWU3ZGE2MTMzMmZkNTI0OTY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJ
bmRleCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhd
ID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
aW5kZXgpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQog
CiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9u
RGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAg
Y29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29k
ZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNv
ZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgp
KTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxs
U2l0ZUluZGV4IENvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoY29kZU9yaWdpbnMuc2l6ZSgpKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KGNvZGVPcmlnaW5zLnNpemUoKSAtIDEpKTsKKyAgICByZXR1cm4gRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CiB9CiAKIERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKaW5kZXggM2IxNjVmMmM0MDIxMDAzZDA0MWNj
YTZkOWFlMGNmZTdhZTgyNzEzZi4uMTg1MzY2ZDA0ZTI2M2VlOWVkOTY0Yzg2YTdlZDk1MjRhOTVi
YjlkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4Myw3ICszODMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbCBpbiBzdWNoIHN0YXRpY2FsbHktb3V0LW9mLWJv
dW5kcyBhY2Nlc3Nlczsgd2UganVzdCBsb3NlIENGQSB1bmxlc3MKICAgICAgICAgICAgICAgICAv
LyBHQ1NFIHJlbW92ZXMgdGhlIGFjY2VzcyBlbnRpcmVseS4KICAgICAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKQEAgLTQwNCw3
ICs0MDQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXggKyAxKSwgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpICYm
IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRTdGFjayhkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCmluZGV4IDg1NDEyMzE0NzQxZTZmMTEyNjFmMmU5N2M0OWZlNjQ0ZGFlN2Jh
ZjcuLmYzOGM4M2ZkZDMwYzJmNTNiM2Q1MDkzZjQwYjJjNzBlOTUzMTA0ODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI5NCw2ICsyOTQsNyBAQCBib29sIGRv
ZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNh
c2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206CisgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmlu
Z1dpdGhSYWRpeDoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFu
dDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAppbmRleCAxN2IzNzA3NThj
MDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5Li40NWZiYzQzOWQ1M2JhOTUwZTdhOGQ4OWFj
OWVjMTk3MmJhMDkzOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
CkBAIC05MCw3ICs5MCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgK
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRv
IHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBh
bGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJl
YWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRD
VElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCmluZGV4IGFlZTFmMDA3M2IwZjRiYmNjNDczNGViNjQxZTQ2NDhjMzA1NWEyNDQuLmNh
MzNkYjIyN2Q0YjkyNzczZmE4NmQ3MmVlM2Q0ZDFiODViZjk4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjQzMiw2ICsyNDMyLDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGZp
eEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworCisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUg
dGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBh
ZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVm
aW5pdGVseToKQEAgLTI0NjQsOCArMjQ3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29u
c3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAg
ICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxv
dzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UHJvbWlzZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCAwYmYxYzNmYmJh
YzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUyOGI5Li45MzNhMmJkZTIyZTE2NmMyYWViNmQ0YWMx
YmJlOWNlMWU1Y2VkNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxL
aWxscy5oCkBAIC0zMiw2ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKK25hbWVzcGFjZSBGb3JBbGxLaWxsc0ludGVybmFsIHsKK2NvbnN0ZXhwciBib29sIHZl
cmJvc2UgPSBmYWxzZTsKK30KKwogLy8gVXRpbGl0aWVzIGZvciBmaW5kaW5nIHRoZSBsYXN0IHBv
aW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSBpbiBERkcgU1NBLiBUaGlzIGFjY291bnRzIGZvciBs
aXZlbmVzcyBkdWUKIC8vIHRvIE9TUiBleGl0LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgZW51
bWVyYXRpbmcgb3ZlciBhbGwgb2YgdGhlIHByb2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBs
aXZlLAogLy8gYnkgZXhwbG9yaW5nIGFsbCBibG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMgbGl2ZSBh
dCB0YWlsIGFuZCB0aGVuIGV4cGxvcmluZyBhbGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUgdGhlCkBA
IC01MywxMyArNTcsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAKICAgICBDb2Rl
T3JpZ2luIGFmdGVyID0gbm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOworICAgIE9wZXJhbmQgYWxyZWFkeU5vdGVkOwogICAg
IC8vIElmIHdlIE1vdkhpbnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwgdGhl
biB3ZSBraWxsIHRoZSBvbGQgdmFsdWUuCiAgICAgaWYgKG5vZGVBZnRlci0+Y29udGFpbnNNb3ZI
aW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5saW5r
ZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFmdGVy
KSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAgYWxyZWFkeU5vdGVk
ID0gcmVnOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlQWZ0ZXItPnVubGlua2VkT3Bl
cmFuZCgpOworICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBhZnRl
cikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CisgICAgICAgICAgICBhbHJlYWR5
Tm90ZWQgPSBvcGVyYW5kOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNzAsOCArNzQsMjQg
QEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZv
cmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAvLyBvdGhlciBsb29wLCBiZWxvdy4KICAg
ICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lKCk7
CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxGcmFtZSA9PSBhZnRlci5pbmxpbmVDYWxsRnJhbWUo
KSkgewotICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBi
ZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihiZWZvcmVJbmxpbmVDYWxs
RnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkg
eworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgp
ICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpOworCisgICAgICAgICAgICBh
dXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVm
b3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExp
dmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOwor
ICAgICAgICAgICAgaW50IHRtcE9mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9y
ZUlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAgICAgIGxpdmVBZnRlci5p
bnZlcnQoKTsKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CisKKyAg
ICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAg
ICAgICAgICAgICAgICBmdW5jdG9yKE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wICsgdG1wT2Zmc2V0
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIE5vIGxvY2FscyBjYW4gZGllIGF0
IGEgY2hlY2twb2ludC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGludCBzdGFja09mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwogICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYg
ZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgY29u
c3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhi
ZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVz
ZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVz
cy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Q
b2ludDo6QmVmb3JlVXNlKTsKQEAgLTgyLDE3ICsxMDIsMjEgQEAgdm9pZCBmb3JBbGxLaWxsZWRP
cGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwg
Y29uc3QKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQo
KSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEgY2hlY2twb2ludCBidXQgYmVmb3JlIGFuZCBhZnRl
ciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxsRnJhbWUuIik7CisKICAgICAvLyBEZXRlY3Qga2ls
bHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2
ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBo
LmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAgICBncmFwaC5mb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgZ3JhcGguZm9y
QWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBiZWZvcmUsCi0gICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJl
YWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQocmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZh
bHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0
KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rvcihy
ZWcpOworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKICAgICAgICAgfSk7CiB9CiAgICAg
CkBAIC0xMDUsNyArMTI5LDggQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VlbkluQ2xvc3VyZUZsYWcgPSAxOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsbGVkRnVuY3RvckZsYWcgPSAyOwogICAgIEhh
c2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFnczsKLSAgICAKKworICAgIEFTU0VSVChub2RlSW5k
ZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAKICAgICBn
cmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAsMTUgKzE0NSwxMyBAQCB2b2lkIGZvckFsbEtpbGxl
ZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgTm9k
ZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBpZiAobm9kZUluZGV4KQotICAgICAgICBiZWZvcmUg
PSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgTm9kZSogYmVmb3JlID0gYmxvY2stPmF0
KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdy
YXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewor
ICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5
TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCi0gICAgICAgICAgICAgICAgcmVnLAorICAgICAg
ICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBi
b29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdzLmdldChub2RlKSAmIHNlZW5J
bkNsb3N1cmVGbGFnOwogICAgICAgICAgICAgICAgIH0sCkBAIC0xNTksNiArMTgyLDcgQEAgdm9p
ZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBi
ZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9t
IHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2
ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcg
dG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAxOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICBkYXRhTG9nTG5JZihGb3JBbGxLaWxs
c0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5IGF0IGluZGV4OiAiLCBub2Rl
SW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICBm
b3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgZ3JhcGgsIGxvY2FsQXZh
aWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBibG9jaywgbm9kZUluZGV4LAogICAgICAgICAgICAg
WyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmlu
ZGV4IGIzMjBmNzA3Yzk1ZjEyMzkzODUxYmMzYjJiMmI0MmI5NTZkZDBiZjUuLjA3MWRlMjM5MmI5
YzVjOTI4NmRlOWM3ODc4ZmU5YWYwMGMwYjRlNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgK
ICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnRyeUdldFZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhKSB7Ci0gICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKTsKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNz
RGF0YSksICIpIik7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVB
Y2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywg
dmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAgICAgICAgIG9wZXJhbmQgPSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwogICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNW
YWxpZCgpKQogICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwgb3Bl
cmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAg
IH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkpIHsKICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG91dC5w
cmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEt
Pm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlzVmFsaWQoKSkKICAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+bWFjaGluZUxvY2Fs
KTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOwogICAgIH0KLSAgICBp
ZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBu
b2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZE9wZXJhbmQo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAg
ICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIsIG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKSk7CiAg
ICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVlKCkpCkBAIC01MTUsOSArNTE1LDEwIEBAIHZvaWQg
R3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2Rl
czoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAg
ICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgIGlmICgh
cGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQ
aGlzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmlu
dCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxvY2FsKCksICIsIiwgcGhp
Tm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBw
aGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQoKSwgIiwiLCBwaGlOb2RlLT5y
ZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7
CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4
KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODg0LDcg
Kzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9j
aywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgIGJvb2wgc2hvdWxkQ29u
dGludWUgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wZXJhbmQoKSA9PSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkKICAgICAgICAgICAgICAgICBzaG91bGRDb250
aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTg5Myw5ICs4
OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ss
IHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywg
bm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9j
ay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwor
ICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICBpZiAob2xk
VGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7CisgICAg
ICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NE
YXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICBzaG91bGRDb250aW51
ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExMzMsMzYgKzEx
MzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVybiBraWxsc0ZvcihiYXNlbGluZUNvZGVCbG9ja0Zv
cihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorYm9vbCBHcmFw
aDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKIHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAog
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDaGVja2luZyBvZiBvcGVyYW5kIGlz
IGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgIGJvb2wgaXNDYWxsZXJPcmlnaW4gPSBmYWxz
ZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAmY29kZU9yaWdpbjsKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIo
Ci0gICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZz
ZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5l
Q2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1
c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQorICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNv
ZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAgZm9yICg7IGNvZGVPcmlnaW5QdHI7IGNv
ZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RD
YWxsZXIgOiBudWxscHRyKSB7CisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5Q
dHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVD
YWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYW5kSW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKTsKKworICAgICAgICAg
ICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAgIC8vIFRoaXMgdG1w
IHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5saW5lZC4KKyAgICAgICAgICAg
IGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1DaGVja3BvaW50VG1wcykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
ICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4IDwgdG1wT2Zmc2V0
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGJpdE1hcCA9
IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRl
Y29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZEluZGV4
IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQo
KTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
cmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBj
b2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgaWYgKG9wZXJhbmQub2Zm
c2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7
CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogCiAKICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZz
ZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYg
cmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvb2tzIGxpa2UgYSBj
YWxsZWUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9
PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICYm
IHJlZyA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3Mg
bGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0xMTc2LDQyICsxMTk3LDQxIEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNv
ZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5l
c3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2spOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAg
ICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy5vcGVyYW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0ZWNv
ZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5Q
dHIsIGlzQ2FsbGVyT3JpZ2luKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy52aXJ0dWFsUmVn
aXN0ZXJJc0xpdmUocmVnLCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3Vs
YXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWx3YXlzIGxpdmUuIFRoaXMgd291bGQgYmUgcmVk
dW5kYW50IGlmIGl0IHdhc24ndCBmb3Igb3VyCiAgICAgICAgIC8vIG9wX2NhbGxfdmFyYXJncyBp
bmxpbmluZy4KLSAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkKKyAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSAmJiByZWcuaXNBcmd1bWVudCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNX
aXRoRml4dXAuc2l6ZSgpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJBcmd1bWVudCBpcyBsaXZlLlxuIik7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwgY2Fs
bGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKLSAgICAgICAgLy8gdGhl
IHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KLSAgICAgICAgY29kZU9y
aWdpblB0ciA9ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICAgICAgaXNDYWxs
ZXJPcmlnaW4gPSB0cnVlOwogICAgIH0KKworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJS
YW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOworICAgIHJldHVybiB0cnVlOyAg
ICAKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1CaXRWZWN0
b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK0Jp
dFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKIHsKICAgICBCaXRWZWN0b3IgcmVzdWx0OwotICAgIHJlc3VsdC5lbnN1cmVTaXpl
KGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9yQWxs
TG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgdW5zaWduZWQgbnVtTG9jYWxzID0gYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOworICAgIHJlc3VsdC5lbnN1cmVTaXpl
KG51bUxvY2FscyArIGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCkpOwor
ICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAgICAgY29kZU9yaWdp
biwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBBU1NF
UlQocmVnLmlzTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXN1bHQucXVpY2tTZXQocmVnLnRvTG9j
YWwoKSk7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVl
KCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChvZmZz
ZXQpOwogICAgICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTYzNSw4ICsxNjU1
LDggQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KIAogICAgIGZvciAoTm9kZSogbm9kZSA9IG9w
ZXJhbmROb2RlOyBub2RlOykgewogICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhp
cykpIHsKLSAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPmxvY2FsKCkuaXNB
cmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwo
KS50b0FyZ3VtZW50KCk7CisgICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5v
cGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0g
bm9kZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1
bWVudE5vZGUgPSBtX3Jvb3RUb0FyZ3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1l
bnRdOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1l
bnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0
MQpAQCAtMTY1Niw3ICsxNjc2LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFw
aDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5
T3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBu
b2RlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
aW5kZXggZmFiOWNmMDJhMjU5NzZlZjQ3ZDE3OTA1YmFkOWNlMDNlMzgyYmNlNS4uZjdhMWQ4MjE0
YzMwMmQ3ZDk2YWMyYTc3YTAxODY2YTlkMTE5ZjUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaApAQCAtODQwLDEzICs4NDAsMTMgQEAgcHVibGljOgogICAgIC8vIFF1aWNrbHkg
cXVlcnkgaWYgYSBzaW5nbGUgbG9jYWwgaXMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMg
aXMgZmFzdGVyIHRoYW4gY2FsbGluZwogICAgIC8vIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgaWYg
eW91IHdpbGwgb25seSBxdWVyeSBvbmUgbG9jYWwuIEJ1dCwgaWYgeW91IHdhbnQgdG8ga25vdyBh
bGwgb2YgdGhlCiAgICAgLy8gbG9jYWxzIGxpdmUsIHRoZW4gY2FsbGluZyB0aGlzIGZvciBlYWNo
IGxvY2FsIGlzIG11Y2ggc2xvd2VyIHRoYW4gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKS4KLSAgICBi
b29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAgICBi
b29sIGlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCwgQ29kZU9yaWdpbik7CiAgICAgCi0gICAgLy8g
UXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhlIGdp
dmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKKyAgICAvLyBRdWlja2x5IGdldCBhbGwg
b2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgYW5kIHRtcHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9p
bnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQogICAgIC8vIGFueSBhcmd1bWVudHMgYmVjYXVzZSB0
aG9zZSBhcmUgYWxsIHByZXN1bWVkIGxpdmUuIFlvdSBjYW4gY2FsbCBmb3JBbGxMaXZlSW5CeXRl
Y29kZSgpIHRvCiAgICAgLy8gYWxzbyBnZXQgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyBtdWNoIGZh
c3RlciB0aGFuIGNhbGxpbmcgaXNMaXZlSW5CeXRlY29kZSgpIGZvciBlYWNoIGxvY2FsLgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZlSW5C
eXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgdm9pZCBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgLy8gU3VwcG9y
dCBmb3Igbm90IHJlZHVuZGFudGx5IHJlcG9ydGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNh
dXNlIGluIGNhc2Ugb2YgYSB2YXJhcmdzCiAgICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxl
ZSBrbm93cyB0aGF0IGFyZ3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5v
bi12YXJhcmdzCkBAIC04ODEsNiArODgxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBp
ZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW3JlbGF0aXZlTG9jYWxdKQogICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb2RlT3Jp
Z2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxpdmVU
bXBzID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHIt
PmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNldEJp
dChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9w
ZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MDQsOSAr
OTEyLDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIEJp
dFZlY3RvciBvZiBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBub3cu
IFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgorICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwg
b2YgdGhlIGxvY2FscyBhbmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNl
ZnVsIGlmCiAgICAgLy8geW91IHdhbnQgdG8gY29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxvY2Fs
cyBmcm9tIHR3byBkaWZmZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fsc0xp
dmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOworICAgIEJpdFZlY3RvciBsb2NhbHNBbmRUbXBzTGl2
ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CiAKICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQg
YXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4sIGJv
b2wgaXNDYWxsZXJPcmlnaW4pCiAgICAgewpAQCAtOTM4LDEyICs5NDYsMTIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAgICAg
fQogICAgIAotICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIGFyZ3VtZW50cyBhbmQgbG9jYWxz
IGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8vIGV4
dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1l
bnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRo
ZSBvcGVyYW5kcyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwK
KyAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUoKSwg
c2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAg
IGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAgICAg
ICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7
CiAgICAgICAgIAogICAgICAgICAvLyBSZXBvcnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBsaXZl
LgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykKQEAgLTExMTQsNiArMTEyMiw3
IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJk
c0NGRzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2Fy
ZHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7
CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxv
Y2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVm
ZmNkYzA1YTExYzQ1YjA1NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMy
M2M2NGJjZjhiZTM4NGUzZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
SW5QbGFjZUFic3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkK
ICAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAg
ICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3Jh
cGgubV9sb2NhbFZhcnMpCi0gICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVy
YW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2Nr
KG51bGxwdHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaAppbmRleCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQw
MWZhN2ZlYzcxMjk5Li4xODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5oCkBAIC0xNjcsMTMgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0
Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUm
IG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5k
IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5v
cGVyYW5kSW5kZXgob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBv
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9w
ZXJhbmQub2Zmc2V0KCkpOyB9Ci0gICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90
IGluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9j
YWxJbmRleChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAppbmRleCAzZDg0M2NlNThmMjBiNDExNjMzOWZjZGE5NTg4YWViYTZiN2E4YzJlLi41
M2RiOWNkMTRjYWM2YjZlNjY4MmVmZGY0YmE3OTQ4OTdjYTVkNWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0o
KS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1
bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsu
Y29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBt
X2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMg
PSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxl
cjo6bGlua09TUkV4aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgp
OwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsK
LSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBK
dW1wIHRhcmdldCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9z
ckV4aXRUaHVua0xhYmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayh0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1w
ID0gcGF0Y2hhYmxlSnVtcCgpOworICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNo
YWJsZUp1bXAoKTsKICAgICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29t
cGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVy
OjpMYWJlbCBibG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUt
PmxvY2FsKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFT
U0VSVCghdmFyaWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAg
ICAgICAgICAgICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFu
ZCgpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCku
b2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA2OGNhOThkZjZmNWM0YjdiNjM3
MmNjMTU4MThlYzI1NzI4MmY4OWQ5Li41MGYxZDg5M2RhMzAyMTAyYjk1ZTc4YWM2MDQzOWQ4NjIz
NmYzY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBA
IC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUlu
ZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25Q
aGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhhYzI1Y2E2MzEzNC4u
NDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihC
YXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFy
dGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAg
ICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBpdCBm
b3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25nLAogICAgICAgICAvLyB0aGlz
IGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVzaCB0aGF0IHdlIGluc2VydC4K
QEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIGZsdXNoSXNEZWZpbml0ZWx5
SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KSB7CiAgICAg
ICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFj
Y2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgpID09IG9wZXJhbmQp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3Jh
cGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAg
ICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5k
bGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2Vy
dGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9uSGFu
ZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0Q2F0Y2hIZWFkOwot
ICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZUF0
Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxv
Y2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCkp
OwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICBD
b2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEgKzEzMiwxMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmln
aW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVy
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGxp
dmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAgICAgICAgICAgICBCeXRlY29k
ZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29k
ZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0
Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0
Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFu
ZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAg
ICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1NiwxMiArMTU1LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICB9
OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0Fj
Y2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIpOworICAgICAgICBP
cGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0
byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRl
eCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIp
OwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENhdGNo
SGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAg
ICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQo
b3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9j
YXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3OCw2ICsxNzcsOCBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwrKykKICAgICAgICAgICAg
ICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVzaChPcGVyYW5kKFRtcE9wZXJh
bmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAgICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRp
b25IYW5kbGVyICYmIChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkpIHsK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhl
YWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisgICAg
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFu
ZChvcGVyYW5kKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9j
YXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3BlcmFuZCkpOwogCiAgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNj
ZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFw
aCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
Y3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50RXhj
ZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3Bl
cmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFv
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAg
ICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAg
cmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCmluZGV4
IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYyOWVi
NGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApAQCAtODUsNyArODUsNyBAQCBw
cml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CiAgICAgICAgIG1fZ3JhcGgu
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICBibG9jay0+dGVybWluYWwoKS0+b3Jp
Z2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAg
ICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9w
ZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAgIH0pOwogICAgICAgICAKQEAg
LTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gTW92SGludCkgewotICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRl
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBFcG9jaCBs
b2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAg
ICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3VycmVu
dCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50RXBv
Y2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOworICAgICAgICAgICAgICAgIG1fc3Rh
dGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBFcG9jaCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2Rl
KSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSArMTE2LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFu
ZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAx
KSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1pZ2h0
IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQocmVnKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywgIlxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwg
bm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5NmY0MDRlMzNiNDYuLmI4MDE1
NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRh
IHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKLSAgICAgICAgOiBsb2NhbChsb2NhbCkKKyAg
ICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQpCisg
ICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAsIGZvcm1hdChmb3JtYXQpCiAgICAg
ewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWw7CisgICAgT3BlcmFuZCBv
cGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7CiAgICAgRmx1c2hGb3Jt
YXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dp
dGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZh
cmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05MjMsOSArOTI0LDExIEBAIHB1
YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAg
ICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CiAg
ICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0g
ICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQyKCk7
CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBAIC05NzMsOSArOTc2LDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRhKj4o
KS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAg
IE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NE
YXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3Bl
cmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsKCkK
QEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVW5saW5r
ZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZE9wZXJhbmQoKQogICAgIHsKICAgICAgICAg
c3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBAIC05
OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVmly
dHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5k
KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOworICAgICAgICBB
U1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJv
bUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhh
c1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkg
PT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJu
IG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09
IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZh
cmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCAy
NGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0Li5lM2U5YzMyZjhkMDgxM2E2
YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1c2Vk
IGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRTdGFj
aywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2ICsy
MDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlW
YWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCAzMjgwZjg3YTYyNjdkZjAz
NGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi40MjQ3ZGVhZWM3Y2JiY2U2MDgzYWE4NzMyYjljMjc3
ZjVlZmQyOGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5IEBA
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsIHsK
LXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1Ig
YXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGljOgogICAgICAg
ICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJ
bkJ5dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQs
Ci0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFu
ZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsK
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAgICAg
IH07CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2
ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
IkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjAs
NyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3Mo
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmln
aW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgcHJ1
bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
dW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYsMjgg
QEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUq
IG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazogewog
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsK
LSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkuc2V0
Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFjazogewotICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwo
KSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Rmx1
c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0
KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJh
bmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5z
ZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQyLDE1ICsyNDAsMTggQEAgdm9pZCBMb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDogeworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVk
QXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPSBBdmFpbGFiaWxpdHkoRmx1c2hl
ZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSAr
IGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNW
YWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7
CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPnN0YXJ0
ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpT
VmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCArIGkpKTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0yNzIsMjAgKzI3MywyMCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJlY29yZCBob3cgdG8gcmVh
ZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0gICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1
bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1
bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVu
dFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdj
OTRiODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTMyMiw3ICsz
MjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcpIEZpeCB0aGUg
Y2FsbCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAotICAgICpiaXR3
aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
aykgPSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAgIAogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVy
bmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICszODIsMTAgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRj
aE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNlbGlu
ZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkp
OwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCku
bWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+
KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUqIGRh
dGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNoT1NS
RW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsK
KyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJh
bmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZlcltp
bmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1
MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jvb3Qt
PmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rp
b24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8o
dmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZz
ZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdp
biwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAgICAg
ICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2OWI0MWNhOGY5
OGYzMDhiM2E0YzkzM2JhOTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZlMzJkNjc3NDIw
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVk
ZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQVVN0
YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0Owot
dXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBj
b25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFBy
b2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVpbnQz
Ml90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBqc1Zh
bHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlmIChz
b3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHN0
ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsgc291
cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoY3B1
LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChzb3Vy
Y2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygpLCBj
cHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4oc291
cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3Io
Q29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMg
PSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250
UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50
ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxTdGFj
a0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVn
aXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Ly8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFjaywg
bm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRoZSB2
YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQgb2YK
LSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFTU0VS
VCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAgY29u
dGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5Lm9m
ZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24g
QXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBz
YXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Ci17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNvZGVC
bG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBS
ZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2Fs
bGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3Rl
ckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNh
dmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWco
KSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQuZnAo
KSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCku
Z3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMg
dm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Q29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwot
Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0
b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWdu
ZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVudHJ5
UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7Ci0g
ICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ1BV
UmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0KLSAg
ICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5
ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3Rl
cnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzaXpl
X3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rlcik7
Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4dC5n
cHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XTsK
LSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRleHQu
ZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVC
dWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBw
b2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQot
Ly8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZt
ID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2so
KTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50
b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNvcmQt
PmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
YWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRz
KCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2
ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50
OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVz
LT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkp
Ci0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCks
IGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAgICAg
ZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVT
YXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihlbnRy
eS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCBy
ZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFz
ZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCkuCi1z
dGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIs
IGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5m
cCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdp
c3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQ
UnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7
Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQg
ZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVy
cy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdWlu
dHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlhVGFp
bENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAg
ICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zmc2V0
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBjb250
ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNldFZp
cnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRSZWdp
c3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9TQVZF
U19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250
ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29u
dGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2b2lk
IGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYp
IHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2Rl
QmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVj
dEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0q
PigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5s
aW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBh
cmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxlbmd0
aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMSkp
OwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUo
Ci0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVudHNT
dHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxlZSh2
bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIq
PigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAw
KTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4UXVp
Y2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0
JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewot
ICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5p
c0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJs
b2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1l
KTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAg
IENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgK
LSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNh
bGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0
ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUsIGNv
bnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBmcmFt
ZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlmaWVk
SUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAgICAg
ICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQgaWQg
PSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0KLSAg
ICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZyYW1l
KCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAgICAg
ICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVlID0g
anNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0
YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkK
LSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCogYXJndW1lbnRz
T2JqZWN0OwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAg
IGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJn
dW1lbnRzT2JqZWN0ID0gY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBj
b2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3Jl
YXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25lZEFyZ3VtZW50
c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwg
YXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
YXJndW1lbnRzT2JqZWN0KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5h
ZGQoaWQsIG9wZXJhbmQpOwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qg
b2YgZXh0cmEgaW5pdGlhbGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGluIG9yZGVyCi0v
LyBvZiBtb3N0IGxpa2VseSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxlYXN0IGxpa2Vs
eSBuZWVkZWQgKGhpZ2hlciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5pdGlhbGl6YXRp
b24gaW5jbHVkZXMgdGhlIHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1c2Ugb2YgdGhl
Ci0vLyBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51bSBjbGFzcyBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3VsYXRpb25SZWNv
dmVyeSwKLSAgICBWYWx1ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxlVXBkYXRlLAot
ICAgIE90aGVyCi19OwotCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNv
bnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxGcmFtZS0+ZGVw
cmVjYXRlZFZNKCkgPT0gJnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsKLQotICAg
IGlmICh2YWxpZGF0ZURGR0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBleGl0
IG9wdGltaXplZCBjb2RlLiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGltaXplZAotICAg
ICAgICAvLyBjb2RlIHJ1bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAgICB2bS5oZWFw
LnNldEV4cGVjdERvZXNHQyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1lRm9y
Q2F0Y2gpIHsKLSAgICAgICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2g7Ci0gICAg
ICAgIGNvbnRleHQuZnAoKSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7
Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0K
LSAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGlu
IGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5IGJlIHByb2Zp
dGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotCi0gICAgdWlu
dDMyX3QgZXhpdEluZGV4ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklUQ29kZSogZGZn
SklUQ29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JFeGl0JiBleGl0
ID0gZGZnSklUQ29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJUKCF2bS5jYWxs
RnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBFWENF
UFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8fCAhZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQuZXhpdFN0YXRl
KSkgewotICAgICAgICBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsID0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAgICAgIC8vIFdl
IG9ubHkgbmVlZCB0byBleGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBPU1JFeGl0IHJl
Y29yZC4gVGhlIGNvbXB1dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBjYWNoZWQgaW4g
dGhlIE9TUkV4aXRTdGF0ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0aGUKLSAgICAg
ICAgLy8gZXhpdCByYW1wIGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAgICBBU1NFUlQo
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwot
Ci0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsKLSAgICAg
ICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICBy
ZWNvdmVyeSA9ICZkZmdKSVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVy
eUluZGV4XTsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4
KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVj
dWxhdGlvblJlY292ZXJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0
Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUgPSBudWxscHRyOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAg
ICAgICAgICAgaWYgKGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgZXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAg
ICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhp
bmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICAgICAg
YXJyYXlQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkK
LSAgICAgICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgo
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5
UHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQz
Ml90IGFjdGl2ZVRocmVzaG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3RlZENvdW50ZXJW
YWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKTsKLSAg
ICAgICAgZG91YmxlIGFkanVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3Rp
Y3NBbmRDb252ZXJ0VG9JbnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0g
ICAgICAgIEFTU0VSVChhZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBhZGp1c3RlZFRo
cmVzaG9sZCA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwot
ICAgICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgp
IHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOwotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhpdFRvTExJbnQp
IHsKLSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYg
Y3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0
KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gZGVz
dGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9yRXhpdC0+aml0
Q29kZU1hcCgpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4g
Y29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAgICAgIE9wZXJh
bmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5kZWZpbmVkT3Bl
cmFuZFNwYW4+IHVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklUQ29kZS0+dmFy
aWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2lu
LCBkZmdKSVRDb2RlLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5kcywg
JnVuZGVmaW5lZE9wZXJhbmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJP
ZmZzZXQgPSAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVy
KTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JFeGl0U3RhdGUo
ZXhpdCwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdURk1vdmUodW5k
ZWZpbmVkT3BlcmFuZFNwYW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNldCwgYWN0aXZl
VGhyZXNob2xkLCBhZGp1c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQcm9maWxlLCBl
eGl0VG9MTEludCkpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikp
IHsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9wZXJC
eXRlY29kZVByb2ZpbGVyOwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21w
aWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24u
Z2V0KCk7Ci0KLSAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBj
b21waWxhdGlvbi0+YWRkT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2Zp
bGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiks
Ci0gICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxl
SW52YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9maWxlckV4aXQg
PSBwcm9maWxlckV4aXQ7Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBz
dGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bDo6T3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnBy
aW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgPSBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgp
KSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykgZnJv
bSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwg
dG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgZXhp
dEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCks
Ci0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4o
b3BlcmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NSRXhpdFN0YXRl
JiBleGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NFUlQo
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwot
Ci0gICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0YXRlLm9wZXJh
bmRzOwotICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5lZE9wZXJhbmRT
cGFucyA9IGV4aXRTdGF0ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBjb250ZXh0LnNw
KCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9pbnRlck9mZnNl
dDsKLQotICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGlsZSBsb29w
IGlzIHNvIHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCi0gICAgZG8g
ewotICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19jYXN0PEV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bCk7Ci0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBFeHRyYUluaXRp
YWxpemF0aW9uTGV2ZWw6Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBC
ZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292ZXJ5Ci0KLSAg
ICAgICAgLy8gV2UgbmVlZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJzdCBiZWNhdXNl
IGFycmF5IHByb2ZpbGluZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8vIG1heSByZWx5
IG9uIGEgdmFsdWUgdGhhdCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vzbid0IG1lYW4g
dGhhdCBpdCBpcyBsaWtlbHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5IHZhbHVlLiBT
bywgd2UnbGwgZGVjb3JhdGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1bGF0aW9uUmVj
b3ZlcnkqIHJlY292ZXJ5ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBpZiAoVU5MSUtF
TFkocmVjb3ZlcnkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAgICAgY3B1Lmdw
cihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkp
IC0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4g
MzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFs
dWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJl
Y292ZXJ5LT5kZXN0KCkpID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8aW50MzJfdD4o
cmVjb3ZlcnktPmRlc3QoKSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4g
MzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFs
dWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgICAgIGNwdS5n
cHIocmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3Qo
KSkgLSByZWNvdmVyeS0+aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAg
ICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVtYmVy
VGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2Ug
Qm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
ICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgp
KSBeIEpTVmFsdWU6OlZhbHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6
IFZhbHVlUHJvZmlsZVVwZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFsdWU7Ci0gICAg
ICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBwcm9maWxlZFZh
bHVlID0ganNWYWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAg
IGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFsdWVQ
cm9maWxlKQotICAgICAgICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJvZmlsZWRWYWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IEFy
cmF5UHJvZmlsZVVwZGF0ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUg
PSBleGl0U3RhdGUuYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoISFleGl0Lm1f
anNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gQmFkQ2Fj
aGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgIENvZGVC
bG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJhc2VsaW5l
Q29kZUJsb2NrKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
IHByb2ZpbGVkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAgICBib29sIGRv
UHJvZmlsZSA9ICFpbnN0cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCkubWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9kZU1ldGFkYXRh
Lm1vZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgaWYgKGRvUHJv
ZmlsZSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcHJvZmlsZWRW
YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2Zp
bGUtPm9ic2VydmVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBhcnJheVBy
b2ZpbGUtPm9ic2VydmVBcnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJl
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVwZGF0
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJhIGluaXRpbGl6
YXRpb24gbGV2ZWw6IE90aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9PSBH
ZW5lcmljVW53aW5kKSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFj
dG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4K
LSAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0
YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29udGV4
dC5mcCgpID09IHZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChleGl0U3RhdGUucHJvZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRlLnByb2ZpbGVy
RXhpdC0+aW5jQ291bnQoKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0LCB2bS5vc3JF
eGl0SW5kZXgsIGV4aXQpOwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQgZXh0cmEgaW5p
dGlhbGl6YXRpb24uCi0KLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygp
KTsKLSAgICBBU1NFUlQoIShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4NykpOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlcikgPT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NFUlQoY3B1Lmdw
cjxpbnQ2NF90PihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOb3RD
ZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9u
cyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8gTm90ZTogd2Ug
bmVlZCB0byByZWNvdmVyIHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBzYXZlIHJlZ2lz
dGVycyBiZWxvdwotICAgIC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5IG9uIHZhbHVl
cyBpbiBzb21lIG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBjYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lQ29kZUJs
b2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAgc2l6ZV90IG51
bWJlck9mT3BlcmFuZHMgPSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51bVVuZGVmaW5l
ZE9wZXJhbmRTcGFucyA9IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0KLSAgICBzaXpl
X3QgbmV4dFVuZGVmaW5lZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRP
cGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRlZmluZWRPcGVy
YW5kU3BhbnMpCi0gICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRP
cGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLQotICAgIEpT
VmFsdWUgdW5kZWZpbmVkID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVfdCBzcGFuSW5k
ZXggPSAwOyBzcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsrc3BhbkluZGV4
KSB7Ci0gICAgICAgIGF1dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbc3BhbkluZGV4
XTsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0gICAgICAgIGlu
dCBsYXN0T2Zmc2V0ID0gZmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0ZXJzOwotCi0g
ICAgICAgIGZvciAoaW50IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBsYXN0T2Zmc2V0
OyArK29mZnNldCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0LCB1bmRlZmlu
ZWQpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJP
Zk9wZXJhbmRzOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3Bl
cmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChVTkxJ
S0VMWShpbmRleCA9PSBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAgICAgICAgICAg
aW5kZXggKz0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXgrK10u
bnVtYmVyT2ZSZWdpc3RlcnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRlZmluZWRTcGFu
SW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAgICAgbmV4dFVu
ZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVk
U3BhbkluZGV4XS5maXJzdEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiBy
ZWcudG9Mb2NhbCgpIDwgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0K
LSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwg
Y2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1
ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3Zlcnku
ZnByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1
LmdwcjxKU1ZhbHVlPihyZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxz
ZQotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigpKSwgY3B1Lmdw
cjxpbnQzMl90PihyZWNvdmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSNlbmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+KHJlY292ZXJ5
LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDZWxsRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1Zh
bHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVu
Ym94ZWRDZWxsKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNvdmVyeS5ncHIo
KSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBCb29sZWFu
RGlzcGxhY2VkSW5KU1N0YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2VuZGlmCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAg
ICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4o
cmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElu
dDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNh
blVuc2FmZVVuYm94ZWRJbnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVy
eS5ncHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+
KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBT
dHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVVbmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgcHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIHB1cmlmeU5hTihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFz
YW5VbnNhZmVVbmJveGVkRG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBy
ZWNvdmVyeS5jb25zdGFudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
RGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNlIENsb25lZEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMs
IHlldC4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0
aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJlc3RvcmVDYWxs
ZWVTYXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVTYXZlc0Zvcihj
b250ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNw
dS5ncHIoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BV
UmVnaXN0ZXI+KEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJbmZvOjpub3RD
ZWxsTWFza1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVl
OjpOb3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKQotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKGNvbnRleHQpOwotCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFjayBhcmUg
cmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhhdCBhcmd1
bWVudHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRvIGVhY2gg
b3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQotICAgIC8v
IHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5lZWQgdG8g
ZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAvLyBOb3RlIHRo
YXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQgc3RpbGwg
YmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNhbGwgZnJhbWUg
c2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0KLSAgICBERkc6
OmVtaXRSZXN0b3JlQXJndW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklUQ29kZSwgb3Bl
cmFuZHMpOwotCi0gICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBT
aW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFsbCBuZXcgY2Fs
bHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUK
LSAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBP
U1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5n
IHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8g
T1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgot
ICAgIC8vCi0gICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBj
aGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVudHVhbGx5LCBz
aW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAgICB3
YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdyku
Ci0gICAgLy8KLSAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0
aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBjb2RlIGFuZCBo
YXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8vICAg
ICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgot
ICAgIC8vCi0gICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBu
b3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3RoIGZv
cm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAgICAgcGFydGlj
dWxhcmx5IGV4cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFpbHVy
ZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8gICAg
IHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0
cmlnZ2VyZWQuCi0gICAgLy8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0
IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8vIChh
KSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBv
cnR1bml0eSBmb3IKLSAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5
LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1ZW50bHkgYW5k
IHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIK
LSAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0
cmlnZ2VyZWQuIE9TUiBlbnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdl
dHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gZ29vZCBq
b2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9m
IChkKSwKLSAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQg
dGhlIGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1i
ZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vIGxhcmdl
ciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUp
LCBhbmQgaWYKLSAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9m
IGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8gMDsgb3RoZXJ3
aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
QWZ0ZXJXYXJtVXAoKS4KLQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9TUkV4
aXRDb3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2RlQmxv
Y2s6Ok9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJlb3B0
aW1pemF0aW9uTm93KGJhc2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0KTsKLQotICAg
IHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQp
OwotICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJsb2NrLCBiYXNl
bGluZUNvZGVCbG9jaywgZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNlbGluZUNvZGVC
bG9jaywgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1ID0gY29udGV4
dC5jcHU7Ci0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBl
cmZvcm1pbmcgYW4gT1NSIGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwg
Y2FsbHMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzUxMQotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1vc3RCYXNlbGlu
ZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxvY2sq
PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsK
LQotICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2lu
ID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNh
bGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdl
dENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2lu
QW5kQmFzZWxpbmVDb2RlQmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2VsaW5lQ29kZUJs
b2NrKTsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZDsK
LSAgICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2Fs
bGVyU2tpcHBpbmdUYWlsQ2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAgICAgIHZvaWQq
IGNhbGxlckZyYW1lID0gY3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50ID0g
ZmFsc2U7Ci0KLSAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5QQyA9
IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSNpZiBDUFUo
QVJNNjRFKQotICAgICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4o
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5
U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0
KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIo
cmV0dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8
UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lk
Kj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7Ci0gICAgICAg
ICAgICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7
Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxl
ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxl
clJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwg
dHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAgICAgaWYgKHRy
dWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNhbGxlckZyYW1l
ID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCktPnN0
YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShBUk02NEUpCi0g
ICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5l
Q2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAg
IGp1bXBUYXJnZXQgPSB0YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2FzdDxQdHJUYWc+
KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxp
bmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0g
ICAgICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVn
aXN0ZXJzLgotICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwg
dGhhdCB3aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8K
LSAgICAgICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMg
YWxyZWFkeSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAg
IHNhdmVPckNvcHlDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7
Ci0KLSAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlu
bGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFk
YXRhVGFibGVHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRh
VGFibGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25z
dCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9j
aywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxlckZy
YW1lKTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZy
YW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwg
VGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8v
IHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihp
bnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8
dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIFRhZ09mZnNldCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcp
KTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
Q29uc3RhbnQoKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxz
ZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAgICB9Ci0KLSAg
ICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25s
eSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgo
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAg
ICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotI2VuZGlmCi0g
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0
KQotewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7
Ci0KLSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVy
IGV4cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZl
bmNlLgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAg
IC8vIFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3Vy
cmVudCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2gg
aW5saW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSds
bCB1cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0i
LCBpZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNp
ZGUgYiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJ
WE1FOiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBD
b2RlQmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxG
cmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21t
b24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykg
ewotICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGlu
ZUNhbGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxs
RnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0
SW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0g
ICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRl
eHQuZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRl
LT5qdW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0Lmlz
RXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8g
b3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5j
YWxsRnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAg
ICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAo
ZXhpdFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
Rm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
ZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwot
ICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9j
a0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAg
ICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJz
OjpwYkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0
ZXJzOjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudElu
c3RydWN0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKQotICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJl
bnRJbnN0cnVjdGlvbjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8
SlNFbnRyeVB0clRhZz4oanVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhp
dChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQm
IGV4aXQpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFt
ZSo+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7
Ci0gICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBk
YXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFM
b2coIiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIs
IGV4aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZl
KSB7Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBh
bHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBh
bHRlcm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4g
amV0dGlzb25lZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJs
b2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0
aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRv
UmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwg
IjoiLCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRh
dGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
KytpKSB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAg
ICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVp
bnQ2NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91Ymxl
IHZhbHVlID0gY29udGV4dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwg
c3RhdGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9n
KCJcbiIpOwotfQotCi0vLyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQo
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFz
ZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGpp
dC0+bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291
cmNlKQpAQCAtOTU4LDE1ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJU
YWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4
aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlm
aWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFy
Z3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0
dWFsUmVnaXN0ZXI+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBh
cmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5k
ID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAg
ICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2Vy
ZU5vdENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3Bl
cmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJ
RCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxs
b2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxs
b2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0
OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBP
cGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6
ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3Bl
cmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgsNyBAQCB2b2lk
IE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0s
IGNvbnN0IE9wZXJhbmRzPFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
LCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCi0gICAg
ICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICAgICAg
YWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIH0KIH0KIApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NSRXhpdDo6Y29t
cGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwg
Y29uc3QKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJh
bWUpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3Rp
dmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4ndCB1
c2UgYSBwcm9iZSBidXQgZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0cyBpcyB0cmlj
a3kgb3RoZXJ3aXNlLi4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2YWx1ZXMob3Bl
cmFuZHMubnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9w
ZXJhbmRzLm51bWJlck9mVG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvcGVy
YW5kcy50bXAoaSk7CisKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBhdXRvKiB0
bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAgICAgICBqaXQu
cHJvYmUoWz0sIHZhbHVlcyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250ZXh0JiBjb250
ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBm
cmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0
YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisg
ICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVzW2kgKyB0bXBP
ZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdoYXQg
dGhlIEZUTCBkb2VzIGFuZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGludG8gdGhlIHNj
cmF0Y2ggYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUocmVjb3Zl
cnkuY29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAgICAgICAgICAg
ICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0bXBT
Y3JhdGNoW2kgKyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hl
ZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpT
U3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kg
KyB0bXBPZmZzZXRdKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5H
UFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBE
aXNwbGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+
dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAgICAg
ICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2luID0g
JmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENh
bGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4
IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAg
ICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxG
cmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIGFk
ZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgLSBz
aXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZS0+
dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2lu
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFt
ZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIERvIGFs
bCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUg
c3RhY2suCiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6
ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
b3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMu
dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWcuaXNMb2Nh
bCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVC
bG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAg
IGlmIChvcGVyYW5kLmlzVG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBp
bnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgp
ICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2Rl
QmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewog
ICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgKaW5kZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1NGYxYTA0ZWI4
ZS4uOWU5YmNlYTQ4MWMxZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBzdHJ1Y3QgT1NS
RXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAgc3RhdGljIHZv
aWQgZXhlY3V0ZU9TUkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZjNTMzMjc4NGYw
YTI5MmE0OWNiZTFiODJhNTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJjM2MxMjQzNWRi
OTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCkBAIC03
MCw2ICs3MCwxMSBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1cm4gbV9raW5k
ID09IEdlbmVyaWNVbndpbmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzRXhp
dGluZ1RvQ2hlY2twb2ludEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0KKwogcHJvdGVj
dGVkOgogICAgIHZvaWQgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAKaW5kZXggMmZmM2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRkNTExNS4uMjFi
ZWU4MjgzNGE3ODA3NDIyNDcyN2Q4OTlmMmJjMmY2Yjg1YWE4NSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAt
MjksMTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJCeXRlY29k
ZXMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUg
IkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklU
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKKyNp
bmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2LDkgQEAgdm9p
ZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwg
Qnl0ZWNvZGVJbmRleCBjYWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9y
Y2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxsQnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZM
TEludDo6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50KTsK
KwogICAgIHZvaWQqIGp1bXBUYXJnZXQ7CiAKICAgICBpZiAoY2FsbGVySXNMTEludCkgewpAQCAt
MjM4LDcgKzI0NCw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5s
aW5lZCB0YWlsIGNhbGxzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDc1MTEKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0LmJh
c2VsaW5lQ29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwotICAgIGppdC5zdG9yZVB0cihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spKTsKKyAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwogCiAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9y
aWdpbjsKICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmln
aW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewpA
QCAtMzA1LDMzICszMTEsMzQgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGppdC5zdG9y
ZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIs
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyks
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJhc2VsaW5lQ29kZUJsb2Nr
LT5ieXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRz
KCk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxv
Y2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAg
ICAgICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0
LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAv
LyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVy
RnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90
PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSkpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0
YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVD
b25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rlcihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGly
ZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgfQogCiAgICAgLy8gRG9uJ3QgbmVl
ZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0
YWlsIGNhbGxzCiAgICAgaWYgKGNvZGVPcmlnaW4pIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKSkuYml0cygpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9yRXhp
dChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+
aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAg
ICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOworICAgICAgICBh
dXRvIGJ5dGVjb2RlSW5kZXggPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRl
eEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0
aW9ucyhieXRlY29kZUluZGV4KS5hdCgpLnB0cigpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24p
KS5iaXRzKCk7CiAjZW5kaWYKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1
YWxSZWdpc3RlcikoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgaml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAg
IH0KIH0KIApAQCAtMzgyLDExICszODksMTIgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQo
Vk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUo
KSkpOwogCiAgICAgdm9pZCoganVtcFRhcmdldDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjaGVja3BvaW50UmV0dXJuVGFyZ2V0OwogICAgIGJvb2wgZXhpdFRvTExJbnQg
PSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAgICAgaWYgKGV4aXRUb0xMSW50
KSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlv
biA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5w
dHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3Rp
bmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3Rp
bmF0aW9uID0gYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgPyBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZMTEludDo6Y2hlY2twb2ludF9vc3Jf
ZXhpdF9lbnRyeXBvaW50KSkgOiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1
cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJlZ1QyKTsKQEAgLTQwMiw3ICs0MTAsMTQgQEAg
dm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYKICAgICAgICAganVtcFRhcmdldCA9IGRlc3Rp
bmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2Rl
TG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRl
eCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQnl0ZWNvZGVJ
bmRleCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4gPSBjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29k
ZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCku
ZmluZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4pOworICAgICAgICBpZiAoZXhpdEluZGV4LmNo
ZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgY2hlY2twb2ludFJldHVyblRhcmdldCA9IGNvZGVM
b2NhdGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oJkxMSW50OjpjaGVja3BvaW50X29zcl9l
eGl0X2VudHJ5cG9pbnQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRp
b24pOwogCiAgICAgICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhp
dFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAK
aW5kZXggMjE2YzViYWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRiMDNkYzE5OS4uN2RhNmFmZDVj
MjIxYzk3ZmY5M2Y0MDBjYjM0OTQ0NTRkNGQ0OTI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCkBAIC0yMTA3LDcgKzIxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVh
cC5mb2xsb3coYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCks
IE9wSW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1
bHRFZGdlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcElu
Zm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggZjM5YzE0
YjlmMGE0NDg3ODlkNzcyZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0YmY1ZWE2
MGE2ZTY2NTIwZmUwNTE0NGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcEluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5o
CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJ
bnRlZ3JhbFR5cGUgdmFsdWUpCiAgICAgICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJ1Y3R1cmUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oc3RydWN0dXJlKSkpIHsgfQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQg
b3ApIDogbV92YWx1ZShvcC5hc0JpdHMoKSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KICAgICBleHBsaWNpdCBPcEluZm8oVCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggNTBjYTAwYjAwYjk0ODhhMTAzMjg3MjYyOGE5ZTJl
ZTg3M2YyYzM3OS4uY2YwOWQ4NzM5NzRhODU2MzNhMmVkYjY4Nzc2OTJkYjEwNzY4NDA3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTQ2LDE1
ICsyOTQ2LDE2IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZW
YWx1ZURvdWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQz
Ml90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVp
bnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVt
KQogeworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0
IH07CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1
bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9h
ZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVs
ZW1lbnREZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3Mo
Z2xvYmFsT2JqZWN0LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50KSksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGggLSAxKTsKICAgICAKLSAgICBmb3Ig
KHVpbnQzMl90IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCi0gICAgICAg
IGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAg
IGZvciAodWludDMyX3QgaSA9IGxlbmd0aCAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kp
CisgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7
CiB9CiAKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBh
LCBpbnQzMl90IGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
YW50b21JbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
YW50b21JbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2Ri
MzZhYjVhMGM2YWRjMi4uMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVlMDliYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlLmNwcApAQCAtNDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBo
YXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0K
LQogY2xhc3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21J
bnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFu
dG9tIGluc2VydGlvbiIpCkBAIC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0
TG9jYWxzIGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGlu
c2VydCB0b28gZmV3IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxw
dHIsIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAK
LSAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZv
cmUgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwog
ICAgICAgICB9CkBAIC03Miw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAg
IGhhbmRsZUJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5z
ZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewog
ICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsK
ICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIgKzEwMCwy
MiBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50Ogot
ICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1l
bnREZWZpbml0ZWx5OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAg
ICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBk
ZWZhdWx0OgpAQCAtMTM0LDM4ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3Jh
cGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAg
WyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIlVwZGF0aW5nIGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAg
ICAgICAgICAgICAgICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1
cnJlbnRFcG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVk
OworICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRv
IHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIHJl
ZywgIlxuIik7CisgICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
ICAgIEtpbGxlZCBvcGVyYW5kOiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIEFs
cmVhZHkgaGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0g
YWxyZWFkeUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2ls
bGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3Bl
cmFuZCAiLCBvcGVyYW5kLCAiIGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJl
Zyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgIE5v
ZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAgICAgICAg
ICAgICBpZiAoIWtpbGxlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVkIGluIHRo
aXMgYmxvY2suIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOwor
ICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQg
YSBQaGFudG9tIGlmIHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAg
ICAgICAgICAgICAgICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQu
Ci0gICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2No
KQorICAgICAgICAgICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9j
aCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJh
bmQgIiwgb3BlcmFuZCwgIiBoYXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIElu
c2VydGluZyBQaGFudG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24g
Iiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQo
bGFzdEV4aXRpbmdJbmRleCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRo
YXQgd2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50
LgogICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3OSwxNCAr
MTgwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
bm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBuZWVkIHRo
ZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBsaXZl
IHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
S2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQg
PSBsb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2FsKSA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxw
dHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1f
Z3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tpbGxlZE9w
ZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNl
TG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VM
b2NhbENsb2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0Mjk4ODZlMDc4
ZjBhZmNjLi5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0
ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAg
ICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBw
cmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYg
KGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3Vu
Y29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIo
KSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUs
IGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBSRUxFQVNF
X0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAgCi0gICAg
ICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVl
MzIoKSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFuZCgpLCBu
b2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50b0xvY2Fs
KCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
KQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2UyNGUyYTEx
NjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMz
ODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFu
ZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4u
bXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
dXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJh
bmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
ICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1
ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZjYmZlY2M4NGZlMTk1
ODQyOGEwY2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5YmU2ZDMxOTdj
MTNmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAg
ICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAg
Y2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMyZWFlNjAz
YmFjYmQxMDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBlN2VkZjYzZjA3Zjc4
ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwot
fQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQdXRTdGFj
a1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRT
dGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUg
c3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9yIG5vdC4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5
NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2co
IkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAgICAgICBC
bG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4o
T3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIGxpdmVB
dFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10u
ZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsK
KyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRU
YWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5n
ZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFu
ZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVy
LCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwg
ND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0g
KE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwg
bm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3BlcmFu
ZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3
cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBLaWxs
U3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBv
cCA9PSBWYXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZvcndhcmRW
YXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAg
ICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0ZXMpCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVh
ZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Npbmtp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUs
ICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsyNTYsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5nRmx1
c2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25F
bmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRTdGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0aW5nIGZs
dXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFjaykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEgUHV0
U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwog
ICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVI
YW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZh
cmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09
IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBv
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFu
ZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5k
bGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlO
b2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9k
ZSkgeyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywxMyAr
MzEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJp
bmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIgYXQg
IiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAi
LCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBt
ZXJnZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZlcnJlZC5v
cGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2lu
dGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRB
dEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ld
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVy
YW5kVG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5k
ZXhUb09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAg
ICAgICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7
CiAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFi
bGU7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxl
LT5pbmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRk
KG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1Zh
cmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAg
ICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSog
ewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJh
bmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwg
b3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3Bl
Y0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkpOwpA
QCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxs
cHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQo
bWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRv
VmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9y
OjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlh
YmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtYXBw
aW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBw
aW5nLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9y
OjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhp
RGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVm
LT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVy
YW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWFw
cGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpA
QCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZl
cnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJl
ZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNl
IFB1dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5v
cGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBpZiAo
REZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBN
YXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFu
ZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAg
ICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKTsK
KyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFu
ZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZv
cm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBk
ZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBk
ZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBkZWZl
cnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdoYXQg
aXMgc3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBr
ZWVwIHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChkYXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcy
LDIwICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0b3Jl
ZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBkYXRh
LT5mb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9k
ZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVsdEVk
Z2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBD
b25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2Nh
cGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZv
ciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9w
ZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUxMyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3Bl
cmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5k
IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVy
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRpdGlv
bmFsIHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1h
a2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMg
d2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNr
cyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRW
YXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9w
KCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUt
Pm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsK
IAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2Rl
KSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkg
eyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAg
ICAgICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JC
bG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5p
bmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBV
cHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+Iiwg
cG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
Rmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJh
bmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVs
bHB0ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtp
bmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5k
ZXggNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRmMmMwY2QzOTk4
YjE4MWI5ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAg
IEdldFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxl
LT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5m
bHVzaEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hp
bGROb2RlKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJp
YWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gUHJ1
bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBp
bGUgdGltZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIE5v
ZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVudCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhb
cGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+
dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9y
T3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVmLT52YWx1ZSgpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgTW92
SGludCwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksCi0gICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFs
dWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJs
ZS0+b3BlcmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4aXRPSykKQEAg
LTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7
CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9y
aWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2Fs
KCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9L
ID0gZmFsc2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hl
ZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0YWNrKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRk
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSwgdmFy
aWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUo
bV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZh
cmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+b3Bl
cmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtMzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcg
bm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1l
bnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAi
LCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM4NSw3ICszODUs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVk
VXNlKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVm
YXVsdEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQyNSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAgICAgICAgICAgICAg
ICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KTsKIAot
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2ls
b24gZm9yICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZv
ciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3Bl
Y05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8ocGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2EzMTY5MTkuLjlh
MzJkNjdhNTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIyLDcgQEAgYm9v
bCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxs
ZXI6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBj
YXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25z
dHJ1Y3RGb3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggYjVhMTFjNTFlZjEwY2Y3YTZiMjMxNzJkMmQ4YmY4ZjY3
NWUwNTJiZC4uYmU1ODVkNWQ0M2M5Mjc3ODc5Mjk4M2IwOTMzZjVhMjYyODUwMzJiOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE3
NzUsNyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUq
IG5vZGUpCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90
aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFy
aWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50
KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29uIHJlYXNvbikKQEAgLTE4MjUsNyArMTgy
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgIG1f
c3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkg
PSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGludCBv
cGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5l
ZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAgaWYgKCFub2Rl
LT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3Jk
IGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCi0gICAg
ICAgICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpLAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0
LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFu
ZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwpA
QCAtMTkxOSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5
cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQo
KSk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2Uo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApAQCAt
NzM0MSw1NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0RnVuY3Rp
b25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFsdWVSZWdz
IGFyZ3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHMo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRz
LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIGxv
Y2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50
cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBhcmd1bWVudHNSZWdzID0gYXJn
dW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB1bmxvY2so
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
aXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBHUFJUZW1wb3JhcnkgYXJnQ291bnRJbmNs
dWRpbmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPSBh
cmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwg
Y2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAg
ICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mg
c3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAvLyBzdGFuZHBvaW50LiBU
aGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRo
ZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BS
ID0KLSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGludDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7Cit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKworICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFy
Z3VtZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFy
Z3VtZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikp
OworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2pp
dC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBt
X2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAg
ICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkp
OwogCi0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBk
YXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0p
OwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAg
LTczOTgsMTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRW
YXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7
Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2Rl
LT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgIGlmIChu
b2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5h
cmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAg
ZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1l
bnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0
aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBs
ZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJn
dW1lbnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAucmVncygp
OwotICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BS
LCAvKiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAgIAorICAgIG1faml0Lm1vdmUoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAgICAgaWYgKGRhdGEtPm9mZnNldCkK
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxlbmd0aEdQ
Uik7CiAgICAgICAgIApAQCAtNzU2Nyw3ICs3NTY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGF1dG8qIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lCiAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7Ci0gICAgICAgIGtub3duTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIGtub3duTGVuZ3RoID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
LSAxKTsKICAgICAgICAgbGVuZ3RoSXNLbm93biA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAga25vd25MZW5ndGggPSBVSU5UX01BWDsKQEAgLTEyNDQ3LDcgKzEyNDQ4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKE5vZGUq
IG5vZGUpCiAgICAgaWYgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+
YXJndW1lbnRzSW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIGVsc2UKLSAg
ICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50OwogICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHQuZ3ByKCkpOwogICAgIGlu
dDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggYzY0Zjk3OGFkZjg1ZmJmMjc3YmJhNzky
MTYwNjRmNDI4MWI4ZDVhOS4uMDNkNDgzNWJmNGI3YThkZTA5MzllZmNmYTM3MDIyYjQ2MjY5MDk0
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApA
QCAtMTM5Myw2ICsxMzkzLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVNldEZ1bmN0aW9u
TmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xl
bmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0
ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjY5LDE1ICsxNjcwLDE2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7CiAgICAgCiAg
ICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2Rl
UmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAg
ICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRh
Rm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VSVCghYnl0ZWNvZGVSZWcuaXNBcmd1
bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAw
KTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2Nh
bChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJs
ZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlh
YmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKICAgICB9
CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA2N2IwZTBiMzcw
NGNhNTlhODkwYWM1OWM4NmRiZDBkMmEwNTZkYjgxLi4wYWYzZjE3MTgxNTQxMGQ5YmVmNjRhMjBm
ZDA5MDVkZGMwM2U2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1f
c3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEg
aXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUK
ICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0
IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6
IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRM
b2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCks
IERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTM4MjQsNiArMzgyNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsK
IAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0
aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczog
ewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5k
ZXggM2U2MzhjOWI5NDllYjVlYTI2YTMxMDVkZGI4YWZlNzY2MjE2MzM0NC4uN2IxZTI1N2Q2MGQ0
Njg0NWYxYTk0MGZmNmRmZGM5M2FjODZjN2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xOTM2LDcgKzE5MzYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1f
c3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAogICAgICAgICAvLyBJZiB0
aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZh
cmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3Qg
YXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBab21i
aWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2Vk
TG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgcmVj
b3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdp
c3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC00NDY0LDYgKzQ0NjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY29tcGlsZVZhcmFy
Z3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZh
cmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwCmluZGV4IGJlZWM4NmFjN2E3ZDMzM2UzOTY3OWUyNjc1NTkwNzRlNDY0YzliODIuLmQ3NjI4
ZTVhMTE3Y2UzM2RlMWQxNjE1ZjYwNDI3NTIyMDQ3N2EyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcApAQCAtNTEsNyArNTEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFibGUgYXMgYmVpbmcgInVzZWQiIGlm
IHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExvY2FsLCBHZXRMb2NhbCwKICAgICAg
ICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAgIAotICAgICAgICBCaXRWZWN0b3Ig
dXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gdXNlZE9wZXJhbmRzKDAsIGdyYXBo
KCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxzZSk7CiAgICAgICAgIAogICAgICAg
ICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCiAgICAg
ICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CkBAIC02NywyMyArNjcsMjIg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQo
dmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9w
ZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgdHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
ZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9w
ZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlv
dXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgogICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSAr
IGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0
KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVy
YW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkp
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4n
dCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTIsOSArOTEsOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEdl
dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogc3RhY2sgPSBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5s
b2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay0+b3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxvY2FsLnRvTG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHN0YWNrLT5vcGVyYW5kLCB0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIxIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0ZXI7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFy
Z3VtZW50LS07KSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lz
dGVyKAorICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpLm9mZnNldCgpICsKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZExvY2Fscy5zaXpl
KCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZE9wZXJhbmRzLnNp
emUoKSk7CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsID0gY29kZUJsb2NrKCkt
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdXNlZExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYg
KCF1c2VkTG9jYWxzLmdldChpKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlZE9wZXJhbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXVzZWRPcGVyYW5k
cy5nZXRGb3JPcGVyYW5kSW5kZXgoaSkpIHsKICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW2ld
ID0gVUlOVF9NQVg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBA
IC0xMzUsNDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5p
c1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0
dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGxvY2FsID0gdmFyaWFibGUtPmxvY2Fs
KCkudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYgKGxvY2FsID49IGFsbG9jYXRpb24uc2l6ZSgp
KQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKKyAg
ICAgICAgICAgIHNpemVfdCBpbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFu
ZCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gYWxsb2NhdGlvbi5zaXplKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhbGxvY2F0
aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2luZGV4
XSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24s
IHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KSA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIHZhcmlhYmxlLT5vcGVyYW5kKCkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIGlmICghZGF0YS0+
bG9jYWwuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0g
ZGF0YS0+bG9jYWw7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0FyZ3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5vcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRh
LT5sb2NhbC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+bG9jYWwudG9Mb2Nh
bCgpXSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNp
emUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYg
KGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCldID09IFVJTlRfTUFYKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmxv
Y2FsKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbih1c2VkT3BlcmFu
ZHMsIGFsbG9jYXRpb24sIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAgICBjb2Rl
QmxvY2soKS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbihhbGxv
Y2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBjb2Rl
QmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9u
LCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAg
ICAgICAgIElubGluZVZhcmlhYmxlRGF0YSBkYXRhID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxl
RGF0YVtpXTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
ZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCi0gICAgICAgICAgICAgICAgICAg
IGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFz
c2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewogICAgICAgICAgICAgICAgIEFy
Z3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zWwog
ICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9zaXRpb25TdGFydCArIGFyZ3VtZW50
XTsKQEAgLTIxNSw4ICsyMTUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNv
dW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFy
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24o
dXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0
aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMzEsMTcgKzIz
MSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZpcnR1YWxSZWdpc3RlciBh
c3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IHNyYykKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IE9wZXJhbmRzPGJvb2w+JiB1
c2VkT3BlcmFuZHMsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7Ci0g
ICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBteUFs
bG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2FsKCldOwotICAgICAgICAgICAgaWYg
KG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0
dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworCisgICAgICAgIHNp
emVfdCBvcGVyYW5kSW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOwor
ICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW29wZXJhbmRJbmRleF07
CisgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChteUFsbG9jYXRpb24pOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCmluZGV4IGViM2Rk
YmQ3MTg0M2Q0OWY2NWIzMmNlOTYxZmY5YTA3MTJhMWEwNTEuLmI0OGM2ZjdmMTkwOTc3NWQ3Mjc5
Nzk5MWYzZmI5ODNkZTYzOGE3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApAQCAtMjg1LDE3ICsyODUsMTcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZSogc2V0TG9jYWwgPSBudWxscHRyOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
ID0gbV9ub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ub2Rl
LT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwg
JiYgbm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFNldExvY2FsICYmIG5vZGUtPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHNldExvY2FsID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3Zlcmxh
cChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIGxvY2FsKSkpCisgICAgICAgICAg
ICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG9wZXJhbmQpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCA2YWNhZmJmM2Jm
NTM1Yzk2OTZiZTY0OGEyMDcwYjZlZTZmNGY4YmY5Li5mMWIxZmY2NGRkYTUzY2Y0NTk2NzA0ZWVi
ODMxNWYxNmJmYmU5MDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3Bw
CkBAIC00MCwxNCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJh
dG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwotICAgIGppdC5w
cm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwgJnZtKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKLX0KLQog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKaW5kZXggMDVhNTBhNTRiMjVkNTFkYmNi
MTg1OGZlN2FhZGNhNDg2ODIwNWQ5ZS4uOGI1YzNmMDFhNDg1MjBiN2FhYWFhZWJhZmY5M2MzYjI2
Y2NkOTg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCkBAIC0zNSw3ICsz
NSw2IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRy
eVRodW5rR2VuZXJhdG9yKFZNJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDYwZmJmODk5NWZkYWQ3
ODI1NmEwNjdiODljNGVjNWY1NzEzZjFkN2UuLjc5NjY1ZjhhYjg1ZmMxMTE2ZDYzOWZiM2Q4YjU1
ZjZlZDkwMjY4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGNoZWNrT3AgPSBDaGVja1N0cnVjdHVyZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChTcGVjQ2VsbENoZWNrICYgU3BlY0VtcHR5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJh
bmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
KiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsb2NhbCAtIChpbmxpbmVDYWxs
RnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkpID09IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhlIGNhbGwgZW50cnlwb2ludCB3b24ndCBo
YXZlIHx0aGlzfCBhcyBURFosCkBAIC0xNjgsOCArMTY4LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBnZXRMb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9PSBub2RlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpID0gZ2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2NhbCgqYmxvY2ssIGluZGV4SW5CbG9jaywg
dmFyaWFibGUsIGdldExvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC00NDYsNyArNDQ2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNv
bnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3Jh
cGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAg
IGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAg
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAppbmRleCA5ZWU1ZTAwNzQwOWRmNTI5NGJmY2Y1MWI3NzZlYjhjZmNmNDdjNTBl
Li5hMmQ2Y2ZjMjQ5MzRlM2RjM2M0NmMwZTI0ZDRkYTFjZTFiMGNmNWI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtNDgzLDcgKzQ4Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5waGlzW2ldOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2op
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3Jt
IGFyZSBpbnZhbGlkLgogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
TG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQpAQCAtNTE5LDEwICs1MTksMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJs
b2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJsb2NrLT5wcmVkZWNlc3NvcnNba107CiAgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZC
bG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0
IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxl
LgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jaywgYmxvY2st
PnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChvcGVyYW5kLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2Rl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIEZsdXNoOgpAQCAtNTMzLDExICs1MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNz
b3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3Nv
cnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlcmFuZCwg
YmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXli
ZQpAQCAtNTQ3LDE5ICs1NDcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9jay4K
LSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE9wZXJhbmRzPHNp
emVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXpl
X3Q+IHNldExvY2FsUG9zaXRpb25zKAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90
PiBnZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQp
OworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5k
c0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3Vt
ZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmFjY2Vzc2VzU3Rh
Y2sobV9ncmFwaCkpOwpAQCAtNjY4LDI0ICs2NjQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX215UmVmQ291bnRzLmdldChub2RlKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
VGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBi
bG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9PSBub3RTZXQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgISFub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBub2Rl
LT5jaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+Y2hpbGQx
KCktPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAg
ICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNl
dExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7Cisg
ICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFu
ZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFj
dHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBzZWNvbmQgR2V0TG9jYWwgZm9yIGEg
bG9jYWwgaW4gdGhlIHNhbWUKICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2sgaWYgd2UgaGFk
IGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGZvciB0aGF0IGxvY2FsLgotICAgICAgICAgICAgICAg
ICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0Owot
ICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIHNldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJl
OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk2OCwyNiArOTY0LDI2IEBAIHByaXZh
dGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBlZGdlKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJh
c2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoT3BlcmFu
ZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIGlmICghYmxvY2sp
IHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gbnVsbCBCbG9jayAiKTsKKyAgICAg
ICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBudWxsIEJsb2NrICIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAi
LCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKmJsb2Nr
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNC
bG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Js
b2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKICAgICB7Ci0g
ICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIs
ICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2Nr
ICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQorICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2
Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIGxvY2FsLCAi
IGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIg
Zm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBCYXNpY0Jsb2Nr
KiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDI2ZjAzMjlkNTQzMDQxNTcyMDVlNzgxNDk4YzY0
ZTBiZTk5MzIxMTAuLjk1Y2RjOTJlMmMyNDEwYTM1YzAxMzEzMWZkYzNiN2NjYzI4MjllZjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19
CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ2
YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7
CiAgICAgICAgIAotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9n
KCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5nOlxuIik7CiAgICAgICAgICAgICBtX2dy
YXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAg
ICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJhcmUuIFNvLCB0
aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBtYW5uZXIuCiAgICAgICAgIAogICAgICAg
ICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2FuZGlkYXRlTm9kZUluZGV4KTsKLSAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBjYW5kaWRhdGUg
IiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGVsaW1pbmF0ZSBH
ZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1bWVudHMgaWYgdGhlIGJ1dHRlcmZseSBp
cyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYXV0byBk
ZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5v
ZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0
ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkuaXNUbXAoKSwgIldlIGRvbid0IGN1
cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0byBhbiBhcmd1bWVudHMgb2JqZWN0LiIp
OwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZExvY2FsKCkp
KQotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5r
ZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5z
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgpAQCAtMTQwLDEzICsxMzksMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGlmIChzYXdFc2NhcGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAg
ICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0xNTcsNyArMTU3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hpbGQyKCkgPT0gY2FuZGlkYXRlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2Nyw3ICsx
NjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlICYm
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xvYWRlZEZyb20oKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRHZXRCeU9mZnNldCkgewogICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlkYXRlQnV0dGVyZmxpZXMpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBidXR0ZXJmbHkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJ1dHRlcmZseSBlc2NhcGVkIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgICAg
ICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBi
bG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwg
bGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIG9wZXJhbmQsICIgd2hp
bGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlbGV2YW50
TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsZXZh
bnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFu
ZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fscy5sYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0yNDcsNyArMjQ3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
U2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RVc2VySW5kZXgsICIsICIsIGJsb2NrLT5h
dChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSdyZSBzdGls
bCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdlZW4gdGhlIGNhbmRpZGF0ZSBhbmQgdGhl
IGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2MywxNiArMjYzLDE2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAg
ICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChj
YW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRl
cmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
PmxvY2FsKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4MCw4ICsyODAs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0
ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwg
bm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChj
YW5kaWRhdGUsIHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52
b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
fSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJm
ZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMzExLDcgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtlIHRoaXMgd29yay4KLSAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgV2lsbCBkbyBmb3J3YXJkaW5nIVxu
Iik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIApAQCAtMzQxLDggKzM0MCwx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2hhbmdl
IGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlP
bihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRh
dGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRh
dGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlk
YXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2MmFlZDRjMzQzMmVhNWE4MjkwMi4u
MmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNjODhhODdjN2QxNzlkOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcApAQCAtMzEs
OCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBWYXJpYWJsZUFj
Y2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCi0gICAg
LCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAg
ICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9mbGFncygw
KQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQpAQCAtNDUsMTAgKzQ0LDEwIEBAIFZh
cmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7
CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwobG9jYWwpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3Bl
Y05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9w
ZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdh
cmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgLCBt
X2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2UpCiAgICAgLCBtX3N0cnVj
dHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBAIC04Nyw3ICs4Niw3IEBAIGJvb2wgVmFy
aWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUoKQog
ewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5
ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZvciBhcmd1bWVudHMuCi0gICAgaWYg
KGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIC8vIElmIHRoZSB2YXJpYWJsZSBp
cyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0aGlzIGRvZXNuJ3QKQEAgLTEyMSw3ICsx
MjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURv
dWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgpKTsKICAgICAgICAgCi0gICAgaWYg
KGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQorICAgIGlmIChvcGVy
YW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQogICAgICAgICB8fCAoZmxh
Z3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgpKQogICAgICAgICByZXR1cm4gREZH
OjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9ybWF0U3RhdGUsIE5vdFVzaW5nRG91
YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3ICsxNzUsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNz
RGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBhcmd1bWVudHMuCi0gICAgaWYgKG1fbG9j
YWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlIGFyZ3VtZW50LWF3YXJlIHByZWRpY3Rp
b24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5saW5lZCBvciBtYWNoaW5lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKaW5kZXgg
MWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRhMjg0ZS4uYmUyZmI1NDAxMzUyNjU1
YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC00OCwxMiArNDgsMTIgQEAgY2xhc3Mg
VmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJsZUFjY2Vzc0RhdGEpOwogcHVibGlj
OgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kKTsKICAg
ICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwpOwotICAgICAg
ICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmFuZCA9PSBmaW5kKCktPm1f
b3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZp
cnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAgLTIwOCwxMCArMjA4LDEwIEBAIHByaXZh
dGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdl
IGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNz
IG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIFNwZWN1bGF0ZWRUeXBl
IG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlwZSBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0
aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hp
bmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsKIAogICAgIGJvb2wgbV9zaG91bGROZXZl
clVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5j
cHAKaW5kZXggMjhlNDM3ZmQ1MWZlYTQ5NjllYjQ4ZWNmMGMwNTA4ZjBhMzdkZjgzNS4uNWIyYzFl
ZTkwOWI1NDhmMzk4MjcwYzQzYmQzNmVkNzJlM2Y5Y2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkBAIC01OSwxMSArNTksMTEgQEAgdm9p
ZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91
dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBN
b3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBi
eXRlY29kZVJlZ2lzdGVyKCksICIpIik7CisgICAgICAgIG91dC5wcmludCgiTW92SGludCgiLCBp
ZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0
TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIlNldExvY2FsKG1h
Y2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6IiwgYnl0ZWNvZGVSZWdp
c3RlcigpLAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVy
KCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAogICAgICAgICAgICAgIiwgIiwgZGF0YUZv
cm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCmlu
ZGV4IDIwNjBkNGEyZmQyNzIyM2RkNmY2OTljNmRiYWQ2ZDIyNDY3Yzk4MzQuLmMxZjU0YmE0ZmJk
Y2FhYTVhMWQ5YTVlZGMxYWM0ODEzOGQzNGUzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC02OCw2ICs2OCwxMCBAQCBlbnVtIFZhcmlhYmxl
RXZlbnRLaW5kIDogdWludDhfdCB7CiB9OwogCiB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9u
IHsKKyAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uKCkgCisgICAgICAgIDogb3BlcmFuZCgpIAor
ICAgIHsgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC03
Niw3ICs4MCw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgIH0gcGFpcjsKICNlbmRpZgot
ICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiB9OwogCiBjbGFz
cyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Miw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdo
aWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZh
cmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0
aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgICAgIHJlcHJl
c2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIGV2ZW50Lm1fa2lu
ZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAg
ZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTgxLDEzICsxODUsMTMgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbCgKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGlu
ZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVPcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewog
ICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAg
ICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVnLm9mZnNldCgpOwogICAgICAgICBW
YXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRh
dGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2Vu
dGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9
IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAg
ICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTk1LDEzICsxOTksMTMg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQogICAgIAotICAgIHN0YXRp
YyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgVmlydHVhbFJlZ2lzdGVyIGJ5
dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBp
ZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZl
bnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRz
KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAg
ICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQoKTsKKyAg
ICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlUmVnOwogICAgICAgICBldmVu
dC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3Zl
KHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRhdGlvbiA9IFdURk1vdmUocmVwcmVz
ZW50YXRpb24pOwpAQCAtMjY1LDEzICsyNjksMTMgQEAgcHVibGljOgogICAgIFZpcnR1YWxSZWdp
c3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7Ci0gICAgICAgIHJldHVybiBWaXJ0
dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAgICAgICAg
cmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnaXN0ZXIoKSBjb25z
dAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0gTW92SGludEV2ZW50KTsKLSAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZpcnR1YWxS
ZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5kOwogICAg
IH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZ2lzdGVyKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCmluZGV4IDQ1MjZkMzliYjA5NGM0Yjg2NmU2N2VkM2UyZWUxYjQ4OTZhYmI3MjYuLjhjZjcw
ODA0MDNhOGVmZmQ5YjIyMWEzNWFmOGQyMWRlMzJiNWRkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApAQCAtNDIsNyAr
NDIsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OmxvZ0V2ZW50KGNvbnN0IFZhcmlhYmxl
RXZlbnQmIGV2ZW50KQogewogICAgIGRhdGFMb2dGKCJzZXEjJXU6Iiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHNpemUoKSkpOwogICAgIGV2ZW50LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICBk
YXRhTG9nRigiICIpOworICAgIGRhdGFMb2dMbigiICIpOwogfQogCiBuYW1lc3BhY2UgewpAQCAt
MTE5LDEwICsxMTksMTIgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWlu
aWZpZWRHcmFwaCYgZ3JhcGgsCiAgICAgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMsIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4qIHVu
ZGVmaW5lZE9wZXJhbmRTcGFucykgY29uc3QKIHsKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFz
ZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CisgICAgdW5zaWdu
ZWQgbnVtVG1wczsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGludmFsaWRJbmRleCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICB1bnNpZ25lZCBmaXJz
dFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICBib29sIGZpcnN0VW5kZWZpbmVkSXNBcmd1
bWVudCA9IGZhbHNlOwpAQCAtMTMwLDM3ICsxMzIsNDIgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgYXV0byBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFu
ID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZh
bGlkSW5kZXgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9
IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChmaXJzdFVuZGVmaW5lZCku
b2Zmc2V0KCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1
YWxSZWdpc3RlckZvckluZGV4KGkgLSAxKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IGZpcnN0T2Zm
c2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChmaXJzdFVuZGVmaW5lZCkudmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CisgICAgICAgIGludCBsYXN0T2Zmc2V0ID0gdmFsdWVS
ZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpIC0gMSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCk7CiAgICAgICAgIGludCBtaW5PZmZzZXQgPSBzdGQ6Om1pbihmaXJzdE9mZnNldCwgbGFzdE9m
ZnNldCk7CiAgICAgICAgIHVuZGVmaW5lZE9wZXJhbmRTcGFucy0+YXBwZW5kKHsgZmlyc3RVbmRl
ZmluZWQsIG1pbk9mZnNldCwgaSAtIGZpcnN0VW5kZWZpbmVkIH0pOwogICAgICAgICBmaXJzdFVu
ZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICB9OwogICAgIGF1dG8gcmVjb3JkVW5kZWZpbmVk
T3BlcmFuZCA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICAvLyBXZSB3YW50IHRvIHNlcGFy
YXRlIHRoZSBzcGFuIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSBzcGFuIG9mIGxvY2FscyBldmVuIGlm
IHRoZXkgaGF2ZSBhZGphY2VudCBvcGVyYW5kcyBpbmRleGVzLgotICAgICAgICBpZiAoZmlyc3RV
bmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2
YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKSkKKyAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVk
ICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNv
dmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICBmbHVz
aFVuZGVmaW5lZE9wZXJhbmRTcGFuKGkpOwogCiAgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9
PSBpbnZhbGlkSW5kZXgpIHsKICAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaTsKLSAgICAg
ICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3Vt
ZW50KGkpOworICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNv
dmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCk7CiAgICAgICAgIH0KICAgICB9
OwogCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBudW1WYXJpYWJsZXMgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpLT5udW1D
YWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0KS50b0xvY2FsKCkgKyAxOwotICAgIGVsc2UKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxp
bmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgbnVtVmFyaWFibGVzID0gY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOworICAgICAgICBudW1UbXBzID0gY29kZUJs
b2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKKyAgICB9IGVsc2Ug
ewogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCk7CisgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOwor
ICAgIH0KICAgICAKICAgICAvLyBDcmF6eSBzcGVjaWFsIGNhc2U6IGlmIHdlJ3JlIGF0IGluZGV4
ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1lbnQgY2hlY2sKICAgICAvLyBmYWlsdXJl
LCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJlIGFscmVhZHkgc2V0IHVwLiBUaGUgcmVj
b3ZlcmllcyBzaG91bGQKICAgICAvLyByZWZsZWN0IHRoaXMuCiAgICAgaWYgKCFpbmRleCkgewot
ICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICAgICAgLy8gV2UgZG9uJ3Qg
aW5jbHVkZSB0bXBzIGhlcmUgYmVjYXVzZSB0aGV5IGNhbid0IGJlIHVzZWQgeWV0LgorICAgICAg
ICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIHZhbHVl
UmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRl
eChpKSksIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzLm9w
ZXJhbmRGb3JJbmRleChpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdEpTKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gbnVtVmFyaWFibGVzOwogICAgIH0KQEAgLTE3MSwxMiArMTc4
LDEzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAg
ICBzdGFydEluZGV4LS07CiAgICAgCiAgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9m
IHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJhbmRzPFZh
bHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVt
VmFyaWFibGVzKTsKKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBvcGVy
YW5kU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxN
aW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGluZGV4OyArK2kpIHsKICAgICAgICAg
Y29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlByb2Nlc3NpbmcgZXZlbnQgIiwgZXZlbnQpOwogICAgICAgICBzd2l0Y2ggKGV2
ZW50LmtpbmQoKSkgewogICAgICAgICBjYXNlIFJlc2V0OgogICAgICAgICAgICAgLy8gbm90aGlu
ZyB0byBkby4KQEAgLTE5OCwyMSArMjA2LDIzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3Bl
cmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRT
b3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZShl
dmVudC5pZCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChl
dmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJh
bmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgotICAgICAgICAgICAgaWYgKG9w
ZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAg
ICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0
ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCks
IGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhh
c09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNl
cy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQo
ZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKKyAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCBzb3VyY2VzOiAiLCBvcGVyYW5kU291cmNl
cyk7CiAgICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCi0gICAg
dmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFu
ZHM8VmFsdWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKICAgICAgICAgaWYg
KHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTIzMCw2ICsyNDAsNyBAQCB1
bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgTWluaWZp
ZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlkKCkpOwogICAgICAgICBNaW5pZmllZEdl
bmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5mb3MuZ2V0KHNvdXJjZS5pZCgpKTsKICAg
ICAgICAgaWYgKCFpbmZvLmFsaXZlKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGRl
YWQuIik7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpj
b25zdGFudChqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0
cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgICAgICAgICAgcmVjb3JkVW5kZWZpbmVk
T3BlcmFuZChpKTsKQEAgLTIzNyw2ICsyNDgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0cnlUb1NldENvbnN0
YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBub2RlKSkgeworICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJ
bmRleChpKSwgIiBpcyBjb25zdGFudC4iKTsKICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBSZWNv
bnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpIHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aGFzQ29uc3RhbnQoKSAmJiBub2RlLT5jb25zdGFudCgpID09IGpzVW5kZWZpbmVkKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQoaSk7CkBAIC0yNjYsNyArMjc4
LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9Ci0gICAgICAgICAgICBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihpbmZvLnUudmlydHVhbFJlZyksIGluZm8uZm9ybWF0KTsKKyAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhpbmZvLnUub3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSwgaW5mby5mb3JtYXQpOwogICAgIH0KICAgICBpZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rp
b25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKG9w
ZXJhbmRTb3VyY2VzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudFN0cmVhbS5oCmluZGV4IDAxNTczMDA3ZWRkZGQ3MGYzMWQxN2FjMGQ5
OWY3OGViZjVlYTZlYmMuLmU5ZTQzYWJmZWM0ODVmZWM3ZTY2MzE1MWMxYzIyZWM1MTg5NzQxM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5oCkBAIC00Miw5ICs0MiwxMiBAQCBzdHJ1Y3QgVW5kZWZpbmVkT3BlcmFuZFNwYW4gewog
fTsKIAogY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6IHB1YmxpYyBWZWN0b3I8VmFyaWFibGVF
dmVudD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJs
aWM6CiAgICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiAg
ICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsK
ICAgICAgICAgYXBwZW5kKGV2ZW50KTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggNzgxYjcxZTY5MjQzODI4NjQ4OTdl
ZmY3ZjlkZTY4ZTRlZTRlYmYxZC4uMzJjYmMxMDc2ZGU1OWRhYTRhNzI3ZGFjN2Q3NWZiZGNhNjA3
ZGU3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cApAQCAtMTkxLDYgKzE5MSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShO
b2RlKiBub2RlKQogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0Rm9y
d2FyZFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFy
Z3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBCcmFuY2g6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKaW5kZXgg
MzA4MGRjMzQ1MDljNzMzMzI0YjgxNDNkMmE5NTRmMDhlZGFmMTNmYi4uYzAwNGZhY2NjMWFkMDVk
MzZjZWRiZWRmOTY3ODJhYWI3ZGNiOTgzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9T
UkVudHJ5SklUQ29kZSgpCi0gICAgOiBtX2J5dGVjb2RlSW5kZXgoVUlOVF9NQVgpCi0gICAgLCBt
X2VudHJ5RmFpbHVyZUNvdW50KDApCisgICAgOiBtX2VudHJ5RmFpbHVyZUNvdW50KDApCiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRl
eCA5NDU2NTc3NTVhMGVjYjc4MWNmYjg5YjExYzM5Zjk4ZjdhOWFiYTNkLi40NWU4MWJjZGRhMjg4
MTczZmUxOTllODRjNjdiOWY4OGM4MDI2ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmNsZWFyU3RhY2tGcmFtZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6
cmVnVDAsIGNvZGUuZnJhbWVTaXplKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0
U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRj
aEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgQ29kZUJsb2NrIHRvIGhhdmUgYSB3
ZWFrIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UKICAgICAgICAgLy8gdGhhdCB3b3VsZCBjYXVz
ZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9v
dXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgICAgICBtX291dC5zdG9yZVB0
cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSks
IGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsK
IAogICAgICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVjay4KICAgICAgICAgdW5zaWduZWQgZXhp
dEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpICogc2l6
ZW9mKFJlZ2lzdGVyKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAg
IC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFy
KCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7CisgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwpAQCAtMTI4MSw2ICsxMjgxLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBDYWxsRXZhbDoKICAgICAgICAgICAgIGNvbXBpbGVDYWxsRXZhbCgpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAg
ICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xOTUzLDcgKzE5NTYsNyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVl
Kj4oCiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVu
dHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9h
ZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9j
YWwoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUo
YnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS50b0xv
Y2FsKCkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoKQpA
QCAtMTk3Miw3ICsxOTc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVHZXRTdGFjaygp
CiAgICAgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFu
ZChkYXRhLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9ybWF0KSwgZGF0YS0+Zm9ybWF0KTsKICAg
ICAgICAgCkBAIC03OTI2LDEzICs3OTI5LDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0Q2FsbGVlKCkKICAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlU2V0Q2FsbGVlKCkKICAgICB7
CiAgICAgICAgIGF1dG8gY2FsbGVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxvYWRGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtNzk0Nyw3ICs3OTUwLDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkKICAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25v
ZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdElu
dDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBheWxvYWRGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKCkKQEAgLTk1NDIsNTEgKzk1NDUsNTEgQEAgcHJp
dmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgo
KQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgTFZh
bHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVu
dHNDaGlsZCgpKTsKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAogICAgICAgICAg
ICAgSW50MzIsIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dCksIGpzQXJndW1lbnRzLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZz
ZXQpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0
IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlz
IHNhZmUKLSAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3Jp
dHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgICAg
IC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBj
YW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgICAgICAvLyBwYXN0
IHRoZSBzaXppbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDE0NDgKLSAgICAgICAgCisKICAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGlu
Z1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CiAKLSAgICAgICAgc3Bl
Y3VsYXRlKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
Ci0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGgsIGxlbmd0aEluY2x1ZGluZ1RoaXMpKTsK
KyAgICAgICAgc2V0SW50MzIobGVuZ3RoSW5jbHVkaW5nVGhpcyk7CisgICAgfQogCisgICAgdm9p
ZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJn
c0RhdGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUt
PmFyZ3VtZW50c0NoaWxkKCkpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKICAgICAgICAgc3BlY3VsYXRl
KAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAg
ICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMy
KGRhdGEtPmxpbWl0KSkpOwotICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJpdE9yKG1fb3V0
LmlzWmVybzMyKGxlbmd0aEluY2x1ZGluZ1RoaXMpLCBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRp
bmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpKTsgCisKICAgICAgICAgbV9v
dXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVD
b3VudCkpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMg
cmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVy
IGluc3RlYWQKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVyIHNp
bGx5LiBJZiBvcGVyYXRpb25Mb2FkVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3RlYWQK
ICAgICAgICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxkbid0IGhhdmUgdG8gZG8g
dGhpcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MTY2MAogICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9vdXQubFNocigKLSAgICAg
ICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSku
dmFsdWUoKSwgbV9jYWxsRnJhbWUpLAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3Io
ZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCiAgICAgICAgICAgICBt
X291dC5jb25zdEludFB0cigzKSk7CiAgICAgICAgIAogICAgICAgICB2bUNhbGwoCiAgICAgICAg
ICAgICBWb2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwKICAgICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1l
bnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBsZW5ndGgs
IG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgICAgICAgICAg
bGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5p
bXVtKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKICAg
ICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBh
cmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+
YXJndW1lbnRzQ2hpbGQoKSkgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2Rl
LT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHMtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhh
bnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7
CiAgICAgICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1OTUsNTAgKzk1OTgsMjcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgp
OwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUt
PmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlm
IChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUg
PSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgTFZhbHVlIGxl
bmd0aCA9IG51bGxwdHI7IAotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG51
bGxwdHI7Ci0gICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1
bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0
aC5pc0tub3duKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFyZ3VtZW50
c0xlbmd0aC5rbm93bjsKLSAgICAgICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBkYXRhLT5vZmZz
ZXQpCi0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIGRhdGEtPm9m
ZnNldDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IDA7
Ci0gICAgICAgICAgICBsZW5ndGggPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoKTsKLSAg
ICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKGtub3duTGVu
Z3RoICsgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBl
cmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUsIGJ1dCB0
aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KLSAgICAgICAgICAgIGlmICghZGF0YS0+b2Zmc2V0
KQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9v
dXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21h
bGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigw
KSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2Vy
LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxl
bmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVl
LCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKLSAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC5w
aGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmFkZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOwotICAgICAgICB9Ci0KKyAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5vZmZzZXQ7CisgICAgICAg
IExWYWx1ZSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzOyAKKyAgICAgICAgaWYg
KG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CisgICAgICAgICAgICBMVmFsdWUgZml4ZWRMZW5n
dGggPSBtX291dC5zdWIoY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQz
MihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IG1fb3V0LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgs
IG1fb3V0LmludDMyWmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFBy
ZWRpY3RhYmlsaXR5OjpQcmVkaWN0YWJsZSk7CisgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAg
IGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzOworCisgICAg
ICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQu
aW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZs
b3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aElu
Y2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAgIAog
ICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0
YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0
ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFj
aGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05Njk3LDY1ICs5Njc3LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBh
cyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAgICAg
ICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3Vt
ZW50c0xlbmd0aC52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVDMyX01JTikpOwog
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TFZhbHVlIGZpeGVkTGVuZ3RoID0gbV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCi0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmNvbnN0SW50MzIoMCkpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291
dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikp
OwotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2Vy
LCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpKTsKLSAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVh
bExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgsIG1fb3V0LmludDMy
WmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFByZWRpY3RhYmlsaXR5
OjpQcmVkaWN0YWJsZSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NX
aXRoU3ByZWFkKCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZh
bHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxh
YmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKLQot
ICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZTdGF0aWNBcmd1bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJl
YWRMZW5ndGhzOwotCi0gICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSByZWN1cnNh
YmxlTGFtYmRhKFsmXShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAgICAgICAgICAgICAg
ICBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVj
dG9yID0gdGFyZ2V0LT5iaXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZihtX2dyYXBoLnZhckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3Vt
ZW50czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJh
eUJ1ZmZlcikgewotICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRzICs9IHRh
cmdldC0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VS
VCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgc3By
ZWFkTGVuZ3Rocy5hcHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZy
YW1lLCBbJl0gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJlYWRMZW5n
dGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApOwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgY29sbGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAgICAgICAgTFZhbHVl
IGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRp
Y0FyZ3VtZW50cyk7Ci0gICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMp
Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRlKApAQCAt
OTc2Niw3ICs5NzAxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQg
PSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAgICBhdXRv
IGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVkU3ByZWFkTGVu
Z3RocywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3Jl
SW5kZXgpIC0+IExWYWx1ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2Fi
bGVMYW1iZGEoW3RoaXMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExW
YWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdldC0+b3Ao
KSA9PSBQaGFudG9tU3ByZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRhcmdldC0+
Y2hpbGQxKCkubm9kZSgpLCBzdG9yZUluZGV4KTsKIApAQCAtOTc5OCw4ICs5NzMzLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCk7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAg
ICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVD
YWxsRnJhbWUsIHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAgICAgICAg
ICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5n
dGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAg
ICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVD
YWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgIExWYWx1ZSBz
cHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCiAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjI1
NCw4ICsxMjE5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUs
IHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAgICAgIG1f
b3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBhY2tldCwgbV9oZWFw
cy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
UHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcGFj
a2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoMCkpKSwg
cGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKKyAgICAg
ICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2Vu
X1BhY2tldF9jYWxsZWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFja2V0LCBt
X2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBAIC0xMjMx
Niw3ICsxMjI1Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5ndGg7
CiAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkgewotICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICBsZW5ndGgua25vd24g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSB0cnVlOwogICAg
ICAgICAgICAgbGVuZ3RoLnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5ndGgua25vd24pOwog
ICAgICAgICB9IGVsc2UgewpAQCAtMTIzNDYsNyArMTIyODIsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJhbWUtPmNhbGxlZVJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gd2Vha1BvaW50
ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAgICAgCiAgICAgTFZh
bHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1
bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MTEsNyArMTc1NDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRlLmppdENvZGUtPmNv
bW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAgICBtX291dC5zdG9yZTMyKAog
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAg
ICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAg
ICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkp
OwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgmdm0oKS50
b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTksNyArMTc2NTUsOCBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFs
bG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsCiAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpLAorICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZUbXBzKCkpOwogICAg
IH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODI0LDE1ICsxNzc2MSwxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+
bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0
TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9wbGFuLm1vZGUoKSAhPSBG
VExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHku
aXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBv
cGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiLCBhdmFpbGFiaWxpdHkgPSAi
LCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUlu
Qnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3Qg
YXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxhYmlsaXR5ID0gIiwgYXZh
aWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWls
YWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgIGlmIChl
eGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCkBAIC0xODEzMiwzOSArMTgw
NjksMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmFscmVhZHlSZWdpc3RlcmVk
V2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsKICAgICB9CiAgICAgCi0gICAg
VHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kLCBwdHJkaWZm
X3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwg
T3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmRdLCBvZmZz
ZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxl
c1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwgb2Zmc2V0KTsKICAgICB9Ci0g
ICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAg
IFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAg
ICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBQYXlsb2FkT2Zm
c2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFzZSwgaW50IG9w
ZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgVGFn
T2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKE9wZXJh
bmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIG9mZnNldCk7CiAgICAg
fQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBw
dHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwo
KSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQub2Zm
c2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FsbEZyYW1lLCBv
cGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
bV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
bV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBw
YXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJh
bmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKGludCBv
cGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAg
ICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBU
eXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggOTMzMTc3MTBmNmQwNjg2
MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5ODM0MDc2YThkNmY5MTc0MmNj
YjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
bnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAK
QEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgICAgICBkYXRhTG9n
KCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOwogICAgIAogICAgIGZvciAo
aW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNhblVuc2FmZUpTVmFsdWUoKTsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOwogICAgICAgICBP
cHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2YWx1ZXMuYXJndW1lbnQoYXJn
dW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1ZSAmJiB2YWx1ZU9uU3RhY2sg
PT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1bWVudCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKaW5kZXgg
MDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThlMy4uMDRjODU3OTllNGQ0Njky
M2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIAog
T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAogICAgIERhdGFGb3JtYXQgcHJv
ZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxl
LAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fs
cykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJvZmlsZURhdGFGb3JtYXQocHJv
ZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCi0gICAg
LCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCisgICAgLCBtX3Zh
bHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMsIG51bWJlck9mVG1wcykKIHsK
IH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRh
Zz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0CiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRhODdjY2YzMjczZmU0YmUzNjA2
ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2YWVjZTA5N2FkOGE0ZDFlMjdi
ODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCkBAIC02OSw3ICs2
OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsK
ICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZv
cm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKTsKKyAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzLCB1bnNpZ25lZCBu
dW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBleGl0IGNh
bGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgogICAgIC8vIElmIHRoYXQncyB0
aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3ZSdsbCBoYXZlIGEK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApp
bmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgxNzZlZTcyLi5hMzc4NDEwZGE5
YjgwMTU3MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCIKICNp
bmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEgQEAKICNpbmNsdWRlICJGVExP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExTYXZlUmVz
dG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJP
cGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUHJv
YmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDc0
LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZCBl
eGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAogICAgIHNpemVfdCBiYXNl
bGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5j
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAorICAgIGlmIChleGl0Lm1fY29k
ZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CisgICAgICAg
IGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVz
LnRtcEluZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGppdC5wcm9i
ZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNp
ZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6
ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRl
Y29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAgICAgICAgICBzaWRlU3Rh
dGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworCisgICAgICAgICAgICAg
ICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0
YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBj
b2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0Lmdw
cjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBm
b3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9y
aWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVD
YWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29k
ZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
YXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Cisg
ICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4o
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0
dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwg
aW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJ
bmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRT
aWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAg
fQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBw
bGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFscmVh
ZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy52aXJ0
dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4
aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisgICAg
ICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50Pihi
YXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisgICAgICAgIGlmIChvcGVy
YW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFz
ZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAg
ICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCA3ZjdjZDM4MzI0OTYx
YThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFiZDllYjNiNDcxMzM3NDRmODQz
ZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9u
cy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KgogICAgICAg
ICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29t
cGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJv
bQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0s
IGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuc2V0
KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVkYjNhZDljZTVlOWNm
Li5kNTdmYjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2NTUsMzcgQEAgTFZhbHVl
IE91dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwg
aW50NjRaZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZh
bHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVl
IHZhbHVlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQcmVkaWN0YWJpbGl0eSBw
cmVkaWN0YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAgICAgICAg
aWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFrZW47CisgICAgICAg
ICAgICByZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vdFRh
a2VuOworICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFs
dWUsIHRha2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFiaWxpdHkgPT0gU2VsZWN0
UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUs
IGxlZnQsIHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG5ld0Jsb2Nr
KCk7CisgICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworICAgIExC
YXNpY0Jsb2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisKKyAgICBtX2Jsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2lu
KCksIHZhbHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRha2VuQmxvY2ssIHByZWRp
Y3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExpa2VseSA/IEZyZXF1ZW5j
eUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZyZXF1ZW50
ZWRCbG9jayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3Rh
YmlsaXR5OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNs
YXNzOjpSYXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwgb3JpZ2luKCkpOworCisg
ICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2soY29u
dGludWF0aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxv
blZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAgICByaWdodFRha2VuQmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6
OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1fYmxvY2sgPSBjb250aW51
YXRpb247CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNoZ0Fk
ZChMVmFsdWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRlZjdlMDYwZjkzNjJiM2Jk
Y2EwZmQ0NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2MjdkNWZmMzFjNzgxMGQ4
ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKKyNpbmNs
dWRlICJGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAj
aW5jbHVkZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgpA
QCAtMzY1LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFs
dWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNr
KSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFz
aykgeyByZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZhbHVl
IHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKTsKKyAg
ICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFr
ZW4sIFNlbGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRp
Y3RhYmxlKTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5IGRlZmF1
bHQuIFVzZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2VzcygpIHdp
dGggYQogICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVuY2VkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJp
bGl0eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmExODUzYmE5ODUyMmFhYWM2MWI4NDk5NTUyNzk0YTUwOTMwYzdkNmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNlbGVjdFByZWRpY3RhYmls
aXR5IDogdWludDhfdCB7CisgICAgTm90UHJlZGljdGFibGUsCisgICAgUHJlZGljdGFibGUsCisg
ICAgTGVmdExpa2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IDY5MzRjM2YwZDM3OTFmNjRiYTQyOTYzZTA1
NTYzZGJiYzdkZGE1YTQuLmM3MjZhZDI3YzgxNWFjNjdhNjcwZDI1ODA0YWE4Y2FlMjJiM2EwZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaApAQCAtMTAw
LDcgKzEwMCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlmIChjYWxsU2l0
ZUluZGV4KSB7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKSk7CiAgICAgfQogICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKHZtLCB1c2Vk
UmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJn
dW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNr
cG9pbnRzLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YTVmNTI3N2RkNjMxYWNkNGNjYmVjZDE0YjI0Y2M1ZDRh
MzlhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0NoZWNrcG9pbnRzLnJiCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2NsYXNzIENoZWNrcG9pbnQKKyAgICBhdHRyX3JlYWRlciA6dXNlcwor
ICAgIGF0dHJfcmVhZGVyIDpkZWZzCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX3Jl
YWRlciA6aW5kZXgKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIGluZGV4LCB0bXBzKQorICAg
ICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGluZGV4ID0gaW5kZXgKKyAgICAgICAgQHVzZXMg
PSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0gOnVzZSB9CisgICAgICAg
IEBkZWZzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDpkZWZpbmUg
fQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzKG5hbWVzcGFjZSkKKyAgICAgICAgRU9GPC0t
CisgICAgY2FzZSAje25hbWVzcGFjZX06OiN7bmFtZX06CitFT0YKKyAgICBlbmQKK2VuZAorCitj
bGFzcyBDaGVja3BvaW50cworICAgIGRlZiBpbml0aWFsaXplKG9wY29kZSwgdG1wcywgY2hlY2tw
b2ludHMpCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQHRtcHMgPSB0bXBzCisg
ICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcF93aXRoX2luZGV4IHsgfChuYW1l
LCB0bXBzKSwgaW5kZXh8IENoZWNrcG9pbnQubmV3KG5hbWUsIGluZGV4LCB0bXBzKSB9CisgICAg
ZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MKKyAgICAgICAgQGNoZWNrcG9pbnRzLmVhY2ggZG8gfGNo
ZWNrcG9pbnR8CisKKyAgICAgICAgZW5kCisgICAgICAgIEVPRjwtLQorQml0TWFwPG1heE51bVRt
cHM+IHRtcExpdmVuZXNzRm9yI3tAb3Bjb2RlLmNhcGl0YWxpemVkX25hbWV9KHVpbnQ4X3QgY2hl
Y2twb2ludCkKK3sKKyAgICBzd2l0Y2ggKGNoZWNrcG9pbnQpIHsKKworICAgIH0KK30KK0VPRgor
ICAgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L09wY29kZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCmlu
ZGV4IGRhYjg2ODZjYTMzYTEwMmM5YmZhMWRmMTgwM2ViYjRmMGFiMjQ0ODUuLmNmZDlkZjE1MTE0
N2E4NmRhNGJjNzViZTQ2YTY3ODI1ZTI1Mzc1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvT3Bjb2RlLnJiCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIE9wY29kZQogICAgIGF0
dHJfcmVhZGVyIDphcmdzCiAgICAgYXR0cl9yZWFkZXIgOm1ldGFkYXRhCiAgICAgYXR0cl9yZWFk
ZXIgOmV4dHJhcworICAgIGF0dHJfcmVhZGVyIDpjaGVja3BvaW50cwogCiAgICAgbW9kdWxlIFNp
emUKICAgICAgICAgTmFycm93ID0gIk9wY29kZVNpemU6Ok5hcnJvdyIKQEAgLTQ1LDEyICs0Niwx
NCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgdGlkCiAgICAgZW5kCiAKLSAgICBkZWYgaW5pdGlh
bGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0
aWFsaXplcnMpCisgICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdz
LCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0bXBzLCBjaGVja3BvaW50cykKICAg
ICAgICAgQHNlY3Rpb24gPSBzZWN0aW9uCiAgICAgICAgIEBuYW1lID0gbmFtZQogICAgICAgICBA
ZXh0cmFzID0gZXh0cmFzIHx8IHt9CiAgICAgICAgIEBtZXRhZGF0YSA9IE1ldGFkYXRhLm5ldyBt
ZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzCiAgICAgICAgIEBhcmdzID0gYXJncy5tYXAu
d2l0aF9pbmRleCB7IHwoYXJnX25hbWUsIHR5cGUpLCBpbmRleHwgQXJndW1lbnQubmV3IGFyZ19u
YW1lLCB0eXBlLCBpbmRleCArIDEgfSB1bmxlc3MgYXJncy5uaWw/CisgICAgICAgIEB0bXBzID0g
dG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXAgeyB8KGNoZWNrcG9p
bnQsIF8pfCBjaGVja3BvaW50IH0gdW5sZXNzIGNoZWNrcG9pbnRzLm5pbD8KICAgICBlbmQKIAog
ICAgIGRlZiBjcmVhdGVfaWQhCkBAIC0xMTgsNiArMTIxLDggQEAgY2xhc3MgT3Bjb2RlCiAgICAg
ICAgIDw8LUVPRgogc3RydWN0ICN7Y2FwaXRhbGl6ZWRfbmFtZX0gOiBwdWJsaWMgSW5zdHJ1Y3Rp
b24gewogICAgICN7b3Bjb2RlSUR9CisgICAgI3t0ZW1wc30KKyAgICAje2NoZWNrcG9pbnRWYWx1
ZXN9CiAKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQpAQCAtMTMyLDYgKzEzNywxOCBAQCBFT0YKICAg
ICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJRFR5cGV9IG9wY29kZUlEID0gI3tuYW1l
fTsiCiAgICAgZW5kCiAKKyAgICBkZWYgY2hlY2twb2ludFZhbHVlcworICAgICAgICByZXR1cm4g
aWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAgICBbImVudW0gQ2hlY2twb2ludHMgOiB1aW50
OF90IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8Y2hlY2twb2ludHwgIiAgICAgICAgI3tj
aGVja3BvaW50fSwiIH0pLmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZDaGVja3BvaW50cywiLCAi
ICAgIH07Il0pLmpvaW4oIlxuIikKKyAgICBlbmQKKworICAgIGRlZiB0ZW1wcworICAgICAgICBy
ZXR1cm4gaWYgQHRtcHMubmlsPworCisgICAgICAgIFsiZW51bSBUbXBzIDogdWludDhfdCB7Il0u
Y29uY2F0KEB0bXBzLm1hcCB7fCh0bXAsIHR5cGUpfCAiICAgICAgICAje3RtcH0sIn0pLnB1c2go
IiAgICB9OyIpLmpvaW4oIlxuIikKKyAgICBlbmQKKwogICAgIGRlZiBlbWl0dGVyCiAgICAgICAg
IG9wX3dpZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYsIG9wY29kZUlEVHlwZSwgMCkKICAgICAg
ICAgb3Bfd2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUzMiwgb3Bjb2RlSURUeXBlLCAwKQpAQCAt
MjAwLDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bjb2RlU2l6ZSBfX3NpemUs
IGJvb2wgcmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRlY29kZUdlbmVyYXRvcj4KICAgICBzdGF0
aWMgYm9vbCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRvciogZ2VuI3t0eXBlZF9hcmdzfSN7bWV0
YWRhdGFfcGFyYW19KQogICAgIHsKKyAgICAgICAgI3shQGNoZWNrcG9pbnRzLm5pbD8gPyAiZ2Vu
LT5zZXRVc2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAgICAgICAgIGlmIChfX3NpemUgPT0gT3Bj
b2RlU2l6ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2VuLT5hbGlnbldpZGVPcGNvZGUxNigpOwog
ICAgICAgICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTMyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4IDIwNGFjNzU5ZTEzZWZmMTUx
ZjhjZDE3N2YzYmYxYjcwZTA3NzljYWEuLjY2ODU1YmE2NTAwODBlNGMyM2NjMGViZWMxMGU3OTQ5
Y2RlNzY4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2Vj
dGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIK
QEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgogICBlbmQKIAogICBkZWYgY3JlYXRlX29w
Y29kZShuYW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNvbmZpZ1s6
ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6bWV0YWRh
dGFfaW5pdGlhbGl6ZXJzXSkKKyAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmlnWzpl
eHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRhZGF0
YV9pbml0aWFsaXplcnNdLCBjb25maWdbOnRtcHNdLCBjb25maWdbOmNoZWNrcG9pbnRzXSkKICAg
ZW5kCiAKICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFtZSwgb3Bjb2RlcywgY29uZmlnKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRleCBm
NjM5NGFjNzEwNzEyNWI3Y2FiMjFhZDJiOTExM2MwNzk1MzZhNjAwLi5lZjdmNmM5NGY0MTY4YjRh
Mjg0NjA1M2E1ZDAxM2JlMTEyMjBkZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIENhbGxGcmFt
ZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihDYWxsRnJhbWUqIGdsb2JhbEV4
ZWMsIEpTQ2FsbAogICAgIEFTU0VSVChnbG9iYWxFeGVjLT5pc0RlcHJlY2F0ZWRDYWxsRnJhbWVG
b3JEZWJ1Z2dlcigpKTsKIH0KIAotYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVj
b2RlT2Zmc2V0KCkgY29uc3QKK2Jvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29k
ZUluZGV4KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAo
Y29kZUJsb2NrKCktPmppdFR5cGUoKSkgewpAQCAtOTAsMTIgKzkwLDEyIEBAIGJvb2wgQ2FsbEZy
YW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogCiB1bnNpZ25lZCBD
YWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50YWcoKTsKIH0KIAog
U1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlQXNSYXdCaXRz
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
XS51bnNhZmVUYWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS51bnNhZmVUYWcoKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBD
YWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdApAQCAtMTA1LDcgKzEwNSw3IEBAIENhbGxT
aXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIAogU1VQUFJFU1NfQVNB
TiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFz
UmF3Qml0cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNh
ZmVDYWxsU2l0ZUFzUmF3Qml0cygpICYgKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSA+PiBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQpKSk7CiB9CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQpAQCAtMTE3LDMzICsxMTcsMzQgQEAgY29uc3QgSW5zdHJ1Y3Rpb24qIENh
bGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQ
Qyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUo
Qnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZwYykpKTsKLSAgICB0aGlzW0Nh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gY2FsbFNpdGUuYml0cygpOworICAg
IHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFn
KCkgPSBjYWxsU2l0ZS5iaXRzKCk7CiB9CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsK
LSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJU
KGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgcmV0dXJuIGNvZGVCbG9jaygp
LT5ieXRlY29kZU9mZnNldChjdXJyZW50VlBDKCkpOyAgICAgCiB9CiAKICNlbHNlIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCiBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7Cisg
ICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgcmV0dXJuIGNv
ZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkpLnB0cigpOwogfQogCiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhjb25zdCBJbnN0
cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUoY29kZUJsb2NrKCkt
PmJ5dGVjb2RlSW5kZXgodnBjKSk7Ci0gICAgdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50XS50YWcoKSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGNhbGxTaXRlLmJpdHMoKSk7CisgICAg
dGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50YWco
KSA9IGNhbGxTaXRlLmJpdHMoKTsKKyAgICBBU1NFUlQoY3VycmVudFZQQygpID09IHZwYyk7CiB9
CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRz
QXJlQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2Rl
SW5kZXgoKSk7CiAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiB9CiAKQEAgLTE2
NSw4ICsxNjYsOCBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICB9CiAjZW5kaWYK
LSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJu
IEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NF
UlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJ
bmRleCgpLmJ5dGVjb2RlSW5kZXgoKTsKIH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVP
cmlnaW4oKQpAQCAtMTgwLDcgKzE4MSw3IEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3Jp
Z2luKCkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAg
ICB9CiAjZW5kaWYKLSAgICByZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRl
Qml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRl
SW5kZXgoKS5ieXRlY29kZUluZGV4KCkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BP
ZkZyYW1lSW50ZXJuYWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCmluZGV4IGNmYjc3MTg1NjAzOTkzMzkxMDA0ZmMxMzIxMTgzODQyM2M1ZGM2YTku
LjY0NDkwZTdhNzA3ZWViMDFiYTA3YWNhMzMyNjIzYWRlMTNlMGM5NDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlZN
RW50cnlSZWNvcmQuaCIKKyNpbmNsdWRlIDx3dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMu
aD4KIAogbmFtZXNwYWNlIEpTQyAgewogCkBAIC00NiwxOCArNDcsMjQgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKICAgICAg
ICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi0g
ICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQotICAgICAgICB7IH0K
KyAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCisgICAgICAgIHsg
CisgICAgICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKKyAgICAg
ICAgfQogCi0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fYnl0ZWNvZGVJbmRleDsgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNp
dGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5t
X2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV9iaXRzOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxs
U2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9iaXRzID09IG90aGVyLm1fYml0czsg
fQogCi0gICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCk7IH0KKyAgICAgICAgdWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0czsgfQogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KGJpdHMoKSk7IH0KIAorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRzKQorICAgICAgICAg
ICAgOiBtX2JpdHMoYml0cykKKyAgICAgICAgeyB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAgQnl0
ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IG1fYml0cyB7IEJ5
dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSB9OwogICAgIH07CiAKICAgICBjbGFzcyBEaXNwb3NhYmxl
Q2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAgLTY1LDcgKzcyLDcgQEAg
bmFtZXNwYWNlIEpTQyAgewogICAgICAgICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCgpID0gZGVm
YXVsdDsKIAogICAgICAgICBleHBsaWNpdCBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCh1aW50MzJf
dCBiaXRzKQotICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZyb21C
aXRzKGJpdHMpKQorICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KGJpdHMpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCkBAIC03OCwyNCArODUsMjcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8v
IGFybTY0XzMyIGV4cGVjdHMgY2FsbGVyIGZyYW1lIGFuZCByZXR1cm4gcGMgdG8gdXNlIDggYnl0
ZXMgCiAgICAgc3RydWN0IENhbGxlckZyYW1lQW5kUEMgewogICAgICAgICBhbGlnbmFzKENQVVJl
Z2lzdGVyKSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lOwotICAgICAgICBhbGlnbmFzKENQVVJlZ2lz
dGVyKSBjb25zdCBJbnN0cnVjdGlvbiogcmV0dXJuUEM7CisgICAgICAgIGFsaWduYXMoQ1BVUmVn
aXN0ZXIpIHZvaWQqIHJldHVyblBDOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBzaXpl
SW5SZWdpc3RlcnMgPSAyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSAvIHNpemVvZihSZWdpc3Rlcik7
CiAgICAgfTsKICAgICBzdGF0aWNfYXNzZXJ0KENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycyA9PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpLCAiQ2Fs
bGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzIGlzIGluY29ycmVjdC4iKTsKIAotICAgIHN0
cnVjdCBDYWxsRnJhbWVTbG90IHsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY29kZUJs
b2NrID0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGludCBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxOwotICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBhcmd1bWVudENvdW50ID0gY2FsbGVlICsgMTsKLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRDb3VudCArIDE7Ci0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxOworICAg
IGVudW0gY2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7CisgICAgICAgIGNvZGVCbG9jayA9IENh
bGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKKyAgICAgICAgY2FsbGVlID0gY29kZUJs
b2NrICsgMSwKKyAgICAgICAgYXJndW1lbnRDb3VudCA9IGNhbGxlZSArIDEsCisgICAgICAgIHRo
aXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQgKyAxLAorICAgICAgICBmaXJzdEFyZ3VtZW50ID0g
dGhpc0FyZ3VtZW50ICsgMSwKICAgICB9OwogCisgICAgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNf
Rk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoQ2FsbEZyYW1lU2xvdCkKKyAgICBPVkVSTE9B
RF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhDYWxs
RnJhbWVTbG90KQorCiAgICAgLy8gUmVwcmVzZW50cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBzY3Jp
cHQgZXhlY3V0aW9uLgogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbW9z
dCBmdW5jdGlvbnMuCiAgICAgY2xhc3MgQ2FsbEZyYW1lIDogcHJpdmF0ZSBSZWdpc3RlciB7CiAg
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBoZWFkZXJTaXplSW5SZWdp
c3RlcnMgPSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgMTsKKyAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSArIDE7CiAKICAgICAgICAgLy8gVGhpcyBmdW5j
dGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2Vz
CiAgICAgICAgIC8vIHdoZW4geW91J3ZlIGd1YXJhbnRlZWQgdGhlIGNhbGxlZSBjYW4ndCBiZSBh
IFdhc20gY2FsbGVlLCBhbmQgY2FuCkBAIC0xMDYsMTAgKzExNiwxMCBAQCBuYW1lc3BhY2UgSlND
ICB7CiAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgY2VsbCwgYW5kIGlmIGl0J3Mgbm90LCB3
ZSB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgIGlubGluZSBKU1ZhbHVlIGd1YXJhbnRlZWRK
U1ZhbHVlQ2FsbGVlKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU09iamVjdCoganNDYWxsZWUo
KSBjb25zdDsKLSAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxs
ZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5wb2ludGVyKCkpOyB9Ci0gICAgICAg
IFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBD
YWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2FuVW5zYWZlUG9pbnRlcigp
KTsgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJp
dHModGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLnBvaW50ZXIo
KSk7IH0KKyAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxsZWVCaXRzIHVuc2FmZUNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSldLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrKCkgY29uc3Q7Ci0gICAgICAgIENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7IH0KKyAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29k
ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsg
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsgfQogICAgICAgICBp
bmxpbmUgU1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sqIHVuc2FmZUNvZGVCbG9jaygpIGNvbnN0Owog
ICAgICAgICBpbmxpbmUgSlNTY29wZSogc2NvcGUoaW50IHNjb3BlUmVnaXN0ZXJPZmZzZXQpIGNv
bnN0OwogCkBAIC0xNDYsNyArMTU2LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0
aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENh
bGxlckZyYW1lQW5kUEMsIHJldHVyblBDKTsgfQogICAgICAgICBBYnN0cmFjdFBDIGFic3RyYWN0
UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBDKHZtLCB0aGlzKTsgfQogCi0gICAg
ICAgIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdDsKKyAgICAgICAg
Ym9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3Q7CiAgICAgICAgIGJvb2wg
Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3Q7CiAKICAgICAgICAgdW5zaWdu
ZWQgY2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdDsKQEAgLTE4MiwxNSArMTkyLDEzIEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgc3RhdGljIHZvaWQgaW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVG
b3JEZWJ1Z2dlcihDYWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbGVlKiBnbG9iYWxDYWxsZWUp
OwogCiAgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBjb2RlZnJhbWUgKG9yIGNv
bnN0YW50IGZyb20gdGhlIENvZGVCbG9jaykuCi0gICAgICAgIFJlZ2lzdGVyJiByKGludCk7CiAg
ICAgICAgIFJlZ2lzdGVyJiByKFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIC8vIFJlYWQgYSBy
ZWdpc3RlciBmb3IgYSBub24tY29uc3RhbnQKLSAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIo
aW50KTsKKyAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIGtub3duIG5vbi1jb25zdGFu
dAogICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAg
ICAgIC8vIEFjY2VzcyB0byBhcmd1bWVudHMgYXMgcGFzc2VkLiAoQWZ0ZXIgY2FwdHVyZSwgYXJn
dW1lbnRzIG1heSBtb3ZlIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uLikKICAgICAgICAgc2l6ZV90
IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpIC0gMTsgfQotICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBj
b25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnBheWxvYWQo
KTsgfQorICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7
IHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCldLnBheWxvYWQoKTsgfQogICAgICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0KGludCBh
cmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKyBhcmd1bWVu
dCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoaW50
IGFyZ3VtZW50KSB7IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgYXJndW1l
bnQpOyB9CiAKQEAgLTIzOSw3ICsyNDcsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAKICAgICAgICAg
SlNWYWx1ZSBhcmd1bWVudEFmdGVyQ2FwdHVyZShzaXplX3QgYXJndW1lbnQpOwogCi0gICAgICAg
IHN0YXRpYyBpbnQgb2Zmc2V0Rm9yKHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykg
eyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgLSAxOyB9CisgICAgICAgIHN0YXRpYyBpbnQgb2Zmc2V0Rm9yKHNpemVfdCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykgeyByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICsgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAKICAgICAgICAgc3RhdGlj
IENhbGxGcmFtZSogbm9DYWxsZXIoKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgICAgIGJvb2wg
aXNEZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSBjb25zdApAQCAtMjUxLDEwICsyNTks
MTAgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBib29sIGlzU3RhY2tPdmVyZmxvd0ZyYW1l
KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNXYXNtRnJhbWUoKSBjb25zdDsKIAotICAgICAgICB2
b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2Fz
dDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnBheWxvYWQo
KSA9IGNvdW50OyB9CisgICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
aW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50
PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5bG9hZCgpID0gY291bnQ7IH0KICAg
ICAgICAgaW5saW5lIHZvaWQgc2V0Q2FsbGVlKEpTT2JqZWN0Kik7CiAgICAgICAgIGlubGluZSB2
b2lkIHNldENvZGVCbG9jayhDb2RlQmxvY2sqKTsKLSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2
b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IEluc3RydWN0aW9uKj4odmFsdWUpOyB9CisgICAgICAgIHZvaWQgc2V0UmV0dXJu
UEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gdmFsdWU7IH0K
IAogICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKaW5kZXgg
YTk3ZGVjYTUzYmNlMTc5Mjg5YjBjMzgwZDA0ZThmMmE4NjA0NzdkMS4uZWU3ZWMyYWIxMDRhN2Ez
NGQ5OGIwZjQzOGY2NDRjMmRjYTFjNTE2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCkBAIC0zMiw1MCArMzIsMzkgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBp
bmRleCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwot
ICAgIGlmIChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihpbmRleCkpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKLX0KLQogaW5saW5l
IFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1
cm4gcihyZWcub2Zmc2V0KCkpOwotfQotCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5j
aGVja2VkUihpbnQgaW5kZXgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOworICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0
ZXIqPigmdGhpcy0+Y29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIocmVnKSk7CisgICAgcmV0
dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6
OnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gdW5jaGVja2Vk
UihyZWcub2Zmc2V0KCkpOworICAgIEFTU0VSVCghcmVnLmlzQ29uc3RhbnQoKSk7CisgICAgcmV0
dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIEpTVmFsdWUgQ2FsbEZyYW1lOjpn
dWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5p
c1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVl
KCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpXS5qc1ZhbHVlKCk7CiB9CiAKIGlubGluZSBKU09iamVjdCogQ2FsbEZyYW1lOjpqc0NhbGxl
ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJu
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5vYmplY3QoKTsKKyAgICByZXR1cm4gdGhpc1tz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLm9iamVjdCgpOwogfQogCiBp
bmxpbmUgQ29kZUJsb2NrKiBDYWxsRnJhbWU6OmNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7
CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBTVVBQUkVTU19BU0FOIENv
ZGVCbG9jayogQ2FsbEZyYW1lOjp1bnNhZmVDb2RlQmxvY2soKSBjb25zdAogewotICAgIHJldHVy
biB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2Rl
QmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayldLlJlZ2lzdGVyOjphc2FuVW5zYWZlQ29kZUJsb2NrKCk7CiB9CiAKIGlubGlu
ZSBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjpsZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkg
Y29uc3QKQEAgLTEwMiwxMiArOTEsMTIgQEAgaW5saW5lIGJvb2wgQ2FsbEZyYW1lOjppc1dhc21G
cmFtZSgpIGNvbnN0CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q2FsbGVlKEpTT2JqZWN0
KiBjYWxsZWUpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVT
bG90OjpjYWxsZWVdID0gY2FsbGVlOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylb
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGNhbGxlZTsKIH0KIAog
aW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2tdID0gY29kZUJsb2NrOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXSA9IGNvZGVCbG9jazsKIH0K
IAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRTY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNl
dCwgSlNTY29wZSogc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQyMDljM2ExYmU0ZjU4ZGFlYTgwN2UzYmFmZWYwZDRiYTAyZmY0NmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRl
eC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgVCBnZXRUbXAoc2l6ZV90IG9mZnNldCkgCisgICAgeworICAg
ICAgICBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDY0X3QpKQorICAgICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPih0bXBzW29mZnNldF0pOworICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MzJfdCkpCisgICAgICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih0bXBzW29mZnNl
dF0pKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWlu
dDE2X3QpKQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1
aW50MTZfdD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDhfdD4odG1wc1tvZmZzZXRdKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7Cisg
ICAgdm9pZCogbmV4dEluc3RydWN0aW9uSnVtcFRhcmdldDsKKyAgICB1aW50NjRfdCB0bXBzW21h
eE51bUNoZWNrcG9pbnRUbXBzXTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGRhYTk0Yzg5ZjkwMDVhOTk3MmZj
MGUzYjAyZWI4OTNkMjExY2RkOTcuLmMxOWQ1MGQzNDVkNDlmZTRmZjcyZDU1MmMxZjQzOGExOTdl
NGJlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgogI2lu
Y2x1ZGUgIkNhbGxGcmFtZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCisjaW5j
bHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIK
QEAgLTEyMyw3ICsxMjQsNyBAQCBKU1ZhbHVlIGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxlckNhbGxT
aXRlSW5kZXggPSBjYWxsZXJGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOwogICAgIENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUq
IGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2VkUihjYWxsZXJDb2RlQmxv
Y2stPnNjb3BlUmVnaXN0ZXIoKS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNT
Y29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNv
ZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBVbmxpbmtl
ZENvZGVCbG9jayogY2FsbGVyVW5saW5rZWRDb2RlQmxvY2sgPSBjYWxsZXJDb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQgPSBj
YWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgY2FsbGVyVW5saW5r
ZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKTsKQEAgLTIxMyw2ICsyMTQsOSBA
QCB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdAogICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCAwKTsKICAgICAKKyAgICBpZiAobGVuZ3RoID4gbWF4QXJndW1lbnRzKQorICAgICAg
ICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKwogICAgIGlm
IChsZW5ndGggPj0gZmlyc3RWYXJBcmdPZmZzZXQpCiAgICAgICAgIGxlbmd0aCAtPSBmaXJzdFZh
ckFyZ09mZnNldDsKICAgICBlbHNlCkBAIC0yNDksNyArMjUzLDcgQEAgdW5zaWduZWQgc2l6ZUZy
YW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIGxvYWRWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVn
aXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNl
dCwgdWludDMyX3QgbGVuZ3RoKQordm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywg
dWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFh
cmd1bWVudHMuaXNDZWxsKCkpIHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MSwz
MSArMjY1LDMxIEBAIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpCiAgICAgc3dpdGNoIChjZWxsLT50
eXBlKCkpIHsKICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9B
cmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5
VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6CiAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNl
bGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+
KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEpTSW1tdXRhYmxlQnV0
dGVyZmx5VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNJ
bW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpz
Q2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFs
T2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVy
bjsgCiAgICAgZGVmYXVsdDogewogICAgICAgICBBU1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkp
OwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAg
ICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1l
bnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBsZW5ndGggJiYgb2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaSAr
IG9mZnNldCk7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0
ICsgaSkgPSBvYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGZpcnN0RWxlbWVudERlc3RbaV0gPSBvYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0
KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CiAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICAgICAgY2Fs
bEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHZhbHVlOworICAgICAgICAgICAgZmly
c3RFbGVtZW50RGVzdFtpXSA9IHZhbHVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICB9IH0KQEAgLTI5Nyw4ICszMDEsNyBAQCB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsRgogICAgIAog
ICAgIGxvYWRWYXJhcmdzKAogICAgICAgICBnbG9iYWxPYmplY3QsCi0gICAgICAgIGNhbGxGcmFt
ZSwKLSAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0
KDApLAorICAgICAgICBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoY2FsbGVl
RnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKSksCiAgICAgICAgIGFy
Z3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwogICAgIAogICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobGVuZ3RoICsgMSk7CkBAIC01MzgsOCArNTQxLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAog
ICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlv
bikgewotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgIGlmIChtX2NvZGVC
bG9jaykgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlv
biBoYW5kbGluZyBpbiBjaGVja3BvaW50cy4KKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAg
ICAgIGlmIChtX3JldHVyblBDID09ICZMTEludDo6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF9lbnRyeXBvaW50KQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT52bSgp
LmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1fY2FsbEZyYW1lKTsKKyNlbmRpZgorICAgICAg
ICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKICAgICAgICAgICAgICAgICBtX2hhbmRsZXIg
PSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAg
ICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCisgICAgICAgIG1fcmV0dXJuUEMgPSBtX2Nh
bGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2ICs2MDYsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwogICAgIEhh
bmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11dGFibGUgY29uc3Qgdm9pZCogbV9yZXR1cm5Q
QyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0
ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNl
cHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNh
bGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgIH0K
IAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlm
IChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkKKyAgICBpZiAoVU5MSUtFTFko
IXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykp
CiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUs
NyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5
U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRv
UmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJh
ZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApA
QCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVG
b3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zm
c2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0g
ICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxl
ciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NG
cmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0Nh
bGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJz
dFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxs
RnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRj
OGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUw
NjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0
b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNv
ZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAg
ICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFt
ZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5i
b3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0
ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1f
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5k
ZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQp
IHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5j
YWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbEZy
YW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIs
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZH
X0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4
IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1MmRlZjJkNzFiYzIuLmUwNmNiNDliMjk1ZGU1
ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2NDcsMjggQEAgcHVibGljOgogICAgIH0K
ICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50
cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikK
KyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBl
bnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNz
KGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAg
IH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVh
bFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAq
IHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVu
dHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcg
ZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJl
ZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihm
cm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAg
fQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBl
bnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmly
dHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwg
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8pCkBAIC02OTYsMTkgKzY5NiwxOSBAQCBw
dWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlci4gT24gc29tZSBwbGF0Zm9ybXMs
IHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgdGhlCiAgICAgLy8gImxpbmsg
cmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVybiBhZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBw
cm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkg
KiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFj
a1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UKLSAgICB2b2lkIGVtaXRQdXRQYXlsb2Fk
VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQor
ICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQ
UlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0
cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRh
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICB9CiAKLSAgICB2b2lk
IGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0
YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7
Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50
cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVT
dGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2Vu
ZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
dmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3Bl
cmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVz
cyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsK
KyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0
dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAg
c3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVz
cyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXls
b2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4
ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3Qo
aW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdp
c3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NFUlQoc2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVB
bmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNz
IHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbGVl
RnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7
CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRh
Z1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZp
cnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xv
dChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBj
YWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQp
OwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRy
ZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7
CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJlZ2lzdGVyKDApKS53aXRo
T2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lzdGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1
MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2Fs
bEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpOwogICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5NjkwZTA5YzhiNTcyNzBkZWY3Zjg3YTQ2Y2My
YjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1M2Y4ODgwYjk4MzdiNWM2NGQ0YzU2NDIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcApA
QCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlmCiAKICAgICBB
U1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJl
Z2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEu
YXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNT
dGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmluZGV4IDYyNDM5
YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUuLjRjNmFhMzJmNGY1ODc2MzgzMTA5
MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFs
dWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5l
dyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpz
VmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpAQCAtMTQxLDcg
KzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCiAgICAgewog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNo
ZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0
TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIEluUGFpcjoK
ICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
MjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEy
YTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0z
MzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwog
ICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAg
dm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3Rlciwg
RlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJW
YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lz
dGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJz
CiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBz
Y3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVk
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRv
IHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAt
NDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9i
amVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOwor
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
SlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5k
Q29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwg
aW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9h
ZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBl
bWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdp
c3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
KGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQg
aW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAg
dm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGlu
ZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFs
UmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2Vs
bCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2
b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7
CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
aW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50
aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBl
cywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3Ax
SXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxS
ZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2
b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBm
YWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25s
eSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1
NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZC
b3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdp
c3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3Rl
cklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRj
aGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAg
ICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50
aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lz
dGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24p
OwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3
OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAg
ICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCAr
Njg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9h
ZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQs
IEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lk
IGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsK
KyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQg
ZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNT
ZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50
IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEz
ICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAg
ICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0
dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBw
cmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZv
aWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVh
bFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0
ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5
ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwot
ICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRp
b24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNv
bnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0
aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAg
LTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9u
LT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxp
bmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3
LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2lu
Yyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTks
NyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEg
PSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJz
IGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1Qw
ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0Qmlu
YXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9p
ZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRu
b3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hp
ZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5l
Zml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0
LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9u
LCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4
NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQg
b3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklU
OjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVh
YzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIo
cmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMu
b2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZy
ZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJl
ZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3
ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0
ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQK
IHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUu
bV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYx
NmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAs
NyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFM
b2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNv
ZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
V1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0No
aWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLmM2
NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzllMzExNzY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJ
bnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpCitB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChp
bnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNT
RVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Myw3ICsxNDQsNyBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU1LDcgKzE1Niw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZQogICAg
IHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJl
ZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKKyAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHJlZykpCiAgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNlbmRpZgogI2Vu
ZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQg
c3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYg
YXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAx
OworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjMsMjYgKzM2NCwyNiBAQCBp
bmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQz
Ml90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwogfQogCi1BTFdB
WVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKQor
QUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNE
b3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcihp
bnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFk
ZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQog
ewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25z
dGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0ZvcihpbmRleCksIHRhZyk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
IHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
ICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSks
IHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA2LDEzNiArNDA3LDEzMyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQg
dGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0KFZp
cnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0TG9hZChzcmMs
IGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0U3RvcmUoZHN0LCBmcm9t
LnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdp
c3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7CiAKICAgICBpZiAoYmFzZSA9
PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkICE9
IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOwotICAgICAg
ICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywg
cGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwogICAgIGlm
IChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAgICAgICBsb2Fk
MzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFz
ZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0
LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcp
OworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOworICAgIGxvYWQz
Mih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQg
aW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBS
ZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcy
LCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5
bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOworICAgIGVtaXRM
b2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0TG9hZChyZWcxLCB0YWcxLCBwYXls
b2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBG
UFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQ
b29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3Io
aW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRl
eCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9E
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07
Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0
b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3IocmVnLCBiYXNl
KSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wg
aW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkp
OworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4
SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
SW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRy
dXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQog
ewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3Io
cmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wg
aW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7
CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJ
c0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcp
LCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsKKyAgICBzdG9y
ZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJh
c2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25z
dCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2Fk
KCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3Rh
bnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25z
dGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIoSW1t
MzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxS
ZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkK
KyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNv
bnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3AsIGludDMyX3Qm
IGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CiAgICAg
ICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwpAQCAtNTU1
LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QKICNlbHNlIC8vIFVTRShKU1ZB
TFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIg
YXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQo
KSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwpAQCAtNTcxLDQ3ICs1Njks
MzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBz
cmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Yy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lz
dGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVn
aXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0
KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1
cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20p
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJl
c3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJl
Z3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZnJvbS5wYXlsb2Fk
R1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
SklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVn
aXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3Jh
dGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50IHZSZWcpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCBy
ZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50
UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFs
dWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRv
RG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAg
ICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgpKTsKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5hc0ludDMyKCkpLCB2
YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3Bl
cmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7
CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVtcCBKSVQ6OmVtaXRQYXRjaGFibGVK
dW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0MTFiZTljZmI4MGY4MDgwNmY3ODhmNmMx
Li42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQyMTlhMWU5YTdlNWFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
c3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwogICAg
IFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2Nh
dG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAgICAgfQogfQogCkBAIC0xMjAsNyAr
MTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0g
Ynl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1
ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCkBAIC0xNTUsOSArMTU1
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAogICAgIC8vIExvYWQgdGhlIG9w
ZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdp
c3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUg
ZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1
bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9p
bnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwNCw4ICsyMDQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
VW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVy
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2Vs
bF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBl
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTMwNyw4ICszMDcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gUmV0dXJuIHRo
ZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzQzLDgg
KzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1ICszNjAsMTUgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CiAKICAgICAv
LyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQg
YXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKICAgICAvLyBjbGVhciBvdGhlciB0
aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBp
bnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5MCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
TnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDQ1LDcg
KzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVkT3JOdWxsPigpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NTcsNyArNDU3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsK
LSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDcwLDggKzQ3
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lh
bFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKQEAgLTQ4NSwx
OCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5t
X3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUzOSw3ICs1MzksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpAQCAtNTQ4LDkgKzU0OCw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEs
IHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01OTIsOCArNTkyLDggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBAIC02NTAsOCArNjUwLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogICAgIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CkBAIC02NjQsOCArNjY0LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0LDIwICs2ODQsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwxMCArNzI4LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNl
cHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9l
eGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBGSVhNRTog
Y29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBp
bmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAg
aWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5h
c0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcgKzc0OSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVu
dHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYg
cHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3Mo
cmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3Bl
cmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19j
YXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAgLTc2NiwxMCArNzY2LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29w
ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKICAgICBzaXpl
X3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZh
dWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVm
YXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUq
IGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpA
QCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4
ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsK
LSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0g
Jm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MTEsNyArODEx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNv
ZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNp
Z25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBj
cmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0
Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MzQsOCArODM0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKICAgICAvLyBvYmplY3QgbGlmZXRp
bWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9m
ZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtOTEzLDcg
KzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHZv
aWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVn
VDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC05MjQsNyArOTI0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4q
IGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVy
SUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0
OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChBZGRyZXNzKHN0
cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJl
Zyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJl
Zyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
IH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVH
UFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtOTk2
LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAyNCwxMCArMTAyNCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUu
bV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2Nv
bnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qx
KTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdS
ZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5
dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAq
PihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTE1LDEyICsxMTE1LDEyIEBAIHZvaWQgSklU
OjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIApAQCAtMTE2
MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogCiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIwNywxMCArMTIwNywxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVz
SW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5
dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAgICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKIH0KQEAgLTEyMTksOCAr
MTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzaXplSW5kZXggPSBieXRlY29kZS5tX2xl
bmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKQEAg
LTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAg
LTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAgIApAQCAtMTMzMCw5ICsx
MzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKLSAgICBpbnQgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEzOTAsOSArMTM5MCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDE0LDkgKzE0MTQsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQ0
MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVn
VDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQogCkBAIC0xNTIzLDggKzE1
MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9
IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAg
ICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCBy
ZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNW
YWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
LCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCBy
ZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9j
b3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVt
UGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAg
bG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
LCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4
IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2Nh
ZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEu
bV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JF
bnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQm
IHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5
M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2VmODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0x
NjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJp
Z2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAK
LSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51
bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKworICAgICAgICBPcGVyYW5kczxP
cHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwogICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNh
bGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAg
ICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxv
Y2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFu
ZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZt
UG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVk
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAg
bWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tl
dHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9v
cGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOworICAg
IHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0
KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQx
Niw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRG
cm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0
KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpz
Q2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5q
c1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMg
Y29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsy
NDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3Qq
IHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxG
cmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmpl
Y3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+
cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5m
byA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBr
ZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2Iw
NjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4
OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5
dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVy
aWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAg
IH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNI
KCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAg
ICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9w
IGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAg
ICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9w
ZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGludCBiYXNlOwotICAgIGludCBw
cm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAog
ICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0
ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgp
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGlu
dDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3
NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgp
LCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDgg
KzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpA
QCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00Njks
NyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyAr
NTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAt
NTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0g
ICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVn
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxh
Z3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBw
YXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUg
b25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3
ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRz
W21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25l
ZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklU
OjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdU
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcg
Kzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVl
Kiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2
b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAt
ODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwog
ICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+
KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNo
cG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1Qx
KTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3Jl
UHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
K3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBAIC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEw
OTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwot
ICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzEx
MTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2
YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFs
RmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSBy
ZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRU
eXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThm
NDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1YzEuLjU4MjcxM2U2NDA4N2E1MWY1OTM5Yjkw
Yjk4NTQ1ZGYxMzNkMGM2YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJm
YWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGlu
ZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lz
dGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklE
IHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNl
bmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVu
dHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwg
aW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCog
dmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRv
LCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUs
IFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CiAKICAg
ICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBAIC02NCwzNiArNjQsMzYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQog
ICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
cGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdp
c3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVn
aXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRK
dW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAg
IH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cihw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgQVNTRVJU
KHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAg
bG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZp
cnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAg
ICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAg
ICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAg
ICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7Cisg
ICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAgLTEwMSwyMyAr
MTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRK
U0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7
CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAg
ICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIEp1bXAgbm90
SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRy
KGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5z
aWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWQ2NChh
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51
bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdEludCA9
IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMTIgKzEyOSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdp
c3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVy
SUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhm
cm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAg
fQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Mywx
MiArMTQzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9p
ZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVy
IGVudHJ5KQogICAgIHsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFk
ZHJlc3NGb3IoZW50cnkpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCmluZGV4IDM4ODczMDUyZDEy
ODUyZmM2YmI5MTQyZDQ1NjA3YWU4ZTE5YTY3MGEuLjBiYTczZWY4YzEzNGViYmJkMWQwNGE0YjE3
MjE0ZjRmYTczNTE4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0
dXBWYXJhcmdzRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBW
YXJhcmdzRnJhbWUuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdz
RnJhbWVGYXN0Q2FzZShWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNs
b3QKICAgICAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoMCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgYXJndW1lbnRDb3VudFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIpOworICAgICAgICAgICAg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgRGF0YUZvcm1hdEludDMyKTsKICAgICAgICAg
Zmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0KDApKTsKICAgICB9CiAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0sIGpp
dCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIz
LCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zm
c2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0YWIyNjcxNTVjMTNkZjM2YTcyNDliNmMz
NDMuLjkzM2NhOWJlMTAyZTBlZGY5NGJiNGVhZTgyODIxNDgyMjljODI2ZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC01NSwxMyAr
NTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWREb3Vi
bGVBcmd1bWVudChpbnQgYXJndW1lbnQsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2Ny
YXRjaCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgbV9m
YWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUoc3JjLCBkc3QsIHNjcmF0Y2gpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkQ2VsbEFyZ3VtZW50KGludCBhcmd1bWVu
dCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAg
ICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkSlNDZWxsKHNyYywgZHN0KSk7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAKICAgICAgICAgdm9pZCBsb2FkSW50MzJBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lz
dGVySUQgZHN0LCBKdW1wJiBmYWlsVGFyZ2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1
bWVudCk7CiAgICAgICAgICAgICBmYWlsVGFyZ2V0ID0gZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7
CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAKaW5kZXggNTI0MWU1ZjdjYzMzMmE2NGUwZGU2ZGI0NGJkYWY5ZThlODBm
MjJhYS4uYzM3NmRiZTJjZDdkNmRkM2ZhNTQ4N2I1N2I1ODk0N2Y2ZGZiYTMzMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMTAzMiw4ICsx
MDMyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dl
bmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdW5zaWduZWQgdmlydHVh
bFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApOwotICAgIGppdC5s
b2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
R1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKTsKKyAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAg
YXV0byBub3RJbnRlZ2VyID0gaml0LmJyYW5jaElmTm90SW50MzIoR1BSSW5mbzo6cmVnVDApOwog
CiAgICAgLy8gQWJzIEludDMyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5o
CmluZGV4IGFlOGRlZTI5Zjk4OWM2YTAyNTUwMTVmNWZhYTYxNTY2ZDYxOTYwMDMuLmEyMzgwMjdk
M2JjYWE3MDM3MTFiYzRiZmYwYzEwNjI1M2UwZDkxOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmgKQEAgLTQzLDYgKzQzLDkgQEAgdHlwZWRlZiB2b2lkICgqTExJbnRD
b2RlKSgpOwogCiBuYW1lc3BhY2UgTExJbnQgewogCisKK2V4dGVybiAiQyIgdm9pZCBKU0NfSE9T
VF9DQUxMIGNoZWNrcG9pbnRfb3NyX2V4aXRfZW50cnlwb2ludCgpOworZXh0ZXJuICJDIiB2b2lk
IEpTQ19IT1NUX0NBTEwgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRy
eXBvaW50KCk7CiBleHRlcm4gIkMiIEpTX0VYUE9SVF9QUklWQVRFIE9wY29kZSBnX29wY29kZU1h
cFtudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXTsKIGV4dGVybiAiQyIgSlNfRVhQT1JU
X1BSSVZBVEUgT3Bjb2RlIGdfb3Bjb2RlTWFwV2lkZTE2W251bU9wY29kZUlEcyArIG51bVdhc21P
cGNvZGVJRHNdOwogZXh0ZXJuICJDIiBKU19FWFBPUlRfUFJJVkFURSBPcGNvZGUgZ19vcGNvZGVN
YXBXaWRlMzJbbnVtT3Bjb2RlSURzICsgbnVtV2FzbU9wY29kZUlEc107CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAzNTdhNDZlOGU1Nzg5
N2YyNzg1Y2QzMzlmY2JlMmJjMGM5MGNlZGIyLi5jYTRjYTI1YzMyOGZlMTEzODRhZGFkMzRhZTI1
NmFlNzdmNTg5YTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5k
bGluZ1Njb3BlLmgiCkBAIC05OCw4ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
TExJbnQgewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAgICAgICAg
XAogICAgIExMSU5UX1NFVF9QQ19GT1JfU1RVQlMoKQogCi1pbmxpbmUgSlNWYWx1ZSBnZXROb25D
b25zdGFudE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3Rl
ciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0
KCkpLmpzVmFsdWUoKTsgfQotaW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJh
bWUtPnIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9CitpbmxpbmUgSlNWYWx1ZSBnZXRO
b25Db25zdGFudE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgp
OyB9CitpbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9wZXJhbmQpLmpzVmFs
dWUoKTsgfQogCiAjZGVmaW5lIExMSU5UX1JFVFVSTl9UV08oZmlyc3QsIHNlY29uZCkgZG8geyAg
ICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAgICAg
ICBcCkBAIC0xNTcxLDcgKzE1NzIsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVy
aWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgIENh
bGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsRnJhbWUgLSBieXRlY29kZS5tX2FyZ3Y7CiAgICAg
CiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2Rl
Lm1fYXJnYyk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBj
YWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKICAgICAKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CkBAIC0xNjg5LDcgKzE2OTAs
NyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50
c0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdl
dE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIHZtLnZhcmFyZ3NMZW5n
dGgpOwogCiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAg
Y2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFz
VmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1
cnJlbnRWUEMocGMpOwogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVw
Q2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOwpAQCAtMTcyNSw3ICsxNzI2
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24KICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBjYWxsZWVG
cmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVj
a2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVG
cmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkg
PSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRSZXR1cm5QQyhyZXR1cm5Qb2lu
dC5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBjYWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51
bGxwdHIpOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CkBAIC0xOTMwLDcgKzE5
MzEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9jYXRjaCkKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0
YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjpl
bmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkp
OwogICAgIH0pOwogCkBAIC0xOTYxLDExICsxOTYyLDEzMCBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfb3V0X29mX2xpbmVfanVtcF90YXJnZXQpCiAgICAgTExJTlRfRU5EX0lNUEwo
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlPgorc3RhdGljIHZvaWQgaGFuZGxlVmFy
YXJnc0NoZWNrcG9pbnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgT3Bjb2RlJiBieXRlY29kZSwgQ2hlY2twb2ludE9TUkV4
aXRTaWRlU3RhdGUmIHNpZGVTdGF0ZSkKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBz
aWRlU3RhdGUuZ2V0VG1wPEpTVmFsdWU+KE9wY29kZTo6YXJnQ291bnQpLmFzVUludDMyKCk7CisK
KyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuZmlsbChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEsIFsmXSAoSlNWYWx1ZSogYnVmZmVyKSB7CisgICAgICAgIGxv
YWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYnVmZmVyLCBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV9h
cmd1bWVudHMpLmpzVmFsdWUoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
KyAgICB9KTsKKyAgICBpZiAoYXJncy5oYXNPdmVyZmxvd2VkKCkpIHsKKyAgICAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKwor
ICAgIEpTVmFsdWUgcmVzdWx0OworICAgIGlmIChPcGNvZGU6Om9wY29kZUlEICE9IG9wX2NvbnN0
cnVjdF92YXJhcmdzKQorICAgICAgICByZXN1bHQgPSBjYWxsKGdsb2JhbE9iamVjdCwgZ2V0T3Bl
cmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUs
IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOworICAgIGVsc2UKKyAgICAgICAgcmVz
dWx0ID0gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
KSwgYXJncywgIiIpOworCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
KyAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9kc3QpID0gcmVzdWx0OworfQor
CitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKENvZGVC
bG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmIHBjLCBUaHJvd1Njb3BlKiBz
Y29wZSkKK3sKKyAgICBpZiAoc2NvcGUgJiYgc2NvcGUtPmV4Y2VwdGlvbigpKSB7CisgICAgICAg
IGF1dG8gZXhjZXB0aW9uUmV0dXJuUEMgPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFn
PihsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKTsKKyAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChwYy5wdHIoKSwgZXhjZXB0aW9uUmV0dXJuUEMuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+dm0oKS5leGNl
cHRpb25Gb3JJbnNwZWN0aW9uKCkpOworICAgIGlmIChPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xM
SW50KCkgfHwgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
aykgeworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0cigp
OworICAgICAgICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5l
eHRQQywgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworI2lmIEVO
QUJMRShKSVQpCisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4
dCgpLmluZGV4KCk7CisgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVN
YXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51
bGxwdHIsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUpOworZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxp
bmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSByZXN1
bHQpCit7CisgICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5nIGNoZWNrcG9pbnRzIGRvIHJpZ2h0
IG5vdyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdlIGNhbiBqdXN0IGRvIHRoYXQgaGVy
ZSBhbmQgcmV0dXJuLgorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NS
U2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
c2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bj
b2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDYWxsVmFyYXJncz4o
KS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6
ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBvcF90YWlsX2Nh
bGxfdmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRoZSB0aGluZyBpdCB3YXMgY2FsbGlu
ZyB3YXMgaW5saW5lZC4KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGF0Y2hO
ZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYywgbnVsbHB0cik7Cit9CisKK2V4dGVybiAiQyIg
U2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KENhbGxGcmFt
ZSogY2FsbEZyYW1lKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9j
aGVja3BvaW50X29zcl9leGl0KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2Rl
QmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0
ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIEFT
U0VSVChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisKKyAgICBhdXRvIHBjID0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2Rl
ID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2Nh
bGxfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFt
ZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwg
cGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UocGMubmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX3JldCwgIldlIHN0cm9uZ2x5
IGFzc3VtZSBhbGwgdGFpbCBjYWxscyBhcmUgZm9sbG93ZWQgYnkgYW4gb3BfcmV0LiIpOworICAg
ICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3Qs
IHBjLT5hczxPcFRhaWxDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAg
IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQocmV0dXJuVG9UaHJvdyh2bSks
IDApOworCisgICAgcmV0dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMs
ICZzY29wZSk7Cit9CisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93
X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvRnJhbWUp
CiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0KICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbEZyYW1lKQogICAgICAgICBn
bG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKnZtKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpp
bmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0Li43ZWJmZjFjY2Ex
ZTQxM2UyMzUzZDI2ZGE5YjI5YWVhYTQyMWQ0NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDkxLDcgKzEwOTEs
NyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQog
ICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0b3Jl
U3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zm
c2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1h
Y3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBz
Y3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0LCBP
cENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEp
IGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAg
ICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4
Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwgLm5v
RXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
Ci0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9uOiAg
ICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAg
ICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGlu
IHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0xOTk5LDcgKzIw
MDMsNiBAQCBvcChsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwg
bWFjcm8gKCkKICAgICBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5j
dGlvbjo6bV9mdW5jdGlvbkZvckNvbnN0cnVjdCkKIGVuZCkKIAotCiAjIExhc3RseSwgbWFrZSBz
dXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bj
b2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTElu
dCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVjaC4KQEAgLTIwNDUsMyArMjA0OCwy
MCBAQCBvcCh3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RscywgbWFjcm8gKCkKIGVuZCkKIAog
ZW5kCisKK2lmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCisgICAgZ2xvYmFsIF9jaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX2VudHJ5cG9pbnQKKyAgICBfY2hlY2twb2lu
dF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF9lbnRyeXBvaW50OgorICAgICAgICBtb3ZlIHIw
LCBhMgorICAgICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0
X2Zyb21faW5saW5lZF9jYWxsKQorICAgICAgICAjIE5vdGU6IHIxIGNvbnRhaW5zIHRoZSBhZGRy
ZXNzIG9mIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUgaWYgdGhlcmUgaXMg
YW4gZXhjZXB0aW9uLiBXZSBjYW4ndCBjaGVjayBoZXJlIGJlY2F1c2UgV2luZG93cyBkb2VzIG5v
dCBsaWtlIGxvY2FsIGxhYmVscyBmcm9tIG90aGVyIGdsb2JhbCBsYWJlbHMuCisgICAgICAgIGpt
cCByMQorCisgICAgZ2xvYmFsIF9jaGVja3BvaW50X29zcl9leGl0X2VudHJ5cG9pbnQKKyAgICBf
Y2hlY2twb2ludF9vc3JfZXhpdF9lbnRyeXBvaW50OgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4g
cHJvYmFibHkgZGlzcGF0Y2ggdG8gdGhlIGNoZWNrcG9pbnQgaGFuZGxlciBkaXJlY3RseSBidXQg
dGhpcyB3YXMgZWFzaWVyIAorICAgICAgICAjIGFuZCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBm
b3IgcGVyZm9ybWFuY2UuCisgICAgICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXQpCisgICAgICAgICMgTm90ZTogcjEgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2Yg
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSBpZiB0aGVyZSBpcyBhbiBleGNl
cHRpb24uIFdlIGNhbid0IGNoZWNrIGhlcmUgYmVjYXVzZSBXaW5kb3dzIGRvZXMgbm90IGxpa2Ug
bG9jYWwgbGFiZWxzIGZyb20gb3RoZXIgZ2xvYmFsIGxhYmVscy4KKyAgICAgICAgam1wIHIxCitl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KaW5kZXggM2RkMmViNDhjYmJhNmVmNWNkOTg4NjM5Yzc5MTFlMjJhNzEzMzE0
OC4uNDExZGYyYzY3NTIzMzBiMzdiOTZhYmNlZDg3YTg0NDZhODc1Njk5OCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
QEAgLTQyLDYgKzQyLDE0IEBAIG1hY3JvIG5leHRJbnN0cnVjdGlvbldpZGUzMigpCiAgICAgam1w
IFt0MSwgdDAsIFB0clNpemVdLCBCeXRlY29kZVB0clRhZwogZW5kCiAKK21hY3JvIHN0b3JlUEMo
KQorICAgIHN0b3JlaSBQQywgTExJbnRSZXR1cm5QQ1tjZnJdCitlbmQKKworbWFjcm8gbG9hZFBD
KCkKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCitlbmQKKwogbWFjcm8gZ2V0dU9w
ZXJhbmROYXJyb3cob3Bjb2RlU3RydWN0LCBmaWVsZE5hbWUsIGRzdCkKICAgICBsb2FkYiBjb25z
dGV4cHIgJW9wY29kZVN0cnVjdCVfJWZpZWxkTmFtZSVfaW5kZXhbUEIsIFBDLCAxXSwgZHN0CiBl
bmQKQEAgLTkyLDcgKzEwMCw3IEBAIGVuZAogCiAjIEFmdGVyIGNhbGxpbmcsIGNhbGxpbmcgYnl0
ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVnaXN0ZXJzIGFyZSBub3QgdXNlZC4KIG1hY3JvIGRp
c3BhdGNoQWZ0ZXJDYWxsKHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gpCi0gICAgbG9hZGkg
QXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRQQygpCiAgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9u
c1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fZHN0LCB0
MSkKQEAgLTM5MCw3ICszOTgsNyBAQCBlbmQKIAogIyBDYWxsIGEgc2xvdyBwYXRoIGZvciBjYWxs
IG9wY29kZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCi0gICAg
c3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkK
ICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQ
QywgYTEKQEAgLTM5OSwyMCArNDA3LDIwIEBAIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1Bh
dGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBjYWxsVHJhcEhhbmRsZXIodGhyb3dIYW5kbGVyKQot
ICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgc3RvcmVQ
QygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1v
dmUgUEMsIGExCiAgICAgY0NhbGwyKF9sbGludF9zbG93X3BhdGhfaGFuZGxlX3RyYXBzKQogICAg
IGJ0cG56IHIwLCB0aHJvd0hhbmRsZXIKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zm
c2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICBjaGVja1N3aXRjaFRvSklUKAogICAg
ICAgICAxLAogICAgICAgICBtYWNybygpCi0gICAgICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50
Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICAgICAgc3RvcmVQQygpCiAgICAgICAgICAg
ICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAg
ICAgICAgIG1vdmUgUEMsIGExCkBAIC00MjEsNyArNDI5LDcgQEAgbWFjcm8gY2hlY2tTd2l0Y2hU
b0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSByMSwgc3AKICAgICAgICAgICAgIGptcCBy
MCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3ZlcjoKLSAgICAgICAgICAgIGxvYWRpIEFy
Z3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICAgICAgICAgIGxvYWRQQygpCiAg
ICAgICAgIGVuZCkKIGVuZAogCkBAIC0xNzY4LDYgKzE3NzYsOCBAQCBtYWNybyBwdXRCeVZhbE9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgb3NyRXhpdFBvaW50KQogICAgIGVuZCkKIGVuZAog
CisKKwogcHV0QnlWYWxPcChwdXRfYnlfdmFsLCBPcFB1dEJ5VmFsLCBtYWNybyAoc2l6ZSwgZGlz
cGF0Y2gpCiAub3NyUmV0dXJuUG9pbnQ6CiAgICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBv
aW50KG9wX3B1dF9ieV92YWwsIHNpemUpCkBAIC0yMDU3LDcgKzIwNjcsNyBAQCBtYWNybyBjb21t
b25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGws
IHByb2xvZ3VlKQogICAgICAgICBhZGRwIGNmciwgdDMKICAgICAgICAgc3RvcmVxIHQyLCBDYWxs
ZWVbdDNdCiAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIHQyKQotICAg
ICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICBz
dG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNl
dFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwg
dDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z0xpc3QuaAppbmRleCA4NDBmODliODhkNDIwY2MzYjc1YzgzZDZjNTc4MjQxNTQwMmYzMzY2Li44
ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1MDBmZGZiZTY5OTk4MDdjZGEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCkBAIC0xMzMsNiArMTMzLDE3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgb3ZlcmZsb3dDaGVja05vdE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJmbG93Q2hl
Y2soKTsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZpbGwo
c2l6ZV90IGNvdW50LCBjb25zdCBGdW5jdG9yJiBmdW5jKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX3NpemUpOworICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7CisgICAgICAgIGlmIChC
YXNlOjpoYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc2l6
ZSA9IGNvdW50OworICAgICAgICBmdW5jKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90
Rm9yKDApKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoKTsK
ICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggZjhkOTc5OTU4NzQ1MjI2
YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNlODdhMS4uZmZiNzQ1OWE2YWRjY2JhYjE2ZGE4YTRlZjhiMTcx
MWQ4NzJhMWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcApAQCAtMTc4OCw2ICsxNzg4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGRlcml2
ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBlOyB9CiAg
ICAgdW5zaWduZWQgZXZhbENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ29udGV4
dFR5cGU7IH0KICAgICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2hh
c1RhaWxDYWxsczsgfQorICAgIHVuc2lnbmVkIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDaGVja3BvaW50czsgfQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUNvdW50OyB9CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmRDb2x1bW47IH0KIApAQCAtMTgyMCw2ICsxODIxLDcgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0VHlwZSA6IDI7CiAgICAgdW5zaWduZWQgbV9oYXNUYWls
Q2FsbHMgOiAxOwogICAgIHVuc2lnbmVkIG1fY29kZVR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1f
aGFzQ2hlY2twb2ludHMgOiAxOwogCiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CiAgICAg
U291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtMjAxOCw2ICsyMDIwLDcgQEAgQUxXQVlT
X0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVj
b2RlciwgU3RydWN0dXJlKgogCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hhc0NoZWNrcG9p
bnRzKGNhY2hlZENvZGVCbG9jay5oYXNDaGVja3BvaW50cygpKQogCiAgICAgLCBtX2ZlYXR1cmVz
KGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcygpKQogICAgICwgbV9wYXJzZU1vZGUoY2FjaGVkQ29k
ZUJsb2NrLnBhcnNlTW9kZSgpKQpAQCAtMjIwNiw2ICsyMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnMKICAgICBtX3BhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKICAgICBt
X2NvZGVHZW5lcmF0aW9uTW9kZSA9IGNvZGVCbG9jay5tX2NvZGVHZW5lcmF0aW9uTW9kZTsKICAg
ICBtX2NvZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5cGU7CisgICAgbV9oYXNDaGVja3BvaW50
cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUo
ZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5j
b2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IGYzNThkNDhh
NTBkZTczZWFiMzg1Njk5YjNhNmY1MTEzYmJiZTliYmEuLmUyN2ZlM2NhOTc4YjM5NDQ4MjYxNjdk
NGEwNjFhMmVhZDRmOTI2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtOTgsOCArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBCRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBTRVRfUENf
Rk9SX1NUVUJTKCkKIAotI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihvcGVyYW5kLm9mZnNldCgpKSkKLSNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+
cihvcGVyYW5kLm9mZnNldCgpKSkKKyNkZWZpbmUgR0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIob3BlcmFuZCkpCisjZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIo
b3BlcmFuZCkpCiAKICNkZWZpbmUgUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAg
IFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwK
QEAgLTExMzksOCArMTEzOSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgaW50IHNjb3BlUmVnID0g
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpT
U2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Nj
b3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBq
c0Nhc3Q8U3ltYm9sVGFibGUqPihHRVRfQyhieXRlY29kZS5tX3N5bWJvbFRhYmxlKS5qc1ZhbHVl
KCkpOwogICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9pbml0aWFs
VmFsdWUpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5kZWZpbmVk
KCkgfHwgaW5pdGlhbFZhbHVlID09IGpzVERaVmFsdWUoKSk7CkBAIC0xMTU1LDggKzExNTQsNyBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF93aXRoX3Njb3BlKQogICAgIEpTT2JqZWN0
KiBuZXdTY29wZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVj
dChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgaW50IHNjb3Bl
UmVnID0gYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUub2Zmc2V0KCk7Ci0gICAgSlNTY29wZSogY3Vy
cmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2Nv
cGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9jdXJyZW50U2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFJFVFVSTihK
U1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgbmV3U2Nv
cGUpKTsKIH0KIApAQCAtMTE2NSw3ICsxMTYzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5n
RnVuY0RlY2xJbkV2YWw+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Ci0gICAgSlNTY29wZSogc2NvcGUg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0
ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNWYWx1ZSByZXNvbHZl
ZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChn
bG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAKICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAg
LTExNzksNyArMTE3Nyw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3Bl
KQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
ICAgICBKU09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgaWRlbnQpOwogICAgIC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJl
LCBlLmcuIFByb3h5IGluIHdpdGggc3RhdGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAgIENIRUNL
X0VYQ0VQVElPTigpOwpAQCAtMTQyNCw3ICsxNDIyLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19hcnJheV9idWZmZXIpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0
KCkpKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkuaXNDb25zdGFu
dCgpKTsKICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gYml0
d2lzZV9jYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oR0VUX0MoYnl0ZWNvZGUubV9pbW11dGFi
bGVCdXR0ZXJmbHkpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgYXV0byYgcHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlOwogCkBA
IC0xNDQzLDcgKzE0NDEsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1
ZmZlcikKICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5
IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUg
Y2VsbHMgZnJvbQogICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9j
aywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1t
dXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9
CiAKQEAgLTE0ODgsNCArMTQ4NiwxNiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3ByZWFk
KQogICAgIFJFVFVSTihKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRlRnJvbUFycmF5KGdsb2Jh
bE9iamVjdCwgdm0sIGFycmF5KSk7CiB9CiAKK2V4dGVybiAiQyIgdm9pZCBkdW1wUmVnaXN0ZXIo
VUNQVVJlZ2lzdGVyIHZhbHVlKTsKK2V4dGVybiAiQyIgdm9pZCBkdW1wUmVnaXN0ZXIoVUNQVVJl
Z2lzdGVyIHZhbHVlKQoreworICAgIGRhdGFMb2dMbihSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2
b2lkKj4odmFsdWUpKSk7Cit9CisKKy8vIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIFNM
T1dfUEFUSCBjaGVja1BDKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMpOworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgKQorLy8geworCisv
LyB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCA0YmQxOTJhNmM3N2VmYzAyNmU3YTk1YTViN2Jl
YzcxMjQzNjc3ZTc4Li40N2IyNDc0MThjYTg4ZWZkMWI3OGU2MzExYjY3NWQxZWZhNWE1ZmYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApA
QCAtMzUsNiArMzUsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBKU09iamVjdCogY29uc3RydWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3Qs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICBy
ZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVj
dG9yT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU09iamVjdCogY29uc3RydWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3Qs
IEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTQ2LDEwICs1MSw5IEBAIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25z
dHJ1Y3Rvck9iamVjdCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVj
dG9yT2JqZWN0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xv
YmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0
YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAKIH0KIAotCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0
cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc3RydWN0RGF0YS5oCmluZGV4IGQwYWUwMGJhMTFkN2NlZTI0ZGZmYWU5MTkxMTk2N2UwMmFh
NmVkZTMuLmZiNjE5NzRhN2RiMzljNDkxZjlmOTNiYWViNmNhYzEyNjIxZjNiYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKQEAgLTYwLDYgKzYw
LDggQEAgc3RydWN0IENvbnN0cnVjdERhdGEgewogCiAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIHNv
IHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUgdW5sZXNz
IHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgY29uc3Qg
QXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1l
c3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3Ry
dWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlIG5ld1RhcmdldCk7CiAKIEFMV0FZU19J
TkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNv
bnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApp
bmRleCBhNjc5NWRhMWVkY2NmMzEwMjJhYzJkZDlhZWZhZmQ0M2EwMWE1Yzg1Li40YjM0NjFkZTIy
ZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1MDlmMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKQEAgLTEzNywyMCArMTM3LDE5IEBA
IHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5k
ZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3RoKCkpID0g
dHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fbWFwcGVkQXJndW1lbnRzKSB7CiAgICAgICAg
IHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAg
ICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0
RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGxpbWl0
OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtp
XS5nZXQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBzdG9y
YWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAg
ICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3Qs
IGkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGds
b2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB1bnNp
Z25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAppbmRleCAwYTZiMWEwNjYw
OTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNlNzcyZTBhLi44ZDk2NDJhMmM5NDA0MDgwYjkxM2FjMjcw
Y2QwMTNjMzllY2RhODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50
RGVzY3JpcHRvcihpbmRleCwgbV9sZW5ndGgpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lk
IGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5G
TzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaAppbmRleCBiMzFiNzBhYmQwMGNlZWFmNWViYjdlZTFkNDY3ZGE0ODg3MGQ1MWMxLi4w
NzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJkYWIzZGFlZWIyNzJjYmJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCkBAIC01OSw3ICs1OSw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKFZN
JiwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBpc01vZGlmaWVk
QXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0g
ICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1bWVudHNQdHIgPSBDYWdlZEJhcnJpZXJQdHI8R2lnYWNh
Z2U6OlByaW1pdGl2ZSwgYm9vbD47CiAgICAgTW9kaWZpZWRBcmd1bWVudHNQdHIgbV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAppbmRleCAyMTgyYTYyYjEzMDM0M2Fm
NTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZmLi5lMGFhYmY1ZjJlZTE4NWI3ZDEzMzE2MDM3ZDhjMWQ4
ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29sIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQg
aW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMDUsOSArMzA1LDkgQEAgdm9pZCBHZW5l
cmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEYKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+
KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpICsgb2Zmc2V0KSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5n
ZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0
W2ldID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBn
ZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERl
c3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDQ0YzdlNTIwZjFjMGEyNDBh
OGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAuLjZkMDc1OTE3MTFlZWRiYzI4ZTBlNGRhNzg0OTgyMmFi
OGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBA
IC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcgogICAgICAgICBhcmdz
LmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0LCBpKSk7CiB9CiAKLXZvaWQgSlNBcnJheTo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTI2OSw3
ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgICAgIGRvdWJsZSB2
ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQodGhpcywgaSk7CiAgICAgICAgICAg
ICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6
RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zm
c2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTQsMTEgKzEyOTQsMTEgQEAgdm9pZCBKU0FycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ld
OwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IHYuZ2V0KCk7CisgICAgICAgIGZp
cnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgpOwogICAgIH0KICAgICAKICAgICBm
b3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAgICAgZmly
c3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCAzMTc5NDljNTcyYTExYjc1YWRjMTgz
YWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2NWI1ZmY0OTI1NGNjMWE2YzQ3OTAyYjc5MTBhYzRhN2Q5
YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xNjMsNyAr
MTYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmls
bEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgaXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
CmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAzM2RhYTk5YTU5MzZkZWExOWExYzQ5YzAuLmU0OTA5NzU2
MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEyYzE5MTFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKQEAgLTQ2LDEz
ICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNI
aWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQg
SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICBjYWxsRnJh
bWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGkgKyBvZmZzZXQpOworICAgICAgICAg
ICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0ganNVbmRlZmluZWQoKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4IGFjYjY4NDgxOTFhMTkwMzUyMmI5YjNlNGQwMGY5Njll
NDBiNzgxNWEuLjA3ZTFhOGExMGMzY2RjNzExN2FjYTNkYzU0M2VkN2RkYjBkNDFmM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5k
ZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZhYTM2OWY0ODUw
NzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6OndpbGxSZWxl
YXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9IG1fdm07CiAgICAgaWYgKHZtKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0tPmhhc0NoZWNrcG9pbnRP
U1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hlY2twb2ludCBz
aWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAgICB2bS0+ZHJhaW5NaWNyb3Rhc2tz
KCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmlu
ZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5NjgwOGNhZmMw
YjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0
LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1dGFibGUtPm1f
dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4
ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0YWJsZS0+
bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4
ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUt
PmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkpLT5jbG9uZVNj
b3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwg
anNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkpLmdldCgpKS0+
Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAgICByZXR1cm4gZXhlY3V0
YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
NDEzODdjODUwYTk5NWFkNTc0MjEwNTBjZGU4NmNiMjUyMWU1NDExNi4uOTFlZDczOWUyNWY0OTM4
ZWY1MDI3MjdkZjUxNjgwZDg2Y2EyMDg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMSArNTA5LDkgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRl
RGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXpl
KCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6
ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplOwogCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAvLyBGSVhNRTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3b3JrIG9uIDMy
LWJpdDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNlbmRpZgogCiAg
ICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0Nh
Y2hlUGF0aCgpID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4MWQ5NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0
NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2MDVmYmY1MjViZGRmMjMxOTJkMDlkYjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNw
cApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50
KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAgc3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0u
Y2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0
LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYyOWVkNGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIy
ZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUwODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6
aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV90YWJsZS0+bGVuZ3RoKCkpOwog
ICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAppbmRleCA2NGRkZmNiMWEyNTYwZTZmZTFiNDU0ZTRmZWUxNDg5MmFkYzA4YTlm
Li44ZjZlNTY1ZTI0N2U1YTIzMTkzMzE5ODgyODY3MmUyMTA0ODgxNjU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQm9vbGVh
bk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5FeGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMTAyNyw2ICsxMDI4LDIwIEBAIHZv
aWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2Vy
dmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYKIAordm9pZCBWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPiYmIHBheWxvYWQpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jaGVja3BvaW50U2lkZVN0
YXRlLmFkZChjYWxsRnJhbWUsIFdURk1vdmUocGF5bG9hZCkpOworICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gVk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRl
KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIHNpZGVTdGF0ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0
ZS50YWtlKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHNpZGVTdGF0ZTsKK30KKwogdm9pZCBsb2dT
YW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXpl
U3RhY2soKSAmJiB2bS50b3BDYWxsRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CmluZGV4IDI4MDg2YzRlZDkxNjA2YzI4MWIxYTFkNWI3YTFkYWIwNjA4ODA3MGEuLjI1YzRhNTE0
YTE4YzY3MGU2NTQzMWFiOTY4Nzg4MzM4MWQ3MWVjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnVpbHRp
bkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENh
bGxGcmFtZTsKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVC
bG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtOTQ5
LDYgKzk1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhDb25zZXJ2YXRpdmVSb290cyYpOwogCisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0
YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBm
aW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNr
cG9pbnRPU1JTaWRlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUu
c2l6ZSgpOyB9CisKICAgICBWTUVudHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVj
dCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMDAs
NiArMTIwNSw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAg
IFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gbV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9z
aXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0
ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNp
ZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFi
bGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9s
Rmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5j
cHAKaW5kZXggODFjOWYxZjY3NDcwNzllZDgzMTI2NjJjMDgzMDBjNmNjMzYyOGUzNy4uZTE0ODQw
MGQ0ODdkZmM2NGU0NDA1NGRkYWRiMDg1ODk3MmUzOWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUlu
c3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBS
ZWdpc3RlciogaXQ7CiAgICAgY29uc3QgUmVnaXN0ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSk7CisgICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxKTsKICAgICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAg
ICAgSlNWYWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVy
ID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDll
MGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0
NzM1MmMwZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBW
ZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsg
fQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJl
dHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0
Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRD
b25zdGFudFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3Qg
Z2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRD
b25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0
dXJuIG1fY29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsK
KyAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwog
ICAgIH0KIAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVj
dGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAKaW5kZXggYWIxNzQwNmFmYjczNGE3MDhkZjExZGJiNjgwMTUxOGI3NjY1
ZmI0Mi4uZWUyYjMyN2QyYWY1NDcxOTY4Nzk2OWFjMjUyYTg0Yzc4OGVmNmU5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0y
NDIsNiArMjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJz
ZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAg
ICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMg
Ynl0ZWNvZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFj
ayYsIGNvbnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggZTJhNGM0MjUzM2EyZjQ0N2RkMzIwMjA1
Yjc3N2I3OGIwMzljMGI2OC4uMjA2OWFkOGIyNGI3MzY5ZGNkOWQ1ZjBjN2Y1OGVlYzkyYjM1Yzc2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApA
QCAtNzQzLDcgKzc0Myw3IEBAIHZvaWQqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNF
eGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4
Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElm
IHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3
aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwog
ICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCA5MjdhNjk4NGEzYmUwMTRj
ZjNlYTdkNjdmMDM0NTg0ZWViZWI2MGNlLi41NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5
MGQ1ZjMzM2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsK
IAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIu
aXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5n
ZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1
ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAog
ICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1YmQ3YWI0M2Rl
MDZmODkzYzE2NGQ1OTljNmNjNGY1ZmIxN2IwNWJiLi40ZWU3ZjUxZTgyNWVhNjZmYjczMWJiNzFl
Yzg3NzBhNzQzNmQyZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTM3Miw2ICszNzIsNyBAQAogCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2ln
bmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJl
YWRNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3Nh
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1
MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGhyZWFkTWVzc2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
MzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fk
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFC
MkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRo
ID0gTWFjaEV4Y2VwdGlvbnMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5
RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05NTQsNiArOTU1LDcgQEAKIAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIz
RkYgLyogZHRvYS5oICovLAogCQkJCUZFMDVGQUU2MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRy
VHJhaXRzLmggKi8sCiAJCQkJQUQ2NTNEQTgyMDA2QjZDMjAwRDgyMEQ3IC8qIER1bWJWYWx1ZVRy
YWl0cy5oICovLAorCQkJCTUzMzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVy
YXRvck92ZXJsb2Fkcy5oICovLAogCQkJCTFBRUE4OEUxMUQ2QkJDRjQwMEU1QUQ2NCAvKiBFbnVt
VHJhaXRzLmggKi8sCiAJCQkJQUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmgg
Ki8sCiAJCQkJQThBNDcyOUYxNTFBODI1QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5oICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRt
YXAuaAppbmRleCA0YzZmNWQ0NDI2MzJjM2VmYzAwMGJkMThlOWUzNjk0NTJmYWYxYzEwLi5iNDZk
YTllODVhYjliNjg2MjQzOGE2OTJlMzY2YTc1MDU0ZGNjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9CaXRtYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAtNTEsNiAr
NTEsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29u
c3Q7CiAgICAgdm9pZCBjbGVhcihzaXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2
b2lkIGludmVydCgpOwogICAgIGludDY0X3QgZmluZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1bkxlbmd0
aCkgY29uc3Q7CiAgICAgc2l6ZV90IGNvdW50KHNpemVfdCBzdGFydCA9IDApIGNvbnN0OwogICAg
IHNpemVfdCBpc0VtcHR5KCkgY29uc3Q7CkBAIC0xMDIsNiArMTAzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcj0oYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9iaXRtYXAtPnNldChtX2luZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRt
YXA7CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwpAQCAtMTExLDYgKzExOCw5IEBAIHB1YmxpYzoK
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBmaW5k
Qml0KDAsIHRydWUpKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCBiaXRtYXBTaXplKTsgfQogICAgIAorICAgIGl0ZXJhdG9yIG9wZXJhdG9yW10o
c2l6ZV90KTsKKyAgICBjb25zdCBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCkgY29uc3Q7CisK
ICAgICB2b2lkIG1lcmdlQW5kQ2xlYXIoQml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihC
aXRtYXAmKTsKICAgICAKQEAgLTIyNCw2ICsyMzQsMTMgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6Y2xlYXJBbGwoKQogICAgIG1lbXNldChiaXRzLmRhdGEoKSwg
MCwgc2l6ZW9mKGJpdHMpKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVu
YW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
aW52ZXJ0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAg
ICAgIGJpdHNbaV0gPSB+Yml0c1tpXTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUs
IHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29y
ZFR5cGU+OjpuZXh0UG9zc2libHlVbnNldChzaXplX3Qgc3RhcnQpIGNvbnN0CiB7CkBAIC00MDks
NiArNDI2LDE5IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9w
ZXJhdG9yIT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSAtPiBpdGVyYXRvcgoreworICAgIEFTU0VSVChpbmRleCA8IHNpemUo
KSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHNp
emVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCAtPiBj
b25zdCBpdGVyYXRvcgoreworICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8Qml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPio+KHRoaXMpKVtpbmRleF07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+OjpoYXNoKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXgg
ZGFlNGE3MWIyOGQxMzA0MjRjMGJkNzMxYmU0MTY0M2YwNTJiM2VhOS4uMmEzMjYyYzliOGI2ZDU2
ZGUzY2E0ZGEwMTU2OTZkNzUyN2FhNGI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYg
KzU2LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIER1bWJQdHJUcmFpdHMuaAogICAg
IER1bWJWYWx1ZVRyYWl0cy5oCiAgICAgRW51bVRyYWl0cy5oCisgICAgRW51bUNsYXNzT3BlcmF0
b3JPdmVybG9hZHMuaAogICAgIEV4cGVjdGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaAogICAgIEZh
c3RCaXRWZWN0b3IuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0
b3JPdmVybG9hZHMuaCBiL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGZkZTczZjViMmQ3ZDU3NDRhM2QwODU3N2NjNzI0ODcxZTkzZTYxOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3Zlcmxv
YWRzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisj
ZGVmaW5lIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIG9w
LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNv
bnN0ZXhwciBhdXRvIG9wZXJhdG9yIG9wKGVudW1OYW1lIGVudW1FbnRyeSwgVCB2YWx1ZSkgLT4g
c3RkOjplbmFibGVfaWZfdDwoZW5hYmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGVudW1FbnRyeSkgb3AgdmFsdWU7IFwKKyAgICB9IFwK
KyAgICAgIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8g
b3BlcmF0b3Igb3AoVCB2YWx1ZSwgZW51bU5hbWUgZW51bUVudHJ5KSAtPiBzdGQ6OmVuYWJsZV9p
Zl90PChlbmFibGVFeHByZXNzaW9uKSwgVD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gdmFs
dWUgb3Agc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KTsgXAorICAgIH0gXAorCisjZGVmaW5lIE9W
RVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCArLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgLSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICosIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCAvLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgJSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisj
ZGVmaW5lIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdS
QUxTKGVudW1OYW1lKSBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCisKKyNkZWZpbmUgT1ZFUkxPQURfUkVM
QVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhw
cmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51
bU5hbWUsID09LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9S
X0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgIT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8LCBlbmFibGVF
eHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihl
bnVtTmFtZSwgPD0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9G
T1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA+LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAg
T1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPj0sIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKworI2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19G
T1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhlbnVtTmFtZSkgT1ZFUkxPQURfUkVMQVRJT05B
TF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgc3RkOjppc19pbnRlZ3Jh
bF92PFQ+KQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmggYi9T
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKaW5kZXggODg1YjdiMTczYjExYTYwMWJlMjlh
MzMyYWI5ZDJhNDE0ZDU2MjEyMi4uOTIwODk1ZmM0OWU3MWJmOTY2OTIyMWMxMzFhMTc0MmZiNzU4
ZmZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaApAQCAtNDUwLDcgKzQ1MCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEoKm1fd29yZCAm
IG1fbWFzayk7CiAgICAgfQpAQCAtNDY0LDYgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KIAorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9v
bCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA9IHZhbHVlIDogKnRoaXM7IH0KKyAgICBG
YXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRvciY9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8g
KnRoaXMgOiAqdGhpcyA9IHZhbHVlOyB9CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29y
ZCB7IG51bGxwdHIgfTsKICAgICB1aW50MzJfdCBtX21hc2sgeyAwIH07CkBAIC01MDksNyArNTEy
LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9
Ci0gICAgCisKKyAgICAvLyBGb3IgdGVtcGxhdGluZyBhcyBWZWN0b3I8Ym9vbD4KKyAgICB2b2lk
IGZpbGwoYm9vbCB2YWx1ZSkgeyB2YWx1ZSA/IHNldEFsbCgpIDogY2xlYXJBbGwoKTsgfQorICAg
IHZvaWQgZ3JvdyhzaXplX3QgbmV3U2l6ZSkgeyByZXNpemUobmV3U2l6ZSk7IH0KKwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5k
KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0
b3IgY2hhbmdlZC4KQEAgLTU4OSw0ICs1OTYsNSBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCit1c2luZyBXVEY6OkZhc3RCaXRSZWZlcmVuY2U7CiB1c2luZyBXVEY6OkZhc3RCaXRW
ZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaCBiL1Nv
dXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCmluZGV4IDVhNGU5ZWY0NDk0ZWY0NmNhOWU0
ZWVmNzdmZGNjMGQ2MGZhYTRhMTEuLjNhMzViMzhmNGMwMjM2NzlhYzdjZmM5YzQ2NTYwODRhMzkx
NDgzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGlubGluZSBUeXBlIHVuYWxpZ25l
ZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbDxUeXBlPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIFR5cGUgcmVzdWx0IHsgfTsK
ICAgICBtZW1jcHkoJnJlc3VsdCwgcG9pbnRlciwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtNDMsNyArNDMsNyBAQCBpbmxpbmUgVHlwZSB1bmFsaWduZWRMb2FkKGNvbnN0
IHZvaWQqIHBvaW50ZXIpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIHZvaWQgdW5h
bGlnbmVkU3RvcmUodm9pZCogcG9pbnRlciwgVHlwZSB2YWx1ZSkKIHsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbDxUeXBlPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIG1lbWNw
eShwb2ludGVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGQ4ZTc1ZDdlZWUyZDZhYzU4ZTA2
OGVlMTgyNjRkNDhkYWY2ZDEzLi5jOTg5ZDA0YjkyODU1ZDU5NmY5YzcwNDE5MDE1NDk1YzI2MWJl
Y2MyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRo
ZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmVtb3ZlIHByb2JlIE9TUiBleGl0IG9w
dGlvbiBzaW5jZSB3ZSBhcmUgbm90IHVzaW5nIHRoYXQgYW55bW9yZS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHM6CisKIDIwMTktMTItMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4gTWFyayBXZWJL
aXQuRm9jdXNlZEZyYW1lQWZ0ZXJDcmFzaCBhcyB0aW1lb3V0CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwppbmRleCBjZGJmOWMwZGJmOTMyZTI4YzZkNWE4MjA4YTBhOThjY2VlNmFlZDlmLi41
ZmJjMjA5ZWRlNGQzNDVhNDYwNWIwMGQyNzE3MjA0NWQwNDkyY2U2IDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKQEAgLTQ5OCw3ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0t
dXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEw
MAogQjNPMV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05T
ID0gWyItLW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICIt
LWRlZmF1bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUi
XQotUFJPQkVfT1NSX0VYSVRfT1BUSU9OID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZP
UkNFX0xMSU5UX0VYSVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQog
CiByZXF1aXJlX3JlbGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3sk
dGVzdFdyaXRlcn0iCkBAIC03MTMsNyArNzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRh
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZh
bGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNl
U2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRh
dGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1w
bGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExf
T1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQpAQCAtNzI5LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JW
YWxpZGF0aW9uKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRG
R0VhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIi
LCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVf
T1NSX0VYSVRfT1BUSU9OICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyAr
IENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5v
Q0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZj
YzM3OThmYWQ0MzZjY2IxZDg4M2I1MTlmYTEuLjFjMTAwMGIyOTYzOGM5NTRjOTgyYTA1OGEzY2Q4
MzIzMmYzYjZjMTEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0
byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxk
LWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qczogQWRkZWQuCisgICAg
ICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0
KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvYXBw
bHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qczogQWRkZWQuCisgICAgICAgIChl
eHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAg
ICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJh
cmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNr
RXF1YWwpOgorICAgICAgICAqIHN0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVy
ZW50LWFyZ3VtZW50LWNvdW50LmpzOgorCiAyMDE5LTEyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIEpTRml4ZWRBcnJheSwgYW5k
IHVzZSBKU0ltbXV0YWJsZUJ1dHRlcmZseSBpbnN0ZWFkCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2Nj
YXNpb25hbGx5LmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1s
ZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2YxNWE2
ZWI4YzI3Y2MwYWQyZTlmNTk1NDFmZmUyYzUwYWMwYTIzCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRp
b25zLW9jY2FzaW9uYWxseS5qcwpAQCAtMCwwICsxLDM2IEBACisKK2xldCBjdXJyZW50QXJnQ291
bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJyZW50QXJn
Q291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVl
KCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAg
ICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsKKwor
bGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7
IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7CisgICAgaWYgKGxlbmd0aENhbGxzKysgJSAxMCA9
PSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiBs
ZW5ndGgiKTsKKyAgICByZXR1cm4gY3VycmVudEFyZ0NvdW50Cit9IH0KK2ZvciAobGV0IGkgPSAw
OyBpIDwgMWU2OyBpKyspIHsKKyAgICB0cnkgeworICAgICAgICB0ZXN0KGFycmF5KTsKKyAgICB9
IGNhdGNoIHsgfQorfQorCitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7
Cit0ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBF
cnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3It
ZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3Ny
LWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmVlNDVjZTFjNzI4
MzY1MzgyNzA1ZDk5ZDMwMWFlNmJjYjhkODdhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9z
dHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcwpAQCAtMCwwICsx
LDMxIEBACisKK2xldCBjdXJyZW50QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50
KCkgeworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFy
Z0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisK
K2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJh
eSk7Cit9Citub0lubGluZSh0ZXN0KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRB
cmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7IGxl
bmd0aENhbGxzKys7IHJldHVybiBjdXJyZW50QXJnQ291bnQgfSB9Citmb3IgKGxldCBpID0gMDsg
aSA8IDFlNTsgaSsrKQorICAgIHRlc3QoYXJyYXkpOworCisKK3Rlc3QoYXJyYXkpOworY3VycmVu
dEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2FsbHMgPSAwOwordGVzdChhcnJheSk7CisKK2lmIChs
ZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJvdyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFu
ZC1leGl0LXN0cmljdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGlu
ZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKaW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcy
MDcyZjE0M2U1YzQ2YzI0Mi4uYWE3MzIzMTkwY2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0
YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1j
YWxsLWFuZC1leGl0LXN0cmljdC5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3Mt
dGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1
bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikK
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3Vz
ICIgKyBiLmI7Ci0gICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2
ZXJzdXMgIiArIGIuYzsKKyAgICBpZiAoYS5jLmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5j
Lmxlbmd0aCArICIgdmVyc3VzICIgKyBiLmMubGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMu
bGVuZ3RoOyBpLS07KSB7CiAgICAgICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsg
IjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzIGIv
SlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVu
dC1jb3VudC5qcwppbmRleCAwNDdmYjAxZjg4MzE0NWNjNzU1NGY1Y2Y3MDFhNzA3NGYyNjdkZWVl
Li41M2Q3NTJkZWNkN2QwZjMxYmMyZjFkNzg5OTFjNjkxMDFmMDhiZmYzIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50
LWNvdW50LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1k
aWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKQEAgLTE4LDggKzE4LDggQEAgbm9JbmxpbmUoYmFy
KTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewogICAgIHZhciByZXN1bHQgPSBm
b28oNDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09IDQyKQotICAgICAgICB0aHJvdyAiV3Jvbmcg
cmVzdWx0IGZvciBmb28sIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdDsKKyAgICAgICAgdGhy
b3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1
bHQpOwogICAgIHJlc3VsdCA9IGJhcig0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0g
ICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsg
cmVzdWx0OworICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVj
dGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386053</attachid>
            <date>2019-12-18 19:25:21 -0800</date>
            <delta_ts>2019-12-18 19:40:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218192504.patch</filename>
            <type>text/plain</type>
            <size>667632</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi41YWZiZjFhODU4NGI0MzMx
OTIzMjZjNjZhYjJiOTU5N2QzNDU3ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGlu
ZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludERhdGEuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlND
OjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6ZHVtcFJlZ2lz
dGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAoSlND
OjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0
b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFu
dFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25z
dCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0ganNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2Jq
ZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBiZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29w
ZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdiMGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJl
Li41OWEwMDQzNDgyYWMyM2UwMmI4NmEzOTY5OThhM2IwNTg1MWIyNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxl
IG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJl
bmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0
b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RG
OjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGlnbmVkQWNjZXNzLmg6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRT
dG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2RjY2UwZjgxZWQ0NGM3NGQ2
MGVhNWEwYzYyOGQ4YmZhZDkzMzA4Zi4uY2NlZjFhZmQ0NWRhMTkzMDFjODZhOWY3NTcyMmJhZGEz
N2M4MzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTI1LDYgKzUy
NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL09wY29kZS5o
CiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAgYnl0ZWNvZGUvT3BlcmFuZHMuaAogICAg
IGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
aAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRiY2U1YmFjZWRjMDVjM2RjMGVhOGIwNDMzNDZkMTUxZDBkZWY0NDEuLmIyNjRmNGVkZDM5
NjI2OTA1ZTFiMjJhODJlMWU0MTUyMzU1Njc0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMzhFQkEzMjNBQjA0Qjgw
MDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZU
TFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRE
NyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERE
RUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzU5Nyw2ICszNTk5LDggQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFj
dFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9
IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMx
RDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
dGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29y
ZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEph
dmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMz
OEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2
MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBwYXRoID0gZnRsL0ZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURD
N0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFD
MzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzYxMSw2ICszNjE1LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3
NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0
QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjND
NTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9y
SGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJh
dG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYz
QzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFj
Y2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNz
Q2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkw
MDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MjEsNiArNTUyOCw3IEBACiAJCQkJMEY0ODUzMjYxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEz
RTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywKKwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAz
ODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLywKIAkJCQkwRjI1RjFBQjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJMEYyNUYxQUMxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01OTQ3LDYgKzU5NTUs
NyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJ
CQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJ
CUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJ
NTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgg
Ki8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAog
CQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdD
MUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2
LDcgKzg1ODUsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVy
YXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2
IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1
NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlB
MzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1
NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFD
NDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2
RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAw
MzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk4LDcgQEAK
IAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJ
CQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJ
CTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90
b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0
b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk5LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIw
Mjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMy
MjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNE
REExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMz
OEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyog
Q0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDMyLDYgKzk0NDUsNyBAQAogCQkJCTBG
OUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3Zl
cnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEVCQTMyM0FCMDRCODAw
MzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBl
dFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2Rl
ZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRi
MmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAot
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihG
dW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRy
PHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NF
UlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQq
IHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBm
M2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBm
MTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2Jl
RnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxU
PihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3Rlcikp
OwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJh
bmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBn
ZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFs
dWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFu
ZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZh
bHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
LCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRP
cGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQg
c2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZz
ZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNl
ZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxp
bmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRp
b24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0
IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAg
ICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFu
ZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJh
bmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9w
ZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVm
IEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQx
Nl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5k
OwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+
IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5k
PGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
RmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3Bl
cmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5n
VmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9w
ZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7
CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhW
ZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRP
cGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVy
YW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAg
VmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJ
bnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCA2MDA2
MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFiNGRiZDI2M2Y0
OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGpp
dC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAg
aWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAgICAgICAgICAg
YXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKQEAgLTE3
OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5h
bCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGpp
dC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMwZWU1OGY1ODgu
LjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFy
YW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBqaXQubWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4
Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2Nh
dGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAg
ICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQg
Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2Vu
ZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFz
cyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50
IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZp
cnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5h
bWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAg
cmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgs
MTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZz
ZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNz
IEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1l
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCkt
PmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZp
cnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIp
Iik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQg
Qnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRl
Y29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNv
ZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZh
bHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2Nr
LT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEw
NzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnBy
aW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1l
KGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVh
bFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1
bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCBy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmly
dHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAg
QmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNp
bmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVy
OwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29u
c3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3
ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1
MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lk
IEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAg
ICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApp
bmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4
ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQg
KzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5k
ZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisg
ICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAg
ICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkK
LSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNC
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAg
ICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hv
dWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hl
Y2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsg
fQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNr
ZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0
dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQog
CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAg
ICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBk
ZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJp
dHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNv
bnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhl
ci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3
OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
aW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAot
ICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50
MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisK
KyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1
aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNo
ZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0
KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5
dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAg
ICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAg
IHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDcx
YmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLjY4MGNkZDkxODYwZjMwMWFm
MThkZGViZmEyMjY0ZmEwZTdkNzIwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldh
dGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIs
CiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAg
ICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBh
cmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBk
ZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQog
CiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9wIDp0YWlsX2Nh
bGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5
UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1w
czogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRz
OiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6
IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBAIC04NDUs
NiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQK
KyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6
IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTIs
NyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdp
c3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApAQCAtMTIzOCw2ICsx
MjU5LDggQEAgb3AgOmxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9uYXRp
dmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxs
X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBv
bGluZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGlu
ZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOmhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3Rf
cmV0dXJuX2xvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBi
NmNmZjEwMTE0M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2
ZDNjOTE2Y2U1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBA
IHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5h
bWUgRW51bVR5cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChF
bnVtVHlwZTEgdjEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVu
YW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50
VHlwZTIgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOwor
ICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PElu
dFR5cGUxPih2Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlw
ZTI+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVt
Q2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxt
YXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVn
cmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwp
ICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9w
VGFpbENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0
VmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFy
YXJnczo6YXJnQ291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAg
aWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisgICAgICAgICAgICBy
ZXN1bHQuc2V0KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oCmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzku
LjNlNWVkYzBhNjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIK
ICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3Jh
cGggbV9ncmFwaDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5l
c3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxp
bmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVj
dG9yJiBvdXQsIGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmlu
ZGV4IDNkMTJlMTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEw
OWI3ODk2N2YxMDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaApAQCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVh
bFJlZ2lzdGVySXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJu
ICFWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlz
TG9jYWwoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xp
dmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZp
cnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJl
Zy50b0xvY2FsKCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3Bl
cmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5l
IGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUo
b3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5k
KTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZp
cnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0K
IAogaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CmluZGV4IDg2OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1
YTFiZDJjMTYzZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
Qnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRl
ICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1Nl
dC5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNsb25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9s
VGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAg
ICAgcmVwbGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3lt
Ym9sVGFibGUpOworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNv
bnN0YW50UmVnaXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAg
ICBib29sIHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRD
b2RlLT53YXNDb21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENv
ZGUtPndhc0NvbXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEs
NyArNjQyLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRl
Y29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAg
ICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBw
dXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2Rl
Lm1fdmFyICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1f
c3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJv
bFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkp
OwpAQCAtNzA5LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBl
Qnl0ZWNvZGVMb2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFi
bGVJbmRleCA9IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUo
KS5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBq
c0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxl
Kj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xU
YWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVu
dGlmaWVyKGJ5dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAv
LyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlz
YWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0x
MDg2LDYgKzEwODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZt
LCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JF
eGl0KEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXgu
Y2hlY2twb2ludCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24u
bmV4dCgpLmluZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4
MTEsMTAgKzE4MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0Nv
bXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBw
ZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMg
PSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5z
aXplKCkpOworICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQocHJvZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9m
aWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNl
dCgpOworICAgICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2
ZU9wZXJhbmRzW2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0y
NzEzLDcgKzI3MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJl
ZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8q
IHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2Zp
bGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9m
aWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
eworICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDE0Njc0
MmViMDQ4YTFkMTY2ZjAxNzkxZDU2Y2U1ODE1MGY1MzQyNjYuLjI1MDY3MjYzZTI0NzZkYTFiMmRm
NmQ1ZDJmOGU4MDQzMTVmMzAzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKQEAgLTE2MSw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxl
ZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQg
bnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1D
aGVja3BvaW50VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyBy
ZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZO
dW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1Q
YXJhbWV0ZXJzKTsgfQpAQCAtMjI5LDIwICsyMzAsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
SW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRy
YXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShp
bnQgaW5kZXgpCisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9m
ZnNldCgpICYmICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0
ZXIoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0
dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlz
VGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAg
IHJldHVybiBpbmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkg
Pj0gbV9udW1WYXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNv
ZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6
OkFueUhhbmRsZXIpOwpAQCAtNTgxLDEwICs1ODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Y29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1
cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9
Ci0gICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb25bcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhd
LmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTc3NCw2ICs3NzQsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21w
aWxhdGlvblJlc3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9y
RXhpdChCeXRlY29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JF
eGl0KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3NCw3ICs4NzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAg
ICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwog
Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAK
ICAgICAgICAgRGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAg
fTsKQEAgLTk0MSwxMCArOTQyLDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50
UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMs
IGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7
CiAKLSAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisg
ICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkg
JiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8
c2l6ZV90PihyZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
c2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0
cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1
MWM3MzE4ZWJjMDQzMS4uZjk4MjlhMjg2ZjhhYWJmNGQzMzJmZmYxZTcxZWEzYzgzZjliYzYwYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAs
NyArMTYwLDkgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVD
YWxsRnJhbWUqIHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlv
biYpOworICAgIHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsK
KworICAgIGlubGluZSBib29sIGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkg
Y29uc3Q7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywg
YW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdp
bj4gaW5saW5lU3RhY2soKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggZTRhNTc1YjAzYTdkMWI1OTlh
ZDBkNTZjZWRkZGFmNGJhMDUwMmYzYS4uNDdjNjU3YzhkZjkwMzgzYWY2NWViNWMzYjhhOGIwNTk0
ZDBjNGRhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxC
eXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1
bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTI2LDEyICsyNiwxNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJPcGVyYW5k
cy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBDb2RlQmxvY2s7CiAKKy8v
IE5vdGU6IEZ1bGwgYnl0ZWNvZGUgbGl2ZW5lc3MgZG9lcyBub3QgdHJhY2sgYW55IGluZm9ybWF0
aW9uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiB0ZW1wcy4KKy8vIElmIHlvdSB3YW50IHRtcCBsaXZl
bmVzcyBmb3IgYSBjaGVja3BvaW50IGFzayB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQuCiBjbGFz
cyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CkBAIC00NywxNSArNTEsMTUgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50
IG9wZXJhbmQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxjdWxhdGlv
blBvaW50IHBvaW50KSBjb25zdAorICAgIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxj
dWxhdGlvblBvaW50IHBvaW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmRJ
c0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUo
Z2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgcG9pbnQpLCBvcGVyYW5kKTsKKyAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShyZWcpIHx8IHZpcnR1YWxSZWdpc3RlclRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgcG9pbnQp
LCByZWcpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpczsKICAgICAKLSAgICAvLyBGSVhNRTogVXNlIEZhc3RCaXRWZWN0b3In
cyB2aWV3IG1lY2hhbnNpbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KKyAgICAvLyBGSVhNRTogVXNl
IEZhc3RCaXRWZWN0b3IncyB2aWV3IG1lY2hhbmlzbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDI3PFBhc3Rl
PgogICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9i
ZWZvcmVVc2VWZWN0b3I7CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX2FmdGVyVXNlVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCmluZGV4IDk3NTA4YmJmMGM0NWNiOTdhNDc4NTE1
OTcwNDE3MWRkZjZkZDFkYTMuLmEwYWE3YzA5MjQ0Zjk5NTZiZWYxZmI5ODM4YjU2MmMxNDg5OTk0
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxs
RnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZy
YW1lLmgKQEAgLTE3OSw3ICsxNzksOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBX
cml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKICAgICBDb2RlT3JpZ2lu
IGRpcmVjdENhbGxlcjsKIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IHsgMCB9OyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5zaWduZWQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgorICAgIHVu
c2lnbmVkIHRtcE9mZnNldCA6IDEwOwogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4OwogICAg
IHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wgaXNDbG9z
dXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9zY29wZSBh
cmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFibGVzLCBp
LmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCkBAIC0xOTEsNyArMTkyLDkg
QEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgLy8gSW5saW5lQ2FsbEZyYW1lJ3MgZmll
bGRzLiBUaGlzIGNvbnN0cnVjdG9yIGlzIGhlcmUganVzdCB0byByZWR1Y2UgY29uZnVzaW9uIGlm
CiAgICAgLy8gd2UgZm9yZ290IHRvIGluaXRpYWxpemUgZXhwbGljaXRseS4KICAgICBJbmxpbmVD
YWxsRnJhbWUoKQotICAgICAgICA6IHN0YWNrT2Zmc2V0KDApCisgICAgICAgIDogYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoMCkKKyAgICAgICAgLCB0bXBPZmZzZXQoMCkKKyAgICAgICAgLCBz
dGFja09mZnNldCgwKQogICAgICAgICAsIGtpbmQoQ2FsbCkKICAgICAgICAgLCBpc0Nsb3N1cmVD
YWxsKGZhbHNlKQogICAgIHsKQEAgLTIxOSw2ICsyMjIsMTIgQEAgc3RydWN0IElubGluZUNhbGxG
cmFtZSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhY2tP
ZmZzZXQpID09IG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBzZXRUbXBPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgdG1wT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG1wT2Zmc2V0KSA9PSBvZmZzZXQp
OworICAgIH0KKwogICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVyRnJh
bWVPZmZzZXQoKTsgfQogICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJuUENP
ZmZzZXQoKTsgfQogCkBAIC0yNDcsOSArMjU2LDkgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb25zdCBDb2RlT3JpZ2kK
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMg
ZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0IG5lZWRzIGFjY2Vz
cyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFtZQorLy8gVGhlc2Ug
ZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0
IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFt
ZQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6
d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoraW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKSBj
b25zdAogewogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOwogICAgIHdoaWxlICh0
cnVlKSB7CkBAIC0yNjEsMTEgKzI3MCwzOCBAQCBpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxr
VXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitpbmxpbmUgYm9vbCBDb2RlT3Jp
Z2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0Cit7CisgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICB3YWxrVXBJbmxpbmVTdGFjayhbJl0gKENvZGVPcmln
aW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9p
bnQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRt
cE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
OworICAgIHJldHVybiBvcGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBP
cGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQoreworICAgIHJldHVybiByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5k
KHJlZykpOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihyZWcub2Zmc2V0
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnOworICAg
ICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sK
KyAgICByZXR1cm4gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4IGJmYjk0YjM1ZmNk
NjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5NTU1MmViZjM4ZjdiNGFi
MmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJPcGVy
YW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBP
cGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNjksNyArNzAsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICAg
ICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJhbmQudmFsdWUoKSArIG1f
b3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
Ynl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCgpIGNv
bnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
ISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkwLDcgKzkxLDcgQEAgcHVi
bGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4
OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3BlcmFuZCBtX29wZXJhbmQ7
CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlIYXNoIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1NTc4OWRmZmRlNjdmMzk2
Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4YmMwNjcwNDcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3IEBAIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlP
cGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsKICAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwotICAgIHJlc3VsdC51Lmxh
enlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOworICAgIHJlc3VsdC51
LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFsdWVSZWcKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7Ci0gICAgICAgIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBW
aXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7CisgICAgICAgIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCB1Lmxh
enlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFsdWUgdmFsdWUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1
YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9w
ZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1Lmxh
enlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKaW5kZXggNWQ4MWM0Yzkw
MGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBjMDBmYmQ0NGM4NTVhMzg5
ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCkBAIC0xMDYsNyAr
MTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldDsK
LSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kOwog
ICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWViMzczNDU5NDQ2ZGM3NGNk
MTIwMjc1NjI1NzYuLmQ0OWM2ZDc0N2Q2YmE2MmQ5OTUwM2JlMjMyNmI0Zjk3YzdjOWE1ZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTExICsz
NSwyMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBP
cGVyYW5kVmFsdWVUcmFpdHM7CiAKLWVudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQs
IExvY2FsT3BlcmFuZCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heE51bUNoZWNrcG9pbnRUbXBz
ID0gNDsKKworLy8gQSBUbXBPcGVyYW5kIGlzIG9uZSB0aGF0IGV4aXN0cyBmb3IgZXhpdGluZyB0
byBhIGNoZWNrcG9pbnQgYnV0IGRvZXMgbm90IGV4aXN0IGJldHdlZW4gYnl0ZWNvZGVzLgorZW51
bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kLCBUbXBPcGVyYW5k
IH07CisKK2NsYXNzIE9wZXJhbmQgeworcHVibGljOgorICAgIE9wZXJhbmQoKSA9IGRlZmF1bHQ7
CisgICAgT3BlcmFuZChjb25zdCBPcGVyYW5kJikgPSBkZWZhdWx0OworCisgICAgT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgOiBtX2tpbmQob3BlcmFuZC5pc0xvY2Fs
KCkgPyBMb2NhbE9wZXJhbmQgOiBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQub2Zmc2V0KCkpCisgICAgeyB9CisKKyAgICBPcGVyYW5kKE9wZXJhbmRLaW5kIGtp
bmQsIGludCBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQorICAgIHsgCisgICAgICAgIEFTU0VSVChraW5kID09IFRtcE9wZXJhbmQg
fHwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9jYWwoKSA9PSAoa2luZCA9PSBMb2NhbE9w
ZXJhbmQpKTsKKyAgICB9CisKKyAgICBPcGVyYW5kS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CisgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kICE9IFRtcE9wZXJhbmQpOworICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCk7CisgICAgfQorICAgIHVpbnQ2NF90IGFzQml0cygpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oKnRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJh
bmQgZnJvbUJpdHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4ga2luZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2Nh
bCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lz
dGVyKCkuaXNMb2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSAhPSBUbXBPcGVyYW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKwor
ICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29u
c3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwo
KTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBB
cmd1bWVudE9wZXJhbmQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjpp
bnZhbGlkVmlydHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFu
ZDo6b3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2lu
ZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1Rt
cCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5s
aW5lIGJvb2wgT3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcigp
LmlzVmFsaWQoKTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0
X3QgdmFsdWUpCit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4o
dmFsdWUpOworICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3Qp
LCAiT3BlcmFuZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNM
aWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBP
cGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1l
bnRzKDApIHsgfQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVu
dHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9u
YWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0
aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+Owor
ICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVf
djxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7
CisKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVt
TG9jYWxzLCBzaXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1
bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAg
aWYgKFdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAg
ICAgICBtX3ZhbHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBu
dW1Mb2NhbHMpOwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRz
ICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAg
ICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAg
ICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0
aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAg
ICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2Nh
bHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUs
IG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJn
dW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5p
dGlhbFZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBl
eHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhl
cikKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRz
PFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVt
QXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2Nh
bHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwo
VCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7
CisgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMu
ZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51
bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1
bWVudHM7IH0KLSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX251bUxvY2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMo
KTsgfQorCisgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVf
dCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQo
aWR4IDwgbV9udW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1
bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBs
b2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1B
cmd1bWVudHMgKyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsK
KyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAg
UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07
IH0KKyAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAg
IH0KLSAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5
cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChp
ZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNv
bnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5k
ZXgoaWR4KV07IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFs
dWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlk
eCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQp
CisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5k
OgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6
CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQogICAgIH0K
ICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXpl
X3QgaWR4KQorICAgIFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlm
IChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFu
ZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRt
cChpZHgpOworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVy
biBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2Fz
ZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAg
fQogICAgIH0KICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25z
dCBUJiBhdEZvcihzaXplX3QgaWR4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXpl
X3QgaWR4KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50
T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRt
cE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJn
dW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAg
IHJldHVybiBsb2NhbChpZHgpOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAg
ICAgIHJldHVybiBsb2NhbChpZHgpOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHZvaWQg
ZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90
IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVf
dCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1f
bnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAg
ICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsK
IAorICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZlRtcHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxv
Y2FscygpOworICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAg
ICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJh
aXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1f
dmFsdWVzW2ldID0gVCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRt
cHM7ICsraSkKKyAgICAgICAgICAgIG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVl
c1t0bXBJbmRleChvbGROdW1UbXBzIC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9
IHNpemU7CisgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRy
YWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplIC0gb2xkTnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92
YWx1ZXNbbG9jYWxJbmRleChvbGROdW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3Qg
VCYgZW5zdXJlZFZhbHVlKQorICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3Qg
VCYgZW5zdXJlZFZhbHVlID0gVCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBt
X3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMg
KyBzaXplOwotICAgICAgICBpZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6
ZSA8PSBudW1iZXJPZlRtcHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1f
dmFsdWVzLmdyb3cobmV3U2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBp
IDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3Vy
ZWRWYWx1ZTsKKworICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0
b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFs
dWVzW2ldID0gZW5zdXJlZFZhbHVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
c2V0TG9jYWwoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3Miw3NiBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2Nh
bChpZHgpID09IFQoKSk7CiAgICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAg
ICAKLSAgICBzaXplX3Qgb3BlcmFuZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVm
VHlwZSBnZXRGb3JPcGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tp
bmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVy
YW5kSW5kZXgoaW5kZXgpOyB9CisKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRv
QXJndW1lbnQoKSk7CisgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgp
KTsKICAgICB9CiAgICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyKSBjb25zdAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBv
cCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lz
dGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0
dXJuIG9wZXJhbmRJbmRleChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0
bXBJbmRleChvcC52YWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3Bl
cmFuZCkKKyAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAg
ewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0g
ICAgICAgIHJldHVybiBsb2NhbChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJh
bmQudG9Mb2NhbCgpKTsKICAgICB9CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIpCisgICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewot
ICAgICAgICByZXR1cm4gb3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAg
ICBpZiAoIW9wLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0g
ICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQp
KTsgfQotICAgIGNvbnN0IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlz
KS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRo
aXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFu
ZCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9w
ZXJhbmQob3BlcmFuZCk7IH0KICAgICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQp
IGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25z
dAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAg
ICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0K
LSAgICBib29sIGhhc09wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29s
IGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNP
cGVyYW5kKHJlZy5vZmZzZXQoKSk7CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAg
ICAgICBBU1NFUlQob3AudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG9wLnZhbHVlKCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGhhc09wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAg
IHZvaWQgc2V0T3BlcmFuZChPcGVyYW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsK
ICAgICAgICAgdGhpcy0+b3BlcmFuZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3Qg
VCYgdmFsdWUpCi0gICAgewotICAgICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZz
ZXQoKSwgdmFsdWUpOwotICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fdmFsdWVzW2luZGV4XTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAg
Ym9vbCBpc0xvY2FsKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5k
ZXgpOyB9Ci0gICAgaW50IG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAg
Q29uc3RSZWZUeXBlIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgUmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2lu
ZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChz
aXplX3QgaW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFy
Z3VtZW50cygpKQotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4KS5vZmZzZXQoKTsKLSAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRl
eCkpOworICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4
KTsKKyAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
bmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBP
cGVyYW5kLCBpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkp
OwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQs
IGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9w
ZXJhbmQpKSB7Ci0gICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0xvY2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lk
IGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92
YWx1ZXMuc2l6ZSgpOyArK2kpCkBAIC0yNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQVNTRVJUKG51bWJlck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVu
dHMoKSk7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9m
TG9jYWxzKCkpOworICAgICAgICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVy
T2ZUbXBzKCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1f
dmFsdWVzOwogICAgIH0KQEAgLTI2NSw5ICszNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZp
cnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFy
ZSBsb2NhbHMuCi0gICAgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVl
czsKLSAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1B
cmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMg
YXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7
CisgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1M
b2NhbHMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4
MzkxZjgzMTU2M2RiZGViODE2YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFm
ZGY2N2E3ZDllZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
ZXJhbmRzSW5saW5lcy5oCkBAIC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
aW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGlmIChpc1RtcCgpKQorICAgICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVs
c2UKKyAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2
b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2Fs
SW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsg
dG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRt
cCh0bXBJbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRl
eHQpKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBA
QCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRl
eCwgIjoiLCBsb2NhbChsb2NhbEluZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcElu
ZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAg
ICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAg
fQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIz
YjFmZDVmMWFjY2NjYzA1MDJjMTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYz
M2I5MmI0NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6
VW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUg
Y29kZQogICAgICwgbV9jb2RlVHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQog
ICAgICwgbV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkp
CiAgICAgLCBtX2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1f
cGFyc2VNb2RlKGluZm8ucGFyc2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShj
b2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJs
ZTo6Y3JlYXRlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCmluZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2
NTUxYTUuLjMwODJiMGEyNjNjMzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBA
IC0xNDEsNiArMTQxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7
IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvOyB9CiAKKyAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXND
aGVja3BvaW50czsgfQorICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2tw
b2ludHMgPSB0cnVlOyB9CisKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0
VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0
ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3Rlcjsg
fQpAQCAtMTk4LDkgKzIwMSw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8
V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25z
dGFudFJlZ2lzdGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQor
ICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0Nv
bnN0YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQo
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1ty
ZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsg
cmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZkNvbnN0YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7
IH0KQEAgLTQxOSw2ICs0MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1p
emUgOiAyOwogICAgIHVuc2lnbmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUg
PDwgMykgLSAxKSA+PSBtYXhBZ2UpOworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBw
dWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUz
MTA0MDNhN2ZjZWYyYjIxZTExODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMx
NjRlOWM3OTA5YTY5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKQEAgLTE3NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVBy
CiAgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1
Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGlu
dCBtX29wZXJhbmQ7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVi
bGljIFZhbHVlUHJvZmlsZSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAK
LXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FM
TE9DQVRFRDsKIAotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6
ZSkKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6
ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1
ZVByb2ZpbGUgaGFzIG1vcmUgc3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0
aGVzZSB2YWx1ZSBwcm9maWxlcwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVu
dC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTQxMwotICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
Pjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAg
ICAgIG1fYnVmZmVyID0gTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46
Om1hbGxvYyhtX3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAg
ICAgIG5ldyAoJm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyKCk7CiAgICAgfQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIo
KQorICAgIH5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAg
bV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAg
IG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVu
c2lnbmVkIG1fc2l6ZTsKLSAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9i
dWZmZXI7CisgICAgTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9i
dWZmZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRj
MzVhYjFlYTMyZGMxY2JmNDVmM2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZm
ZWRjMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwCkBAIC0zNSwyMiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNv
dmVyKENhbGxGcmFtZSogY2FsbEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVl
KCkpIHsKICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2Fz
ZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAg
ICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJv
eGVkSW50MzIoKSk7CiAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSku
dW5ib3hlZEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAg
ICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVk
U3RyaWN0SW50NTIoKSk7CiAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAg
ICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpKS51bmJveGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KHB1cmlmeU5hTihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUo
KSkpOwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAg
ICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwo
KTsKICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cigpKS5qc1ZhbHVlKCk7CiAjZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJv
eGVkQm9vbGVhbigpKTsKICNlbmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVy
biBjb25zdGFudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUmVjb3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJl
Y292ZXJ5LmgKaW5kZXggZDhmMThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4u
NWU0M2JjNzJiYmNjNGZmOTdhNjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5
NTI5NDJkMmI4NmJhYjEyZjZjY2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYw
YzNiMDAzMTc2ZmU2NjU5MjRkZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5l
IGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4g
b3BlcmFuZCA8IDA7CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVy
YW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkK
IHsKICAgICByZXR1cm4gb3BlcmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1Ymxp
YzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGlu
dCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpbnQsIGludCk7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyID0gMHgzZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmly
dHVhbFJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJl
Z2lzdGVySUQ+KTsKIAogICAgIFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFs
UmVnaXN0ZXIoc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJl
Z2lzdGVyKGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBW
aXJ0dWFsUmVnaXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsgfQotICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIG9wZXJhbmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIo
c3RhdGljX2Nhc3Q8aW50PihzbG90KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KTsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcklz
TG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0K
ICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0g
MCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQot
ICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49
IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0
dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3Vt
ZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25z
dCB7IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2Zp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNv
bnN0IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7
IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2
LDkgKzExMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVh
bFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAg
ICBzdGF0aWMgaW50IGxvY2FsVG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2Nh
bDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJu
IC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9w
ZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2Fk
Y2JkNzg3ZTMuLjhkMmE3ZmI4MjQ3NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCkBAIC0xMTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKTsKICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAg
ICAgYXV0byYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0
SW5kZXgocmVnLm9mZnNldCgpKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBt
X2NvZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBA
IC0xMTk2LDcgKzExOTYsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFy
YW1ldGVycyhGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBjb2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5k
IG1ha2Ugc3VyZSB0aGF0IHBhcmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcg
YXJlIG5vdGVkLgotICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFy
YW1ldGVyKCktPmluZGV4KCkpOyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgo
VmlydHVhbFJlZ2lzdGVyKGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8g
dGhpcwogCiAgICAgYm9vbCBub25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSAr
MTYzNywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3Ry
dWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5t
X2RzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3Au
bV9kc3QKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYm
IG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAg
ICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSku
Z2V0KCkuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFz
U3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgp
KS0+dHJ5R2V0VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3Rlcigp
LmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwog
ICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAg
cmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3Qs
IG9wLm1fdmFsdWUpOwpAQCAtMzIyOSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1
bmMKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkp
OwogICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJn
dW1lbnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3Rl
ciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5oYXNDaGVja3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5k
ZXggOTNiMTNmNmRhODE5ZTMxZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2
NjcxMzgzYTBjZTQ2YWQzYzZmZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsx
MDA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xG
bG93UHJvZmlsZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNv
bnRhaW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAg
ICAgCiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpOyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkg
eyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBh
cnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2Rl
KCk7IH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
UmVnaXN0ZXJJRC5oCmluZGV4IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3
ODAuLmY4MTliMTIzZDRkODliYTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiAr
NjksMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgc2V0SW5kZXgoaW50IGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxS
ZWdpc3RlciBpbmRleCkKICAgICAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1f
ZGlkU2V0SW5kZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3Rl
ciA9IFZpcnR1YWxSZWdpc3RlcihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3Rl
ciA9IGluZGV4OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2Zl
ZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0
MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQ
YXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2
YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0
LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9t
Qml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBA
QCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAg
ICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFs
dWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09
IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVt
cEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3
MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0
Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNs
dWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNp
bmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgog
ICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAg
ICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAg
ICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9m
ZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAg
IHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBw
cml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBr
aW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAg
ICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlz
LT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQog
ICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBA
IC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3Js
ZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXls
b2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAg
ICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0K
ICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKaW5kZXggNjRhY2I1NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4u
NWQ5ZTE3YzkwYTJjNWI1MTgyYjM2NTYxMjg3NjFkODUzNzE4NDU3NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaApAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAg
ICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3Rh
dGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRo
ZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJp
YWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1
ZSgpKQpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAg
IAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0g
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBt
X3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVl
ID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUg
aW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0
KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApA
QCAtNDI5LDcgKzQyOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFz
c2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVu
dERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVv
bmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhp
cyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4K
LSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0Ns
ZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRB
cmd1bWVudHM6IHsKQEAgLTQ1OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAg
ICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFy
YXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBk
b2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2Ji
ZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxU
eXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1p
dCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRh
dGEtPnN0YXJ0ICsgaSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC0yMzU4LDcgKzIzNjQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAg
dW5zaWduZWQgYXJndW1lbnRJbmRleDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hl
Y2tlZC5zYWZlR2V0KGFyZ3VtZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cp
IHsKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5k
ZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2Rl
KG5vZGUsIG1fc3RhdGUub3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldFNo
b3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKaW5kZXggZDczMjQ3YjkzYzVkYzc4NmI2MTdhYTVh
YWRjMmIwZjYxNTI4NmI1Zi4uODljMDhmYTA4MGNlYTMyZmQ5YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0
aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9u
LmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlc1tpXS0+ZmluZCgpOwotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CiAKICAgICAg
ICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiICIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAKaW5kZXggYWYyZWRhNGFkODhlOWI5N2FhZDVmNGY5MzkyMzc2MjE5NTJhZWY4NC4u
MTU1MTg2ZDBiZjgyMjVmMTkxNTVmYzgzM2IzMzAwMGE3ZjVkOTllZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhh
c2UuY3BwCkBAIC0zNTgsOSArMzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgot
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAm
JiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJh
eUJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCks
IG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCkt
Pm9mZnNldCAmJiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheVdpdGhT
cHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+
YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlc2NhcGUobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSwgbm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtNDkzLDEwICs0OTYsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxv
YWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gaGVhcC5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVnaXN0
ZXIgbWF5IG5vdCBwb2ludCB0byBhbiBhcmd1bWVudCBvciBsb2NhbCwgZm9yIGV4YW1wbGUgaWYg
d2UgYXJlIGxvb2tpbmcgYXQgU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKG9wZXJhbmQpID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENs
b2JiZXJpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC01NjAsMTYgKzU2MywxNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBj
bG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2sgfHwgaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDEpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSAr
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldChpKTsKQEAgLTYyNyw3ICs2MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCBoZWFwKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3Rh
Y2sgJiYgIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxs
RnJhbWUsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTgwNiw3ICs4MDksNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNhZmVUb0dldFN0
YWNrID0gaW5kZXggPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNhZmVUb0dldFN0YWNrICY9IGluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0
U3RhY2sgJj0gaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkgLSAxOwpAQCAtODQ1LDkgKzg0OCwyMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9u
KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0
ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2Fu
IGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7
CisKKworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRD
b2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9k
ZUluZGV4LCBvcmlnaW4sIC8qIGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBu
b2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBu
b2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0
YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0Rh
dGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKQEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgICAgICAgICAgYXV0byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1
ZSwgdW5zaWduZWQgc3RvcmVJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQp
LCBPcEluZm8ocmVnLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChj
YW5FeGl0KSwgT3BJbmZvKHJlZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBT
cGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1
ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ss
IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1ZSkpOwpAQCAtOTM1LDcgKzk1Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUt
Pm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJh
bWVBcmd1bWVudENvdW50IC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtOTgzLDcgKzEwMDEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+
b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvYWRJbmRl
eCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBsb2FkSW5kZXggPCBmcmFtZUFyZ3VtZW50Q291
bnQ7ICsrbG9hZEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJ
bmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBo
Lm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKQEAgLTEwMTksOSAr
MTAzNyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkgewotCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
ICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZz
ZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC09IHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CkBAIC0xMDMwLDcgKzEwNDYsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5t
YW5kYXRvcnlNaW5pbXVtLCB2YXJhcmdzRGF0YS0+bGltaXQsIHZhcmFyZ3NEYXRhLT5tYW5kYXRv
cnlNaW5pbXVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzVXRpbGl0aWVzLmNwcAppbmRleCA2MjYxMTIzY2JmZWMzZWJhMTk1ZDA5YjkzMTAyNmYyNmM3
MjU4NDc2Li5hOGQzODQ2NWNlNDhhOWQ4ZjU0MjAwYmM3NDk2Y2I3NGFlOGQ2NmQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3Bw
CkBAIC0zMiwxMSArMzIsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFj
a1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkK
IHsKKyAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIChyZWcuaXNBcmd1bWVudCgpICYm
IHJlZy50b0FyZ3VtZW50KCkpIHx8IHJlZy5pc0hlYWRlcigpOwotICAgIAorCiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAogICAgICAgICAmJiByZWcgPT0gVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ2LDE5ICs1MCwxOSBAQCBib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBXZSBkbyBu
b3QgaW5jbHVkZSBmaXh1cHMgaGVyZSBzaW5jZSBpdCBpcyBub3QgcmVsYXRlZCB0byB8YXJndW1l
bnRzfCwgcmVzdCBwYXJhbWV0ZXJzLCBhbmQgdmFyYXJncy4KLSAgICB1bnNpZ25lZCBudW1Bcmd1
bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsK
KyAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudFN0YXJ0ID0KICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQpICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKICAg
ICByZXR1cm4gcmVnID49IGFyZ3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51
bUFyZ3VtZW50czsKIH0KIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNh
bmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChOb2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJn
dW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKSwgcmVnKTsKKyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChj
YW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9
CiAKIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRp
b25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgs
IE5vZGVPcmlnaW4gb3JpZ2luKQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2Rl
KiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wg
YWRkVGhpcykKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApA
QCAtNjksMTEgKzczLDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0
aCgKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAg
IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50
cy0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+
b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5l
d0FycmF5QnVmZmVyCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkLAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAg
ICAgYXJndW1lbnRzLT5vcCgpKTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bVNwcmVhZCkKKyAgICAgICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0
aChpbnNlcnRpb25TZXQsIGFyZ3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9y
aWdpbiwgYWRkVGhpcyk7CisKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1
bWVudHMgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9
IGFkZFRoaXM7CiAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRW
ZWN0b3IoKTsKICAgICAgICAgTm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpA
QCAtMTAzLDcgKzExMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0
aCgKIAogICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5z
ZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4s
IGpzTnVtYmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigp
LT5sZW5ndGgoKSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFy
Z3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSAr
IGFkZFRoaXMpKTsKICAgICB9CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAg
LTExMyw3ICsxMjAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
CiAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6
ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAg
ICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+
PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0
IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVu
Y2hlY2tlZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5k
ZXgsIG9yaWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJV
c2UpKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCArICFhZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkgewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5
IHByb2R1Y2UgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdl
IGNvcnJlY3QgdGhhdCBoZXJlLgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9y
aWdpbiwgCiAgICAgICAgICAgICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNO
dW1iZXIoMCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29u
c3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVz
ZSkpOwogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGls
aXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVz
LmgKaW5kZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5
ZTgxNjIyZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wg
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rl
cik7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3Bl
cmFuZCk7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBP
cGVyYW5kKTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAg
IEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2Rl
T3JpZ2luKTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5v
ZGVJbmRleCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2
MWRlY2MyOGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgKQEAgLTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVy
T2ZBcmd1bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0
cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJh
bmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAg
ICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52
YWx1ZXNBdFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQo
c2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5k
ZXgpOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eU1hcC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJh
NS4uYzJiNTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAg
KzY1LDEwIEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWls
YWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVy
ZSkKIHsKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVt
YmVyT2ZBcmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5
Ojp1bmF2YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHko
T3BlcmFuZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAg
ICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAg
ICAgICAgICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVn
KTsKICAgICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1
NTI1NjAyM2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1
OTZkYTI0ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxp
dHlNYXAgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0
eXBlbmFtZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3Im
IGFkZCkKKyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3Qg
SGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBB
dmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAg
ICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAg
ICAgIGlmICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRl
eCAwNTg0NDk2M2U2MTBlZDI5M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYx
NTYxOGI4MDY0YTNhN2IyZDc4NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMs
IGZsb2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9j
YWxzLCB1bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVj
b2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwx
MSArNDgsMTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
QmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNl
KQogI2VuZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVh
ZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKLSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAs
IGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
QWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50
cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFk
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9w
KCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYg
KzcwLDE1IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxv
Y2FscykKICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Js
b2NrOjplbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRI
ZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRt
cHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7
CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0
aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1
ZTo6ZnVsbFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5k
VGVybWluYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5k
ZXggYjVhZGYwOTEyZDA5NDJiZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRj
NmY0ZDFiMDg1YmM4ZTA2MjU0ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgKQEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2Rl
KiwgOD4gQmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJh
c2ljQmxvY2s+IHsKICAgICBCYXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywg
dW5zaWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVj
dXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxv
Y2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25l
ZCBuZXdOdW1UbXBzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUo
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2Vy
dGlvblNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAppbmRleCA3NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4w
MDhjZjUyMjY5NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyAr
NTEsNyBAQCB2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8
QmFzaWNCbG9jaz4mJiBibG9jaykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omlu
c2VydChzaXplX3QgaW5kZXgsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCks
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBt
X2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0
aW9uQ291bnQpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZlRtcHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0
cnVlOwogICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwg
V1RGTW92ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAppbmRleCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQw
OGI3Li4wMTM0MjEyNzQ3NjAxMTIzNGMxNGExMWFmYWNmYzQyNTI5MTU5ODljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYg
KzExMSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShq
c051bWJlcigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCkpCisgICAgICAgICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAg
ICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJn
cygwKQogICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdO
dW1Mb2NhbHMpOwogICAgIH0KIAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1U
bXBzKQorICAgIHsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZVRtcHM6IHRyeWluZyB0
byByYWlzZSBtX251bVRtcHMgZnJvbSAiLCBtX251bVRtcHMsICIgdG8gIiwgbmV3TnVtVG1wcywg
IlxuIik7CisgICAgICAgIGlmIChuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisgICAgICAgICAgICBt
X2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIH0KKworCiAgICAg
Ly8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NG
dW5jdG9yPgogICAgIGJvb2wgaGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5v
ZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKQEAgLTI3MCwyNSArMjgy
LDMzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxC
YXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3Nz
aWJsZVRhcmdldHMpOwogICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcHJvZ3Jlc3NDaGVj
a3BvaW50KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpICsgMSk7
CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisg
ICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisg
ICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CisgICAgfQorCisgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVy
YW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsK
ICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKG9w
ZXJhbmQpOwogICAgICAgICByZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFz
dCgpOwogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2Yg
YSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgTm9kZSogZ2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQo
b3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQo
KSk7CiAKLSAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQp
OworICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOwogCi0gICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KLSAgICAgICAgcmV0dXJuIGdldExv
Y2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZ2V0TG9jYWxPclRtcChvcGVyYW5kKTsKICAg
ICB9CiAKICAgICBOb2RlKiBnZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCkBAIC0yOTgsOCAr
MzE4LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0
YW50cy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8
ICFtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSkgewogICAgICAgICAgICAgICAgIGNvbnN0IENv
ZGVCbG9jayYgY29kZUJsb2NrID0gKm1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFu
ZC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihvcGVyYW5kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxv
Y2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSkgewogICAgICAgICAgICAgICAgICAg
ICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytp
KQpAQCAtMzU4LDkgKzM3OCwxMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBpbml0aWFsaXppbmcg
bG9jYWxzIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlvbi4KICAgICAgICAgSW1tZWRpYXRlTmFrZWRT
ZXQKICAgICB9OwotICAgIE5vZGUqIHNldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
Tm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKworICAgIE5vZGUqIHNl
dERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBO
b3JtYWxTZXQpCiAgICAgewotICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVy
YW5kLm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhvcGVyYW5kKSwgdmFsdWUpOwogCiAgICAgICAgIC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBi
ZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgbV9leGl0T0sg
PSBmYWxzZTsKQEAgLTM3NCw3ICszOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
cmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHBy
b2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpCkBAIC0zOTIsMTggKzQxMywxNyBAQCBw
cml2YXRlOgogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAg
IEFTU0VSVChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpID09IG1fY3VycmVu
dEluZGV4KTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7CisgICAgICAgIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+b3BlcmFu
ZCgpKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tU
b3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwogICAgICAgICBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwg
YWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCi0gICAgTm9kZSog
Z2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgTm9kZSogZ2V0TG9jYWxPclRt
cChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJh
bmQudG9Mb2NhbCgpOwotCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAo
KSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAg
ICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2Vz
cyBkYXRhcywgYW5kIDIpCiAgICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRh
bnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCkBAIC00MjgsMjAgKzQ0OCwyNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3Bl
cmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxh
dGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7Ci0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIE5vZGUqIHNldExvY2FsKGNvbnN0IENvZGVPcmln
aW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUs
IFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNv
bnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZh
bHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgeworICAgICAgICBBU1NFUlQo
b3BlcmFuZC5pc1RtcCgpIHx8IG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgU2V0Rm9yU2Nv
cGU8Q29kZU9yaWdpbj4gb3JpZ2luQ2hhbmdlKG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1h
bnRpY09yaWdpbik7CiAKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwo
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KSB7
Ci0gICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFy
Z3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKSA+PSBtX251bVRt
cHMpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oKmlubGluZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigi
QmFkIG9wZXJhbmQ6ICIsIG9wZXJhbmQsICIgYnV0IGN1cnJlbnQgbnVtYmVyIG9mIHRtcHMgaXM6
ICIsIG1fbnVtVG1wcywgIiBjb2RlIGJsb2NrIGhhczogIiwgbV9wcm9maWxlZEJsb2NrLT5udW1U
bXBzKCksICIgdG1wcy4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgp
KSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24g
PSBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJn
dW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1
bWVudFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJl
Z2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAg
ICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0g
bV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgICAgICBmbHVzaChvcGVy
YW5kKTsKICAgICAgICAgfQogCkBAIC00NTEsNyArNDc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
dmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50
aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9k
ZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
LCB2YWx1ZSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
bG9jYWwpID0gbm9kZTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBA
IC00ODMsMjAgKzUwOSwyMSBAQCBwcml2YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1h
bnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9y
aWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1v
ZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVP
cmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmln
aW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
OworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAg
IEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShyZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBm
bHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBmb3IgJ3RoaXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBi
eSB1cywKICAgICAgICAgLy8gdGhlbiBtYWtlIHN1cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQu
CiAgICAgICAgIGlmIChhcmd1bWVudCB8fCBtX2dyYXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewog
ICAgICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAg
ICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qo
cmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2Nv
ZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUz
MiwxNCArNTU5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBv
c2l0aW9uc1thcmd1bWVudF07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5k
QXJndW1lbnRQb3NpdGlvbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBv
c2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihPcGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAg
ICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmaW5k
QXJndW1lbnRQb3NpdGlvbkZvckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAg
ICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAg
IHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVu
Yz4KQEAgLTU1MCw5ICs1NzksOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2dy
YXBoLmhhc0RlYnVnZ2VyRW5hYmxlZCgpKTsKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsKICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgYWRkRmx1
c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgICAg
IGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxG
cmFtZSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxp
bmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgICAgIGFkZEZs
dXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIG51bUFyZ3VtZW50cyA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2Fs
bEZyYW1lKS0+bnVtUGFyYW1ldGVycygpOwogCkBAIC01NzUsNiArNjA0LDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGlu
ZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9j
ayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgdG1w
cyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQgdG8gdGhl
IHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRlY29kZSA9
IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFwcHJvcHJp
YXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4pKTsKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRC
eXRlY29kZVtsb2NhbF0pCkBAIC01ODQsMjcgKzYxNCwyNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGly
ZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9p
ZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVj
dChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCi0gICAg
dm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFu
ZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGFk
ZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQgYWRkRmx1
c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoT3Bl
cmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChv
cGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgp
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02MTQsMjYg
KzY0NCwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9HcmFwaChu
b2RlVHlwZSwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChhcmd1bWVu
dFBvc2l0aW9uKQogICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFy
aWFibGUpOwogICAgIH0KIAotICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQgb3BlcmFu
ZCkKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxvY2FsPihv
cGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgdm9p
ZCBmbHVzaChJbmxpbmVTdGFja0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKLSAgICAg
ICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJl
Z2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNo
RGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hE
aXJlY3Qob3BlcmFuZCk7IH07CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0VudHJ5LT5t
X2lubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZvaWQgZmx1
c2hGb3JUZXJtaW5hbCgpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZd
IChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJl
Zyk7IH07Ci0gICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVD
YWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVjdChyZWcp
OyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
LCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAgICAgIGF1
dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5k
IG9wZXJhbmQpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVz
aEZvclRlcm1pbmFsSW1wbChjdXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVjdCwgYWRk
UGhhbnRvbUxvY2FsRGlyZWN0KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3OTAsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykp
OwogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBOb2RlKiBh
ZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxkMSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIGFkZFRv
R3JhcGgob3AsIE9wSW5mbyhvcGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZhbHVlKCkp
LCBjaGlsZDEpOworICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcElu
Zm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgp
LCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1f
Z3JhcGguYWRkTm9kZSgKQEAgLTEwOTEsOCArMTEyNSwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8g
VGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICB1bnNp
Z25lZCBtX251bUFyZ3VtZW50czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyAr
IHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVtYmVyIG9m
IGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBmb3IgdGhl
IGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBtYXggbnVt
YmVyIG9mIHRlbXBzIHVzZWQgZm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhpdCB0byBj
aGVja3BvaW50LgorICAgIHVuc2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVtYmVyIG9m
IHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KICAg
ICAvLyBwcmVhbGxvY2F0ZSBmb3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZyb20gdGhp
cyBmcmFtZS4gVGhpcwogICAgIC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1lIHNsb3Rz
IHRoYXQgd2UgaW5pdGlhbGl6ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5NSwxNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsKICAgICAg
ICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIGNvbnN0CisgICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJhbmQgb3Bl
cmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFt
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5k
LCBvcGVyYW5kLnZhbHVlKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsK
IAotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpICsg
bV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0Owog
ICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNzUsMTMgKzEyMTQsOCBAQCBwcml2YXRlOgog
ICAgIElDU3RhdHVzQ29udGV4dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAgICAgc3Ry
dWN0IERlbGF5ZWRTZXRMb2NhbCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFsdWU7Ci0g
ICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXllZFNldExv
Y2FsKCkgeyB9Ci0gICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmln
aW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2Rl
KQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBPcGVy
YW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAgICAgICA6
IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAg
ICAgICAgICAsIG1fdmFsdWUodmFsdWUpCkBAIC0xMTk0LDggKzEyMjgsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3BlcmFu
ZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExv
Y2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFs
dWUsIG1fc2V0TW9kZSk7CiAgICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2lu
OworICAgICAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1ZSB7IG51
bGxwdHIgfTsKKyAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAKICAgICBW
ZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4LDcgKzEy
NDcsNyBAQCBwcml2YXRlOgogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFy
Z2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5l
dyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2Fscywg
MSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9j
ayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywg
MSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgLy8gbV9i
bG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9y
ZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xp
bmtpbmdUYXJnZXRzLnNpemUoKSkKQEAgLTEyMjAsNyArMTI1OSw3IEBAIEJhc2ljQmxvY2sqIEJ5
dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0
YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3
IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMs
IDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxv
Y2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1w
cywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgbV9n
cmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwpA
QCAtMTQyMyw3ICsxNDYyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZl
VGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUgaXMgVmFy
YXJncywgd2UgZG8gbm90IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxseSBmaWxs
ZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAgICAgICAg
IC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVu
dGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIgdG8g
dGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFy
Z3VtZW50cyBieSB4a0xvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFt
ZSB3aGljaCBtYXkgYmUKICAgICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVtcCBpbnRv
LgogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0xNDQ5LDcgKzE0ODgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQg
YwogICAgICAgICAvLyBXZSBtdXN0IHNldCB0aGUgY2FsbGVlIHRvIHRoZSByaWdodCB2YWx1ZQog
ICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAg
IGlmIChzdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAg
ICAgICAgICAgICBzZXREaXJlY3Qoc3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7
CisgICAgICAgICAgICAgICAgc2V0RGlyZWN0KHJlbWFwT3BlcmFuZChzdGFja0VudHJ5LT5tX2lu
bGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgY2FsbFRhcmdldE5vZGUsIE5v
cm1hbFNldCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYWRkVG9HcmFwaChTZXRDYWxs
ZWUsIGNhbGxUYXJnZXROb2RlKTsKIApAQCAtMTYxNCwxNiArMTY1MywxOCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0LCBDYQogICAgIEFTU0VSVCghKG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHMgJSBz
dGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJG
aXh1cCA9IHJlZ2lzdGVyT2Zmc2V0IC0gbnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90czsKICAgICAK
LSAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLm9mZnNldCgp
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAgT3BlcmFuZCBpbmxpbmVD
YWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLnZhbHVlKCkg
KyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgCiAgICAgZW5zdXJlTG9j
YWxzKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lU3RhcnQpLnRvTG9j
YWwoKSArIDEgKworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2FsKCkgKyAxICsK
ICAgICAgICAgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpKTsKICAgICAKKyAgICBlbnN1cmVUbXBzKChtX2lubGluZVN0YWNrVG9w
LT5tX2lubGluZUNhbGxGcmFtZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1l
LT50bXBPZmZzZXQgOiAwKSArIG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5udW1UbXBz
KCkgKyBjb2RlQmxvY2stPm51bVRtcHMoKSk7CisKICAgICBzaXplX3QgYXJndW1lbnRQb3NpdGlv
blN0YXJ0ID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsKIAogICAgIGlmIChy
ZXN1bHQuaXNWYWxpZCgpKQotICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHJlc3VsdCkudmlydHVhbFJlZ2lzdGVyKCk7CiAKICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIGNhbGxlZVZhcmlhYmxlID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbGVlLmlzQ2xvc3Vy
ZUNhbGwoKSkgewpAQCAtMTYzNiw3ICsxNjc3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5s
aW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EK
IAogICAgIElubGluZVN0YWNrRW50cnkqIGNhbGxlclN0YWNrVG9wID0gbV9pbmxpbmVTdGFja1Rv
cDsKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2Nr
LCBjb2RlQmxvY2ssIGNhbGxlZS5mdW5jdGlvbigpLCByZXN1bHQsCi0gICAgICAgIChWaXJ0dWFs
UmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0
LnZpcnR1YWxSZWdpc3RlcigpLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29u
dGludWF0aW9uQmxvY2spOwogCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGlu
aW5nIHJlYWxseSBoYXBwZW5zLgogICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJl
bnRJbmRleDsKQEAgLTE2NzEsOSArMTcxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAg
ICAgICAgIC8vIEhvd2V2ZXIsIHdoZW4gd2UgYmVnaW4gZXhlY3V0aW5nIHRoZSBjYWxsZWUsIHdl
IG5lZWQgT1NSIGV4aXQgdG8gYmUgYXdhcmUgb2Ygd2hlcmUgaXQgY2FuIHJlY292ZXIgdGhlIGFy
Z3VtZW50cyB0byB0aGUgc2V0dGVyLCBsb2M5IGFuZCBsb2MxMC4gVGhlIE1vdkhpbnRzIGluIHRo
ZSBpbmxpbmVkCiAgICAgICAgIC8vIGNhbGxlZSBtYWtlIGl0IHNvIHRoYXQgaWYgd2UgZXhpdCBh
dCA8SEVSRT4sIHdlIGNhbiByZWNvdmVyIGxvYzkgYW5kIGxvYzEwLgogICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVn
aXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxl
clN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgs
IHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChh
cmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFy
Z3VtZW50VG9HZXQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1v
dkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgbV9zZXRM
b2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBh
cmd1bWVudFRvR2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CkBAIC0xNzE3LDE2ICsxNzU4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IENhCiAgICAgICAgIC8vIEluIHN1Y2ggY2FzZXMsIHdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgZnJh
bWVzLgogICAgICAgICBpZiAocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwICE9IHJlZ2lzdGVyT2Zm
c2V0KSB7CiAgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgT3BlcmFuZCBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAg
ICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOwot
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQu
b2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0
ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGluZGV4KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8o
YXJndW1lbnRUb1NldCksIHZhbHVlKTsKICAgICAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUu
YXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9T
ZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJpdHlGaXh1cENvdW50OyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7Ci0gICAgICAgICAgICBhZGRUb0dy
YXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdW5kZWZpbmVkKTsK
KyAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIGluZGV4KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhhcmd1bWVudFRvU2V0KSwgdW5kZWZpbmVkKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1
ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRU
b1NldCwgdW5kZWZpbmVkLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAgfQogCkBAIC0x
ODkzLDEyICsxOTM0LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxp
bmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGVtaXRG
dW5jdGlvbkNoZWNrcyhjYWxsVmFyaWFudCwgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudCk7
CiAgICAgICAgIAogICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9Ci0gICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQpKS5vZmZzZXQoKTsKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpOwogICAgICAgICAKICAgICAgICAgZW5zdXJlTG9jYWxzKFZpcnR1YWxSZWdpc3RlcihyZW1h
cHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgICAgICAKICAgICAgICAgaW50IGFy
Z3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzOwotICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkub2Zmc2V0
KCk7CisgICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS52aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnN0YXJ0
ID0gVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkQXJndW1lbnRTdGFydCArIDEpOwpAQCAtMTkwNiwx
MSArMTk0NywyNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmco
Tm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBkYXRhLT5vZmZz
ZXQgPSBhcmd1bWVudHNPZmZzZXQ7CiAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7CiAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5k
YXRvcnlNaW5pbXVtOwotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzKQotICAgICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJncywgT3BJ
bmZvKGRhdGEpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFy
YXJncywgT3BJbmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKworICAgICAgICBp
ZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIE5vZGUq
IGFyZ3VtZW50Q291bnQ7CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKQorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKEdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlubGluZUNhbGxGcmFtZSgpLT5p
c1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZ2V0RGlyZWN0KHJl
bWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUoKSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0g
YWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoaW5s
aW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRDb3Vu
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBnZXQo
YXJndW1lbnRzQXJndW1lbnQpOworICAgICAgICAgICAgYXV0byBhcmdDb3VudFRtcCA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChPcGVyYW5kKFRtcE9wZXJhbmQsIE9wQ2FsbFZhcmFy
Z3M6OmFyZ0NvdW50KSk7CisgICAgICAgICAgICBzZXREaXJlY3QoYXJnQ291bnRUbXAsIGFkZFRv
R3JhcGgoVmFyYXJnc0xlbmd0aCwgT3BJbmZvKGRhdGEpLCBhcmd1bWVudHMpKTsKKyAgICAgICAg
ICAgIHByb2dyZXNzQ2hlY2twb2ludCgpOworCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRW
YXJhcmdzLCBPcEluZm8oZGF0YSksIGdldExvY2FsT3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVu
dHMpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBMb2FkVmFyYXJncyBtYXkgT1NS
IGV4aXQuIEhlbmNlLCB3ZSBuZWVkIHRvIGtlZXAgYWxpdmUgY2FsbFRhcmdldE5vZGUsIHRoaXNB
cmd1bWVudAogICAgICAgICAvLyBhbmQgYXJndW1lbnRzQXJndW1lbnQgZm9yIHRoZSBiYXNlbGlu
ZSBKSVQuIEhvd2V2ZXIsIHdlIG9ubHkgbmVlZCBhIFBoYW50b20gZm9yCkBAIC0xOTIyLDE0ICsx
OTc2LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIC8vIFNTQS4gRm9ydHVu
YXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRy
b2wgZmxvdwogICAgICAgICAvLyBiZWZvcmUgU1NBLgogICAgICAgICAKLSAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1
YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoZGF0YS0+Y291bnQpOwogICAgICAgICAvLyBUaGlzIGlzIHBy
ZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBh
biBpbnQuIFRoaXMgZG9lc24ndAogICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBv
dXIgdXNlIG9mIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxv
Y2FsIHNsb3QgaXMKICAgICAgICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAg
IGNvdW50VmFyaWFibGUtPnByZWRpY3QoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFy
aWFibGUtPm1lcmdlSXNQcm9maXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0
QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8o
Y291bnRWYXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZh
cmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIElt
bWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgdW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsK
QEAgLTE5NTMsNyArMjAwNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9H
cmFwaChudW1TZXRBcmd1bWVudHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5
YmUgOiBTZXRBcmd1bWVudERlZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOwog
ICAgICAgICAgICAgKytudW1TZXRBcmd1bWVudHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjA1
Myw3ICsyMTA3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xP
RygiUmVnaXN0ZXIgb2Zmc2V0OiAiLCByZWdpc3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGNhbGxlZVJlZyhyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0g
ICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7
CisgICAgY2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJl
ZykudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0
byBiZSAiLCBjYWxsZWVSZWcsICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxU
YXJnZXROb2RlLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOwogCkBAIC01MTAyLDcgKzUxNTYsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICBjYXNlIG9wX25ld19yZWdleHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5
dGVjb2RlLm1fcmVnZXhwLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSog
ZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAg
ICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmco
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVn
ZXhwKSk7CiAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVn
ZXhwLCBPcEluZm8oZnJvemVuUmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC01MTEy
LDcgKzUxNjYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlz
LT5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgIE5vZGUqIGxlbmd0aDsKICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAg
IEpTVmFsdWUgcmVzdExlbmd0aDsKICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3Ro
IDw9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcCkKICAgICAgICAgICAgICAgICAgICAg
cmVzdExlbmd0aCA9IGpzTnVtYmVyKDApOwpAQCAtNjE3OCw3ICs2MjMyLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSAmJiBtX2N1cnJlbnRCbG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0
KDApLT5vcCgpID09IENvdW50RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayku
bV9idWZmZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZm
ZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAg
ICAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2Fk
IGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIy
MywxNCArNjI3NywxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkg
ewogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVy
YW5kKTsKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xv
Y2FsKCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0
Q2F0Y2hMb2NhbCwgT3BJbmZvKG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlv
bnNbbnVtYmVyT2ZMb2NhbHNdKSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsK
LSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3Bl
cmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhvcGVyYW5kKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tl
ZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBpZiAobnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTIsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0g
bV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENv
bnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAgICAgICAgIE5vZGUqIGNoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4
MjYsOCArNjg4MCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
TGV4aWNhbEVudmlyb25tZW50PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3Rh
bnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUq
IGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkp
OworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
Lm1fc3ltYm9sVGFibGUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNj
b3BlID0gZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVu
dmlyb25tZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFi
bGUpLCBPcEluZm8oaW5pdGlhbFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2OTExLDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IC8vIGxvYWRzIGZyb20gdGhlIHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0aGF0IHdvdWxkIHBy
ZXZlbnQgdGhlIERGRyBmcm9tIHRyYWNraW5nIHRoZQogICAgICAgICAgICAgLy8gYnl0ZWNvZGUt
bGV2ZWwgbGl2ZW5lc3Mgb2YgdGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICAgICAg
ICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKTsKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIGlmIChKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4o
Km1fdm0pKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9u
LT5zY29wZSgpKTsKQEAgLTcyNzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRo
ZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRo
YXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRU
bXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGlu
ZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRt
cHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVD
YWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
KTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGNhbGxlZSk7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9
IGZhbHNlOwpAQCAtNzYzOCw3ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2Uo
KQogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSht
X2dyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5s
b2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3Jj
ZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc2NTgsMjQg
Kzc3MTQsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1w
dHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhdXRv
IGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF2YXJpYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnQgPSBvcGVyYW5kIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQg
PSB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVy
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQ
b3NpdGlvbio+JiBhcmd1bWVudHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlv
bnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRzW2FyZ3VtZW50LnRvQXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2
YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBh
dXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBh
ZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQ
cmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGly
ZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxE
aXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2Vydmlu
Z09wKGlubGluZUNhbGxGcmFtZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3Jp
Z2luLnNlbWFudGljLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAg
LTc3NDAsNiArNzc5Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAg
QVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
fQogCisgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2Fs
VmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFy
YW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CmluZGV4IDhlOWJiNGFjYmU1NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNiZmQuLjNkYzc1Njhm
MWVlMmM2OTc3MjI2OGNjOTZkZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9u
YWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRs
ZVZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFs
dWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgIGlmICghdmFsdWUp
IHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4g
Ynl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGlmICghbm9kZSkgewogICAgICAg
ICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5p
bmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwg
IiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUo
bV9ncmFwaCwgdmFsdWUudmFsdWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKaW5kZXggZDk4ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0MjZhZjBmMjM4Mi4u
NTc3MGYwOTg5NDJjODk2YjdhY2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC01
Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKICAg
ICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBo
aXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPFRtcE9wZXJhbmQ+
KCk7CiAgICAgICAgIGNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFi
bGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlh
YmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9u
aWNhbGl6ZUdldExvY2FsRm9yPFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+
b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0yNzAsMTUgKzI4MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXpl
Rmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2Rl
VHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9M
b2NhbCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXpl
Rmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2
YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3Bl
cmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogewor
ICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwg
VG1wT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY2Fub25pY2FsaXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2Js
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAg
ICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
LCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2Nr
KCkKQEAgLTI4OSw2ICszMTEsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgY2xlYXJW
YXJpYWJsZXM8QXJndW1lbnRPcGVyYW5kPigpOwogICAgICAgICBjbGVhclZhcmlhYmxlczxMb2Nh
bE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJhbmQ+KCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVl
biByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJl
IGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQg
dGhlIHJlZgpAQCAtMzg4LDcgKzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09
IEFyZ3VtZW50T3BlcmFuZCA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsK
KyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tG
b3I8b3BlcmFuZEtpbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRl
bXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBA
IC00NjYsOSArNDg5LDEyIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkK
ICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAg
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2Nh
bFBoaVN0YWNrOworICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2Ug
QXJndW1lbnRPcGVyYW5kOiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNl
IExvY2FsT3BlcmFuZDogcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBUbXBP
cGVyYW5kOiByZXR1cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0Zs
dXNoZWQoKQpAQCAtNTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7
CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZl
Y3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUq
LCAxMjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5
NDcxYjVhNjE2NjdjZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsx
NDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazog
ewogICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5y
ZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNv
bnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigp
OwogICAgICAgICAgICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3Rh
Y2spIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZp
bmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0
b3ItPnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIy
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0g
bG9jYXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCku
aXNUb3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwg
bG9jYXRpb24sIG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2Fk
KCkudmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0
SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQo
KS52YWx1ZSgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3
IEltcHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
U2lkZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7
Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5k
KGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBh
eWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5r
ZXkgPT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+
dmFsdWU7CkBAIC0yOTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBp
biB0aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAg
Ly8KICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFj
a01hcCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8
aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50
MzJfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBt
X2Fic3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVf
cHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
OwogICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGZkMGI2
ZDc0ZGE2NzdiYzQ1MDhjYWM0OWZjNGVlMWM5OGRhNGU3YWQuLjRkNWEyYTBhYWExYTc0M2JmYmU2
OTRiNDM5OGNmZjdmNWJkZjEwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKQEAgLTMwNiw2ICszMDYsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2Fw
YWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgSQogICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNh
c2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVj
a3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBj
aGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4
Y2VwdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKaW5kZXggODliYzY0MWY1MjZiYjUzZmYwMzdmNzNjZjk1MGJhYzY0NmQ0OTk1
NC4uODJmM2NhNjQxODRmOTE5MzY1MDM5YjEzMjIxN2RkOTllYTk3MTA1MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQg
dGhpcyBkb2VzLgogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsg
aW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2Fs
bEZyYW1lKCkpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ss
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5
IGFjY291bnQgd2hpY2ggbm9kZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0MSw3ICs0
NDEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBj
YXNlIEtpbGxTdGFjazoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51
bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBj
YXNlIE1vdkhpbnQ6CkBAIC00OTcsNyArNDk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAg
ICAgICByZXR1cm47CiAKQEAgLTc2NCwxMiArNzY0LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAg
ICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKLSAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpLCBMYXp5Tm9kZShub2RlKSk7
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU2V0Q2FsbGVlOgotICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICB3cml0
ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczogewpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBX
cml0ZUZ1CiAgICAgfQogCiAgICAgY2FzZSBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoK
LSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhc2UgR2V0UmVzdExlbmd0aDoKQEAgLTc4OCwzNiArNzg4LDQzIEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBj
b25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2Nh
bDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
TG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2Rl
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwo
KSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6
eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywg
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhl
YXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgcmVh
ZChoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlO
b2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQ
dXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgd3JpdGUoaGVhcCk7CiAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0
ZShIZWFwKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQp
KTsKKyAgICAgICAgcmV0dXJuOyAgCisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewog
ICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0
ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4o
aSkpKTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQg
KyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IApAQCAtODI2LDkgKzgzMyw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJl
YWQoU3RhY2spOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywg
ZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNr
LCBkYXRhLT5jb3VudCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsg
aS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQu
b2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFj
NGY3ZTQ3MDBkMDljZDJhYzMwZjMuLjE1NzQ2YzA1NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2Qy
OTE0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRM
aXZlbmVzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExp
dmVuZXNzLmNwcApAQCAtMzksNyArMzksNyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVu
ZXNzKEdyYXBoJiBncmFwaCwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAg
ICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JF
eGl0LAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChP
cGVyYW5kIHJlZykgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdX
aXRoTG9jYWwoCiAgICAgICAgICAgICAgICAgcmVnLAogICAgICAgICAgICAgICAgIFsmXSAoTm9k
ZSogbm9kZSkgLT4gYm9vbCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbkRhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmNwcAppbmRleCA3OTg3Yjg3MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiLi43
ZmZkNGQzNWI2Y2Y1YzlkZTM4MWU3ZGE2MTMzMmZkNTI0OTY1NWEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNp
dGVJbmRleCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikK
ICAgICAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5k
ZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwog
fQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29t
bW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAg
ICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09
IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5k
ZXgpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBD
YWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoY29kZU9yaWdpbnMuc2l6ZSgpKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KGNvZGVPcmlnaW5zLnNpemUoKSAtIDEpKTsKKyAgICByZXR1cm4gRGlz
cG9zYWJsZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CiB9CiAKIERpc3Bv
c2FibGVDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4
KENvZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKaW5kZXggM2IxNjVmMmM0MDIxMDAzZDA0
MWNjYTZkOWFlMGNmZTdhZTgyNzEzZi4uMTg1MzY2ZDA0ZTI2M2VlOWVkOTY0Yzg2YTdlZDk1MjRh
OTViYjlkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4Myw3ICszODMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbCBpbiBzdWNoIHN0YXRpY2FsbHktb3V0LW9m
LWJvdW5kcyBhY2Nlc3Nlczsgd2UganVzdCBsb3NlIENGQSB1bmxlc3MKICAgICAgICAgICAgICAg
ICAvLyBHQ1NFIHJlbW92ZXMgdGhlIGFjY2VzcyBlbnRpcmVseS4KICAgICAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKQEAgLTQw
NCw3ICs0MDQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaW5kZXggKyAxKSwgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
ICYmIGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b252ZXJ0VG9HZXRTdGFjayhkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCmluZGV4IDg1NDEyMzE0NzQxZTZmMTEyNjFmMmU5N2M0OWZlNjQ0ZGFl
N2JhZjcuLmYzOGM4M2ZkZDMwYzJmNTNiM2Q1MDkzZjQwYjJjNzBlOTUzMTA0ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI5NCw2ICsyOTQsNyBAQCBib29s
IGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbkJ5VmFsOgogICAg
IGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206CisgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOdW1iZXJUb1N0
cmluZ1dpdGhSYWRpeDoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25z
dGFudDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAppbmRleCAxN2IzNzA3
NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5Li40NWZiYzQzOWQ1M2JhOTUwZTdhOGQ4
OWFjOWVjMTk3MmJhMDkzOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCkBAIC05MCw3ICs5MCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1w
bCgKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5n
IHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhh
dCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0
aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKLSAgICB2bS5n
ZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCmluZGV4IGFlZTFmMDA3M2IwZjRiYmNjNDczNGViNjQxZTQ2NDhjMzA1NWEyNDQu
LmNhMzNkYjIyN2Q0YjkyNzczZmE4NmQ3MmVlM2Q0ZDFiODViZjk4M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjQzMiw2ICsyNDMyLDE0IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworCisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhh
dmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0
byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50
RGVmaW5pdGVseToKQEAgLTI0NjQsOCArMjQ3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFy
YXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoK
LSAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoK
KyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9s
RmxvdzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UHJvbWlzZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCAwYmYxYzNm
YmJhYzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUyOGI5Li45MzNhMmJkZTIyZTE2NmMyYWViNmQ0
YWMxYmJlOWNlMWU1Y2VkNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JB
bGxLaWxscy5oCkBAIC0zMiw2ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKK25hbWVzcGFjZSBGb3JBbGxLaWxsc0ludGVybmFsIHsKK2NvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKK30KKwogLy8gVXRpbGl0aWVzIGZvciBmaW5kaW5nIHRoZSBsYXN0
IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSBpbiBERkcgU1NBLiBUaGlzIGFjY291bnRzIGZv
ciBsaXZlbmVzcyBkdWUKIC8vIHRvIE9TUiBleGl0LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3Ig
ZW51bWVyYXRpbmcgb3ZlciBhbGwgb2YgdGhlIHByb2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9kZSBp
cyBsaXZlLAogLy8gYnkgZXhwbG9yaW5nIGFsbCBibG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMgbGl2
ZSBhdCB0YWlsIGFuZCB0aGVuIGV4cGxvcmluZyBhbGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUgdGhl
CkBAIC01MywxMyArNTcsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAKICAgICBD
b2RlT3JpZ2luIGFmdGVyID0gbm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOworICAgIE9wZXJhbmQgYWxyZWFkeU5vdGVkOwog
ICAgIC8vIElmIHdlIE1vdkhpbnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwg
dGhlbiB3ZSBraWxsIHRoZSBvbGQgdmFsdWUuCiAgICAgaWYgKG5vZGVBZnRlci0+Y29udGFpbnNN
b3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5s
aW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFm
dGVyKSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAgYWxyZWFkeU5v
dGVkID0gcmVnOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlQWZ0ZXItPnVubGlua2Vk
T3BlcmFuZCgpOworICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBh
ZnRlcikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CisgICAgICAgICAgICBhbHJl
YWR5Tm90ZWQgPSBvcGVyYW5kOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNzAsOCArNzQs
MjQgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVC
ZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAvLyBvdGhlciBsb29wLCBiZWxvdy4K
ICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1l
KCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxGcmFtZSA9PSBhZnRlci5pbmxpbmVDYWxsRnJh
bWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUg
PyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihiZWZvcmVJbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQo
KSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2lu
dCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpOworCisgICAgICAgICAg
ICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywg
YmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRt
cExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkp
OworICAgICAgICAgICAgaW50IHRtcE9mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJl
Zm9yZUlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAgICAgIGxpdmVBZnRl
ci5pbnZlcnQoKTsKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CisK
KyAgICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsK
KyAgICAgICAgICAgICAgICBmdW5jdG9yKE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wICsgdG1wT2Zm
c2V0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIE5vIGxvY2FscyBjYW4gZGll
IGF0IGEgY2hlY2twb2ludC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwogICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAg
Y29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVz
cyhiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9y
ZVVzZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZl
bmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRp
b25Qb2ludDo6QmVmb3JlVXNlKTsKQEAgLTgyLDE3ICsxMDIsMjEgQEAgdm9pZCBmb3JBbGxLaWxs
ZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRl
ciwgY29uc3QKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAor
CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9p
bnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEgY2hlY2twb2ludCBidXQgYmVmb3JlIGFuZCBh
ZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxsRnJhbWUuIik7CisKICAgICAvLyBEZXRlY3Qg
a2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMg
bGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdy
YXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAgICBncmFwaC5mb3JBbGxMb2NhbHNM
aXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzQW5k
VG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgZ3JhcGgu
Zm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBiZWZvcmUsCi0gICAg
ICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgaWYgKHJlZyA9PSBh
bHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAg
ICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQocmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5k
LnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIu
Z2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rv
cihyZWcpOworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKICAgICAgICAgfSk7CiB9CiAg
ICAgCkBAIC0xMDUsNyArMTI5LDggQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4
KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VlbkluQ2xvc3VyZUZsYWcgPSAxOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsbGVkRnVuY3RvckZsYWcgPSAyOwogICAg
IEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFnczsKLSAgICAKKworICAgIEFTU0VSVChub2Rl
SW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAKICAg
ICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAsMTUgKzE0NSwxMyBAQCB2b2lkIGZvckFsbEtp
bGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAg
Tm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBpZiAobm9kZUluZGV4KQotICAgICAgICBiZWZv
cmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgTm9kZSogYmVmb3JlID0gYmxvY2st
PmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAg
IGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykg
eworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCi0gICAgICAgICAgICAgICAgcmVnLAorICAg
ICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAt
PiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdzLmdldChub2RlKSAmIHNl
ZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAgICAgIH0sCkBAIC0xNTksNiArMTgyLDcgQEAg
dm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2Rl
LCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBm
cm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1
c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhp
bmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAxOyBub2RlSW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICBkYXRhTG9nTG5JZihGb3JBbGxL
aWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5IGF0IGluZGV4OiAiLCBu
b2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkpOwogICAgICAg
ICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgZ3JhcGgsIGxvY2Fs
QXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBibG9jaywgbm9kZUluZGV4LAogICAgICAgICAg
ICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CmluZGV4IGIzMjBmNzA3Yzk1ZjEyMzkzODUxYmMzYjJiMmI0MmI5NTZkZDBiZjUuLjA3MWRlMjM5
MmI5YzVjOTI4NmRlOWM3ODc4ZmU5YWYwMGMwYjRlNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250
ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnRyeUdldFZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhKSB7Ci0g
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+
bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNj
ZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFi
bGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhp
cywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAgICAgICAgIG9wZXJhbmQgPSB2YXJp
YWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwogICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwg
b3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAog
ICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkpIHsKICAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG91
dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRh
dGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlzVmFsaWQoKSkK
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+bWFjaGluZUxv
Y2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOwogICAgIH0KLSAg
ICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKLSAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZE9wZXJh
bmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7
CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIsIG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKSk7
CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVlKCkpCkBAIC01MTUsOSArNTE1LDEwIEBAIHZv
aWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBw
cmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBO
b2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOwor
ICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgIGlm
ICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExp
dmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5w
cmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxvY2FsKCksICIsIiwg
cGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiIEAi
LCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQoKSwgIiwiLCBwaGlOb2Rl
LT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgp
KSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmlu
ZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODg0
LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBi
bG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgIGJvb2wgc2hvdWxk
Q29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wZXJhbmQoKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkKICAgICAgICAgICAgICAgICBzaG91bGRD
b250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTg5Myw5
ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxv
Y2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICAgICAgaWYgKG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9j
aywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBi
bG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkp
OworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICBpZiAo
b2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7Cisg
ICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nl
c3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICBzaG91bGRDb250
aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExMzMsMzYg
KzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVybiBraWxsc0ZvcihiYXNlbGluZUNvZGVCbG9j
a0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29k
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorYm9vbCBH
cmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAg
IAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDaGVja2luZyBvZiBvcGVyYW5k
IGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgIGJvb2wgaXNDYWxsZXJPcmlnaW4gPSBm
YWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAmY29kZU9yaWdpbjsKLSAg
ICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0
ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tP
ZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5s
aW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJl
Y2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQorICAgIC8vIHRoZSByZXR1cm4gYnl0
ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAgZm9yICg7IGNvZGVPcmlnaW5QdHI7
IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAmaW5saW5lQ2FsbEZyYW1lLT5kaXJl
Y3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUgPyBpbmxp
bmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYW5k
SW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKTsKKworICAgICAg
ICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAgIC8vIFRoaXMg
dG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5saW5lZC4KKyAgICAgICAg
ICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1DaGVja3BvaW50VG1wcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4IDwgdG1wT2Zm
c2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGJpdE1h
cCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5i
eXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZElu
ZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZz
ZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxv
ZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgaWYgKG9wZXJhbmQu
b2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgp
KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogCiAKICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5v
ZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
JiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvb2tzIGxpa2Ug
YSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQo
KSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7CisgICAgICAgICAgICAgICAgICAg
ICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9v
a3MgbGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMTc2LDQyICsxMTk3LDQxIEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5s
aW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2
ZW5lc3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2spOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAg
ICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy5vcGVyYW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0
ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmln
aW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy52aXJ0dWFs
UmVnaXN0ZXJJc0xpdmUocmVnLCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWx3YXlzIGxpdmUuIFRoaXMgd291bGQgYmUg
cmVkdW5kYW50IGlmIGl0IHdhc24ndCBmb3Igb3VyCiAgICAgICAgIC8vIG9wX2NhbGxfdmFyYXJn
cyBpbmxpbmluZy4KLSAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkKKyAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSAmJiByZWcuaXNBcmd1bWVudCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHNXaXRoRml4dXAuc2l6ZSgpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBpcyBsaXZlLlxuIik7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwg
Y2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKLSAgICAgICAgLy8g
dGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KLSAgICAgICAgY29k
ZU9yaWdpblB0ciA9ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICAgICAgaXND
YWxsZXJPcmlnaW4gPSB0cnVlOwogICAgIH0KKworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
KCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOworICAgIHJldHVybiB0cnVl
OyAgICAKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1CaXRW
ZWN0b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikK
K0JpdFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKIHsKICAgICBCaXRWZWN0b3IgcmVzdWx0OwotICAgIHJlc3VsdC5lbnN1cmVT
aXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9y
QWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgdW5zaWduZWQgbnVtTG9jYWxzID0gYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOworICAgIHJlc3VsdC5lbnN1cmVT
aXplKG51bUxvY2FscyArIGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCkp
OworICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAgICAgY29kZU9y
aWdpbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBB
U1NFUlQocmVnLmlzTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXN1bHQucXVpY2tTZXQocmVnLnRv
TG9jYWwoKSk7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZh
bHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChv
ZmZzZXQpOwogICAgICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTYzNSw4ICsx
NjU1LDggQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KIAogICAgIGZvciAoTm9kZSogbm9kZSA9
IG9wZXJhbmROb2RlOyBub2RlOykgewogICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygq
dGhpcykpIHsKLSAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPmxvY2FsKCku
aXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9j
YWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2Rl
LT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50
ID0gbm9kZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgICAgICBOb2RlKiBh
cmd1bWVudE5vZGUgPSBtX3Jvb3RUb0FyZ3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJn
dW1lbnRdOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJn
dW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTg0MQpAQCAtMTY1Niw3ICsxNjc2LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBH
cmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21M
YXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAg
ICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
LCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKaW5kZXggZmFiOWNmMDJhMjU5NzZlZjQ3ZDE3OTA1YmFkOWNlMDNlMzgyYmNlNS4uZjdhMWQ4
MjE0YzMwMmQ3ZDk2YWMyYTc3YTAxODY2YTlkMTE5ZjUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaApAQCAtODQwLDEzICs4NDAsMTMgQEAgcHVibGljOgogICAgIC8vIFF1aWNr
bHkgcXVlcnkgaWYgYSBzaW5nbGUgbG9jYWwgaXMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRo
aXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZwogICAgIC8vIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkg
aWYgeW91IHdpbGwgb25seSBxdWVyeSBvbmUgbG9jYWwuIEJ1dCwgaWYgeW91IHdhbnQgdG8ga25v
dyBhbGwgb2YgdGhlCiAgICAgLy8gbG9jYWxzIGxpdmUsIHRoZW4gY2FsbGluZyB0aGlzIGZvciBl
YWNoIGxvY2FsIGlzIG11Y2ggc2xvd2VyIHRoYW4gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKS4KLSAg
ICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAg
ICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCwgQ29kZU9yaWdpbik7CiAgICAgCi0gICAg
Ly8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhl
IGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKKyAgICAvLyBRdWlja2x5IGdldCBh
bGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgYW5kIHRtcHMgbGl2ZSBhdCB0aGUgZ2l2ZW4g
cG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQogICAgIC8vIGFueSBhcmd1bWVudHMgYmVjYXVz
ZSB0aG9zZSBhcmUgYWxsIHByZXN1bWVkIGxpdmUuIFlvdSBjYW4gY2FsbCBmb3JBbGxMaXZlSW5C
eXRlY29kZSgpIHRvCiAgICAgLy8gYWxzbyBnZXQgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyBtdWNo
IGZhc3RlciB0aGFuIGNhbGxpbmcgaXNMaXZlSW5CeXRlY29kZSgpIGZvciBlYWNoIGxvY2FsLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgdm9pZCBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgLy8gU3Vw
cG9ydCBmb3Igbm90IHJlZHVuZGFudGx5IHJlcG9ydGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBi
ZWNhdXNlIGluIGNhc2Ugb2YgYSB2YXJhcmdzCiAgICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNh
bGxlZSBrbm93cyB0aGF0IGFyZ3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBh
IG5vbi12YXJhcmdzCkBAIC04ODEsNiArODgxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW3JlbGF0aXZlTG9jYWxdKQogICAgICAgICAgICAgICAg
ICAgICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb2Rl
T3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxp
dmVUbXBzID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5Q
dHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNl
dEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1h
cE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MDQs
OSArOTEyLDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIEdldCBh
IEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBu
b3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgorICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBh
bGwgb2YgdGhlIGxvY2FscyBhbmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkg
dXNlZnVsIGlmCiAgICAgLy8geW91IHdhbnQgdG8gY29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxv
Y2FscyBmcm9tIHR3byBkaWZmZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fs
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOworICAgIEJpdFZlY3RvciBsb2NhbHNBbmRUbXBz
TGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CiAKICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9p
bnQgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4s
IGJvb2wgaXNDYWxsZXJPcmlnaW4pCiAgICAgewpAQCAtOTM4LDEyICs5NDYsMTIgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAg
ICAgfQogICAgIAotICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIGFyZ3VtZW50cyBhbmQgbG9j
YWxzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8v
IGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJn
dW1lbnRzIGFyZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9m
IHRoZSBvcGVyYW5kcyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21h
bGwKKyAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUo
KSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAg
ICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAg
ICAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rv
cik7CiAgICAgICAgIAogICAgICAgICAvLyBSZXBvcnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBs
aXZlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykKQEAgLTExMTQsNiArMTEy
Miw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3
YXJkc0NGRzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNr
d2FyZHNEb21pbmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VB
bmFseXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3Rt
cHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGlu
ZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5
YWVmZmNkYzA1YTExYzQ1YjA1NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJl
NWMyM2M2NGJjZjhiZTM4NGUzZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0
ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFw
aCkKICAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkK
LSAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwg
Z3JhcGgubV9sb2NhbFZhcnMpCi0gICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhP
cGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Js
b2NrKG51bGxwdHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAppbmRleCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1
NzQwMWZhN2ZlYzcxMjk5Li4xODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5oCkBAIC0xNjcsMTMgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBm
YXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFs
dWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxl
cy5vcGVyYW5kSW5kZXgob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVl
JiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5k
KG9wZXJhbmQub2Zmc2V0KCkpOyB9Ci0gICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6
ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMu
bG9jYWxJbmRleChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAppbmRleCAzZDg0M2NlNThmMjBiNDExNjMzOWZjZGE5NTg4YWViYTZiN2E4YzJl
Li41M2RiOWNkMTRjYWM2YjZlNjY4MmVmZGY0YmE3OTQ4OTdjYTVkNWE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0g
dm0oKS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0
VGh1bmtMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1
bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JF
eGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8g
PSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVt
cHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGlua09TUkV4aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFt
ZSgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4
KTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAg
ICBKdW1wIHRhcmdldCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQs
IG9zckV4aXRUaHVua0xhYmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayh0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVK
dW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBh
dGNoYWJsZUp1bXAoKTsKICAgICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklU
Q29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBp
bGVyOjpMYWJlbCBibG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmxvY2FsKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAg
IEFTU0VSVCghdmFyaWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQo
CiAgICAgICAgICAgICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA2OGNhOThkZjZmNWM0Yjdi
NjM3MmNjMTU4MThlYzI1NzI4MmY4OWQ5Li41MGYxZDg5M2RhMzAyMTAyYjk1ZTc4YWM2MDQzOWQ4
NjIzNmYzY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0
ZUluZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNv
ZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhhYzI1Y2E2MzEz
NC4uNDVlY2I0NmFhMjQ0M2JhMWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlv
bihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBz
dGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBp
dCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25nLAogICAgICAgICAvLyB0
aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVzaCB0aGF0IHdlIGluc2Vy
dC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIGZsdXNoSXNEZWZpbml0
ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KSB7CiAg
ICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSkt
PmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgpID09IG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1f
Z3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBo
YW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGlu
c2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9u
SGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0Q2F0Y2hIZWFk
OwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2
ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBz
KCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAg
ICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEgKzEzMiwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBv
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5k
bGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgICAg
IGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFy
Z2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRl
Y29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGl2
ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4o
Y2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3Bl
cmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAg
ICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1NiwxMiArMTU1LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAg
ICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9j
a0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIpOworICAgICAg
ICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKE9w
ZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0cik7CiAKICAgICAgICAg
YXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBp
bmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRs
ZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENh
dGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7Cisg
ICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJh
bmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNo
TG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3OCw2ICsxNzcsOCBAQCBw
dWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwrKykKICAgICAgICAg
ICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVzaChPcGVyYW5kKFRtcE9w
ZXJhbmQsIHRtcCkpOwogICAgICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKTsKICAgICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNl
cHRpb25IYW5kbGVyICYmIChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0g
U2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkp
IHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2Fs
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRj
aEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisg
ICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3Bl
cmFuZChvcGVyYW5kKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNo
TG9jYXRpb24oYmxvY2ssIG5vZGVJbmRleCwgb3BlcmFuZCkpOwogCiAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2Nr
QWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9n
cmFwaCkpCi0gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlcikgewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
b3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAg
ICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAg
ICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCmlu
ZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYy
OWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApAQCAtODUsNyArODUsNyBA
QCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CiAgICAgICAgIG1fZ3Jh
cGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICBibG9jay0+dGVybWluYWwoKS0+
b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsK
KyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRl
Lm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAgIH0pOwogICAgICAgICAK
QEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gTW92SGludCkgewotICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0
YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBFcG9j
aCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3Vy
cmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50
RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOworICAgICAgICAgICAgICAgIG1f
c3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBFcG9jaCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBu
b2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSArMTE2LDE1IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3Bl
cmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXgg
LSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1p
Z2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRo
YXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQocmVnKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQg
Iiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCmluZGV4IDM5MTU5MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5NmY0MDRlMzNiNDYuLmI4
MDE1NWU5MzU2MjlkZjJjZGUzOWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NE
YXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKLSAgICAgICAgOiBsb2NhbChsb2NhbCkK
KyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQp
CisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAsIGZvcm1hdChmb3JtYXQpCiAg
ICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWw7CisgICAgT3BlcmFu
ZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7CiAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1YmxpYzoKICAgICAgICAg
c3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2Fy
ZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05MjMsOSArOTI0LDExIEBA
IHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgor
ICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7
CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6
Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQy
KCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBAIC05NzMsOSArOTc2LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRh
Kj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQor
ICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nl
c3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2Fs
KCkKQEAgLTk4Myw3ICs5ODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVW5s
aW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZE9wZXJhbmQoKQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBA
IC05OTYsMTAgKzk5OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
VmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVy
YW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOworICAgICAg
ICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6
ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAgICBib29s
IGhhc1N0YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgp
ID09IFZhcmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9h
ZFZhcmFyZ3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRl
eCAyNGM3MzNkMzg3MDI3OWY0YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0Li5lM2U5YzMyZjhkMDgx
M2E2YWRhMjJhYWNjZDM3NDQyZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1
c2VkIGluIFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRT
dGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2
ICsyMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0
QnlWYWxXaXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVI
YXNWYXJBcmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCAzMjgwZjg3YTYyNjdk
ZjAzNGM4NGUzMzE4NTMwYzc0MTllNTVlOTdlLi40MjQ3ZGVhZWM3Y2JiY2U2MDgzYWE4NzMyYjlj
Mjc3ZjVlZmQyOGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5
IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFs
IHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJP
U1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExp
dmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4
aXQsCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAi
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAg
ICAgIH07CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFs
Ojp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRl
eCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
YmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0
eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlm
IChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIkFmdGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0x
MjAsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAg
ICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5l
c3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5v
cmlnaW4uZm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIg
cHJ1bmluZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkdW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBkdW1wQnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYs
MjggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5v
ZGUqIG5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazog
ewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCku
c2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFjazogewot
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0
Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hl
ZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9w
ZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQyLDE1ICsyNDAsMTggQEAgdm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDogeworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgog
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPSBBdmFpbGFiaWxpdHkoRmx1
c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQo
KSArIGkpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVk
SlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkp
KSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPnN0
YXJ0ICsgaSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hl
ZEpTVmFsdWUsIGRhdGEtPm1hY2hpbmVTdGFydCArIGkpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0yNzIsMjAgKzI3MywyMCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJlY29yZCBob3cgdG8g
cmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkgYXJndW1lbnRDb3VudCA9Ci0gICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihB
cmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAg
ICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAg
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihB
cmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1
bWVudFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIw
YzdjOTRiODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkz
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTMyMiw3
ICszMjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcpIEZpeCB0
aGUgY2FsbCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAotICAgICpi
aXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jaykgPSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3Qg
LSAoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAgIAogICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJl
dHVybmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICszODIsMTAg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVD
YXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNl
bGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4
KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+
KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUq
IGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNo
T1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwot
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUp
IHsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29w
ZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZl
cltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFs
dWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVh
ODQ1MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZk
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jv
b3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRp
Y3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBP
cEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9y
aWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAg
ICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2OWI0MWNh
OGY5OGYzMDhiM2E0YzkzM2JhOTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZlMzJkNjc3
NDIwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgog
I2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5j
bHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQ
VVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0
OwotdXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
LCBjb25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVp
bnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBq
c1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlm
IChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAg
IHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsg
c291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUo
Y3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChz
b3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygp
LCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4o
c291cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJU
KGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBk
b250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxT
dGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFj
aywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRo
ZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQg
b2YKLSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFT
U0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAg
Y29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5
Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQg
b24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9p
ZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCi17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMg
PSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250
U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygp
LCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
Y2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxl
ZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5y
ZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQu
ZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVn
KCkuZ3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0
aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigp
OwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRS
ZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVu
dHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7
Ci0gICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxV
Q1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0K
LSAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdp
c3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBz
aXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rl
cik7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4
dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0
XTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRl
eHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNh
dmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGlu
ZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0K
LQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0m
IHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3Rh
Y2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2
bS50b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNv
cmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVl
U2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNv
dW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNh
dmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWco
KSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BS
KCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0
KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAg
ICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxs
ZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihl
bnRyeS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2lu
dCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCku
Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0
ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4
dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFs
bEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
dWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlh
VGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAg
ICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zm
c2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBj
b250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNl
dFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRS
ZWdpc3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihD
b250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3Io
Q29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2
b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4
dCYpIHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBD
b2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVS
X09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURp
cmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8
Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxl
bmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0g
MSkpOwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVh
dGUoCi0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVu
dHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxl
ZSh2bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0
ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4
UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQot
ewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVh
cC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29k
ZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZy
YW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwot
ICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0
eSgKLSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCks
IGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVn
aXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQm
IGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUs
IGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBm
cmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlm
aWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFy
Z3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQg
PSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAg
ICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQg
aWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0K
LSAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZy
YW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8
fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVl
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNv
bnN0YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCogYXJndW1l
bnRzT2JqZWN0OwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAg
ICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAg
YXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0
LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25lZEFyZ3Vt
ZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxl
ZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFs
dWUoYXJndW1lbnRzT2JqZWN0KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50
cy5hZGQoaWQsIG9wZXJhbmQpOwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIGxp
c3Qgb2YgZXh0cmEgaW5pdGlhbGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGluIG9yZGVy
Ci0vLyBvZiBtb3N0IGxpa2VseSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxlYXN0IGxp
a2VseSBuZWVkZWQgKGhpZ2hlciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5pdGlhbGl6
YXRpb24gaW5jbHVkZXMgdGhlIHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1c2Ugb2Yg
dGhlCi0vLyBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51bSBjbGFz
cyBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3VsYXRpb25S
ZWNvdmVyeSwKLSAgICBWYWx1ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxlVXBkYXRl
LAotICAgIE90aGVyCi19OwotCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxGcmFtZS0+
ZGVwcmVjYXRlZFZNKCkgPT0gJnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsKLQot
ICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBl
eGl0IG9wdGltaXplZCBjb2RlLiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGltaXplZAot
ICAgICAgICAvLyBjb2RlIHJ1bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAgICB2bS5o
ZWFwLnNldEV4cGVjdERvZXNHQyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1l
Rm9yQ2F0Y2gpIHsKLSAgICAgICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2g7Ci0g
ICAgICAgIGNvbnRleHQuZnAoKSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7
Ci0KLSAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxl
IGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5IGJlIHBy
b2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotCi0gICAg
dWludDMyX3QgZXhpdEluZGV4ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklUQ29kZSog
ZGZnSklUQ29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JFeGl0JiBl
eGl0ID0gZGZnSklUQ29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJUKCF2bS5j
YWxsRnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBF
WENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8fCAhZXhp
dC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQuZXhpdFN0
YXRlKSkgewotICAgICAgICBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsID0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAgICAgIC8v
IFdlIG9ubHkgbmVlZCB0byBleGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBPU1JFeGl0
IHJlY29yZC4gVGhlIGNvbXB1dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBjYWNoZWQg
aW4gdGhlIE9TUkV4aXRTdGF0ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0aGUKLSAg
ICAgICAgLy8gZXhpdCByYW1wIGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAgICBBU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkp
OwotCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAg
ICByZWNvdmVyeSA9ICZkZmdKSVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNv
dmVyeUluZGV4XTsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpT
cGVjdWxhdGlvblJlY292ZXJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShl
eGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVBy
b2ZpbGUgPSBudWxscHRyOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewot
ICAgICAgICAgICAgaWYgKGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
LCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAg
ICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5k
ZXhpbmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhp
dC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sq
IHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGlu
ZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICAg
ICAgYXJyYXlQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmls
ZSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjpt
YXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFy
cmF5UHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
bnQzMl90IGFjdGl2ZVRocmVzaG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3RlZENvdW50
ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKTsK
LSAgICAgICAgZG91YmxlIGFkanVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJp
c3RpY3NBbmRDb252ZXJ0VG9JbnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVCbG9jayk7
Ci0gICAgICAgIEFTU0VSVChhZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBhZGp1c3Rl
ZFRocmVzaG9sZCA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5B
bmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTElu
dCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rOwotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhpdFRvTExJ
bnQpIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1f
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50
cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0g
ZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9yRXhpdC0+
aml0Q29kZU1hcCgpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAgICAgICAg
IGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAgICAgIE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5kZWZpbmVk
T3BlcmFuZFNwYW4+IHVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklUQ29kZS0+
dmFyaWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3Jp
Z2luLCBkZmdKSVRDb2RlLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5k
cywgJnVuZGVmaW5lZE9wZXJhbmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFja1BvaW50
ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnQ29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9mKFJlZ2lz
dGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JFeGl0U3Rh
dGUoZXhpdCwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdURk1vdmUo
dW5kZWZpbmVkT3BlcmFuZFNwYW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNldCwgYWN0
aXZlVGhyZXNob2xkLCBhZGp1c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQcm9maWxl
LCBleGl0VG9MTEludCkpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlv
bikpIHsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9w
ZXJCeXRlY29kZVByb2ZpbGVyOwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRp
b24uZ2V0KCk7Ci0KLSAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQg
PSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFBy
b2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdp
biksCi0gICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRh
YmxlSW52YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9maWxlckV4
aXQgPSBwcm9maWxlckV4aXQ7Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDo6T3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUluaXRpYWxp
emF0aW9uTGV2ZWwgPSBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhp
dCgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykg
ZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4aXRJbmRl
eCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAgICAgICAg
ZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRh
KCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4
dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NSRXhpdFN0
YXRlJiBleGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkp
OwotCi0gICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0YXRlLm9w
ZXJhbmRzOwotICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5lZE9wZXJh
bmRTcGFucyA9IGV4aXRTdGF0ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBjb250ZXh0
LnNwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9pbnRlck9m
ZnNldDsKLQotICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGlsZSBs
b29wIGlzIHNvIHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCi0gICAg
ZG8gewotICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19jYXN0
PEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCk7Ci0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBFeHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAv
LyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292ZXJ5Ci0K
LSAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJzdCBiZWNh
dXNlIGFycmF5IHByb2ZpbGluZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8vIG1heSBy
ZWx5IG9uIGEgdmFsdWUgdGhhdCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vzbid0IG1l
YW4gdGhhdCBpdCBpcyBsaWtlbHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5IHZhbHVl
LiBTbywgd2UnbGwgZGVjb3JhdGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1bGF0aW9u
UmVjb3ZlcnkqIHJlY292ZXJ5ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBpZiAoVU5M
SUtFTFkocmVjb3ZlcnkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0
KCkpIC0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkg
Pj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpT
VmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBjcHUuZ3By
KHJlY292ZXJ5LT5kZXN0KCkpID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8aW50MzJf
dD4ocmVjb3ZlcnktPmRlc3QoKSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkg
Pj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpT
VmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgICAgIGNw
dS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRl
c3QoKSkgLSByZWNvdmVyeS0+aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwot
ICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVt
YmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNh
c2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
ICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVyeS0+ZGVz
dCgpKSBeIEpTVmFsdWU6OlZhbHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
IDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2
ZWw6IFZhbHVlUHJvZmlsZVVwZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFsdWU7Ci0g
ICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBwcm9maWxl
ZFZhbHVlID0ganNWYWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAg
ICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFs
dWVQcm9maWxlKQotICAgICAgICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJvZmlsZWRW
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8
PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6
IEFycmF5UHJvZmlsZVVwZGF0ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUgPSBleGl0U3RhdGUuYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoISFleGl0
Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gQmFk
Q2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgIENv
ZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biA9IHByb2ZpbGVkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29kZU9yaWdp
bkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAgICBib29s
IGRvUHJvZmlsZSA9ICFpbnN0cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCkubWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9kZU1ldGFk
YXRhLm1vZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgaWYgKGRv
UHJvZmlsZSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcHJvZmls
ZWRWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBhcnJheVBy
b2ZpbGUtPm9ic2VydmVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUtPm9ic2VydmVBcnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0
dXJlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVw
ZGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJhIGluaXRp
bGl6YXRpb24gbGV2ZWw6IE90aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9
PSBHZW5lcmljVW53aW5kKSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRl
ZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQo
KS4KLSAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5k
IHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29u
dGV4dC5mcCgpID09IHZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChleGl0U3RhdGUucHJvZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRlLnByb2Zp
bGVyRXhpdC0+aW5jQ291bnQoKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJp
bnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0LCB2bS5v
c3JFeGl0SW5kZXgsIGV4aXQpOwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQgZXh0cmEg
aW5pdGlhbGl6YXRpb24uCi0KLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFj
aygpKTsKLSAgICBBU1NFUlQoIShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4NykpOwotCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3RlcikgPT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NFUlQoY3B1
LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpO
b3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJz
aW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8gTm90ZTog
d2UgbmVlZCB0byByZWNvdmVyIHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBzYXZlIHJl
Z2lzdGVycyBiZWxvdwotICAgIC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5IG9uIHZh
bHVlcyBpbiBzb21lIG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBjYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lQ29k
ZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAgc2l6ZV90
IG51bWJlck9mT3BlcmFuZHMgPSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51bVVuZGVm
aW5lZE9wZXJhbmRTcGFucyA9IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0KLSAgICBz
aXplX3QgbmV4dFVuZGVmaW5lZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRVbmRlZmlu
ZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRlZmluZWRP
cGVyYW5kU3BhbnMpCi0gICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmlu
ZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLQotICAg
IEpTVmFsdWUgdW5kZWZpbmVkID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVfdCBzcGFu
SW5kZXggPSAwOyBzcGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsrc3Bhbklu
ZGV4KSB7Ci0gICAgICAgIGF1dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbc3Bhbklu
ZGV4XTsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0gICAgICAg
IGludCBsYXN0T2Zmc2V0ID0gZmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0ZXJzOwot
Ci0gICAgICAgIGZvciAoaW50IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBsYXN0T2Zm
c2V0OyArK29mZnNldCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0LCB1bmRl
ZmluZWQpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1i
ZXJPZk9wZXJhbmRzOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
b3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChV
TkxJS0VMWShpbmRleCA9PSBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAgICAgICAg
ICAgaW5kZXggKz0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXgr
K10ubnVtYmVyT2ZSZWdpc3RlcnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRlZmluZWRT
cGFuSW5kZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAgICAgbmV4
dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZp
bmVkU3BhbkluZGV4XS5maXJzdEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAm
JiByZWcudG9Mb2NhbCgpIDwgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7
Ci0KLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNl
IERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNW
YWx1ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3Zl
cnkuZnByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwg
Y3B1LmdwcjxKU1ZhbHVlPihyZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0j
ZWxzZQotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigpKSwgY3B1
LmdwcjxpbnQzMl90PihyZWNvdmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+KHJlY292
ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDZWxsRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBK
U1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2Fm
ZVVuYm94ZWRDZWxsKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNvdmVyeS5n
cHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBCb29s
ZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2VuZGlmCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAg
ICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJf
dD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZVVuYm94ZWRJbnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNv
dmVyeS5ncHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0
X3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgcHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNE
b3VibGUsIHB1cmlmeU5hTihjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LmFzYW5VbnNhZmVVbmJveGVkRG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCByZWNvdmVyeS5jb25zdGFudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNlIENsb25l
ZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIHRo
aXMsIHlldC4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNhdmVzIGFu
ZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJlc3RvcmVD
YWxsZWVTYXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVTYXZlc0Zv
cihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGNwdS5ncHIoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpV
Q1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJbmZvOjpu
b3RDZWxsTWFza1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1Zh
bHVlOjpOb3RDZWxsTWFzayk7Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFu
ZGxlcigpKQotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKGNvbnRleHQpOwotCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFjayBh
cmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhhdCBh
cmd1bWVudHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRvIGVh
Y2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQotICAg
IC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5lZWQg
dG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAvLyBOb3Rl
IHRoYXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQgc3Rp
bGwgYmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNhbGwgZnJh
bWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0KLSAgICBE
Rkc6OmVtaXRSZXN0b3JlQXJndW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklUQ29kZSwg
b3BlcmFuZHMpOwotCi0gICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVy
LiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFsbCBuZXcg
Y2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1
dGUKLSAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1l
ZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0
aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAg
Ly8gT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVl
OgotICAgIC8vCi0gICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMg
YSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVudHVhbGx5
LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAg
ICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxv
dykuCi0gICAgLy8KLSAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFj
ayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBjb2RlIGFu
ZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8v
ICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVk
LgotICAgIC8vCi0gICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3Vs
ZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3Ro
IGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAgICAgcGFy
dGljdWxhcmx5IGV4cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFp
bHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8g
ICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGlu
ZyB0cmlnZ2VyZWQuCi0gICAgLy8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8g
c2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8v
IChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBv
cHBvcnR1bml0eSBmb3IKLSAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVu
dHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1ZW50bHkg
YW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2
ZXIKLSAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBi
ZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29w
IGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gZ29v
ZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJl
IG9mIChkKSwKLSAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVz
ZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBu
dW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vIGxh
cmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJh
dGUpLCBhbmQgaWYKLSAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVy
IG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8gMDsgb3Ro
ZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKS4KLQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9T
UkV4aXRDb3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2Rl
QmxvY2s6Ok9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJl
b3B0aW1pemF0aW9uTm93KGJhc2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0KTsKLQot
ICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIGV4
aXQpOwotICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJsb2NrLCBi
YXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jaywgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1ID0gY29u
dGV4dC5jcHU7Ci0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0K
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVu
IHBlcmZvcm1pbmcgYW4gT1NSIGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRh
aWwgY2FsbHMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NzUxMQotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1vc3RCYXNl
bGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxv
Y2sqPihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2Nr
KTsKLQotICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3Jp
Z2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCkt
PmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3Jp
Z2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrKTsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2lu
ZDsKLSAgICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0
Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAgICAgIHZv
aWQqIGNhbGxlckZyYW1lID0gY3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50
ID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5Q
QyA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSNpZiBD
UFUoQVJNNjRFKQotICAgICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90
Kj4oKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQqIG5ld0Vu
dHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zm
c2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQ
dHIocmV0dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nh
c3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2
b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7Ci0gICAg
ICAgICAgICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJG
cmFtZU9mZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNh
bGxlci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNh
bGxlclJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRl
eCwgdHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAgICAgaWYg
KHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNhbGxlckZy
YW1lID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkt
PnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShBUk02NEUp
Ci0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5s
aW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAg
ICAgIGp1bXBUYXJnZXQgPSB0YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwot
Ci0gICAgICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUg
cmVnaXN0ZXJzLgotICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNh
bGwgdGhhdCB3aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQg
dG8KLSAgICAgICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3Rl
cnMgYWxyZWFkeSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAg
ICAgIHNhdmVPckNvcHlDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywg
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxl
cik7Ci0KLSAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdp
bkFuZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVC
bG9jayk7Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90
KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1l
dGFkYXRhVGFibGVHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFk
YXRhVGFibGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldDxj
b25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxl
ckZyYW1lKTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ckZyYW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVj
b2RlSW5kZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQp
IC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90
PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMy
X3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJh
bmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIFRhZ09mZnNldCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6OkNlbGxU
YWcpKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlQ29uc3RhbnQoKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAj
ZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAgICB9Ci0K
LSAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ug
b25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5k
ZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsK
LSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotI2VuZGlm
Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBl
eGl0KQotewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0
KCk7Ci0KLSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBp
bGVyIGV4cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlz
IGZlbmNlLgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQot
ICAgIC8vIFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUg
Y3VycmVudCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hp
Y2ggaW5saW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3
ZSdsbCB1cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7
IH0iLCBpZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBp
bnNpZGUgYiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8v
IEZJWE1FOiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGlj
aCBDb2RlQmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNh
bGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
cykgewotICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlu
bGluZUNhbGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBl
eGl0SW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7
Ci0gICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNv
bnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0
YXRlLT5qdW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0
LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcg
dG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2
bS5jYWxsRnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0K
LSAgICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBp
ZiAoZXhpdFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxv
Y2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVC
bG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0g
ICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgp
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0
ZXJzOjpwYkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVn
aXN0ZXJzOjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihM
TEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVu
dEluc3RydWN0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFu
ZGxlcigpKQotICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1
cnJlbnRJbnN0cnVjdGlvbjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQ
dHI8SlNFbnRyeVB0clRhZz4oanVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NS
RXhpdChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4
aXQmIGV4aXQpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxG
cmFtZSo+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCk7Ci0gICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAg
ICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRh
dGFMb2coIiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIs
ICIsIGV4aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0
aXZlKSB7Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAi
LCBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAi
LCBhbHRlcm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQot
ICAgICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJl
ZW4gamV0dGlzb25lZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29k
ZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBh
dCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86
OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3By
KSwgIjoiLCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAg
IGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwot
ICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAg
IHVpbnQ2NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91
YmxlIHZhbHVlID0gY29udGV4dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxm
Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRh
TG9nKCJcbiIpOwotfQotCi0vLyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4
aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5z
aWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0
QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMs
IGppdC0+bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVl
U291cmNlKQpAQCAtOTU4LDE1ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9T
UkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNv
bnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1p
bmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9t
IGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBW
aXJ0dWFsUmVnaXN0ZXI+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRv
bSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVy
YW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVj
b3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAg
ICAgICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0
V2VyZU5vdENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAo
b3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZp
ZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5
QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5
QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JF
eGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25z
dCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhp
dDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3Qg
T3BlcmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgsNyBAQCB2
b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYg
dm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCi0g
ICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICAg
ICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCkpOwogICAgIH0KIH0KIApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NSRXhpdDo6
Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhp
dCwgY29uc3QKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5
RnJhbWUpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNB
Y3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4n
dCB1c2UgYSBwcm9iZSBidXQgZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0cyBpcyB0
cmlja3kgb3RoZXJ3aXNlLi4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2YWx1ZXMo
b3BlcmFuZHMubnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9wZXJhbmRzLm51bWJlck9mVG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBv
cGVyYW5kcy50bXAoaSk7CisKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBhdXRv
KiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAgICAgICBq
aXQucHJvYmUoWz0sIHZhbHVlcyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250ZXh0JiBj
b250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1l
KiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lk
ZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOwor
CisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsg
KytpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVzW2kgKyB0
bXBPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdo
YXQgdGhlIEZUTCBkb2VzIGFuZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGludG8gdGhl
IHNjcmF0Y2ggYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUocmVj
b3ZlcnkuY29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAgICAgICAg
ICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5i
b3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJ
bkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNo
W2kgKyB0bXBPZmZzZXRdKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxs
SW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBEaXNwbGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0
ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRD
aGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAg
ICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4o
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2lu
ID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNh
bGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdl
dENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAg
ICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNh
bGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAg
IGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkg
LSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFt
ZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3Jp
Z2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxG
cmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIERv
IGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0
aGUgc3RhY2suCiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMu
c2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5
ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFu
ZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWcuaXNM
b2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNv
ZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2Nh
bCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVD
b2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkg
ewogICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmgKaW5kZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1NGYxYTA0
ZWI4ZS4uOWU5YmNlYTQ4MWMxZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBzdHJ1Y3Qg
T1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAgc3RhdGlj
IHZvaWQgZXhlY3V0ZU9TUkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZjNTMzMjc4
NGYwYTI5MmE0OWNiZTFiODJhNTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJjM2MxMjQz
NWRiOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRC
YXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCkBA
IC03MCw2ICs3MCwxMSBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1cm4gbV9r
aW5kID09IEdlbmVyaWNVbndpbmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBib29sIGlz
RXhpdGluZ1RvQ2hlY2twb2ludEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0KKwogcHJv
dGVjdGVkOgogICAgIHZvaWQgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJs
b2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAKaW5kZXggMmZmM2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRkNTExNS4u
NjI3NmE1OTU4ZTgwMDc2YWFiZDc4MTYzN2JiMzEwY2FlZWYyMWVmMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApA
QCAtMjksMTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJCeXRl
Y29kZXMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
SklULmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIK
KyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2LDkgQEAg
dm9pZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ciwgQnl0ZWNvZGVJbmRleCBjYWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6
Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxsQnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxK
U0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1w
b2xpbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKICAgICB2b2lkKiBqdW1wVGFyZ2V0OwogCiAg
ICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTIzOCw3ICsyNDQsNyBAQCB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0
KQogICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCiAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkp
KTsKLSAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5i
YXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAog
ICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CiAgICAgZm9yIChjb2RlT3JpZ2luID0g
JmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENh
bGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKQEAgLTMwNSwzMyArMzExLDM0IEBAIHZvaWQgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2Um
IGV4aXQpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpCi0gICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
aml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JC
eXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVj
b2RlSW5kZXgoKSkuYml0cygpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleChiYXNlbGluZUNvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoY29kZU9y
aWdpbi0+Ynl0ZWNvZGVJbmRleCgpKSkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
Q29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkp
OwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQK
ICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkp
OwogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIo
KTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAg
ICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJp
dHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKLSAg
ICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CisgICAg
ICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWVDb25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBl
bmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFy
dAogICAgIH0KIAogICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9y
aWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwogICAgIGlmIChjb2RlT3JpZ2lu
KSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKKyAgICAg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChqaXQuYmFzZWxpbmVDb2Rl
QmxvY2soKS0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
KSkuYml0cygpOwogI2Vsc2UKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkpLmJpdHMoKTsKKyAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKSk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5i
YXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoYnl0ZWNvZGVJbmRleCkuYXQoKS5wdHIo
KTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkuYml0cygpOwogI2VuZGlmCi0gICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICB9CiB9CiAKQEAgLTM4MiwxMSArMzg5LDEyIEBA
IHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQ7
CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY2hlY2twb2ludFJldHVyblRh
cmdldDsKICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTElu
dCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rOwogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlSW5k
ZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpID8gY2hlY2twb2ludF9vc3Jf
ZXhpdF90cmFtcG9saW5lIDogY3VycmVudEluc3RydWN0aW9uLm9wY29kZUlEKCkpOwogCiAgICAg
ICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUklu
Zm86OnJlZ1QyKTsKQEAgLTQwMiw3ICs0MTAsMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAj
ZW5kaWYKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JF
eGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkp
OworICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBpbmRleEZvckNoZWNrcG9pbnRS
ZXR1cm4gPSBjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgp
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24g
PSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChpbmRleEZvckNoZWNrcG9pbnRS
ZXR1cm4pOworICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAg
ICAgY2hlY2twb2ludFJldHVyblRhcmdldCA9IGNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgIGNv
ZGVMb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KExMSW50OjpnZXRD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSkpOwor
ICAgICAgICB9CisKICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVt
cFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2
YjI5YjVkZDM2OWE3M2JmZWNiNGIwM2RjMTk5Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5
NDQ1NGQ0ZDQ5MjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEw
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxp
dHkubV9sb2NhbHNbaV0ubm9kZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBN
b3ZIaW50LCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAog
ICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3
ZGYxNTg4MWU1MDg2ODk1Li43N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAg
c3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkK
ICAgICAgICAgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAg
IGV4cGxpY2l0IE9wSW5mbyhSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVl
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUp
KSkgeyB9Ci0KKyAgICBleHBsaWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFz
Qml0cygpKSB7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9w
SW5mbyhUKiBwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAppbmRleCA1MGNhMDBiMDBiOTQ4OGExMDMyODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3
Mzk3NGE4NTYzM2EyZWRiNjg3NzY5MmRiMTA3Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmoKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJh
cmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVz
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBsZW5ndGgsIHVpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudCB7IGZpcnN0RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQXJndW1lbnRzKTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVu
dHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRz
LCBvZmZzZXQsIGxlbmd0aCAtIDEpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0
aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0g
bGVuZ3RoIC0gMTsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudCArIGkpID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNl
LmNwcAppbmRleCBjYmMyYzhiZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi4yYjEw
NWIyY2FkZTdiN2Q1NTg5ZmFkZWFmYjAyYmMwOTY0NWUwOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00
MywxMSArNDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFj
ZSB7CiAKLW5hbWVzcGFjZSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbCB7Ci1zdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQaGFudG9tSW5z
ZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgUGhhbnRvbUluc2VydGlvblBoYXNlKEdyYXBo
JiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgInBoYW50b20gaW5zZXJ0aW9uIikKQEAg
LTYyLDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hp
Y2ggaXMgaW5hY2N1cmF0ZS4gVGhhdCBjYXVzZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRv
bXMuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNv
dW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhh
bnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJv
c2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlv
bjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTcyLDcg
KzY5LDcgQEAgcHVibGljOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQogICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2sp
OwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFs
Ojp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9n
KCJHcmFwaCBhZnRlciBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFw
aC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTEwMywyMiArMTAwLDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5nSW5kZXggPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmlu
ZyAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVy
YW5kKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICAg
ICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IEdldExvY2FsOgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAg
ICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5YmU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1
ZXMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQsMzgg
KzEzMSw0MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAg
ICAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2gg
Zm9yICIsIGVkZ2UsICIgdG8gIiwgY3VycmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAg
ZWRnZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVy
YW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJh
bmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoREZH
UGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAg
ICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6
ICIsIG9wZXJhbmQpOwogCiAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGZyb20g
U2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQorICAg
ICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlLaWxsZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIg
YWxyZWFkeSBraWxsZWQgYnkgc2V0IGxvY2FsIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Tm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWtpbGxlZE5vZGUpCisgICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1f
dmFsdWVzLm9wZXJhbmQob3BlcmFuZCk7IAorICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9k
ZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJh
bmQgIiwgb3BlcmFuZCwgIiB3YXMgbm90IGRlZmluZWQgaW4gdGhpcyBibG9jay4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92
YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5v
ZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAogICAgICAgICAgICAgICAgIC8vIGV4
aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4KLSAgICAgICAgICAgICAgICBp
ZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBjdXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAg
aWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGhh
cyBjdXJyZW50IGVwb2NoICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUlu
c2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygKLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24g
Iiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2st
PmF0KGxhc3RFeGl0aW5nSW5kZXgpLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwKKyAgICAgICAg
ICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFm
dGVyICIsCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYg
Y291bnRzLCBzbyBjcmVhdGluZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAg
ICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAg
a2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOwpAQCAtMTc5LDE0ICsxODAsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2Fs
KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwo
KTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGVNYXlFeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBTZXRMb2NhbCBkb2VzIGV4aXQsIHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxv
Y2FsCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2Fs
IGlzIGRvbmUuCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2Fs
KTsKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWxyZWFkeUtpbGxlZCA9IG9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2st
PnRyeUF0KG5vZGVJbmRleCArIDEpLCBwcm9jZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmlu
ZGV4IGE1OGUxNzk2NTYwZmM2ZDk0YmI0NjNkMTQyOTg4NmUwNzhmMGFmY2MuLmY1ZjA5NmM4ZWI1
NmQ0NWZhOTg5YmI0OTM2ZjcyZDQ0ODE5NWExNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJl
Z2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBw
cm9wcmlhdGUobV9yZWFkLCBoZWFwLm9wZXJhbmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
V2UgZXhwZWN0IHN0YWNrIHdyaXRlcyB0byBhbHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJp
emVkIGJ5IERGRzo6Y2xvYmJlcml6ZSgpLgogICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3Rh
Y2spIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgp
KTsKLSAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBW
aXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBj
YWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhl
YXAoKS5raW5kKCkgPT0gU3RhY2spOwogICAgICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJl
Z2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAg
ICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAoKS5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAK
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJ
ZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIHZvaWQgY2FsbElmQXBwcm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3Rvciwg
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYm
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5jcHAKaW5kZXggNDQ3ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3
OTJiOTA0NzI5ZC4uNWI0Zjk5MjkzNDExNzljMjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVl
Pj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9w
dGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAg
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKaW5kZXggODA1MDUxNmNiZmVjYzg0ZmUxOTU4NDI4YTBjZjg3Y2Q1NGVlMTE3
Yi4uMjIxYzUwMWRiZDE0YzA0NTcyYTdmZTFkMTliZTZkMzE5N2MxM2YzNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKQEAgLTEzNjUsNiArMTM2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
TW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoK
KyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgog
ICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5n
UGhhc2UuY3BwCmluZGV4IDg3Mjc3NjBjNmVjYmRiMzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcu
LmZkNjEyM2ZhOWYxZDUyOWU0YzJlZTJjMGU3ZWRmNjNmMDdmNzhkODMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBA
IC00MiwxMSArNDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVz
cGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNr
U2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBo
JiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAt
NzMsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xl
YXIgdG8gbWUgaWYgdGhpcyBpcyBpbXBvcnRhbnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0
YWNrIHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9
CkBAIC04OCwxMSArODUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJv
b2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAg
ICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVy
YW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQsIGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFu
ZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAx
LDM0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2
ZUF0VGFpbFtibG9ja107CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
REZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZl
IGF0ICIsIG5vZGUsICI6ICIsIGxpdmUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7
CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxPcGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICIsIG9wZXJhbmQsICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlYWRzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0
ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgp
ID09IFB1dFN0YWNrIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEtpbGxTdGFjayk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IFB1dFN0YWNrIHx8IG9wID09IFZhcmFyZ3NMZW5ndGgg
fHwgb3AgPT0gTG9hZFZhcmFyZ3MgfHwgb3AgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AgPT0gS2ls
bFN0YWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVz
Y2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
VmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHdyaXRlcykKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChPcGVyYW5kIG9wZXJhbmQgOiB3cml0ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBs
aXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHJlYWRzKQorICAgICAgICAgICAgICAgICAgICBmb3Ig
KE9wZXJhbmQgb3BlcmFuZCA6IHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5v
cGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCkBAIC0yMzQsNyArMjI5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE9wZXJhbmRz
PEZsdXNoRm9ybWF0PiBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBHZXRTdGFjaykgewpAQCAtMjYxLDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTAzOTgKIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0NvbmZsaWN0aW5nID0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5sb2NhbCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5v
cGVyYW5kKSA9PSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFpc0NvbmZsaWN0
aW5nKTsKQEAgLTI3NSwxNyArMjcwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGZyb20uCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IFB1dFN0YWNrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5sb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlNldHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBu
b2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1h
dDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gS2lsbFN0YWNrKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNpbmsgYSBQdXRTdGFjayBwYXN0IGEgS2lsbFN0
YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiS2ls
bGluZyBzdGFjayBmb3IgIiwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBD
b25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBb
Jl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIg
ZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTI5MywxNiArMjkxLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5k
bGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFy
YXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2Rl
LT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVh
ZCBmbHVzaCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAg
ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQg
PT0gZGVmZXJyZWRBdFRhaWxbYmxvY2tdKQpAQCAtMzEzLDEzICszMTMsMTMgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vz
c29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gZGVmZXJyZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0
ZXIoZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9j
ayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFu
ZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwg
IiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3Nvciks
ICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ld
LCAiIG1lcmdlcyB0byAiKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhl
YWRbc3VjY2Vzc29yXVtpXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoZGVm
ZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgZGVmZXJyZWRbaV0pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRb
c3VjY2Vzc29yXVtpXSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CkBAIC0zNTIsMTAgKzM1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBP
cGVyYW5kczxTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAg
ICAgICAgICAgT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQp
OwotICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAg
ICAgVmVjdG9yPE9wZXJhbmQ+IGluZGV4VG9PcGVyYW5kOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kRm9ySW5kZXgoaSk7CisKICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IHNzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKICAgICAgICAgICAgIG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgIEFT
U0VSVChpbmRleFRvT3BlcmFuZC5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOwpAQCAtMzcw
LDEyICszNzAsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAg
ICAgICAgICAgICAgICAgICAgIHB1dFN0YWNrc1RvU2luay5hZGQobm9kZSk7CiAgICAgICAgICAg
ICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
LAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgICAgICAgICAgICAgc3Nh
Q2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJp
YWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAg
LTM4Niw3ICszODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBzc2FDYWxjdWxhdG9y
LmNvbXB1dGVQaGlzKAogICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7Ci0gICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFy
aWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICgh
bGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zOTcsNyArMzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgUGhpIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBv
aW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBibG9j
ay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSk7CkBAIC00MTEsNyArNDExLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgbWFwcGluZy5maWxsKG51bGxwdHIpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJ
bmRleChpKSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kKG1hcHBpbmcub3BlcmFu
ZEZvckluZGV4KGkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2Fs
Y3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOwpAQCAtNDIxLDE1ICs0
MjEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5k
KSA9IGRlZi0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRv
cCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcHBpbmcsICJcbiIpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3Nh
Q2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5k
W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgcGhpRGVm
LT52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFu
ZCkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CkBAIC00MzcsMTUgKzQzNywxNSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6Iiwg
ZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gZGF0
YS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGRhdGEtPm9w
ZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBk
YXRhLT5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwg
IiB0byAiLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksICIgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NTMsMTYgKzQ1MywxNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0
U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZv
cm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAg
ICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQoZGF0YS0+bG9jYWwpICE9IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0
YS0+bG9jYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5k
KGRhdGEtPm9wZXJhbmQpICE9IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0
YS0+b3BlcmFuZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIGRlZmVycmFsLiBObyBkZWZlcnJhbCBt
ZWFucyB0aGF0IHRoZSBtb3N0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdXRob3JpdGF0
aXZlIHZhbHVlIGZvciB0aGlzIHN0YWNrIHNsb3QgaXMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHN0
YWNrLiBTbywKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlIEdldFN0YWNrLgot
ICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IG5v
ZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFu
ZCkgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC00NzIsMjAgKzQ3MiwyMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgc3RvcmVkIGFuZCBnZXQgcmlkIG9mIHRo
ZSBHZXRTdGFjay4KICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2Rl
LCBmb3JtYXQgPT0gZGF0YS0+Zm9ybWF0LCBmb3JtYXQsIGRhdGEtPmZvcm1hdCk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBp
bmcub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29t
aW5nID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKSA9IGluY29taW5nLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eSgpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFj
azogewotICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBp
bmcgIiwgb3BlcmFuZCwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzSGVhZGVyKCkpCkBAIC00OTksNyArNDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEdvdHRhIGluc2VydCBhIFB1dFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRTdGFjayBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2Rl
LCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBw
aW5nLm9wZXJhbmQob3BlcmFuZCk7CkBAIC01MTMsNyArNTEzLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsK
ICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFy
YXJncyBhbmQgRm9yd2FyZFZhcmFyZ3MgYXJlIHVuY29uZGl0aW9uYWwgd3JpdGVzIHRvIHRoZSBz
dGFjawpAQCAtNTIxLDEzICs1MjEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbG9jYXRpb25zIHRoZXkgd3JpdGUgdG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9j
YXRpb25zIGRlYWQgcmlnaHQgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBM
b2FkVmFyYXJncy9Gb3J3YXJkVmFyYXJncy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2lu
awogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9p
bnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09
IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3Ro
IHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQp
ID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAg
ICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgIH0KQEAgLTUz
OSw4ICs1MzksOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9y
OjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2Nr
KSkgewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgp
OwogICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUg
PSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFy
aWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJh
bmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNz
b3JCbG9jayksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQg
PSBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10ub3BlcmFuZChvcGVyYW5kKTsKICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBpc0NvbmNyZXRlKGZv
cm1hdCksIGZvcm1hdCk7CkBAIC01ODUsNyArNTg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAg
ICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUHV0U3RhY2sgc2lua2luZzpcbiIpOwogICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAppbmRleCA0MzZlNWQzOTE0YjMyMzVh
MDI0N2ZjNDE4NDcxNjMxMWQ2NzY4NjUwLi4wNGYyYzBjZDM5OThiMTgxYjllOThiYmE0MjcwNDg4
M2I0MGQyZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9y
aWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nl
c3NEYXRhLmFkZCh2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0
YS5hZGQodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9hcmd1bWVudEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcg
KzE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhp
cyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAg
ICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFoZWFkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRl
eChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0z
MTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCkt
PmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlE
ZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCkt
Pm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlE
ZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoYmxvY2stPmF0KDApLT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0
YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RhY2soCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgp
LCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIg
LT4gIiwgY2hpbGQsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hp
bGQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2
YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRH
ZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVy
YW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0
aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwot
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9w
ZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTQyNSwxMiArNDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgLy8gaXMgbm90IGV4aXRPSy4KICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VL
aW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihmb3JtYXQpOwogCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUt
PmxvY2FsKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpLCAiIHRvICIsIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVy
YW5kKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUt
Pm9wZXJhbmQoKSksICIgdG8gIiwgcGhpTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBz
aWxvbk9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRn
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlS2luZCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMTViZTQy
YWMzYjY5YWY0ZGM1ODM4YTE4ZGYzOWQwNzhjYTMxNjkxOS4uOWEzMmQ2N2E1ODc0Mjk1ODViMzdk
OWFlMWE2Y2ViYzVmYzk2MmNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKQEAgLTMyMiw2ICszMjIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdu
bwogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJn
czoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBj
YXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApp
bmRleCBiNWExMWM1MWVmMTBjZjdhNmIyMzE3MmQyZDhiZjhmNjc1ZTA1MmJkLi5iZTU4NWQ1ZDQz
YzkyNzc4NzkyOTgzYjA5MzNmNWEyNjI4NTAzMmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBj
aGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7
CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50
KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVh
bS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCks
IG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJh
aWwoQWJvcnRSZWFzb24gcmVhc29uKQpAQCAtMTgyNSw3ICsxODI1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxv
Y2sobV9ibG9jayk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAg
ICBOb2RlKiBub2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAo
IW5vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBT
ZXRMb2NhbCdzLgpAQCAtMTgzNSwxMSArMTgzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDdXJyZW50QmxvY2soKQogICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgog
ICAgICAgICBmb3JtYXQgPSBkYXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsK
LSAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZygKLSAgICAgICAgICAgIFZhcmlhYmxlRXZl
bnQ6OnNldExvY2FsKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwK
LSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCi0gICAgICAgICAgICAg
ICAgZm9ybWF0KSk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW9w
ZXJhbmQuaXNBcmd1bWVudCgpIHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVu
dCgpID49IDApOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6
OnNldExvY2FsKG9wZXJhbmQsIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAg
ICAgfQogCiAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CkBAIC0xOTE5LDcgKzE5MTYsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAo
Zm9ybWF0ID09IEZsdXNoZWRKU1ZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKTsKIAogICAgICAgICBKU1Zh
bHVlU291cmNlIHZhbHVlU291cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgCkBAIC03MzQxLDU0ICs3MzM5LDU1IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSogbm9kZSkK
ICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
YWRWYXJhcmdzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJn
c0xlbmd0aChOb2RlKiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAg
ICB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICB9CisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCkpOworICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3Mo
KTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRz
UmVncywgZGF0YS0+b2Zmc2V0KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAg
bG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNS
ZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgfQorICAgIEdQUlRlbXBvcmFyeSBhcmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7Cisg
ICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhp
cy5ncHIoKTsKICAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCi0gICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgIC8vIGZyb20gdGhlIHN0YW5k
cG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBh
IHNwZWMgY29tcGxpYW5jZQotICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdv
dWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyBy
aWdodAotICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsK
IAotICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQotICAgICAgICBKSVRDb21w
aWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRz
UmVncyk7CisgICAgaW50MzJSZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2RlKTsg
IAorfQogCi0gICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQoreworICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworCisgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGFyZ3VtZW50Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKKyAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7Cisg
ICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIo
KTsKKyAgICBKU1ZhbHVlUmVncyBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdz
KCk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpT
VmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAot
ICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKSk7CisgICAgICAgIFZhcmFyZ3NP
dmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFZhcmFy
Z3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgYXJnQ291bnRJbmNs
dWRpbmdUaGlzR1BSLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCiAg
ICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CiAKLSAgICBtX2ppdC5zdG9y
ZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0
YS0+bWFjaGluZUNvdW50KSk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIG1faml0LnN0
b3JlMzIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVDb3VudCkpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2Fk
VmFyYXJncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5v
ZmZzZXQoKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Mb2FkVmFyYXJncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVT
dGFydC5vZmZzZXQoKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKIAogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM5OCwxNyArNzM5NywxOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSogbm9kZSkK
IHsKICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICBpZiAobm9kZS0+Y2hp
bGQxKCkpCi0gICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxk
KCkpCisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBlbHNlCiAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOwogICAgIEpTVmFsdWVS
ZWdzVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5n
cHIoKTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENv
dW50LmdwcigpOworICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBhcmd1bWVudENvdW50LmdwcigpOwog
ICAgIEpTVmFsdWVSZWdzIHRlbXBSZWdzID0gdGVtcC5yZWdzKCk7Ci0gICAgICAgIAotICAgIGVt
aXRHZXRMZW5ndGgoaW5saW5lQ2FsbEZyYW1lLCBsZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0g
Ki8gdHJ1ZSk7CisgICAgCisgICAgbV9qaXQubW92ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgbGVuZ3RoR1BSKTsKICAgICBpZiAoZGF0YS0+b2Zmc2V0KQogICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoZGF0YS0+b2Zmc2V0KSwgbGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC03
NTY3LDcgKzc1NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0
QXJndW1lbnRzKE5vZGUqIG5vZGUpCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUKICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAg
a25vd25MZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMTsKKyAgICAgICAga25vd25MZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICBsZW5n
dGhJc0tub3duID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICBrbm93bkxlbmd0aCA9IFVJ
TlRfTUFYOwpAQCAtMTI0NDcsNyArMTI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVDYWxs
RnJhbWUoKSkKICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CiAgICAgZWxzZQotICAgICAgICBhcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7
CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQ7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50
Q291bnRSZWdpc3RlciksIHJlc3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAppbmRleCBjNjRmOTc4YWRmODVmYmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5Li4w
M2Q0ODM1YmY0YjdhOGRlMDkzOWVmY2ZhMzcwMjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVOZXdSZWdleHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJh
cmdzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0
aXZhdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5v
ZGUqKTsKQEAgLTE2NjksMTUgKzE2NzAsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVk
QXJyYXlTdG9yYWdlKEdQUlJlZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExv
Y2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3Rl
ciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29k
ZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAg
IHsKKyAgICAgICAgQVNTRVJUKCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVS
ZWcudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVh
bS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNo
aW5lUmVnLCBmb3JtYXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChE
YXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBtX2N1cnJlbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVj
b3JkU2V0TG9jYWwodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwg
Zm9ybWF0KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25J
bmZvJiBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2ZGJk
MGQyYTA1NmRiODEuLjBhZjNmMTcxODE1NDEwZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApAQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
Pm9wZXJhbmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZh
cmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3Qg
aGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5
MTIsNyArMTkxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRT
ZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3Rlcigp
LCBEYXRhRm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUt
PnVubGlua2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwog
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgyNCw2
ICszODI0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdz
TGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVM
b2FkVmFyYXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWViNWVh
MjZhMzEwNWRkYjhhZmU3NjYyMTYzMzQ0Li43YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZkYzkz
YWM4NmM3YzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKQEAgLTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2Fs
OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcg
dGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8g
Y2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQu
CkBAIC0yMDA3LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAg
cmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJl
bnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRE
ZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTQ0NjQsNiArNDQ2NCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2Ug
VmFyYXJnc0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBj
b21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2YWM3
YTdkMzMzZTM5Njc5ZTI2NzU1OTA3NGU0NjRjOWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2MTVm
NjA0Mjc1MjIwNDc3YTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdGFja0xheW91dFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gdHJlYXQgYSB2YXJpYWJsZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFj
Y2VzcyB0byBpdCAoU2V0TG9jYWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRv
bUxvY2FsKS4KICAgICAgICAgCi0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAg
ICBPcGVyYW5kczxib29sPiB1c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3Jh
cGgoKS5tX3RtcHMsIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2Ug
dmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1Ro
YXROZWVkRml4dXAgPSBmYWxzZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDog
ewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50
b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2
YXJpYWJsZS0+b3BlcmFuZCgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsK
ICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2Fs
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50
b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChk
YXRhLT5jb3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5p
c0xvY2FsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkg
cmVsaWVzIG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXNzaWdubWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
VmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5p
c0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS0+bGltaXQ7IGktLTspIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMu
c2V0KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAg
ICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAg
ICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC05Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBj
YXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChzdGFjay0+bG9jYWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNl
ZE9wZXJhbmRzLnNldE9wZXJhbmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtMTA4LDIxICsxMDcsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlcigKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAg
ICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwot
ICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwg
dHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9n
cmFwaC5tX25leHRNYWNoaW5lTG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2Vk
TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkp
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRl
eChpKSkgewogICAgICAgICAgICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUt
PmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUt
Pm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzaXplX3QgbG9jYWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAg
ICAgICAgICBpZiAobG9jYWwgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGlu
ZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRf
TUFYKQorICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJs
ZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkp
OworICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVy
YW5kcywgYWxsb2NhdGlvbiwgdmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGZvciAoU3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YSkgewotICAgICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsK
LSAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAg
ICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkg
Pj0gYWxsb2NhdGlvbi5zaXplKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQu
aXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0
YS0+b3BlcmFuZC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5v
cGVyYW5kLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNo
aW5lTG9jYWwgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAg
ZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0
YS0+b3BlcmFuZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5u
ZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29k
ZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygp
LT5zY29wZVJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJl
Z2lzdGVyKGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29w
ZVJlZ2lzdGVyKCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5s
aW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFi
bGVEYXRhIGRhdGEgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFt
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3RlciA9IGFzc2lnbigKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywg
YWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXpl
KCk7IGFyZ3VtZW50LS07KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9z
aXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAg
IGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIxNSw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2Nh
dGlvbiwgZGF0YS0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGlu
ZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9j
YXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hp
bmVTdGFydCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8
dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1YWxS
ZWdpc3RlciBhc3NpZ24oY29uc3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3VsdC5p
c0xvY2FsKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRp
b25bcmVzdWx0LnRvTG9jYWwoKV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJ
TlRfTUFYKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG15QWxsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRleCA9
IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIG15
QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15QWxs
b2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7
CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMyY2U5
NjFmZjlhMDcxMmExYTA1MS4uYjQ4YzZmN2YxOTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4YTcy
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2UuY3BwCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGktLTsp
IHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgpID09
IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYg
bm9kZS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9j
YWwgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFi
c3RyYWN0SGVhcChTdGFjaywgbG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNP
dmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuY3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIwNzBi
NmVlNmY0ZjhiZjkuLmYxYjFmZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewotICAg
IENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1
dGVPU1JFeGl0LCAmdm0pOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgIkRGRyBPU1IgZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mIHZt
KQogewogICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaAppbmRleCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4MjA1
ZDllLi44YjVjM2YwMWE0ODUyMGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07CiAK
IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0m
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggNjBmYmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1ZjU3
MTNmMWQ3ZS4uNzk2NjVmOGFiODVmYzExMTZkNjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gY2hlY2tPcCA9IENoZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKFNwZWNDZWxsQ2hlY2sgJiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0aGUg
VERaIHZhbHVlLiBUaGUgY2FsbCBlbnRyeXBvaW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFREWiwK
QEAgLTE2OCw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAot
ICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCkpID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRMb2Nh
bDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vi
c3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwp
OwogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9u
YWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRs
ZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxl
VmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJh
bmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDll
ZTVlMDA3NDA5ZGY1Mjk0YmZjZjUxYjc3NmViOGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUzZGMz
YzQ2YzBlMjRkNGRhMWNlMWIwY2Y1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCkBAIC00ODMsNyArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNbaV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBo
aXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAg
ICAgICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2st
PmlzUGhpSW5kZXgoaSkpCkBAIC01MTksMTAgKzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCk7ICsraykgewogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJs
b2NrID0gYmxvY2stPnByZWRlY2Vzc29yc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9
IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0
byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwg
cHJldk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJs
b2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBA
IC01MzMsMTEgKzUzMywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnBy
ZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3Jz
W2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+
b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0Nywx
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSks
ICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0
aW9ucygKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkxvY2FscygpKTsKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlv
bnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25z
KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBPcGVy
YW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBWQUxJREFURSgodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSks
IGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBAIC02
NjgsMjQgKzY2NCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlS
ZWZDb3VudHMuZ2V0KG5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSwgYmxvY2spLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09
IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBnZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAg
ICAgICAgICAgICAvLyBPbmx5IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1heSBi
ZSBtdWx0aXBsZSBTZXRMb2NhbHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBm
bHVzaGluZy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0
TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmlu
aXRlbHk6CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0
J3Mgb2sgdG8gaGF2ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQog
ICAgICAgICAgICAgICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERlZmlu
aXRlbHkgZm9yIHRoYXQgbG9jYWwuCi0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAg
IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5YmU6CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtOTY4LDI2ICs5NjQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxv
Zyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCisg
ICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxv
Y2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAgZGF0
YUxvZyhsb2NhbCwgIiBpbiBudWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhvcGVy
YW5kLCAiIGluIG51bGwgQmxvY2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAg
IGRhdGFMb2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJs
b2NrKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBC
YXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhsb2Nh
bCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2sp
OworICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAi
IC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRW
YWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Js
b2NrKiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAg
ICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJj
ZUJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwgIiBp
biBCbG9jayAiLCAqc291cmNlQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZh
bGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHAKaW5kZXggMjZmMDMyOWQ1NDMwNDE1NzIwNWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVjZGM5
MmUyYzI0MTBhMzVjMDEzMTMxZmRjM2I3Y2NjMjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC00
MSwxMSArNDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFj
ZSB7CiAKLW5hbWVzcGFjZSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewotc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGluZyIp
CkBAIC01Niw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2YXJh
cmdzIGZvcndhcmRpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICB9CkBAIC04OCw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBjYWxs
cyBpbnRvIHRoaXMgZnVuY3Rpb24gdG8gYmUgcmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBpbiBh
IHNpbXBsZSBPKG4pIG1hbm5lci4KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9
IGJsb2NrLT5hdChjYW5kaWRhdGVOb2RlSW5kZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJcbiIp
OwogICAgICAgICAKICAgICAgICAgLy8gV2UgZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVyIENy
ZWF0ZUNsb25lZEFyZ3VtZW50cyBpZiB0aGUgYnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3ICsx
MDMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBbJl0g
ewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNyw5
ICsxMTUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2RlLT51
bmxpbmtlZE9wZXJhbmQoKS5pc1RtcCgpLCAiV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYSB0
bXAgcmVmZXJyaW5nIHRvIGFuIGFyZ3VtZW50cyBvYmplY3QuIik7CiAgICAgICAgICAgICAgICAg
bGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50
TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAg
ICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRPcGVy
YW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBDaGVja1ZhcmFyZ3M6CkBAIC0xNDAsMTMgKzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgc2F3RXNjYXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgaWYgKHNhd0VzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAg
ICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LnVzZXMobm9kZSwgY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRl
eCA9IG5vZGVJbmRleDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lu
bGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRp
ZGF0ZSB8fCBub2RlLT5jaGlsZDIoKSA9PSBjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzTG9hZGVkRnJvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVz
Y2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKCF2YWxpZEdldEJ5T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBidXR0
ZXJmbHkgOiBjYW5kaWRhdGVCdXR0ZXJmbGllcykgewogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC51c2VzKG5vZGUsIGJ1dHRlcmZseSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgQnV0dGVyZmx5IGVzY2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIz
NSwxMSArMjM1LDExIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJh
bmRzKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5k
ZXggKyAxKSwKLSAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIs
IHJlZywgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExv
Y2FscyksICJcbiIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgb3BlcmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3Rl
ZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9jYWxz
W2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0tXSA9
IHJlbGV2YW50TG9jYWxzLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxl
dmFudExvY2Fscy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dFVzZXJJbmRleCA9IG5vZGVJbmRleDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNlcklu
ZGV4ID0gIiwgbGFzdFVzZXJJbmRleCwgIiwgIiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgpLCAi
XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBEZXRl
cm1pbmUgaWYgYmV0d2VlbiB0aGUgY2FuZGlkYXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJlIGlz
IGFueQpAQCAtMjYzLDE2ICsyNjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92
SGludDoKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGNhc2UgS2ls
bFN0YWNrOgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNh
bmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2Rl
LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0U3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoY2FuZGlkYXRlLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlk
YXRlLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
SW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2Fz
ZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChj
YW5kaWRhdGUsIG5vZGUtPmxvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
aWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5kKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxMyArMjk3
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFo
ZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRp
ZGF0ZSwgaGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNJ
bnRlcmZlcmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAg
ICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9lc0ludGVyZmVy
ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBA
IC0zMTEsNyArMzEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gV2UgY2FuIG1ha2UgdGhpcyB3b3JrLgotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBXaWxsIGRvIGZvcndhcmRpbmchXG4iKTsKICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgCkBAIC0zNDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0aGVz
ZS4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVu
dHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1
bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBub2Rl
LT5vcmlnaW4sIC8qIGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KEZvcndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4ZWJm
ZmI0MzVlZDRkYmY2MDJiZDYyYWVkNGMzNDMyZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMwODEy
NWI0ZTZlY2M4OGE4N2M3ZDE3OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKCkKLSAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVj
Tm9uZSkKKyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2Fy
ZVByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5l
dmVyVW5ib3goZmFsc2UpCkBAIC00NSwxMCArNDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpW
YXJpYWJsZUFjY2Vzc0RhdGEoKQogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVBY2Nl
c3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgIDog
bV9sb2NhbChsb2NhbCkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxlQWNj
ZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1fcHJl
ZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05v
bmUpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1f
c2hvdWxkTmV2ZXJVbmJveChmYWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0Zh
aWxlZChmYWxzZSkKQEAgLTg3LDcgKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNo
b3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qg
c3VwcG9ydCB0aGlzIGZhY2lsaXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTog
bWFrZSB0aGlzIHdvcmsgZm9yIGFyZ3VtZW50cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50
KCkpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVk
aWN0aW9uLCB0aGVuIHRoaXMgZG9lc24ndApAQCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFyaWFi
bGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsKICAg
ICBBU1NFUlQoaXNSb290KCkpOwogICAgICAgICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50
KCkgfHwgc2hvdWxkTmV2ZXJVbmJveCgpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkg
fHwgc2hvdWxkTmV2ZXJVbmJveCgpCiAgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2Rl
VXNlc0FzQXJyYXlJbmRleCkpCiAgICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0
U3RhdGUobV9kb3VibGVGb3JtYXRTdGF0ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgIApA
QCAtMTc2LDcgKzE3NSw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2Vu
dEludDUySW1wbCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXZSBwdW50
IGZvciBtYWNoaW5lIGFyZ3VtZW50cy4KLSAgICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkpCisg
ICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICAvLyBUaGUgYXJndW1lbnQtYXdhcmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJnZXMg
YWxsIG9mIGFuIChpbmxpbmVkIG9yIG1hY2hpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEyMDQz
ZmEyNTRlNjA5NDIzMjAxNGEyODRlLi5iZTJmYjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1NTcz
ZmNlZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEg
OiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFZhcmlhYmxlQWNjZXNzRGF0YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCk7
CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCgpCisgICAgT3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOwor
ICAgICAgICBBU1NFUlQobV9vcGVyYW5kID09IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAgICAg
cmV0dXJuIG1fb3BlcmFuZDsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBtYWNo
aW5lTG9jYWwoKQpAQCAtMjA4LDEwICsyMDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0aW5n
IHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBz
cGFjZQogICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlm
aWNhbnQuCiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwogICAg
IFNwZWN1bGF0ZWRUeXBlIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFuZCBt
X29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5vZGVG
bGFncyBtX2ZsYWdzOwogCiAgICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAppbmRleCAyOGU0MzdmZDUx
ZmVhNDk2OWViNDhlY2YwYzA1MDhmMGEzN2RmODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBjNDNi
ZDM2ZWQ3MmUzZjljZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudC5jcHAKQEAgLTU5LDExICs1OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgiLCBp
ZCgpLCAiKSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAg
ICAgb3V0LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwg
IikiKTsKKyAgICAgICAgb3V0LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJhbmQo
KSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVn
aXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBieXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAgICAg
ICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToi
LCBvcGVyYW5kKCksCiAgICAgICAgICAgICAiLCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZv
cm1hdCgpKSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3MjIz
ZGQ2ZjY5OWM2ZGJhZDZkMjI0NjdjOTgzNC4uYzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFhYzQ4
MTM4ZDM0ZTNmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50LmgKQEAgLTY4LDYgKzY4LDEwIEBAIGVudW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50OF90
IHsKIH07CiAKIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIFZhcmlhYmxlUmVw
cmVzZW50YXRpb24oKSAKKyAgICAgICAgOiBvcGVyYW5kKCkgCisgICAgeyB9CisKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHI7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0
ZXJJRCBmcHI7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5pb24g
VmFyaWFibGVSZXByZXNlbnRhdGlvbiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHBheWxvYWRHUFI7CiAgICAgfSBwYWlyOwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0dWFs
UmVnOworICAgIE9wZXJhbmQgb3BlcmFuZDsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQgewpA
QCAtMTYyLDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAg
ICAgICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlv
biByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IHZp
cnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9
IHZpcnR1YWxSZWdpc3RlcjsKICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAg
ZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RG
TW92ZSh3aGljaCk7CkBAIC0xODEsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAog
ICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZv
cm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciBt
YWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZl
bnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2gudmlydHVh
bFJlZyA9IG1hY2hpbmVSZWcub2Zmc2V0KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRp
b24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBi
eXRlY29kZVJlZy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5
dGVjb2RlT3BlcmFuZDsKICAgICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAg
ICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNo
ID0gV1RGTW92ZSh3aGljaCk7CkBAIC0xOTUsMTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBldmVudDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92
SGludChNaW5pZmllZElEIGlkLCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAgc3Rh
dGljIFZhcmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVjb2Rl
UmVnKQogICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hU
eXBlIHdoaWNoOwogICAgICAgICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFi
bGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24u
dmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlv
bi5vcGVyYW5kID0gYnl0ZWNvZGVSZWc7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnRF
dmVudDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwogICAgICAgICBl
dmVudC5tX3JlcHJlc2VudGF0aW9uID0gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0yNjUs
MTMgKzI2OSwxMyBAQCBwdWJsaWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0ZXIo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwg
bV9raW5kID09IFNwaWxsKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJl
c2VudGF0aW9uLmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRh
dGlvbi5nZXQoKS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWdpc3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5kIG9w
ZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2
ZW50IHx8IG1fa2luZCA9PSBNb3ZIaW50RXZlbnQpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVy
biBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1
YWxSZWdpc3RlciBtYWNoaW5lUmVnaXN0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQzOWJi
MDk0YzRiODY2ZTY3ZWQzZTJlZTFiNDg5NmFiYjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIxYTM1
YWY4ZDIxZGUzMmI1ZGRhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFyaWFi
bGVFdmVudFN0cmVhbTo6bG9nRXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7CiAg
ICAgZGF0YUxvZ0YoInNlcSMldToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CiAg
ICAgZXZlbnQuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgIGRhdGFMb2dGKCIgIik7CisgICAg
ZGF0YUxvZ0xuKCIgIik7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBAQCB1
bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFwaCwK
ICAgICB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVjb3Zl
cmllcywgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNwYW5z
KSBjb25zdAogeworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAog
ICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52YWxp
ZEluZGV4OwogICAgIGJvb2wgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBAIC0x
MzAsMzcgKzEzMiw0MiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVj
dCgKICAgICBhdXRvIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVkIGkp
IHsKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZp
cnR1YWxSZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAgICAg
aW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgo
aSAtIDEpLm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJp
ZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKTsKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZv
ckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50IG1p
bk9mZnNldCA9IHN0ZDo6bWluKGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAgdW5k
ZWZpbmVkT3BlcmFuZFNwYW5zLT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0LCBp
IC0gZmlyc3RVbmRlZmluZWQgfSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZElu
ZGV4OwogICAgIH07CiAgICAgYXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1bnNp
Z25lZCBpKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2YgYXJn
dW1lbnRzIGZyb20gdGhlIHNwYW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFjZW50
IG9wZXJhbmRzIGluZGV4ZXMuCi0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlk
SW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0Fy
Z3VtZW50KGkpKQorICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYm
IGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvcklu
ZGV4KGkpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNw
YW4oaSk7CiAKICAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkgewog
ICAgICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRlZmlu
ZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAgICAg
ICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvcklu
ZGV4KGkpLmlzQXJndW1lbnQoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7
Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRv
TG9jYWwoKSArIDE7CisgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlu
bGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZhcmlh
YmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAgbnVt
VG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAgIC8v
IENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMgbXVz
dCBiZSBhbiBhcmd1bWVudCBjaGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgYWxs
IHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAogICAg
IC8vIHJlZmxlY3QgdGhpcy4KICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVjb3Zl
cmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBudW1WYXJpYWJsZXMpOworICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVyZSBi
ZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1W
YXJpYWJsZXMsIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVjb3Zl
cmllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpT
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLnZp
cnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBudW1WYXJpYWJsZXM7CiAgICAgfQpAQCAtMTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQgVmFy
aWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAg
ICAKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFu
ZCBleGVjdXRlIHRoZSBldmVudHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRT
b3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9w
ZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbnVtVmFyaWFibGVzLCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVy
YW5kU291cmNlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVk
R2VuZXJhdGlvbkluZm8+IGdlbmVyYXRpb25JbmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dGFydEluZGV4OyBpIDwgaW5kZXg7ICsraSkgewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2ZW50
JiBldmVudCA9IGF0KGkpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2lu
ZyBldmVudCAiLCBldmVudCk7CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAgICAg
ICAgIGNhc2UgUmVzZXQ6CiAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4LDIx
ICsyMDYsMjMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVudDoK
LSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2Rl
UmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChl
dmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisg
ICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCks
IFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFNldExvY2FsRXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3Bl
cmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRT
b3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZTo6
Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgp
KSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVy
YW5kKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQu
b3BlcmFuZCgpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0
ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJPcGVyYW5kIHNvdXJjZXM6ICIsIG9wZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAvLyBT
dGVwIDM6IENvbXB1dGUgdmFsdWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMgPSBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFy
aWFibGVzKTsKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PihP
cGVyYW5kc0xpa2UsIG9wZXJhbmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UmIHNv
dXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlhbGx5
UmVjb3ZlcmFibGUoKSkgewpAQCAtMjMwLDYgKzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZl
bnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFw
aC5hdChzb3VyY2UuaWQoKSk7CiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9
IGdlbmVyYXRpb25JbmZvcy5nZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAoIWluZm8uYWxp
dmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVl
UmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSksICIgaXMgZGVhZC4iKTsKICAgICAgICAgICAg
IHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFy
YXRlZCkKICAgICAgICAgICAgICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjM3
LDYgKzI0OCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJl
Y292ZXJpZXNbaV0sIG5vZGUpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
T3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNvbnN0
YW50LiIpOwogICAgICAgICAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNl
cGFyYXRlZCkgewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIG5v
ZGUtPmNvbnN0YW50KCkgPT0ganNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVj
b3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAgLTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBWYXJp
YWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3Bs
YWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0dWFs
UmVnKSwgaW5mby5mb3JtYXQpOworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2Vk
SW5KU1N0YWNrKGluZm8udS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7
CiAgICAgfQogICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQp
CiAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6ZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmgKaW5kZXggMDE1NzMwMDdlZGRkZDcwZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4uZTll
NDNhYmZlYzQ4NWZlYzdlNjYzMTUxYzFjMjJlYzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkgKzQy
LDEyIEBAIHN0cnVjdCBVbmRlZmluZWRPcGVyYW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJpYWJs
ZUV2ZW50U3RyZWFtIDogcHVibGljIFZlY3RvcjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFwcGVu
ZEFuZExvZyhjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKICAgICB7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgbG9nRXZlbnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQoZXZl
bnQpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAppbmRleCA3ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFk
Li4zMmNiYzEwNzZkZTU5ZGFhNGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBj
YXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKICAgICBjYXNlIEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRi
ODE0M2QyYTk1NGYwOGVkYWYxM2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdk
Y2I5ODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVu
dHJ5SklUQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKIEZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAg
ICA6IG1fYnl0ZWNvZGVJbmRleChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQo
MCkKKyAgICA6IG1fZW50cnlGYWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNiNzgx
Y2ZiODliMTFjMzlmOThmN2E5YWJhM2QuLjQ1ZTgxYmNkZGEyODgxNzNmZTE5OWU4NGM2N2I5Zjg4
YzgwMjZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuY2xlYXJTdGFja0ZyYW1lKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFtZVNp
emUoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2
ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKGNvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxv
Y2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAgICAg
ICAgICAgICB9KTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJ
bmRleCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlz
KCkpIHsKQEAgLTI3NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBX
ZSBkb24ndCB3YW50IHRoZSBDb2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNl
bGYgYmVjYXVzZQogICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQg
Y29sbGVjdGVkLgotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRy
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNr
IE92ZXJmbG93IENoZWNrLgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFw
aC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAt
MzU1LDcgKzM1NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRz
LgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpKSk7CkBAIC0xMjgxLDYgKzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxF
dmFsOgogICAgICAgICAgICAgY29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NM
ZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgog
ICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTE5NTMsNyArMTk1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1
ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1f
ZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1
ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUo
YnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVu
bGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAK
ICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0
YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFu
ZCk7CiAgICAgICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25j
cmV0ZShkYXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYsMTMg
Kzc5MjksMTMgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQog
ICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9
CiAKICAgICB2b2lkIGNvbXBpbGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxs
ZWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihj
YWxsZWUsIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0
LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpCkBAIC03OTQ3LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBjb21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAg
ICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSksIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
OworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
R2V0U2NvcGUoKQpAQCAtOTU0Miw1MSArOTU0NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRK
U1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFy
YXJncygpCisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpz
QXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAg
ICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9u
U2l6ZU9mVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAg
ICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVm
ZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBm
cm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5
IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhl
IGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUg
b3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAg
ICAgICAKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChs
ZW5ndGgsIG1fb3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAg
ICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0
LmFib3ZlKGxlbmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihs
ZW5ndGhJbmNsdWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJn
cygpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBM
VmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7
CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJh
cmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3Zl
KGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0g
ICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5j
bHVkaW5nVGhpcyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0
SW50MzIoZGF0YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aElu
Y2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAot
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9w
ZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxv
YWRWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZp
cnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExW
YWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFk
ZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFt
ZSksCisgICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQp
LnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMp
KTsKICAgICAgICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlv
bkxvYWRWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9v
dXQuY2FzdFRvSW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50
MzIoZGF0YS0+b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihk
YXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlz
LCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1f
bm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7
CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCku
bm9kZSgpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBj
b21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtOTU5NSw1MCArOTU5OCwyNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkK
LSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRz
Q2hpbGQoKSkKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRz
Q2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0g
ICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJn
dW1lbnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVD
YWxsRnJhbWUpOwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAg
ICAgICAgICAgaWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAg
ICBrbm93bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0
aCA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5j
bHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dp
Y2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVy
YXRpb25zLgotICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAg
bGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
Ci0KLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50
c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlz
TGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+b2Zmc2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9y
RXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQu
Y29uc3RJbnQzMigxKSk7Ci0gICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0
aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZh
bHVlIGxlbmd0aEluY2x1ZGluZ1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApIHsKKyAgICAgICAgICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1YihjYWxs
ZXJMZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2VsZWN0
KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwg
Zml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRp
Y3RhYmxlKTsKKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9
IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAg
IHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxs
cHRyLAogICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQu
Y29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3Jl
MzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsK
ICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0
YS0+b2Zmc2V0OwogICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFy
dChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZh
bHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7
CiAKQEAgLTk2OTcsNjUgKzk2NzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0
byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBi
dXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXApCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOwor
ICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGgg
PSBtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9y
RXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0g
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xl
bmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1
bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHJldHVybiBtX291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJn
ZXJMZW5ndGhSZXN1bHQpOworICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0
ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgs
IG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKICAg
ICB9CiAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAgIHsK
LSAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhh
c2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGlu
ZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFyZ3Vt
ZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVudHMg
PSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tU3ByZWFkKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50
cyA9IDA7Ci0gICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAg
ICAgYXV0byBjb2xsZWN0QXJndW1lbnRDb3VudCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8g
c2VsZiwgTm9kZSogdGFyZ2V0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9w
KCkgPT0gUGhhbnRvbVNwcmVhZCkgewotICAgICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGls
ZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
KSB7Ci0gICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZl
Y3RvcigpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQt
Pm51bUNoaWxkcmVuKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9y
LT5nZXQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hp
bGQodGFyZ2V0LCBpKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICArK251bWJlck9mU3RhdGljQXJndW1lbnRzOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxK
U0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCk7Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChj
YWNoZWRTcHJlYWRMZW5ndGhzLmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJh
bWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAg
ICB9KS5pdGVyYXRvci0+dmFsdWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0QXJn
dW1lbnRDb3VudChhcmd1bWVudHMpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG1fb3V0LmNvbnN0SW50MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAgICAg
ICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxlbmd0
aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsK
KyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKTsKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOwogICAgICAgICBzcGVjdWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+
bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCi0gICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJl
Y3Vyc2FibGVMYW1iZGEoW3RoaXMsICZjYWNoZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRd
KGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsK
KyAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJnRh
cmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+
IExWYWx1ZSB7CiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0
b3JlSW5kZXgpOwogCkBAIC05Nzk4LDggKzk3MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQodGFyZ2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAg
ICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VT
dGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5n
dGggPSBtX291dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxG
cmFtZSkpOworICAgICAgICAgICAgYXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdl
dC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VT
dGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApOworICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0
Lnplcm9FeHRQdHIoZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxs
RnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGxvb3AgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAgcHJp
dmF0ZToKICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
IAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBzLlNo
YWRvd0NoaWNrZW5fUGFja2V0X2ZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQu
bG9hZFB0cihhZGRyZXNzRm9yKDApKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFj
a2V0X2NhbGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93
Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9h
ZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hh
ZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOworICAgICAgICBtX291dC5zdG9yZVB0ciht
X291dC5sb2FkUHRyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CiAg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tl
bl9QYWNrZXRfc2NvcGUpOwogICAgIH0KICAgICAKQEAgLTEyMzE2LDcgKzEyMjUyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGxlbmd0aDsKIAogICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAg
ICAgICBsZW5ndGgua25vd24gPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMTsKKyAgICAgICAgICAgIGxlbmd0aC5rbm93biA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAg
ICAgICAgICAgICBsZW5ndGguaXNLbm93biA9IHRydWU7CiAgICAgICAgICAgICBsZW5ndGgudmFs
dWUgPSBtX291dC5jb25zdEludDMyKGxlbmd0aC5rbm93bik7CiAgICAgICAgIH0gZWxzZSB7CkBA
IC0xMjM0Niw3ICsxMjI4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpKTsKICAgICAgICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVj
b3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3Rh
cnQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDAp
CkBAIC0xNzYxMSw3ICsxNzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4o
Y29kZU9yaWdpbik7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRhZ0ZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICB0YWdGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgIVVTRShCVUlMVElO
X0ZSQU1FX0FERFJFU1MpIHx8ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9jYWxsRnJhbWUsIG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2Vu
ZGlmCkBAIC0xNzcxOSw3ICsxNzY1NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBs
b3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBl
bmRPU1JFeGl0KApAQCAtMTc4MjQsMTUgKzE3NzYxLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVz
Y3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5k
ID0gZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAg
ICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFi
aWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAg
ICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkg
ewogCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkK
LSAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5n
KCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwg
b3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZh
aWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBl
eGl0T3JpZ2luKSkKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQg
PSAiLCBvcGVyYW5kLCAiLCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdp
biA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBF
eGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywg
bWFwLCBhdmFpbGFiaWxpdHkpOwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleElu
U3RhY2ttYXBMb2NhdGlvbnMoKSkKQEAgLTE4MTMyLDM5ICsxODA2OSwzOSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBo
LCBzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAg
IFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0
cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3Mo
YmFzZSwgbV9oZWFwcy52YXJpYWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVy
biBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCldLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5
bG9hZEZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxv
YWRGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBU
eXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBv
aW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAg
ICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9
IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZm
X3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVy
IGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAw
KQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9m
ZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5k
LCBvZmZzZXQpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFu
ZCwgb2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJh
bmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAg
ICAgICAgcmV0dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAg
fQogICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7
CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQ
b2ludGVyIHRhZ0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFn
Rm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkVudHJ5LmNwcAppbmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5
MDQ0OTE5Li4wOTFlN2YzYzliNDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50
cnk6ICIsIHZhbHVlcywgIlxuIik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1
ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpLm9mZnNldCgpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZh
bHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1
bWVudCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJl
Y29uc3RydWN0ZWRWYWx1ZSA9IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlm
ICgocmVjb25zdHJ1Y3RlZFZhbHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFs
dWUudmFsdWUoKSkgfHwgIWFyZ3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVm
YmJiNjVmODZiYjZkYWJjZGYxOGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZm
ZGFiYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3
LDEwICs0NywxMCBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6
T1NSRXhpdERlc2NyaXB0b3IoCiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVy
T2ZUbXBzKQogICAgIDogbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAg
ICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9m
QXJndW1lbnRzLCBudW1iZXJPZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1l
bnRzLCBudW1iZXJPZkxvY2FscywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3
LDMgQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9j
YXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
IAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKaW5kZXggZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVl
Yi4uZmQ3ZjlmMDViYzQ4OWMxZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4
aXRIYW5kbGU7CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlw
dG9yKAogICAgICAgICBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5z
aWduZWQgbnVtYmVyT2ZMb2NhbHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAg
ICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3
ZSB3aXNoIHRvIHByb2ZpbGUuCiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0
IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2Vh
ODNmNmZiODJiY2IzYThjMGE4ODE3NmVlNzIuLmEzNzg0MTBkYTliODAxNTcyNGE5ZGMxNmMzZmUx
YWVjMDgwNTVkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5j
bHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKQEAgLTM3LDEwICszOCwxMSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0
Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVy
c0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNr
Q29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9
IHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7CisgICAg
ICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAgICAgaml0LnByb2JlKFs9XSAoUHJvYmU6OkNvbnRl
eHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxs
RnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
PiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
KCk7CisKKyAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRU
bXBzOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNj
cmF0Y2hbaSArIHRtcE9mZnNldF07CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAg
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZl
eGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJh
bWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxs
ZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBj
YWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRT
aWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNo
YXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6
ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRt
cE9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUs
IGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBOb3cgZ2V0
IHN0YXRlIG91dCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0
aGUgc3RhY2suIFRoZSB2YWx1ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1
c3QgbW92ZSB0aGVtLgogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRv
ci0+bV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4
KGluZGV4KTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1f
dmFsdWVzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgp
ICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lz
dGVyc0ZvckNhbGxlZVNhdmVzKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9w
ZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3Rl
cnNGb3JDYWxsZWVTYXZlcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBqaXQu
bG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3Rv
cmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlZykpOwor
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgaGFu
ZGxlRXhpdENvdW50cyh2bSwgaml0LCBleGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9wZXJhdGlvbnMuY3BwCmluZGV4IDdmN2NkMzgzMjQ5NjFhOGZmNGU0NzI1OWE4ODRkZTg2
ZDU2NGIxMTcuLjEwMmMxZTZhMWJkOWViM2I0NzEzMzc0NGY4NDNlYzY0ZDYzYTE4ZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApAQCAtNTA1LDcgKzUw
NSw3IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFs
aXplT2JqZWN0SW5PU1IoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNh
bm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNp
bmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBh
IGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIu
bV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFi
bGVCdXR0ZXJmbHkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5l
d0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1t
dXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IDc0
OTMzZGM2MDUxNWM1ZGEwMGVhMThmYzdkNWRiM2FkOWNlNWU5Y2YuLmQ1N2ZiMWVlYTgwNDRhMzRi
NzkxNzY4YTkwOTc2OTg5OThhYzMzOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02NTUsMTUgKzY1NSwzNyBAQCBMVmFsdWUgT3V0cHV0Ojpub3RaZXJvNjQo
TFZhbHVlIHZhbHVlKQogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8pOwogfQogCi1M
VmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBu
b3RUYWtlbikKK0xWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQsIFNlbGVjdFByZWRpY3RhYmlsaXR5IHByZWRpY3RhYmlsaXR5KQogewog
ICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkgewogICAgICAgICBpZiAodmFsdWUtPmFzSW50MzIo
KSkKLSAgICAgICAgICAgIHJldHVybiB0YWtlbjsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0Owog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbm90VGFrZW47CisgICAgICAgICAgICBy
ZXR1cm4gcmlnaHQ7CiAgICAgfQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2Vu
KTsKKworICAgIGlmIChwcmVkaWN0YWJpbGl0eSA9PSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6Tm90
UHJlZGljdGFibGUpCisgICAgICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgbGVmdCwgcmlnaHQpOworCisg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbmV3QmxvY2soKTsKKyAgICBMQmFzaWNCbG9j
ayBsZWZ0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisgICAgTEJhc2ljQmxvY2sgcmlnaHRUYWtl
bkJsb2NrID0gbmV3QmxvY2soKTsKKworICAgIG1fYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKKyAgICAgICAgbV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAg
IEZyZXF1ZW50ZWRCbG9jayhsZWZ0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0
UHJlZGljdGFiaWxpdHk6OlJpZ2h0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZy
ZXF1ZW5jeUNsYXNzOjpSYXJlKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHJpZ2h0VGFrZW5C
bG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OkxlZnRMaWtlbHkg
PyBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAg
IExWYWx1ZSBwaGkgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OlBoaSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4oKSk7CisKKyAgICBsZWZ0VGFrZW5CbG9jay0+
YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGxlZnQsIHBoaSk7
CisgICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpK
dW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAg
IHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHJpZ2h0LCBwaGkpOworICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGNv
bnRpbnVhdGlvbikpOworCisgICAgbV9ibG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICByZXR1cm4g
cGhpOwogfQogCiBMVmFsdWUgT3V0cHV0OjphdG9taWNYY2hnQWRkKExWYWx1ZSBvcGVyYW5kLCBU
eXBlZFBvaW50ZXIgcG9pbnRlciwgV2lkdGggd2lkdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaAppbmRleCBjNTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1NzBjYTJl
Li40YzAyYjM0MDg1MTQ2ZjdkZjAyNTYyN2Q1ZmYzMWM3ODEwZDhmYjc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGVExB
YmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
IgogI2luY2x1ZGUgIkZUTENvbW1vblZhbHVlcy5oIgorI2luY2x1ZGUgIkZUTFNlbGVjdFByZWRp
Y3RhYmlsaXR5LmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExTd2l0Y2hD
YXNlLmgiCiAjaW5jbHVkZSAiRlRMVHlwZWRQb2ludGVyLmgiCkBAIC0zNjUsNyArMzY2LDcgQEAg
cHVibGljOgogICAgIExWYWx1ZSB0ZXN0SXNaZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1h
c2spIHsgcmV0dXJuIGlzTnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0
ZXN0Tm9uWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3ROdWxs
KGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAKLSAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1
ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pOworICAgIExWYWx1ZSBzZWxlY3QoTFZh
bHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbiwgU2VsZWN0UHJlZGljdGFi
aWxpdHkgPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpOwogICAgIAogICAg
IC8vIFRoZXNlIGFyZSByZWxheGVkIGF0b21pY3MgYnkgZGVmYXVsdC4gVXNlIEFic3RyYWN0SGVh
cFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VkQWNjZXNzKCkgd2l0aCBhCiAgICAgLy8gbm9uLW51
bGwgaGVhcCB0byBtYWtlIHRoZW0gc2VxX2NzdCBmZW5jZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE4
NTNiYTk4NTIyYWFhYzYxYjg0OTk1NTI3OTRhNTA5MzBjN2Q2YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaApAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0M6
OkZUTCB7CisKK2VudW0gY2xhc3MgU2VsZWN0UHJlZGljdGFiaWxpdHkgOiB1aW50OF90IHsKKyAg
ICBOb3RQcmVkaWN0YWJsZSwKKyAgICBQcmVkaWN0YWJsZSwKKyAgICBMZWZ0TGlrZWx5LAorICAg
IFJpZ2h0TGlrZWx5LAorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsLmgKaW5kZXggNjkzNGMzZjBkMzc5MWY2NGJhNDI5NjNlMDU1NjNkYmJjN2RkYTVhNC4uYzcy
NmFkMjdjODE1YWM2N2E2NzBkMjU4MDRhYThjYWUyMmIzYTBkYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCkBAIC0xMDAsNyArMTAwLDcgQEAgU2xvd1Bh
dGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKICAgICAgICAg
aml0LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxs
U2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhj
ZXB0aW9uVGFyZ2V0LCBmdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTZhNWY1Mjc3ZGQ2MzFhY2Q0Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAg
LTAsMCArMSw2NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xh
c3MgQ2hlY2twb2ludAorICAgIGF0dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRl
ZnMKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAg
ZGVmIGluaXRpYWxpemUobmFtZSwgaW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQor
ICAgICAgICBAaW5kZXggPSBpbmRleAorICAgICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0
bXAsIHVzZURlZil8IHVzZURlZiA9PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRl
ciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBk
ZWYgbGl2ZW5lc3MobmFtZXNwYWNlKQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNw
YWNlfTo6I3tuYW1lfToKK0VPRgorICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisg
ICAgZGVmIGluaXRpYWxpemUob3Bjb2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9w
Y29kZSA9IG9wY29kZQorICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRz
ID0gY2hlY2twb2ludHMubWFwX3dpdGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hl
Y2twb2ludC5uZXcobmFtZSwgaW5kZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZl
bmVzcworICAgICAgICBAY2hlY2twb2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAg
ICBlbmQKKyAgICAgICAgRU9GPC0tCitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ij
e0BvcGNvZGUuY2FwaXRhbGl6ZWRfbmFtZX0odWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3
aXRjaCAoY2hlY2twb2ludCkgeworCisgICAgfQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5kZXggZGFiODY4NmNhMzNhMTAy
YzliZmExZGYxODAzZWJiNGYwYWIyNDQ4NS4uY2ZkOWRmMTUxMTQ3YTg2ZGE0YmM3NWJlNDZhNjc4
MjVlMjUzNzVmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9P
cGNvZGUucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIK
QEAgLTMwLDYgKzMwLDcgQEAgY2xhc3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAg
ICBhdHRyX3JlYWRlciA6bWV0YWRhdGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0
cl9yZWFkZXIgOmNoZWNrcG9pbnRzCiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cg
PSAiT3Bjb2RlU2l6ZTo6TmFycm93IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQog
ICAgICAgICB0aWQKICAgICBlbmQKIAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUs
IGV4dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYg
aW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0
YV9pbml0aWFsaXplcnMsIHRtcHMsIGNoZWNrcG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNl
Y3Rpb24KICAgICAgICAgQG5hbWUgPSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwg
e30KICAgICAgICAgQG1ldGFkYXRhID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9p
bml0aWFsaXplcnMKICAgICAgICAgQGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdf
bmFtZSwgdHlwZSksIGluZGV4fCBBcmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4ICsg
MSB9IHVubGVzcyBhcmdzLm5pbD8KKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVj
a3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcCB7IHwoY2hlY2twb2ludCwgXyl8IGNoZWNrcG9pbnQg
fSB1bmxlc3MgY2hlY2twb2ludHMubmlsPwogICAgIGVuZAogCiAgICAgZGVmIGNyZWF0ZV9pZCEK
QEAgLTExOCw2ICsxMjEsOCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgPDwtRU9GCiBzdHJ1Y3Qg
I3tjYXBpdGFsaXplZF9uYW1lfSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7CiAgICAgI3tvcGNvZGVJ
RH0KKyAgICAje3RlbXBzfQorICAgICN7Y2hlY2twb2ludFZhbHVlc30KIAogI3tlbWl0dGVyfQog
I3tkdW1wZXJ9CkBAIC0xMzIsNiArMTM3LDE4IEBAIEVPRgogICAgICAgICAic3RhdGljIGNvbnN0
ZXhwciAje29wY29kZUlEVHlwZX0gb3Bjb2RlSUQgPSAje25hbWV9OyIKICAgICBlbmQKIAorICAg
IGRlZiBjaGVja3BvaW50VmFsdWVzCisgICAgICAgIHJldHVybiBpZiBAY2hlY2twb2ludHMubmls
PworCisgICAgICAgIFsiZW51bSBDaGVja3BvaW50cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChjaGVj
a3BvaW50cy5tYXB7IHxjaGVja3BvaW50fCAiICAgICAgICAje2NoZWNrcG9pbnR9LCIgfSkuY29u
Y2F0KFsiICAgICAgICBudW1iZXJPZkNoZWNrcG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4i
KQorICAgIGVuZAorCisgICAgZGVmIHRlbXBzCisgICAgICAgIHJldHVybiBpZiBAdG1wcy5uaWw/
CisKKyAgICAgICAgWyJlbnVtIFRtcHMgOiB1aW50OF90IHsiXS5jb25jYXQoQHRtcHMubWFwIHt8
KHRtcCwgdHlwZSl8ICIgICAgICAgICN7dG1wfSwifSkucHVzaCgiICAgIH07Iikuam9pbigiXG4i
KQorICAgIGVuZAorCiAgICAgZGVmIGVtaXR0ZXIKICAgICAgICAgb3Bfd2lkZTE2ID0gQXJndW1l
bnQubmV3KHdpZGUxNiwgb3Bjb2RlSURUeXBlLCAwKQogICAgICAgICBvcF93aWRlMzIgPSBBcmd1
bWVudC5uZXcod2lkZTMyLCBvcGNvZGVJRFR5cGUsIDApCkBAIC0yMDAsNiArMjE3LDcgQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZTxPcGNvZGVTaXplIF9fc2l6ZSwgYm9vbCByZWNvcmRPcGNvZGUs
IHR5cGVuYW1lIEJ5dGVjb2RlR2VuZXJhdG9yPgogICAgIHN0YXRpYyBib29sIGVtaXRJbXBsKEJ5
dGVjb2RlR2VuZXJhdG9yKiBnZW4je3R5cGVkX2FyZ3N9I3ttZXRhZGF0YV9wYXJhbX0pCiAgICAg
eworICAgICAgICAjeyFAY2hlY2twb2ludHMubmlsPyA/ICJnZW4tPnNldFVzZXNDaGVja3BvaW50
cygpOyIgOiAiIn0KICAgICAgICAgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMTYpCiAg
ICAgICAgICAgICBnZW4tPmFsaWduV2lkZU9wY29kZTE2KCk7CiAgICAgICAgIGVsc2UgaWYgKF9f
c2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMzIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL1NlY3Rpb24ucmIKaW5kZXggMjA0YWM3NTllMTNlZmYxNTFmOGNkMTc3ZjNiZjFiNzBlMDc3
OWNhYS4uNjY4NTViYTY1MDA4MGU0YzIzY2MwZWJlYzEwZTc5NDljZGU3NjhiOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtNDMsNyArNDMsNyBAQCBj
bGFzcyBTZWN0aW9uCiAgIGVuZAogCiAgIGRlZiBjcmVhdGVfb3Bjb2RlKG5hbWUsIGNvbmZpZykK
LSAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFy
Z3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdKQor
ICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJn
c10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10sIGNv
bmZpZ1s6dG1wc10sIGNvbmZpZ1s6Y2hlY2twb2ludHNdKQogICBlbmQKIAogICBkZWYgYWRkX29w
Y29kZV9ncm91cChuYW1lLCBvcGNvZGVzLCBjb25maWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCmluZGV4IGY2Mzk0YWM3MTA3MTI1YjdjYWIy
MWFkMmI5MTEzYzA3OTUzNmE2MDAuLmVmN2Y2Yzk0ZjQxNjhiNGEyODQ2MDUzYTVkMDEzYmUxMTIy
MGRlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENh
bGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsCiAgICAgQVNT
RVJUKGdsb2JhbEV4ZWMtPmlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkpOwogfQog
Ci1ib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAor
Ym9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdAogewog
ICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlw
ZSgpKSB7CkBAIC05MCwxMiArOTAsMTIgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0Fy
ZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVB
c1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRdLnRhZygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnRhZygpOwogfQogCiBTVVBQUkVTU19BU0FOIHVuc2ln
bmVkIENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJl
dHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnVuc2FmZVRhZygpOworICAg
IHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCldLnVuc2FmZVRhZygpOwogfQogCiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJ
bmRleCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDcgQEAgQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6
OmNhbGxTaXRlSW5kZXgoKSBjb25zdAogCiBTVVBQUkVTU19BU0FOIENhbGxTaXRlSW5kZXggQ2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICBy
ZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRz
KCkgJiAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpID4+IEJ5dGVjb2RlSW5k
ZXg6OmNoZWNrcG9pbnRTaGlmdCkpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0x
MTcsMzMgKzExNywzNCBAQCBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBD
KCkgY29uc3QKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9u
KiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShCeXRlY29kZUluZGV4KGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4odnBjKSkpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAgdGhpc1tzdGF0aWNfY2FzdDxp
bnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50YWcoKSA9IGNhbGxTaXRlLmJpdHMo
KTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0
ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGN1
cnJlbnRWUEMoKSk7ICAgICAKIH0KIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIGNvbnN0
IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogewotICAgIEFTU0VS
VChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0
aW9ucygpLmF0KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkucHRyKCk7CiB9CiAKIHZv
aWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAg
ICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZShjb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleCh2cGMp
KTsKLSAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0cygpKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGlu
dD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnRhZygpID0gY2FsbFNpdGUuYml0cygp
OworICAgIEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZy
YW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
Y29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgp
KTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1
cm4gY2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKIH0KIApAQCAtMTY1LDggKzE2Niw4IEBAIEJ5dGVj
b2RlSW5kZXggQ2FsbEZyYW1lOjpieXRlY29kZUluZGV4KCkKICAgICAgICAgcmV0dXJuIGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIH0KICNlbmRpZgotICAgIEFTU0VSVChjYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKLSAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChjYWxs
U2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVC
eXRlY29kZUluZGV4KCkpOworICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRl
eCgpOwogfQogCiBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCkBAIC0xODAsNyAr
MTgxLDcgQEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1
cm4gY29kZUJsb2NrKCktPmNvZGVPcmlnaW4oaW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJl
dHVybiBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNl
dCgpKSk7CisgICAgcmV0dXJuIENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5k
ZXgoKSk7CiB9CiAKIFJlZ2lzdGVyKiBDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggY2Zi
NzcxODU2MDM5OTMzOTEwMDRmYzEzMjExODM4NDIzYzVkYzZhOS4uNjQ0OTBlN2E3MDdlZWIwMWJh
MDdhY2EzMzI2MjNhZGUxM2UwYzk0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlN0YWNrVmlz
aXRvci5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oPgogCiBuYW1lc3BhY2UgSlND
ICB7CiAKQEAgLTQ2LDE4ICs0NywyNCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIENhbGxT
aXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAgIDogbV9ieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHsgfQorICAgICAgICAgICAgOiBtX2Jp
dHMoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkKKyAgICAgICAgeyAKKyAgICAgICAgICAgIEFTU0VS
VCghYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworICAgICAgICB9CiAKLSAgICAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OyB9
Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleDsgfQor
ICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7
IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBj
b25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAgICAgdWludDMy
X3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQorICAg
ICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUlu
ZGV4OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIEJ5dGVjb2RlSW5kZXgoYml0cygpKTsgfQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBD
YWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCisgICAgICAgICAgICA6IG1fYml0cyhiaXRzKQor
ICAgICAgICB7IH0KICAgICBwcml2YXRlOgotICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0ZWNvZGVJbmRleCgpLm9mZnNl
dCgpIH07CiAgICAgfTsKIAogICAgIGNsYXNzIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IDogcHVi
bGljIENhbGxTaXRlSW5kZXggewpAQCAtNjUsNyArNzIsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIGV4
cGxpY2l0IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAgICAg
ICA6IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cykpCisgICAgICAg
ICAgICA6IENhbGxTaXRlSW5kZXgoYml0cykKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTc4
LDI0ICs4NSwyNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgLy8gYXJtNjRfMzIgZXhwZWN0cyBj
YWxsZXIgZnJhbWUgYW5kIHJldHVybiBwYyB0byB1c2UgOCBieXRlcyAKICAgICBzdHJ1Y3QgQ2Fs
bGVyRnJhbWVBbmRQQyB7CiAgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWU7Ci0gICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIGNvbnN0IEluc3RydWN0
aW9uKiByZXR1cm5QQzsKKyAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikgdm9pZCogcmV0dXJu
UEM7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNpemVJblJlZ2lzdGVycyA9IDIgKiBz
aXplb2YoQ1BVUmVnaXN0ZXIpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9OwogICAgIHN0YXRp
Y19hc3NlcnQoQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzID09IHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3RlciksICJDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnMgaXMgaW5jb3JyZWN0LiIpOwogCi0gICAgc3RydWN0IENhbGxGcmFtZVNsb3Qg
ewotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNhbGxl
ZSA9IGNvZGVCbG9jayArIDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGFyZ3VtZW50
Q291bnQgPSBjYWxsZWUgKyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCB0aGlzQXJn
dW1lbnQgPSBhcmd1bWVudENvdW50ICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
Zmlyc3RBcmd1bWVudCA9IHRoaXNBcmd1bWVudCArIDE7CisgICAgZW51bSBjbGFzcyBDYWxsRnJh
bWVTbG90IDogaW50IHsKKyAgICAgICAgY29kZUJsb2NrID0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6
ZUluUmVnaXN0ZXJzLAorICAgICAgICBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxLAorICAgICAgICBh
cmd1bWVudENvdW50ID0gY2FsbGVlICsgMSwKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0gYXJndW1l
bnRDb3VudCArIDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxLAog
ICAgIH07CiAKKyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRI
X0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisKICAgICAv
LyBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRpb24uCiAgICAg
Ly8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAgICBj
bGFzcyBDYWxsRnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQgKyAxOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBoZWFk
ZXJTaXplSW5SZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpICsgMTsKIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBpbiB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMKICAgICAgICAgLy8gd2hlbiB5
b3UndmUgZ3VhcmFudGVlZCB0aGUgY2FsbGVlIGNhbid0IGJlIGEgV2FzbSBjYWxsZWUsIGFuZCBj
YW4KQEAgLTEwNiwxMCArMTE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gdG8g
c2VlIGlmIGl0J3MgYSBjZWxsLCBhbmQgaWYgaXQncyBub3QsIHdlIHRocm93IGFuIGV4Y2VwdGlv
bi4KICAgICAgICAgaW5saW5lIEpTVmFsdWUgZ3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25z
dDsKICAgICAgICAgaW5saW5lIEpTT2JqZWN0KiBqc0NhbGxlZSgpIGNvbnN0OwotICAgICAgICBD
YWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJh
bWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KLSAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxs
ZWVCaXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxs
RnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CisgICAgICAgIENhbGxl
ZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ucG9pbnRlcigpKTsgfQorICAgICAgICBTVVBQ
UkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVl
Qml0cyh0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0uYXNhblVu
c2FmZVBvaW50ZXIoKSk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdDsK
LSAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KTsgfQorICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBzdGF0aWNfY2FzdDxpbnQ+KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOyB9CiAgICAgICAgIGlubGluZSBTVVBQUkVTU19BU0FO
IENvZGVCbG9jayogdW5zYWZlQ29kZUJsb2NrKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU1Nj
b3BlKiBzY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCkgY29uc3Q7CiAKQEAgLTE0Niw3ICsx
NTYsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJu
UENPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0
dXJuUEMpOyB9CiAgICAgICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsg
cmV0dXJuIEFic3RyYWN0UEModm0sIHRoaXMpOyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJp
dHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0Fy
ZUJ5dGVjb2RlSW5kZXgoKSBjb25zdDsKICAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2Rl
T3JpZ2luSW5kZXgoKSBjb25zdDsKIAogICAgICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0
cygpIGNvbnN0OwpAQCAtMTgyLDE1ICsxOTIsMTMgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAg
ICBzdGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFt
ZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVh
ZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29k
ZUJsb2NrKS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIo
VmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1j
b25zdGFudAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBS
ZWFkIGEgcmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVy
JiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFy
Z3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8g
YSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9Ci0gICAgICAg
IHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNb
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpOyB9CisgICAgICAgIHNpemVf
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5bG9hZCgpOyB9CiAg
ICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoaW50IGFyZ3VtZW50KSB7IHJldHVybiAo
Q2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCArIGFyZ3VtZW50KTsgfQogICAgICAgICBzdGF0
aWMgaW50IGFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhpbnQgYXJndW1lbnQpIHsgcmV0dXJu
IChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudCk7IH0KIApAQCAtMjM5LDcg
KzI0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50QWZ0
ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCk7CiAKLSAgICAgICAgc3RhdGljIGludCBvZmZzZXRG
b3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7IH0KKyAg
ICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSB7IHJldHVybiBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7IH0KIAogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBub0NhbGxl
cigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAgICAgYm9vbCBpc0RlcHJlY2F0ZWRDYWxsRnJh
bWVGb3JEZWJ1Z2dlcigpIGNvbnN0CkBAIC0yNTEsMTAgKzI1OSwxMCBAQCBuYW1lc3BhY2UgSlND
ICB7CiAgICAgICAgIGJvb2wgaXNTdGFja092ZXJmbG93RnJhbWUoKSBjb25zdDsKICAgICAgICAg
Ym9vbCBpc1dhc21GcmFtZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylb
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAgICAg
ICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGlj
X2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpXS5wYXlsb2FkKCkgPSBjb3VudDsgfQogICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRDYWxsZWUoSlNPYmplY3QqKTsKICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q29kZUJsb2NrKENv
ZGVCbG9jayopOwotICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxl
ckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rp
b24qPih2YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBj
YWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSB2YWx1ZTsgfQogCiAgICAgICAgIFN0cmluZyBm
cmllbmRseUZ1bmN0aW9uTmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAppbmRleCBhOTdkZWNhNTNiY2UxNzkyODli
MGMzODBkMDRlOGYyYTg2MDQ3N2QxLi5lZTdlYzJhYjEwNGE3YTM0ZDk4YjBmNDM4ZjY0NGMyZGNh
MWM1MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMyLDUwICszMiwzOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7
Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFt
ZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7
Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKGludCBpbmRleCkK
LXsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZ0aGlzLT5jb2RlQmxv
Y2soKS0+Y29uc3RhbnRSZWdpc3RlcihyZWcpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0
KCldOwogfQogCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7Cisg
ICAgQVNTRVJUKCFyZWcuaXNDb25zdGFudCgpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0
KCldOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBDYWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2Fs
bGVlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1
cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsKKyAgICByZXR1cm4gdGhp
c1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLmpzVmFsdWUoKTsKIH0K
IAogaW5saW5lIEpTT2JqZWN0KiBDYWxsRnJhbWU6OmpzQ2FsbGVlKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90
OjpjYWxsZWVdLm9iamVjdCgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKV0ub2JqZWN0KCk7CiB9CiAKIGlubGluZSBDb2RlQmxvY2sqIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjpjb2Rl
QmxvY2soKTsKIH0KIAogaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiBDYWxsRnJhbWU6
OnVuc2FmZUNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOworICAgIHJldHVy
biB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVnaXN0
ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBD
YWxsRnJhbWU6OmxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKSBjb25zdApAQCAtMTAyLDEyICs5
MSwxMiBAQCBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OmlzV2FzbUZyYW1lKCkgY29uc3QKIAogaW5s
aW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSkKIHsKLSAgICBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBjYWxs
ZWU7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gY2FsbGVlOwogfQogCiBpbmxpbmUgdm9pZCBDYWxsRnJh
bWU6OnNldENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBzdGF0aWNfY2Fz
dDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10gPSBjb2RlQmxvY2s7
CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayldID0gY29kZUJsb2NrOwogfQogCiBpbmxpbmUgdm9pZCBDYWxs
RnJhbWU6OnNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0No
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMzYTFiZTRmNThkYWVh
ODA3ZTNiYWZlZjBkNGJhMDJmZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBUIGdldFRtcChzaXplX3Qgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c2l6ZW9mKFQpID09IHNpemVvZih1aW50NjRfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFQ+KHRtcHNbb2Zmc2V0XSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXpl
b2YoVCkgPT0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih0bXBzW29mZnNl
dF0pKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihU
KSA9PSBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxU
PihzdGF0aWNfY2FzdDx1aW50OF90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICB2b2lkKiBuZXh0SW5zdHJ1
Y3Rpb25KdW1wVGFyZ2V0OworICAgIHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNd
OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKaW5kZXggZGFhOTRjODlmOTAwNWE5OTcyZmMwZTNiMDJlYjg5M2QyMTFjZGQ5
Ny4uOGVmMWMzZDg1MGMyYzhhMDE1NDZmMmM4YTlkZWIzZDg1NDdhNWIzNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xv
c3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBA
IEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZy
YW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBj
YWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9
IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3Rlcigp
Lm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNo
YWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lz
dGVyKCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJV
bmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsK
IAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJs
b2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJv
d0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZh
cmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVp
bnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAor
ICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZh
ckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVs
c2UKQEAgLTI0OSw3ICsyNTMsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVy
biBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgp
Cit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUq
IGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkg
fHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUsMzEgQEAgdm9pZCBs
b2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2Ug
RGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBq
c0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAg
ICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50
cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5n
dGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+
KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0
dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7
CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJh
eShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBq
c0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAg
anNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBm
aXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxl
bmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0
SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
XSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5n
ZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0g
dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk3LDggKzMw
MSw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAg
ICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVG
cmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxl
bmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhsZW5ndGggKyAxKTsKQEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGljOgogICAgICAgICBt
X2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9
IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBp
ZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNr
cG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMg
PT0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgICAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT52bSgpLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1f
Y2FsbEZyYW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsK
ICAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9y
LCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAg
ICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNp
dG9yOjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3Vs
ZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwog
CisgICAgICAgIG1fcmV0dXJuUEMgPSBtX2NhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwog
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2
ICs2MDYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVC
bG9jayomIG1fY29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11
dGFibGUgY29uc3Qgdm9pZCogbV9yZXR1cm5QQyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lO
TElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSom
IGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTT2JqZWN0KgogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3Bl
KHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNl
U29mdCgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBh
cmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJu
KHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAg
ICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJl
dGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+
IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4
NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1
OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAw
MDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xv
dHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVG
b3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNp
Z25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7
CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0
aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywg
dWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBz
ZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4
ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFs
dWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3Ro
KTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxl
bmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQu
LjgxOGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgs
NyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2Nh
bGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9
IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2Zy
YW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2Zy
YW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQo
KTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBp
ZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0g
ICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgp
KSB7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUlu
ZGV4KCkpIHsKICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBj
YWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5k
ZW50LCBieXRlY29kZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1
MmRlZjJkNzFiYzIuLmUwNmNiNDliMjk1ZGU1ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4
ICs2NDcsMjggQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsK
ICAgICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwg
R1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAg
IHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnks
IEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAg
ICB7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHRvKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BS
UmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQ
UlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBs
b2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAg
ICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHRvKTsKICAgICB9CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkp
CiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIo
ZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAg
ICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAg
dm9pZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQg
dG8pCkBAIC02OTYsMTkgKzY5NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUg
cG9pbnRlci4gT24gc29tZSBwbGF0Zm9ybXMsIHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9y
IHB1c2hpbmcgdGhlCiAgICAgLy8gImxpbmsgcmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVy
biBhZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZy
b20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVBy
b2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAg
ICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9p
bnRlckRlbHRhKCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vs
c2UKLSAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1
ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxG
cmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
LSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20s
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVs
dGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJl
Zm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQ
dXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZp
cnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0
b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkg
KiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFj
a1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAg
ICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFs
UmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGlj
IEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRy
ZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQo
IW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSAr
MTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxp
ZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQp
OwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3Rh
dGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAg
IEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAt
MTE3OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0
ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQ
YXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQg
b3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAg
ICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0K
IAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0
aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3Mg
Y2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNT
RVJUKHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAg
cmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAo
c2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NF
UlQoc2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOwor
ICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lz
dGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQo
KSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1l
LgogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAg
ICAgewotICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNs
b3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFk
ZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7
CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQg
c2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxS
ZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90
KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNs
b3QoVmlydHVhbFJlZ2lzdGVyKDApKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVP
ZmZzZXQoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJl
Z2lzdGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAg
ICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0
dXJuIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5
NjkwZTA5YzhiNTcyNzBkZWY3Zjg3YTQ2Y2MyYjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1
M2Y4ODgwYjk4MzdiNWM2NGQ0YzU2NDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVm
Zmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFt
ZVNodWZmbGVEYQogI2VuZGlmCiAKICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNr
KCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGRO
ZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsK
KyAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBB
U1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFs
UmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oCmluZGV4IDYyNDM5YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFm
NmE5ZjUuLjRjNmFhMzJmNGY1ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsx
MjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAg
ICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292
ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsg
Z2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJl
Y292ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVj
b3ZlcnkoKSk7CiAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFz
c3VtZUNhbGxlZUlzQ2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
IENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYg
Y2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAg
ICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUo
KSkgewogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggMjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVh
ZGUzZTI3YTgwYS4uODczMTVlZjg0NzdhYzEyYTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVx
VHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFy
Z2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQz
MlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAg
ICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91
bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
IH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBi
ZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUg
dGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9p
ZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdy
aXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAg
ICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhp
cyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQg
cmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5v
dEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMs
IEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9p
ZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdz
IHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7
Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAg
ICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwor
ICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBz
cmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOwor
ICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAg
dm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAg
ICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwor
ICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
cGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChp
bnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQg
YmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGlu
ZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBS
ZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRM
b2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
UmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRM
b2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2Fk
MSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIp
OwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50
MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVz
dGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2
b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
ICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3Rh
bnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBl
bWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBp
bmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVh
bFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxz
ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0
U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4
SXNCb29sID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdp
c3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGls
ZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0
IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1w
TGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3Ay
SXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3Qp
OwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwog
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMx
LCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIp
OwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lk
IGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkg
dXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxv
YWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZh
bHNlKQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3Rl
cklELCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwo
UmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJl
Z2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdp
c3RlcklELCBpbnQgVlJlZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJ
Zk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAg
ICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0
aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxl
R2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIq
KTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwg
aW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwg
aW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVD
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50
ZXJPZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29s
dmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQg
ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAg
ICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAg
ICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsK
ICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3Bl
cmFuZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCArNjg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5k
LCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZy
b21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsK
ICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlX
cml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJl
ZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1Zh
bHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQg
ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJ
bnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAK
LSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVk
RnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmls
ZWRGdW5jdGlvbik7CkBAIC03MzQsNyArNzI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAg
ICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAg
ICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAg
ICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEzICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tB
bmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7
CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1i
bGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykK
ICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25U
eXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJl
c3VsdCk7CkBAIC04NjQsNyArODU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lm
bmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBz
cmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4
OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRl
IGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAg
ICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwx
MyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAg
IGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9u
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQg
b3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9u
LCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNl
cyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQg
c3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpA
QCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAg
ICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
ICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0
cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5
MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVy
YXRvcj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2
b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpA
QCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
SklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rp
b24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lz
dGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2Zp
bGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5
LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Ns
b3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBj
b25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRk
NTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVhYzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYx
YjVjNmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAt
NTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2Fs
bFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcg
KzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkp
LCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZv
Lm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5
ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0
aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJl
Z2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVn
aXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0
aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAg
aW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9w
OjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3
YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxG
cmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4
IGI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNi
OWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQo
Vk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRo
cm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRl
cih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsK
LSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4
MTJjYmUwYjg1NDFiZWU5M2IxMGFiMzQuLmM2NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzll
MzExNzY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwx
OSArNDgsMjAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjpl
bWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0RvdWJsZSgpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVl
IEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNT
RVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NF
UlQoc3JjLmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpLCB0YWdGb3IoZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkp
KTsKQEAgLTE0Myw3ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVy
biBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQpAQCAtMTU1LDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bk5vdEltbWVkaWF0ZSh2UmVnKSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1t
ZWRpYXRlKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkg
KzI4NSw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUpCkBAIC0zNjMsMjYgKzM2NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3Nl
QXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91
czsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50
KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRP
cGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1
c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwg
UmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
ICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFn
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMy
KHRhZ0ZvcihpbmRleCksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXls
b2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewot
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Cisg
ICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFu
dE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtNDA2LDEzNiArNDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNv
bnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAg
bW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdz
IGRzdCkKIHsKICAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIo
KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkK
IHsKICAgICBlbWl0U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7
CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRh
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0g
cGF5bG9hZCk7CiAKICAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxv
YWQoaW5kZXgsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAg
ICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFn
KHJlZywgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3Rl
ciB0YXJnZXQgeyBpbmRleCB9OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQg
c3RvbXBpbmcgYmFzZQotICAgICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7
Ci0gICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAg
ICAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXls
b2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMy
KHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywg
YmFzZSksIHBheWxvYWQpOworICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcx
LCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lz
dGVySUQgcGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0
ZXIgcmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAg
IGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwg
dGFnMSwgcGF5bG9hZDEpOworICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAg
ICBlbWl0TG9hZChyZWcxLCB0YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
ZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0g
bV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91Ymxl
KFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAg
ICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5l
IHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBS
ZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25z
dGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAg
IGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQ
b29sKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQ
b2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFs
dWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9y
KGluZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9y
KHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklE
IHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2Fk
Rm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNl
KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0
b3JlMzIodGFnLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0lu
dDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9h
ZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIg
cGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUlu
dDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4
SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAg
ICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50
MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFn
Rm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwo
aW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9h
ZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAg
ICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElz
Qm9vbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihw
YXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2Fk
Rm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVy
SUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFk
ZHJlc3NGb3IoaW5kZXgpKTsKKyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcp
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1Zh
bHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklE
IGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3Rv
cmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkp
OwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNl
KSk7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJl
ZywgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVn
LCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAg
ICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVn
aXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsK
ICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMu
aXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAot
QUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGlu
dCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMSkuYXNJbnQzMigpOwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3As
IGludDMyX3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBh
biBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykp
IHsKKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBkc3QpOwpAQCAtNTcxLDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2Fk
NjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBk
c3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lz
dGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdp
c3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3Qx
LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQg
c3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAg
IHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50
MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkK
IHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3Mg
ZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKLXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwg
ZnJvbSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhK
U0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0
Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEIHJlZykKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEIHJlZywgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewog
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChp
bmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29s
ID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJs
ZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
aW5kZXgpKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRP
cGVyYW5kKGluZGV4KS5hc0ludDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0lu
dDMyKCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hh
YmxlSnVtcCBKSVQ6OmVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3
ZTE0MTFiZTljZmI4MGY4MDgwNmY3ODhmNmMxLi42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQy
MTlhMWU5YTdlNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
QEAgLTU2LDEwICs1NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21v
dihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFu
dCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2
NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7
CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BS
ICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQo
KTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxv
Y2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVn
LCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CiAgICAgfQogfQogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3Ry
dWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5
LDkgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9v
dmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVy
cmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQo
KTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1
ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5z
dGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDApOwogCkBAIC0xNTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJp
ZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJv
dG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3Rv
dHlwZTsKIAogICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZh
bHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZv
ciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBj
YW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsK
LSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsr
XTsKICAgICAKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDAp
OwpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2
MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFu
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1Qw
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5
dGVjb2RlLm1fdHlwZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKQEAgLTMwNyw4ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVl
R1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2
ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNy
YyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYw
LDE1ICszNjAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rp
b25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQo
KSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9m
ZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1
bmN0aW9uLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25h
bWUsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9vcGVyYW5kLCByZWdUMCk7CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNl
KTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdp
bGwgYmUKICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJl
IDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3
ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZh
bHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5
MCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAg
IGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKdW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwpAQCAtNDcwLDggKzQ3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
cHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIg
PSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1
ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQ
b2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICAKQEAgLTQ4NSwxOCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFy
ZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihF
cXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZv
aWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0
KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0
aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKIH0KQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJl
dHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwog
fQpAQCAtNTQ4LDkgKzU0OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBz
cmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBA
IC01OTIsOCArNTkyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwog
CkBAIC02NTAsOCArNjUwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+
KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
c3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVn
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgcmVnVDApOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CkBAIC02NjQsOCArNjY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19u
dW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAg
aW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OwogCiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0
LDIwICs2ODQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAg
ICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVn
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwx
MCArNzI4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7
CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1Qw
KTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSks
IEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJl
c3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHBy
b2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1f
YnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVy
ID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2Zp
bGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRj
aCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcg
Kzc0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZl
ciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsK
QEAgLTc2NiwxMCArNzY2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJv
ZmlsZShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAg
ICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwo
Ynl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFN3aXRjaEltbT4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFi
bGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFy
PigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAg
IHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVl
ID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Ig
c3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNp
bXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAg
IHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVk
IGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNv
ZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRl
c3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBU
YWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CkBAIC04MzQsOCArODM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwg
cmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpA
QCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW9uKikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUu
CiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNp
emVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdp
c3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrKTsKIApAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZWdUMCk7CkBAIC05MjQsNyArOTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAg
ICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1f
Y2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVn
aXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVj
a1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtOTk2LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3Iz
MihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVH
UFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAy
NCwxMCArMTAyNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAg
aW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBp
bnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVn
ZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0x
MTE1LDEyICsxMTE1LDEyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRM
b2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKTsKIApAQCAtMTE2MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1f
Y29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIw
NywxMCArMTIwNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9
IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksCiAgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJl
Z1QwLCBzaXplKTsKIH0KQEAgLTEyMTksOCArMTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRl
eCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKQEAgLTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbygpOwogICAgIApAQCAtMTMzMCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5
LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGly
ZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
ci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFz
ZSBpcyBhIGNlbGwKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAg
LTEzOTAsOSArMTM5MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9m
ZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7CkBAIC0xNDE0LDkgKzE0MTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxv
Y2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9
IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQ
UjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcg
c2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCks
IHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dT
aGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
cmVnVDMpOwogfQogCkBAIC0xNTIzLDggKzE1MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
ICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2Ny
YXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywg
bV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1
NDUsNyArMTU0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9h
cmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3Vu
dD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6Ondp
dGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1Q
YXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVt
cCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwg
VHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUo
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsg
aW5kZXgpKSwgcmVzdWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJn
dW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3
MzQzMGU1YzFmN2EuLmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkz
Myw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZl
ciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAh
c2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAg
ZWxzZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgTm9QdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZm
ZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJv
ZmlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5k
ZXggM2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2Vm
ODVmMGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0
dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVp
bnQzMl90IGJ5dGVjCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkp
KQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhW
YWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAg
aWYgKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZh
cnNXaXRoVmFsdWVzID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11
c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFs
dWVzKTsKKworICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZh
bHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwog
ICAgICAgICBpbnQgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihD
b2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5k
KSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNh
bGxlZVNhdmVzKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwo
KSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVz
dEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4
Myw3ICsxNzgzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVu
c3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRl
Y29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZd
IChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZy
YW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwog
CkBAIC0xOTA3LDggKzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2Nv
cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRp
b25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBK
U1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6
OnNjb3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5u
ZXh0KCk7CisgICAgYXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1
YWxSZWdpc3RlcihzY29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rl
cjo6c2NvcGUoKS0+bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEhhc0luc3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkp
OworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdl
dFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAog
ICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdl
dF9mcm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5z
dHIKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAK
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7
CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAog
ICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBh
bGl2ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCmluZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUu
LmU3MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyAr
OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2Fz
ZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
QEAgLTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3
Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToK
ICAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdo
dCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRl
Y29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5
VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcg
KzI0OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3Ag
Ynl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQo
dGhpcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0
b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVC
YXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBK
dW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDgg
KzI3NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1Qx
CiAgICAgLy8gc2NyYXRjaDogcmVnVDIKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5
VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQs
MTQgKzMwNCwxNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0
ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
OwotICAgIGludCBiYXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVj
b2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAt
MzM3LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0
KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIu
b2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
clNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSku
aW1wbCgpKTsKQEAgLTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
SlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRy
eUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3
ICs0MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRy
eUdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
QEAgLTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBp
bnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dl
dEJ5SWRXaXRoVGhpc0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29s
IGRpcmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAg
Ly8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0
aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsbwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyAr
NjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQo
KS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBi
eXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29w
ZURlcHRoOwogCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAg
bG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBs
b2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0
YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5
LDE3ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAg
ICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihp
bmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIGludCB2YWx1ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQg
dmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwpAQCAtOTUwLDggKzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBi
eXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBA
IC0xMDg2LDggKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
ZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
VmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmll
ck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpA
QCAtMTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQg
b3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFs
dWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKQEAgLTExNjQsOCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAg
LTExNzYsNyArMTE3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNW
QUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5z
aWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUpIHsKQEAgLTExOTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVu
c2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAg
ICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENl
bGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQy
NSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5
dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAg
ICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0lu
dGVyZmFjZUpJVC5oCmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1
YzEuLjU4MjcxM2U2NDA4N2E1MWY1OTM5YjkwYjk4NTQ1ZGYxMzNkMGM2YWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1
bXAgZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1
bXAgZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRM
b2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAg
aW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0
KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBG
UFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RK
U0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklE
IGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZv
aWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRy
eSk7CisgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJl
Z2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAg
ICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZp
cnR1YWxSZWdpc3RlciBlbnRyeSk7CiAKICAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4g
bV92bTsgfQogCkBAIC02NCwzNiArNjQsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpT
SW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2Fk
Rm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0
SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1p
dEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBK
U0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6
Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5k
ZXgpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1
cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVh
bFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4
KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGlj
X2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdp
c3RlciksIGRzdCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZp
cnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0K
IAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3Qs
IFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lz
dGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVh
bFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihC
ZWxvdywgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAg
ICBKdW1wIG5vdEludCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxS
ZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2Ny
YXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJs
ZS5saW5rKHRoaXMpOwotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSwgZHN0KTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4g
bm90SW50OwogICAgIH0KQEAgLTEwMSwyMyArMTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVy
SW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0
KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJm
YWNlSklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdp
c3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGRzdCk7CiAgICAgICAgIEp1bXAgbm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7
CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5v
dEludDMyOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQ
UmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkK
ICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
c2NyYXRjaCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNj
cmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0
Y2gpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMTIgKzEy
OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50
IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0
dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3Rlcikp
LCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpT
SW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkp
CiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0b3JlUHRyKGZyb20sIHBh
eWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0MywxMiArMTQzLDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2
b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICAgICAgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKICAgICB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFn
Rm9yKGVudHJ5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVw
VmFyYXJnc0ZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdz
RnJhbWUuY3BwCmluZGV4IDM4ODczMDUyZDEyODUyZmM2YmI5MTQyZDQ1NjA3YWU4ZTE5YTY3MGEu
LjBiYTczZWY4YzEzNGViYmJkMWQwNGE0YjE3MjE0ZjRmYTczNTE4M2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCkBAIC0xMjgsNyArMTI4
LDcgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShWTSYgdm0sIENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3QKICAgICAgICAgICAgIGZpcnN0QXJndW1lbnRS
ZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXJndW1lbnRD
b3VudFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBEYXRh
Rm9ybWF0SW50MzIpOworICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwg
RGF0YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAgZW1pdFNldHVw
VmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0
QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVh
NTQ0YWIyNjcxNTVjMTNkZjM2YTcyNDliNmMzNDMuLjkzM2NhOWJlMTAyZTBlZGY5NGJiNGVhZTgy
ODIxNDgyMjljODI2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lh
bGl6ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1lbnQsIEZQUmVn
aXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
YXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUo
c3JjLCBkc3QsIHNjcmF0Y2gpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBs
b2FkQ2VsbEFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJn
dW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVt
aXRMb2FkSlNDZWxsKHNyYywgZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03Myw3ICs3
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkSW50MzJB
cmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1wJiBmYWlsVGFyZ2V0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBmYWlsVGFyZ2V0
ID0gZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggNTI0MWU1Zjdj
YzMzMmE2NGUwZGU2ZGI0NGJkYWY5ZThlODBmMjJhYS4uYzM3NmRiZTJjZDdkNmRkM2ZhNTQ4N2I1
N2I1ODk0N2Y2ZGZiYTMzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcApAQCAtMTAzMiw4ICsxMDMyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgdW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKTsK
KyAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgYXV0byBub3RJbnRlZ2VyID0gaml0LmJyYW5jaElm
Tm90SW50MzIoR1BSSW5mbzo6cmVnVDApOwogCiAgICAgLy8gQWJzIEludDMyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3YTQ2ZThl
NTc4OTdmMjc4NWNkMzM5ZmNiZTJiYzBjOTBjZWRiMi4uZTAyZDg3YTE0YWFmNDliMjdhMTBiZTg4
ZWI5ZjFiZmNjZTRiZWU0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZy
YW1lLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRl
ICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9y
SGFuZGxpbmdTY29wZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAg
ICAgIFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0
Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVn
aXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9m
ZnNldCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2Fs
bEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUg
Z2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFs
dWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5q
c1ZhbHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRv
IHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAg
ICAgICAgXApAQCAtMTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBn
ZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAg
ICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2Owog
ICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRl
Y29kZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAg
ICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsx
NjkwLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1
bWVudHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1l
LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdz
TGVuZ3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwot
ICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxs
ZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5z
ZXRDdXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBz
ZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyAr
MTcyNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUt
PnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2Fs
bGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2Fs
bGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJu
UG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9j
ayhudWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkzMCw3
ICsxOTMxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gp
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAg
IG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1
ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1
ZSgpKTsKICAgICB9KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjUgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9J
TVBMKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRs
ZVZhcmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gc2lkZVN0YXRlLmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJbnQzMigp
OworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgeworICAgICAg
ICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzKS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MSk7CisgICAgfSk7CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CisKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAhPSBvcF9j
b25zdHJ1Y3RfdmFyYXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdl
dE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisgICAgICAg
IHJlc3VsdCA9IGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNW
YWx1ZSksIGFyZ3MsICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CisgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJlc3VsdDsK
K30KKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT52bSgpLmV4Y2VwdGlvbkZvckluc3BlY3Rpb24oKSk7
CisgICAgaWYgKE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCkucHRyKCk7CisgICAgICAgIGF1dG8gbmV4dEJ5
dGVjb2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKnBjLm5leHQoKS5wdHIo
KSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0Qnl0ZWNvZGUuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEJ5dGVj
b2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAgICBhdXRv
IG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5dGVjb2Rl
SW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbmV4dEJ5dGVjb2RlLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZv
aWQqLCBFbmNvZGVkSlNWYWx1ZSk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93
X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgdm9pZCosIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkKK3sKKyAgICAvLyBTaW5jZSBh
bGwgb3VyIGNhbGxpbmcgY2hlY2twb2ludHMgZG8gcmlnaHQgbm93IGlzIG1vdmUgcmVzdWx0IGlu
dG8gb3VyIGRlc3Qgd2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJlIGFuZCByZXR1cm4uCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9
IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsK
KyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5k
ZXg7CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJ
bmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHBjLT5hczxPcENhbGxWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRl
Y29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ29u
c3RydWN0VmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIC8vIG9wX3RhaWxfY2FsbF92YXJhcmdzIHNob3VsZCBuZXZl
ciByZXR1cm4gaWYgdGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5nIHdhcyBpbmxpbmVkLgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxv
Y2ssIHBjKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2No
ZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOworZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3Rh
dGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KTsKKworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
SW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJh
cmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENhbGxW
YXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0s
IGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLCAq
c2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90YWlsX2NhbGxf
dmFyYXJnczoKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYy5uZXh0KCktPm9wY29kZUlE
KCkgPT0gb3BfcmV0LCAiV2Ugc3Ryb25nbHkgYXNzdW1lIGFsbCB0YWlsIGNhbGxzIGFyZSBmb2xs
b3dlZCBieSBhbiBvcF9yZXQuIik7CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZt
LCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigpLCAq
c2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0
SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxs
RnJhbWUqIHByb3RvRnJhbWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+dG9w
Q2FsbEZyYW1lOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0K
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICBpZiAoY2Fs
bEZyYW1lKQogICAgICAgICBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxP
YmplY3QoKnZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBj
ODhmMmU0Li44OGRjZjdhMDFkMDE3Y2MwODk4MmM4MjY0MGIzYzE2OTgwMzkxMDM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9p
bnQob3BOYW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNp
emUpCiAKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1
bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tj
ZnJdLCBQQwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGlu
Z1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBj
YWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNy
byAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRo
LCBwcmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJy
YW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDMKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1f
ZXhjZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdl
dAorLm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRo
LCBwcmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFu
Y2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAg
ICAjIGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEs
IHNwCkBAIC0yMDAwLDYgKzIwMDQsMjEgQEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29u
c3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiBlbmQpCiAKIAorb3AoY2hlY2twb2ludF9vc3Jf
ZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIG1vdmUgcjAs
IGEyCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICBqbXAgcjEKK2VuZCkKKworb3AoY2hlY2twb2ludF9v
c3JfZXhpdF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJs
eSBkaXNwYXRjaCB0byB0aGUgY2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdh
cyBlYXNpZXIgCisgICAgIyBhbmQgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgZm9yIHBlcmZvcm1h
bmNlLgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCisg
ICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xp
bmUpCisgICAgam1wIHIxCitlbmQpCisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4g
bGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBv
cGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQu
IFdlIGFzc2VydAogIyBhcyBtdWNoLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCAzZGQyZWI0OGNiYmE2ZWY1Y2Q5
ODg2MzljNzkxMWUyMmE3MTMzMTQ4Li40MTFkZjJjNjc1MjMzMGIzN2I5NmFiY2VkODdhODQ0NmE4
NzU2OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIsMTQgQEAgbWFjcm8gbmV4dEluc3RydWN0
aW9uV2lkZTMyKCkKICAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBl
bmQKIAorbWFjcm8gc3RvcmVQQygpCisgICAgc3RvcmVpIFBDLCBMTEludFJldHVyblBDW2Nmcl0K
K2VuZAorCittYWNybyBsb2FkUEMoKQorICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMK
K2VuZAorCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1Y3QsIGZpZWxkTmFtZSwg
ZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8lZmllbGROYW1lJV9pbmRl
eFtQQiwgUEMsIDFdLCBkc3QKIGVuZApAQCAtOTIsNyArMTAwLDcgQEAgZW5kCiAKICMgQWZ0ZXIg
Y2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFpbWluZyBpbnB1dCByZWdpc3RlcnMgYXJl
IG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBk
aXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisg
ICAgbG9hZFBDKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2Rl
QmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9w
Y29kZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzkwLDcgKzM5OCw3IEBAIGVuZAogCiAjIENhbGwg
YSBzbG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xv
d1BhdGgsIGFjdGlvbikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRb
Y2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3Zl
IGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpAQCAtMzk5LDIwICs0MDcsMjAgQEAgbWFjcm8gY2Fs
bENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQogZW5kCiAKIG1hY3JvIGNhbGxUcmFwSGFu
ZGxlcih0aHJvd0hhbmRsZXIpCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zm
c2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAg
bW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Nsb3dfcGF0
aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxvYWRpIEFy
Z3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkaSBMTEludFJldHVyblBD
W2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNo
ZWNrU3dpdGNoVG9KSVQoCiAgICAgICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAg
IHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgICAgICBz
dG9yZVBDKCkKICAgICAgICAgICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICAgICAgICAg
IG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTQyMSw3ICs0MjksNyBA
QCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIHIxLCBz
cAogICAgICAgICAgICAgam1wIHIwLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIC5yZWNvdmVyOgot
ICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAg
ICAgICAgICAgbG9hZFBDKCkKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTE3NjgsNiArMTc3Niw4
IEBAIG1hY3JvIHB1dEJ5VmFsT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBvc3JFeGl0UG9p
bnQpCiAgICAgZW5kKQogZW5kCiAKKworCiBwdXRCeVZhbE9wKHB1dF9ieV92YWwsIE9wUHV0QnlW
YWwsIG1hY3JvIChzaXplLCBkaXNwYXRjaCkKIC5vc3JSZXR1cm5Qb2ludDoKICAgICBnZXR0ZXJT
ZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BfcHV0X2J5X3ZhbCwgc2l6ZSkKQEAgLTIwNTcsNyAr
MjA2Nyw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAg
ICAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1
Y3QsIG1fYXJnYywgdDIpCi0gICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09m
ZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50
Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAgICBw
cmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFj
aGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4IDg0MGY4OWI4OGQ0MjBjYzNiNzVjODNk
NmM1NzgyNDE1NDAyZjMzNjYuLjhmNTA1Y2M2OTljZDRhZTM3ZWYzNDUwMGZkZmJlNjk5OTgwN2Nk
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKQEAgLTEzMyw2ICsx
MzMsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBvdmVyZmxvd0NoZWNrTm90TmVlZGVkKCkgeyBj
bGVhck5lZWRzT3ZlcmZsb3dDaGVjaygpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZmlsbChzaXplX3QgY291bnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAgICAgIGVuc3VyZUNhcGFjaXR5KGNv
dW50KTsKKyAgICAgICAgaWYgKEJhc2U6Omhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9zaXplID0gY291bnQ7CisgICAgICAgIGZ1bmMocmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKj4oJnNsb3RGb3IoMCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9p
ZCBleHBhbmRDYXBhY2l0eSgpOwogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IG5ld0NhcGFj
aXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApp
bmRleCBmOGQ5Nzk5NTg3NDUyMjZhNDdlNmY4YjZjNTU4NjBjMThmY2U4N2ExLi5mZmI3NDU5YTZh
ZGNjYmFiMTZkYThhNGVmOGIxNzExZDg3MmExYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xNzg4LDYgKzE3ODgsNyBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJp
dmVkQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWduZWQgaGFzQ2hlY2tw
b2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAgdW5zaWduZWQg
bGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25lZCBl
bmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCkBAIC0xODIwLDYgKzE4
MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKICAg
ICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6
IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVja3BvaW50cyA6IDE7CiAKICAgICBDb2RlRmVhdHVy
ZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC0yMDE4
LDYgKzIwMjAsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENv
ZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqCiAKICAgICAsIG1fZGlkT3B0aW1p
emUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkK
KyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2FjaGVkQ29kZUJsb2NrLmhhc0NoZWNrcG9pbnRzKCkp
CiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKCkpCiAgICAgLCBt
X3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKCkpCkBAIC0yMjA2LDYgKzIyMDks
NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29ucwogICAgIG1fcGFyc2VNb2RlID0gY29kZUJsb2Nr
Lm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdlbmVyYXRpb25Nb2RlID0gY29kZUJsb2NrLm1fY29k
ZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsK
KyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAKICAg
ICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7
CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAKaW5kZXggZjM1OGQ0OGE1MGRlNzNlYWIzODU2OTliM2E2ZjUxMTNiYmJlOWJiYS4uZTI3
ZmUzY2E5NzhiMzk0NDgyNjE2N2Q0YTA2MWEyZWFkNGY5MjYxNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05OCw4ICs5OCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAg
ICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RVQlMoKQogCi0jZGVmaW5lIEdFVChvcGVyYW5kKSAo
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRfQyhv
cGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpKQorI2RlZmluZSBHRVQob3Bl
cmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkKKyNkZWZpbmUgR0VUX0Mob3Bl
cmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKIAogI2RlZmluZSBSRVRVUk5fVFdPKGZpcnN0
LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0
LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTEzOSw4ICsxMTM5LDcgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQogewogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsK
LSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0
ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEdFVF9DKGJ5dGVjb2RlLm1f
c3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRf
QyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChpbml0aWFs
VmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsK
QEAgLTExNTUsOCArMTE1NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhf
c2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNvZGUubV9uZXdTY29w
ZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZzZXQo
KTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2Nv
cGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2N1cnJlbnRTY29wZSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
Y3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQogCkBAIC0xMTY1LDcgKzExNjMsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNs
X2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVz
b2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsKICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
ICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKIAogICAgIENI
RUNLX0VYQ0VQVElPTigpOwpAQCAtMTE3OSw3ICsxMTc3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUp
LlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29w
ZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8gUHJveHkgY2Fu
IHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5z
Y29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xNDI0LDcgKzE0MjIsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICBB
U1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0
YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOworICAgIEFTU0VSVChieXRlY29kZS5tX2ltbXV0YWJs
ZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwogICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11
dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRf
QyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAg
ICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NDMsNyArMTQ0MSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxv
Y2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3Mg
aW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRpb24g
dGhyZWFkLgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICBjb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0
KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNl
dCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogICAgIH0KIApAQCAtMTQ4OCw0ICsxNDg2LDE2IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9zcHJlYWQpCiAgICAgUkVUVVJOKEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpj
cmVhdGVGcm9tQXJyYXkoZ2xvYmFsT2JqZWN0LCB2bSwgYXJyYXkpKTsKIH0KIAorZXh0ZXJuICJD
IiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpOworZXh0ZXJuICJDIiB2b2lk
IGR1bXBSZWdpc3RlcihVQ1BVUmVnaXN0ZXIgdmFsdWUpCit7CisgICAgZGF0YUxvZ0xuKFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSkpKTsKK30KKworLy8gZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CisvLyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBTTE9XX1BBVEggY2hlY2tQQyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjLCApCisvLyB7CisKKy8vIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRiZDE5MmE2
Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQxYjc4ZTYz
MTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1
Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9CisK
K0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
NDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3Qo
Z2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0
RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1
Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0KIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25z
dHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1Rh
cmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmExMWQ3Y2Vl
MjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2JhZWI2Y2Fj
MTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVj
dERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAKIC8vIENv
bnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENhbGxEYXRh
IGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpTX0VYUE9S
VF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsK
K0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYs
IGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1
Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3
VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5
cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29u
c3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFlZmFmZDQz
YTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApA
QCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQo
Vk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChpbmRleCwg
aW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYXBwZWRB
cmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGggKyBv
ZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAgZm9yIChp
ID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFy
dCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0KGds
b2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRd
ID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBH
ZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRz
Ojpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQs
IGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1lbnRz
U2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEuLjhkOTY0
MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+
Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAgfQog
Ci0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBW
aXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1ZWJiN2Vl
MWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVlYjI3MmNi
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9kaWZpZWRB
cmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9IENh
Z2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2RpZmllZEFy
Z3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmlu
ZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFiZjVmMmVl
MTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtMjk3LDcg
KzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50
RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMwNSw5
ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50
KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSAr
IG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOworICAgICAg
ICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5k
ZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5MTcxMWVl
ZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJheTo6Zmls
bEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZm
ZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0KIAot
dm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQog
ICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0
aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQp
ID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAgICBmaXJz
dEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwxMSArMTI5
NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0g
di5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYuZ2V0KCk7
CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2Fs
bEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9iYWxPYmpl
Y3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2Jh
bE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmluZGV4IDMx
Nzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5MjU0Y2Mx
YTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2
YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRl
YTE5YTFjNDljMC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0
dGVyZmx5LmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCks
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVy
Zmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkK
LSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSAr
IG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZz
ZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3Rb
aV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggYWNiNjg0ODE5MWEx
OTAzNTIyYjliM2U0ZDAwZjk2OWU0MGI3ODE1YS4uMDdlMWE4YTEwYzNjZGM3MTE3YWNhM2RjNTQz
ZWQ3ZGRiMGQ0MWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbW11dGFibGVCdXR0ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0g
ICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBDb21w
bGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcAppbmRleCBhNmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2
ODM0OTdlLi4xNmFhMzY5ZjQ4NTA3MDYxYzA2MzYxNTE4YWUxNWQyYmM2OGZiNmRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTIwNCw2ICsyMDQsNyBAQCB2
b2lkIEpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKCkKIHsgICAKICAgICBSZWZQdHI8Vk0+IHZtID0g
bV92bTsKICAgICBpZiAodm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdF
KCF2bS0+aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpLCAiUmVsZWFzaW5nIEpTTG9jayBidXQg
cGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGUgc3RpbGwgYXZhaWxhYmxlIik7CiAgICAgICAg
IHZtLT5kcmFpbk1pY3JvdGFza3MoKTsKIAogICAgICAgICBpZiAoIXZtLT50b3BDYWxsRnJhbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZS5jcHAKaW5kZXggZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2
ZGUzN2JhMC4uNTk2ODA4Y2FmYzBiMGY0Yzg0NzBiZDc1OWVkOWY0OTE2YzY2NDQ4NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSog
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwog
CiAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0KGds
b2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZSk7
CiAKLSAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGds
b2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNl
dCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOworICAgIGV4
ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0
LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rl
ck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsK
IAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAppbmRleCA0MTM4N2M4NTBhOTk1YWQ1NzQyMTA1MGNkZTg2Y2IyNTIxZTU0
MTE2Li45MWVkNzM5ZTI1ZjQ5MzhlZjUwMjcyN2RmNTE2ODBkODZjYTIwODdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTA5LDExICs1MDksOSBAQCBz
dGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBpZiAoT3B0aW9uczo6
c29mdFJlc2VydmVkWm9uZVNpemUoKSA8IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1p
bmltdW1SZXNlcnZlZFpvbmVTaXplKQogICAgICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25l
U2l6ZSgpID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9u
ZVNpemU7CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIC8vIEZJWE1FOiBNYWtlIHByb2Jl
IE9TUiBleGl0IHdvcmsgb24gMzItYml0OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9
IGZhbHNlOwotI2VuZGlmCiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAg
ICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKaW5kZXggMDgxZDk3OGE3
YjJhNjI2NmFjNTUyYzM3OWQzODQ1MDA1ZGMxMWYxMC4uM2M3NDBkNDhmNjI0MWIwMjYwNWZiZjUy
NWJkZGYyMzE5MmQwOWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBTY29wZWRBcmd1
bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKQogICAgICAgICBzdG9yYWdl
KClbaSAtIG5hbWVkTGVuZ3RoXS5jbGVhcigpOwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEdlbmVyaWNBcmd1
bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5oCmluZGV4IGY4NWU0N2RmYmVlOGNhN2MzNzA0ZjI5ZWQ0Y2Ix
YjRlOTcyMDQ0NTcuLmU1OGNiMjJlZmQ0OGM2NzRiZjViMWIxMTI4MGI1MWFiYzBkZTA4NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCkBA
IC0xNDIsNyArMTQyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50
czxTY29wZWRBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBt
X3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVz
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDY0ZGRmY2IxYTI1NjBlNmZlMWI0
NTRlNGZlZTE0ODkyYWRjMDhhOWYuLjhmNmU1NjVlMjQ3ZTVhMjMxOTMzMTk4ODI4NjcyZTIxMDQ4
ODE2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJCb29sZWFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFi
bGVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgorI2luY2x1ZGUg
IkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0x
MDI3LDYgKzEwMjgsMjAgQEAgdm9pZCBWTTo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIH0KICNlbmRpZgogCit2b2lkIFZNOjph
ZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBzdGQ6OnVuaXF1
ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9hZCkKK3sKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RGTW92ZShwYXlsb2FkKSk7
CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBWTTo6ZmluZENo
ZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJU
KGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gc2lkZVN0YXRlID0g
bV9jaGVja3BvaW50U2lkZVN0YXRlLnRha2UoY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gc2lkZVN0
YXRlOworfQorCiB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mIHZtKQogewogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMjgwODZjNGVkOTE2MDZjMjgxYjFhMWQ1YjdhMWRh
YjA2MDg4MDcwYS4uMjVjNGE1MTRhMThjNjcwZTY1NDMxYWI5Njg3ODgzMzgxZDcxZWMyZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDMsNiArMTAzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29kZUludHJpbnNp
Y1JlZ2lzdHJ5OwogY2xhc3MgQ2FsbEZyYW1lOworc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xhc3MgQ29tbW9u
SWRlbnRpZmllcnM7CkBAIC05NDksNiArOTUwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2F0
aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAKKyAgICB2b2lkIGFk
ZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2lu
dE9TUkV4aXRTaWRlU3RhdGU+IGZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSop
OworICAgIGJvb2wgaGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hlY2twb2ludFNpZGVTdGF0ZS5zaXplKCk7IH0KKwogICAgIFZNRW50cnlTY29wZSogZW50cnlT
Y29wZTsKIAogICAgIEpTT2JqZWN0KiBzdHJpbmdSZWN1cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsg
bnVsbHB0ciB9OwpAQCAtMTIwMCw2ICsxMjA1LDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fc2Ny
YXRjaEJ1ZmZlckxvY2s7CiAgICAgVmVjdG9yPFNjcmF0Y2hCdWZmZXIqPiBtX3NjcmF0Y2hCdWZm
ZXJzOwogICAgIHNpemVfdCBtX3NpemVPZkxhc3RTY3JhdGNoQnVmZmVyIHsgMCB9OworICAgIEhh
c2hNYXA8Q2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPj4gbV9jaGVja3BvaW50U2lkZVN0YXRlOwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9w
cmltaXRpdmVHaWdhY2FnZUVuYWJsZWQ7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1f
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxv
d1Byb2ZpbGVyPiBtX2NvbnRyb2xGbG93UHJvZmlsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAppbmRleCA4MWM5ZjFmNjc0NzA3OWVkODMxMjY2MmMwODMw
MGM2Y2MzNjI4ZTM3Li5lMTQ4NDAwZDQ4N2RmYzY0ZTQ0MDU0ZGRhZGIwODU4OTcyZTM5YTI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKQEAgLTM5Nyw4
ICszOTcsOCBAQCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgIGNvbnN0IFJlZ2lzdGVyKiBpdDsKICAgICBjb25zdCBSZWdpc3RlciogZW5k
OwogCi0gICAgaXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7Ci0gICAgZW5kID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7CisgICAg
aXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBlbmQgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDEpOwogICAgIHdoaWxl
IChpdCA+IGVuZCkgewogICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAg
ICBpbnQgcmVnaXN0ZXJOdW1iZXIgPSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmlu
ZGV4IGY2ODhhN2M5ZTk0MjZkOWUwYmVhM2FmMGNmZmFmMmMyN2RkNWE1NjcuLjJmNGIxYzdkZTZh
ODdjNzQxMWU4NmU4N2U3ZjE5MjQ3MzUyYzBmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC03MiwxMSArNzIsMTEgQEAg
cHVibGljOgogICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRzOyB9CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsgfQogCi0gICAgQUxXQVlT
X0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShpbnQgaW5kZXgpIGNvbnN0CisgICAgQUxX
QVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxX
QVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNv
ZGVzKCkpOwotICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07CiAgICAgfQogCiAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3Rk
Ojp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRleCBhYjE3NDA2YWZiNzM0YTcw
OGRmMTFkYmI2ODAxNTE4Yjc2NjVmYjQyLi5lZTJiMzI3ZDJhZjU0NzE5Njg3OTY5YWMyNTJhODRj
Nzg4ZWY2ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAKQEAgLTI0Miw2ICsyNDIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dFBhcnNlcihGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNl
ciA9IHBhcnNlcjsgfTsKIAorICAgIC8vIFdlIG5lZWQgdGhpcyBmb3IgYXV0b2dlbmVyYXRlZCB0
ZW1wbGF0ZXMgdXNlZCBieSBKUyBieXRlY29kZXMuCisgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2lu
dHMoKSBjb25zdCB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9CisKICAgICB2b2lkIGR1
bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCBlMmE0
YzQyNTMzYTJmNDQ3ZGQzMjAyMDViNzc3Yjc4YjAzOWMwYjY4Li4yMDY5YWQ4YjI0YjczNjlkY2Q5
ZDVmMGM3ZjU4ZWVjOTJiMzVjNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9wZXJhdGlvbnMuY3BwCkBAIC03NDMsNyArNzQzLDcgQEAgdm9pZCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6
RXhjZXAKICAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNo
IGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZwogICAgIC8vIHRvIHRoZSBl
eGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRl
cnJpYmxlIGhhY2suCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDQ0MAotICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVs
ZSgpKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGlu
c3RhbmNlLT5tb2R1bGUoKSk7CiAgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmlu
ZGV4IDkyN2E2OTg0YTNiZTAxNGNmM2VhN2Q2N2YwMzQ1ODRlZWJlYjYwY2UuLjU0ZjYzNmFjMWI1
MDc1ZDFjNjY3YjM4YTkwMzEzMjkwZDVmMzMzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgTExJbnQgewogCiAjZGVmaW5lIFJFQUQodmlydHVhbFJlZ2lzdGVyKSBcCiAg
ICAgKHZpcnR1YWxSZWdpc3Rlci5pc0NvbnN0YW50KCkgXAotICAgICAgICA/IEpTVmFsdWU6OmRl
Y29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkp
IFwKKyAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2
aXJ0dWFsUmVnaXN0ZXIpKSBcCiAgICAgICAgIDogY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cikpCiAKIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50
Q2FsbGVlKiBjYWxsZWUsIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206
Okluc3RhbmNlKiBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDViZDdhYjQzZGUwNmY4OTNjMTY0ZDU5OWM2Y2M0ZjVmYjE3YjA1YmIuLjRlZTdm
NTFlODI1ZWE2NmZiNzMxYmI3MWVjODc3MGE3NDM2ZDJmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzcyLDYgKzM3Miw3IEBACiAJCTUzMTFCRDU3MUVB
N0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4
MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEVCQTQyM0FCMDREMTAwMzgyNjYyIC8qIEVudW1DbGFzc09w
ZXJhdG9yT3ZlcmxvYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudW1D
bGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
NTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5taWc7IHBhdGggPSBNYWNoRXhjZXB0aW9ucy5kZWZzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0
eVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW9yaXR5UXVldWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NCw2ICs5NTUsNyBAQAogCQkJCUE4
QTQ3Mjk4MTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hLmggKi8sCiAJCQkJRkUwNUZBRTYxRkRCMjE0
MzAwMDkzMjMwIC8qIER1bWJQdHJUcmFpdHMuaCAqLywKIAkJCQlBRDY1M0RBODIwMDZCNkMyMDBE
ODIwRDcgLyogRHVtYlZhbHVlVHJhaXRzLmggKi8sCisJCQkJNTMzOEVCQTQyM0FCMDREMTAwMzgy
NjYyIC8qIEVudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmggKi8sCiAJCQkJMUFFQTg4RTExRDZC
QkNGNDAwRTVBRDY0IC8qIEVudW1UcmFpdHMuaCAqLywKIAkJCQlBRDdDNDM0QTFERDJBNEE3MDAy
Njg4OEIgLyogRXhwZWN0ZWQuaCAqLywKIAkJCQlBOEE0NzI5RjE1MUE4MjVBMDA0MTIzRkYgLyog
RXhwb3J0TWFjcm9zLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaCBi
L1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYzMmMzZWZjMDAwYmQxOGU5
ZTM2OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUzNjZhNzUwNTRkY2M2YzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0JpdG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbmV4dFBvc3Np
Ymx5VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFyKHNpemVfdCk7CiAgICAgdm9p
ZCBjbGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50NjRfdCBmaW5kUnVuT2Za
ZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXplX3QgY291bnQoc2l6ZV90IHN0
YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKQEAgLTEwMiw2ICsx
MDMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwog
ICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yPShib29sIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5kZXgsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
Y29uc3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CkBAIC0xMTEs
NiArMTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUpOyB9CiAgICAgCisgICAg
aXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJhdG9y
W10oc2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRDbGVhcihCaXRtYXAmKTsKICAg
ICB2b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAtMjI0LDYgKzIzNCwxMyBAQCBp
bmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpjbGVhckFsbCgpCiAgICAg
bWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwogfQogCit0ZW1wbGF0ZTxzaXpl
X3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0
bWFwU2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRzW2ldOworfQorCiB0ZW1wbGF0
ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgc2l6ZV90IEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0KHNpemVfdCBzdGFy
dCkgY29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5lIGJvb2wgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAog
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1h
cFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUs
IFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0ZXJhdG9yCit7CisgICAg
QVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGluZGV4
KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgor
aW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXpl
X3QgaW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuICgqY29uc3Rf
Y2FzdDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhpcykpW2luZGV4XTsKK30KKwog
dGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHVu
c2lnbmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhhc2goKSBjb25zdAogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAppbmRleCBkYWU0YTcxYjI4ZDEzMDQyNGMwYmQ3MzFiZTQxNjQzZjA1MmIz
ZWE5Li4yYTMyNjJjOWI4YjZkNTZkZTNjYTRkYTAxNTY5NmQ3NTI3YWE0YjkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dApAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAg
RHVtYlB0clRyYWl0cy5oCiAgICAgRHVtYlZhbHVlVHJhaXRzLmgKICAgICBFbnVtVHJhaXRzLmgK
KyAgICBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCiAgICAgRXhwZWN0ZWQuaAogICAgIEV4
cG9ydE1hY3Jvcy5oCiAgICAgRmFzdEJpdFZlY3Rvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oIGIvU291cmNlL1dURi93dGYvRW51bUNs
YXNzT3BlcmF0b3JPdmVybG9hZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmRlNzNmNWIyZDdkNTc0NGEzZDA4
NTc3Y2M3MjQ4NzFlOTNlNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvRW51
bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CisKKyNkZWZpbmUgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgb3AsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoZW51bU5hbWUgZW51
bUVudHJ5LCBUIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9uKSwg
VD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KSBv
cCB2YWx1ZTsgXAorICAgIH0gXAorICAgICAgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwK
KyAgICBjb25zdGV4cHIgYXV0byBvcGVyYXRvciBvcChUIHZhbHVlLCBlbnVtTmFtZSBlbnVtRW50
cnkpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBc
CisgICAgICAgIHJldHVybiB2YWx1ZSBvcCBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpOyBcCisg
ICAgfSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1Nf
V0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9S
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICssIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAg
ICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAtLCBlbmFi
bGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgKiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9S
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC8sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAg
ICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAlLCBlbmFi
bGVFeHByZXNzaW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VO
VU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JT
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikKKwor
I2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9S
X0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAhPSwgZW5hYmxl
RXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4o
ZW51bU5hbWUsIDwsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9G
T1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID4sIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCA+PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX1JF
TEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1l
KSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1O
YW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAppbmRleCA4
ODViN2IxNzNiMTFhNjAxYmUyOWEzMzJhYjlkMmE0MTRkNTYyMTIyLi45MjA4OTVmYzQ5ZTcxYmY5
NjY5MjIxYzEzMWExNzQyZmI3NThmZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0
Qml0VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCkBAIC00NTAs
NyArNDUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiAhISgqbV93b3JkICYgbV9tYXNrKTsKICAgICB9CkBAIC00NjQsNiArNDY0LDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgRmFzdEJpdFJlZmVy
ZW5jZSYgb3BlcmF0b3J8PShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzID0gdmFs
dWUgOiAqdGhpczsgfQorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yJj0oYm9vbCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA6ICp0aGlzID0gdmFsdWU7IH0KKwogcHJpdmF0ZToK
ICAgICB1aW50MzJfdCogbV93b3JkIHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fbWFzayB7
IDAgfTsKQEAgLTUwOSw3ICs1MTIsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jk
cy5jbGVhckFsbCgpOwogICAgIH0KLSAgICAKKworICAgIC8vIEZvciB0ZW1wbGF0aW5nIGFzIFZl
Y3Rvcjxib29sPgorICAgIHZvaWQgZmlsbChib29sIHZhbHVlKSB7IHZhbHVlID8gc2V0QWxsKCkg
OiBjbGVhckFsbCgpOyB9CisgICAgdm9pZCBncm93KHNpemVfdCBuZXdTaXplKSB7IHJlc2l6ZShu
ZXdTaXplKTsgfQorCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJSYW5nZShzaXpl
X3QgYmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250
ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgpAQCAtNTg5LDQgKzU5Niw1IEBAIHB1Ymxp
YzoKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6RmFzdEJpdFJlZmVyZW5jZTsK
IHVzaW5nIFdURjo6RmFzdEJpdFZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Vu
YWxpZ25lZEFjY2Vzcy5oIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKaW5kZXgg
NWE0ZTllZjQ0OTRlZjQ2Y2E5ZTRlZWY3N2ZkY2MwZDYwZmFhNGExMS4uM2EzNWIzOGY0YzAyMzY3
OWFjN2NmYzljNDY1NjA4NGEzOTE0ODNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5h
bGlnbmVkQWNjZXNzLmgKKysrIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKQEAg
LTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgog
aW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lkKiBwb2ludGVyKQogewotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAg
ICAgVHlwZSByZXN1bHQgeyB9OwogICAgIG1lbWNweSgmcmVzdWx0LCBwb2ludGVyLCBzaXplb2Yo
VHlwZSkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBUeXBl
IHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+CiBpbmxpbmUgdm9pZCB1bmFsaWduZWRTdG9yZSh2b2lkKiBwb2ludGVyLCBUeXBlIHZhbHVl
KQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIp
OworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZh
bHVlLCAiIik7CiAgICAgbWVtY3B5KHBvaW50ZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEw
ZDhlNzVkN2VlZTJkNmFjNThlMDY4ZWUxODI2NGQ0OGRhZjZkMTMuLmM5ODlkMDRiOTI4NTVkNTk2
ZjljNzA0MTkwMTU0OTVjMjYxYmVjYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMi0xOCAgS2VpdGggTWls
bGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBi
ZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZW1v
dmUgcHJvYmUgT1NSIGV4aXQgb3B0aW9uIHNpbmNlIHdlIGFyZSBub3QgdXNpbmcgdGhhdCBhbnlt
b3JlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0xMi0xNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBHVEsg
Z2FyZGVuaW5nLiBNYXJrIFdlYktpdC5Gb2N1c2VkRnJhbWVBZnRlckNyYXNoIGFzIHRpbWVvdXQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGNkYmY5YzBkYmY5MzJlMjhjNmQ1YTgy
MDhhMGE5OGNjZWU2YWVkOWYuLjVmYmMyMDllZGU0ZDM0NWE0NjA1YjAwZDI3MTcyMDQ1ZDA0OTJj
ZTYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIv
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNDk4LDcgKzQ5OCw2IEBAIE5P
X0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhyZXNob2xk
Rm9ySklUQWZ0ZXJXYXJtVXA9MTAwCiBCM08xX09QVElPTlMgPSBbIi0tZGVmYXVsdEIzT3B0TGV2
ZWw9MSJdCiBCM08wX09QVElPTlMgPSBbIi0tbWF4REZHTm9kZXNJbkJhc2ljQmxvY2tGb3JQcmVj
aXNlQW5hbHlzaXM9MTAwIiwgIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MCJdCiBGVExfT1BUSU9OUyA9
IFsiLS11c2VGVExKSVQ9dHJ1ZSJdCi1QUk9CRV9PU1JfRVhJVF9PUFRJT04gPSBbIi0tdXNlUHJv
YmVPU1JFeGl0PXRydWUiXQogRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyItLWZvcmNlT1NS
RXhpdFRvTExJbnQ9dHJ1ZSJdCiAKIHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1YnkvanNjLXN0
cmVzcy10ZXN0LXdyaXRlci0jeyR0ZXN0V3JpdGVyfSIKQEAgLTcxMyw3ICs3MTIsNyBAQCBkZWYg
cnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRl
ZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAg
IHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0
ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlS
Q0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIFBST0JF
X09TUl9FWElUX09QVElPTiArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVu
KCJmdGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3Jh
cGg9dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxs
b2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUTm9QdXRTdGFja1Zh
bGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MjksNyArNzI4LDcgQEAg
ZGVmIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKIGVuZAogCiBkZWYgcnVuREZHRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
LSAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9V
U0xZX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBGT1JDRV9MTElOVF9FWElUX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZGZnLWVhZ2Vy
IiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIEZPUkNF
X0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQK
IAogZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggN2M1YWY0NGJiM2M0ZmNjMzc5OGZhZDQzNmNjYjFkODgzYjUxOWZhMS4uMWMxMDAwYjI5
NjM4Yzk1NGM5ODJhMDU4YTNjZDgzMjMyZjNiNmMxMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxOS0xMi0x
OCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcv
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9h
cHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25h
bGx5LmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2Fs
bGVlKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgor
ICAgICAgICAqIHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpz
OiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToK
KyAgICAgICAgKHRlc3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAg
ICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0
LmpzOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICogc3RyZXNzL3JlY3Vyc2l2ZS10
YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanM6CisKIDIwMTktMTItMTMg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgSlNGaXhlZEFycmF5LCBhbmQgdXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5IGluc3RlYWQKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3Ro
LW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1v
c3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJjNTBhYzBhMjMKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0
LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCkBAIC0wLDAgKzEsMzYgQEAK
KworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7Cisg
ICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQp
OworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhw
ZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rp
b24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30K
K25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50
ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsKKyAgICBpZiAo
bGVuZ3RoQ2FsbHMrKyAlIDEwID09IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigidGhyb3dp
bmcgYW4gZXhjZXB0aW9uIGluIGxlbmd0aCIpOworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQK
K30gfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTY7IGkrKykgeworICAgIHRyeSB7CisgICAgICAg
IHRlc3QoYXJyYXkpOworICAgIH0gY2F0Y2ggeyB9Cit9CisKK2N1cnJlbnRBcmdDb3VudCA9IDEw
MDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVuZ3RoQ2FsbHMgIT09
IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMgYi9KU1Rl
c3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhiZWU0NWNlMWM3MjgzNjUzODI3MDVkOTlkMzAxYWU2YmNiOGQ4N2EKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0
aC1vbmNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0
aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30K
K25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5h
cHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3Ro
Q2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTog
MiwgZ2V0IGxlbmd0aCgpIHsgbGVuZ3RoQ2FsbHMrKzsgcmV0dXJuIGN1cnJlbnRBcmdDb3VudCB9
IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdChhcnJheSk7CisKKwor
dGVzdChhcnJheSk7CitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0
ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJv
cihsZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3Mt
dGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9zdHJlc3MvbG9h
ZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwppbmRleCAzNjE4
ZjhjYmIzZDMyMTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBjZjQ5ZDg4ZTNm
ZmU5MTJiMWUxNmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZh
cmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBiL0pTVGVzdHMv
c3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMK
QEAgLTE4LDggKzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOwog
ICAgIGlmIChhLmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBi
OiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMu
bGVuZ3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlz
bWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMubGVuZ3RoICE9
PSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5n
dGggbWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5sZW5ndGg7CiAg
ICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYgKGEuY1tpXSAh
PSBiLmNbaV0pCiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNt
YXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQt
YXJndW1lbnQtY291bnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdp
dGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCmluZGV4IDA0N2ZiMDFmODgzMTQ1Y2M3NTU0
ZjVjZjcwMWE3MDc0ZjI2N2RlZWUuLjUzZDc1MmRlY2Q3ZDBmMzFiYzJmMWQ3ODk5MWM2OTEwMWYw
OGJmZjMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0
aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJz
aXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwpAQCAtMTgsOCAr
MTgsOCBAQCBub0lubGluZShiYXIpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CiAgICAgdmFyIHJlc3VsdCA9IGZvbyg0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0g
ICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsg
cmVzdWx0OworICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVj
dGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CiAgICAgcmVzdWx0ID0gYmFyKDQwLCAyKTsKICAgICBp
ZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBmb3IgYmFyLCBl
eHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IEVycm9yKCJXcm9uZyBy
ZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386054</attachid>
            <date>2019-12-18 19:40:10 -0800</date>
            <delta_ts>2019-12-18 20:17:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218193952.patch</filename>
            <type>text/plain</type>
            <size>667816</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi41YWZiZjFhODU4NGI0MzMx
OTIzMjZjNjZhYjJiOTU5N2QzNDU3ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MDkgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6Cisg
ICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAg
ICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNB
bHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAg
ICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGlu
ZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNB
cmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1w
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJh
dG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpp
c0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9j
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lz
dGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9w
ZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVy
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQ
YXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6Cisg
ICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJs
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRh
cmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkQnl0ZWNvZGVMaXZl
bmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Zm9y
QWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5vZGVz
QXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjps
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpt
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZnL0RG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nlc3NE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNV
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtl
ZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZl
Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rhcmdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNrcG9p
bnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChKU0M6
OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRh
Ojp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0
RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAg
ICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXNCeXRlY29kZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3Vy
cmVudFZQQyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0
ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2Fm
ZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNr
X3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRo
dW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGlu
dC9MTEludERhdGEuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlND
OjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6ZHVtcFJlZ2lz
dGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAoSlND
OjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0
b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFu
dFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25z
dCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0ganNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2Jq
ZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBiZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29w
ZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdiMGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJl
Li41OWEwMDQzNDgyYWMyM2UwMmI4NmEzOTY5OThhM2IwNTg1MWIyNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxl
IG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmludmVydCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJl
bmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0
b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgorICAgICAgICAoV1RG
OjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGlnbmVkQWNjZXNzLmg6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRT
dG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2RjY2UwZjgxZWQ0NGM3NGQ2
MGVhNWEwYzYyOGQ4YmZhZDkzMzA4Zi4uY2NlZjFhZmQ0NWRhMTkzMDFjODZhOWY3NTcyMmJhZGEz
N2M4MzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTI1LDYgKzUy
NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL09wY29kZS5o
CiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAgYnl0ZWNvZGUvT3BlcmFuZHMuaAogICAg
IGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
aAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1
NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAy
ZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNU
X0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRiY2U1YmFjZWRjMDVjM2RjMGVhOGIwNDMzNDZkMTUxZDBkZWY0NDEuLmIyNjRmNGVkZDM5
NjI2OTA1ZTFiMjJhODJlMWU0MTUyMzU1Njc0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAq
LzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
NEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5
NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMzhFQkEzMjNBQjA0Qjgw
MDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZU
TFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRE
NyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERE
RUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzU5Nyw2ICszNTk5LDggQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFj
dFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9
IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMx
RDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
dGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29y
ZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEph
dmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMz
OEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2
MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBwYXRoID0gZnRsL0ZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURD
N0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFD
MzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzYxMSw2ICszNjE1LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3
NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0
QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjND
NTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9y
SGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJh
dG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYz
QzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFj
Y2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNz
Q2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkw
MDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MjEsNiArNTUyOCw3IEBACiAJCQkJMEY0ODUzMjYxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEz
RTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywKKwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAz
ODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLywKIAkJCQkwRjI1RjFBQjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJMEYyNUYxQUMxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01OTQ3LDYgKzU5NTUs
NyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJ
CQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJ
CUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJ
NTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgg
Ki8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAog
CQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdD
MUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2
LDcgKzg1ODUsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVy
YXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2
IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1
NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlB
MzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1
NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFD
NDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2
RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAw
MzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk4LDcgQEAK
IAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJ
CQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJ
CTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90
b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0
b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk5LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIw
Mjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMy
MjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNE
REExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMz
OEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyog
Q0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDMyLDYgKzk0NDUsNyBAQAogCQkJCTBG
OUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3Zl
cnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEVCQTMyM0FCMDRCODAw
MzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBl
dFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2Rl
ZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRi
MmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAot
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihG
dW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRy
PHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NF
UlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQq
IHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBm
M2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBm
MTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2Jl
RnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxU
PihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3Rlcikp
OwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJh
bmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBn
ZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFs
dWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFu
ZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZh
bHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
LCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRP
cGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQg
c2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZz
ZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNl
ZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxp
bmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRp
b24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0
IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAg
ICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFu
ZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJh
bmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9w
ZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVm
IEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQx
Nl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5k
OwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+
IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5k
PGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
RmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3Bl
cmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5n
VmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9w
ZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7
CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhW
ZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRP
cGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVy
YW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAg
VmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJ
bnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCA2MDA2
MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgxMGFiNGRiZDI2M2Y0
OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGpp
dC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAg
aWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewogICAgICAgICAgICAg
YXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKQEAgLTE3
OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5h
bCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGpp
dC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMxMzMwZWU1OGY1ODgu
LjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFy
YW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAgICBqaXQubWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4
Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2Nh
dGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAg
ICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQg
Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2Vu
ZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFz
cyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50
IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZp
cnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5h
bWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAg
cmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgs
MTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZz
ZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNz
IEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1l
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCkt
PmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZp
cnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIp
Iik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQg
Qnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRl
Y29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNv
ZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZh
bHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2Nr
LT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEw
NzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnBy
aW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1l
KGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVh
bFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1
bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCBy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmly
dHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAg
QmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNp
bmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVy
OwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29u
c3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3
ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1
MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lk
IEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAg
ICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApp
bmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4
ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQg
KzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5k
ZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisg
ICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAg
ICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkK
LSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNC
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAg
ICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hv
dWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hl
Y2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsg
fQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNr
ZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0
dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQog
CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAg
ICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBk
ZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJp
dHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNv
bnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhl
ci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3
OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
aW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAot
ICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50
MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisK
KyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1
aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNo
ZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0
KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5
dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAg
ICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAg
IHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDcx
YmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLjY4MGNkZDkxODYwZjMwMWFm
MThkZGViZmEyMjY0ZmEwZTdkNzIwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldh
dGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIs
CiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAg
ICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBh
cmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBk
ZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQog
CiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBAIG9wIDp0YWlsX2Nh
bGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5
UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1w
czogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRz
OiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6
IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBAIC04NDUs
NiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQK
KyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6
IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTIs
NyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdp
c3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApAQCAtMTIzOCw2ICsx
MjU5LDggQEAgb3AgOmxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9uYXRp
dmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxs
X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBv
bGluZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGlu
ZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOmhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3Rf
cmV0dXJuX2xvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBi
NmNmZjEwMTE0M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzExZDFmOGY4ZDdkYmU2
ZDNjOTE2Y2U1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBA
IHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5h
bWUgRW51bVR5cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChF
bnVtVHlwZTEgdjEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVu
YW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50
VHlwZTIgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOwor
ICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PElu
dFR5cGUxPih2Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlw
ZTI+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVt
Q2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxt
YXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVn
cmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwp
ICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9w
VGFpbENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0
VmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFy
YXJnczo6YXJnQ291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAg
aWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisgICAgICAgICAgICBy
ZXN1bHQuc2V0KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oCmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzku
LjNlNWVkYzBhNjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIK
ICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3Jh
cGggbV9ncmFwaDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5l
c3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxp
bmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVj
dG9yJiBvdXQsIGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmlu
ZGV4IDNkMTJlMTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEw
OWI3ODk2N2YxMDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaApAQCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVh
bFJlZ2lzdGVySXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJu
ICFWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlz
TG9jYWwoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xp
dmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZp
cnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJl
Zy50b0xvY2FsKCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3Bl
cmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5l
IGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUo
b3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5k
KTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZp
cnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0K
IAogaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CmluZGV4IDg2OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0ZGQuLjYwMmRkNTI1
YTFiZDJjMTYzZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
Qnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRl
ICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1Nl
dC5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcgKzQwOCw3IEBAIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNsb25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9s
VGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAg
ICAgcmVwbGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3lt
Ym9sVGFibGUpOworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNv
bnN0YW50UmVnaXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAg
ICBib29sIHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRD
b2RlLT53YXNDb21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENv
ZGUtPndhc0NvbXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDEs
NyArNjQyLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRl
Y29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAg
ICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBw
dXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2Rl
Lm1fdmFyICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1f
c3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJv
bFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkp
OwpAQCAtNzA5LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBl
Qnl0ZWNvZGVMb2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFi
bGVJbmRleCA9IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUo
KS5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBq
c0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxl
Kj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xU
YWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVu
dGlmaWVyKGJ5dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAv
LyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlz
YWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0x
MDg2LDYgKzEwODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZt
LCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JF
eGl0KEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXgu
Y2hlY2twb2ludCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24u
bmV4dCgpLmluZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4
MTEsMTAgKzE4MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0Nv
bXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBw
ZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMg
PSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5z
aXplKCkpOworICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQocHJvZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9m
aWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNl
dCgpOworICAgICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2
ZU9wZXJhbmRzW2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0y
NzEzLDcgKzI3MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJl
ZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8q
IHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2Zp
bGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9m
aWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
eworICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDE0Njc0
MmViMDQ4YTFkMTY2ZjAxNzkxZDU2Y2U1ODE1MGY1MzQyNjYuLjI1MDY3MjYzZTI0NzZkYTFiMmRm
NmQ1ZDJmOGU4MDQzMTVmMzAzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKQEAgLTE2MSw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxl
ZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQg
bnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1D
aGVja3BvaW50VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyBy
ZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZO
dW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1Q
YXJhbWV0ZXJzKTsgfQpAQCAtMjI5LDIwICsyMzAsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
SW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRy
YXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShp
bnQgaW5kZXgpCisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9m
ZnNldCgpICYmICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0
ZXIoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0
dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlz
VGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAg
IHJldHVybiBpbmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkg
Pj0gbV9udW1WYXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNv
ZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6
OkFueUhhbmRsZXIpOwpAQCAtNTgxLDEwICs1ODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Y29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1
cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9
Ci0gICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb25bcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhd
LmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTc3NCw2ICs3NzQsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21w
aWxhdGlvblJlc3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9y
RXhpdChCeXRlY29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JF
eGl0KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3NCw3ICs4NzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAg
ICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwog
Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAK
ICAgICAgICAgRGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAg
fTsKQEAgLTk0MSwxMCArOTQyLDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50
UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMs
IGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7
CiAKLSAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisg
ICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkg
JiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8
c2l6ZV90PihyZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
c2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0
cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1
MWM3MzE4ZWJjMDQzMS4uZjk4MjlhMjg2ZjhhYWJmNGQzMzJmZmYxZTcxZWEzYzgzZjliYzYwYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAs
NyArMTYwLDkgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVD
YWxsRnJhbWUqIHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlv
biYpOworICAgIHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsK
KworICAgIGlubGluZSBib29sIGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkg
Y29uc3Q7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywg
YW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdp
bj4gaW5saW5lU3RhY2soKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggZTRhNTc1YjAzYTdkMWI1OTlh
ZDBkNTZjZWRkZGFmNGJhMDUwMmYzYS4uNDdjNjU3YzhkZjkwMzgzYWY2NWViNWMzYjhhOGIwNTk0
ZDBjNGRhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxC
eXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1
bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTI2LDEyICsyNiwxNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJPcGVyYW5k
cy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBDb2RlQmxvY2s7CiAKKy8v
IE5vdGU6IEZ1bGwgYnl0ZWNvZGUgbGl2ZW5lc3MgZG9lcyBub3QgdHJhY2sgYW55IGluZm9ybWF0
aW9uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiB0ZW1wcy4KKy8vIElmIHlvdSB3YW50IHRtcCBsaXZl
bmVzcyBmb3IgYSBjaGVja3BvaW50IGFzayB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQuCiBjbGFz
cyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CkBAIC00NywxNSArNTEsMTUgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50
IG9wZXJhbmQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxjdWxhdGlv
blBvaW50IHBvaW50KSBjb25zdAorICAgIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxj
dWxhdGlvblBvaW50IHBvaW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmRJ
c0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUo
Z2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgcG9pbnQpLCBvcGVyYW5kKTsKKyAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShyZWcpIHx8IHZpcnR1YWxSZWdpc3RlclRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgcG9pbnQp
LCByZWcpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpczsKICAgICAKLSAgICAvLyBGSVhNRTogVXNlIEZhc3RCaXRWZWN0b3In
cyB2aWV3IG1lY2hhbnNpbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KKyAgICAvLyBGSVhNRTogVXNl
IEZhc3RCaXRWZWN0b3IncyB2aWV3IG1lY2hhbmlzbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDI3PFBhc3Rl
PgogICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9i
ZWZvcmVVc2VWZWN0b3I7CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX2FmdGVyVXNlVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCmluZGV4IDk3NTA4YmJmMGM0NWNiOTdhNDc4NTE1
OTcwNDE3MWRkZjZkZDFkYTMuLmEwYWE3YzA5MjQ0Zjk5NTZiZWYxZmI5ODM4YjU2MmMxNDg5OTk0
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxs
RnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZy
YW1lLmgKQEAgLTE3OSw3ICsxNzksOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBX
cml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKICAgICBDb2RlT3JpZ2lu
IGRpcmVjdENhbGxlcjsKIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IHsgMCB9OyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5zaWduZWQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgorICAgIHVu
c2lnbmVkIHRtcE9mZnNldCA6IDEwOwogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4OwogICAg
IHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wgaXNDbG9z
dXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9zY29wZSBh
cmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFibGVzLCBp
LmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCkBAIC0xOTEsNyArMTkyLDkg
QEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgLy8gSW5saW5lQ2FsbEZyYW1lJ3MgZmll
bGRzLiBUaGlzIGNvbnN0cnVjdG9yIGlzIGhlcmUganVzdCB0byByZWR1Y2UgY29uZnVzaW9uIGlm
CiAgICAgLy8gd2UgZm9yZ290IHRvIGluaXRpYWxpemUgZXhwbGljaXRseS4KICAgICBJbmxpbmVD
YWxsRnJhbWUoKQotICAgICAgICA6IHN0YWNrT2Zmc2V0KDApCisgICAgICAgIDogYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoMCkKKyAgICAgICAgLCB0bXBPZmZzZXQoMCkKKyAgICAgICAgLCBz
dGFja09mZnNldCgwKQogICAgICAgICAsIGtpbmQoQ2FsbCkKICAgICAgICAgLCBpc0Nsb3N1cmVD
YWxsKGZhbHNlKQogICAgIHsKQEAgLTIxOSw2ICsyMjIsMTIgQEAgc3RydWN0IElubGluZUNhbGxG
cmFtZSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhY2tP
ZmZzZXQpID09IG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBzZXRUbXBPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgdG1wT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG1wT2Zmc2V0KSA9PSBvZmZzZXQp
OworICAgIH0KKwogICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVyRnJh
bWVPZmZzZXQoKTsgfQogICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJuUENP
ZmZzZXQoKTsgfQogCkBAIC0yNDcsOSArMjU2LDkgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb25zdCBDb2RlT3JpZ2kK
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMg
ZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0IG5lZWRzIGFjY2Vz
cyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFtZQorLy8gVGhlc2Ug
ZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0
IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFt
ZQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6
d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoraW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKSBj
b25zdAogewogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOwogICAgIHdoaWxlICh0
cnVlKSB7CkBAIC0yNjEsMTEgKzI3MCwzOCBAQCBpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxr
VXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitpbmxpbmUgYm9vbCBDb2RlT3Jp
Z2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0Cit7CisgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICB3YWxrVXBJbmxpbmVTdGFjayhbJl0gKENvZGVPcmln
aW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9p
bnQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kKFRt
cE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KSA6
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
OworICAgIHJldHVybiBvcGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBP
cGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQoreworICAgIHJldHVybiByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5k
KHJlZykpOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihyZWcub2Zmc2V0
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnOworICAg
ICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sK
KyAgICByZXR1cm4gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4IGJmYjk0YjM1ZmNk
NjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5NTU1MmViZjM4ZjdiNGFi
MmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJPcGVy
YW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBP
cGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNjksNyArNzAsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICAg
ICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJhbmQudmFsdWUoKSArIG1f
b3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
Ynl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCgpIGNv
bnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
ISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkwLDcgKzkxLDcgQEAgcHVi
bGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4
OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3BlcmFuZCBtX29wZXJhbmQ7
CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlIYXNoIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1NTc4OWRmZmRlNjdmMzk2
Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4YmMwNjcwNDcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3IEBAIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlP
cGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsKICAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwotICAgIHJlc3VsdC51Lmxh
enlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOworICAgIHJlc3VsdC51
LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
OjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFsdWVSZWcKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7Ci0gICAgICAgIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBW
aXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7CisgICAgICAgIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCB1Lmxh
enlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFsdWUgdmFsdWUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1
YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9w
ZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1Lmxh
enlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKaW5kZXggNWQ4MWM0Yzkw
MGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBjMDBmYmQ0NGM4NTVhMzg5
ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCkBAIC0xMDYsNyAr
MTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldDsK
LSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kOwog
ICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWViMzczNDU5NDQ2ZGM3NGNk
MTIwMjc1NjI1NzYuLjQyMTMxMTdkYjc2ZjZlZDdlZWI5MzlkMzc3NDNhMWFhNDYwZmUxZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTExICsz
NSwyMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBP
cGVyYW5kVmFsdWVUcmFpdHM7CiAKLWVudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQs
IExvY2FsT3BlcmFuZCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heE51bUNoZWNrcG9pbnRUbXBz
ID0gNDsKKworLy8gQSBUbXBPcGVyYW5kIGlzIG9uZSB0aGF0IGV4aXN0cyBmb3IgZXhpdGluZyB0
byBhIGNoZWNrcG9pbnQgYnV0IGRvZXMgbm90IGV4aXN0IGJldHdlZW4gYnl0ZWNvZGVzLgorZW51
bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kLCBUbXBPcGVyYW5k
IH07CisKK2NsYXNzIE9wZXJhbmQgeworcHVibGljOgorICAgIE9wZXJhbmQoKSA9IGRlZmF1bHQ7
CisgICAgT3BlcmFuZChjb25zdCBPcGVyYW5kJikgPSBkZWZhdWx0OworCisgICAgT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgOiBtX2tpbmQob3BlcmFuZC5pc0xvY2Fs
KCkgPyBMb2NhbE9wZXJhbmQgOiBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQub2Zmc2V0KCkpCisgICAgeyB9CisKKyAgICBPcGVyYW5kKE9wZXJhbmRLaW5kIGtp
bmQsIGludCBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQorICAgIHsgCisgICAgICAgIEFTU0VSVChraW5kID09IFRtcE9wZXJhbmQg
fHwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9jYWwoKSA9PSAoa2luZCA9PSBMb2NhbE9w
ZXJhbmQpKTsKKyAgICB9CisKKyAgICBPcGVyYW5kS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CisgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kICE9IFRtcE9wZXJhbmQpOworICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCk7CisgICAgfQorICAgIHVpbnQ2NF90IGFzQml0cygpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oKnRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJh
bmQgZnJvbUJpdHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4ga2luZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAgIGJvb2wgaXNMb2Nh
bCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYgdmlydHVhbFJlZ2lz
dGVyKCkuaXNMb2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSAhPSBUbXBPcGVyYW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKwor
ICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkgY29u
c3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwo
KTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBB
cmd1bWVudE9wZXJhbmQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjpp
bnZhbGlkVmlydHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFu
ZDo6b3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2lu
ZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1Rt
cCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5s
aW5lIGJvb2wgT3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcigp
LmlzVmFsaWQoKTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0
X3QgdmFsdWUpCit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4o
dmFsdWUpOworICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3Qp
LCAiT3BlcmFuZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNM
aWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBP
cGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1l
bnRzKDApIHsgfQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVu
dHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9u
YWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0
aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+Owor
ICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVf
djxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7
CisKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVt
TG9jYWxzLCBzaXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1
bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAg
aWYgKFdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAg
ICAgICBtX3ZhbHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBu
dW1Mb2NhbHMpOwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRz
ICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAg
ICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAg
ICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0
aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAg
ICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2Nh
bHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUs
IG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJn
dW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5p
dGlhbFZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBl
eHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhl
cikKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRz
PFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVt
QXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2Nh
bHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwo
VCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7
CisgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMu
ZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51
bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1
bWVudHM7IH0KLSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX251bUxvY2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMo
KTsgfQorCisgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVf
dCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQo
aWR4IDwgbV9udW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1
bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBs
b2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1B
cmd1bWVudHMgKyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsK
KyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAg
UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07
IH0KKyAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAg
IH0KLSAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5
cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChp
ZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNv
bnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5k
ZXgoaWR4KV07IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFs
dWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlk
eCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQp
CisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5k
OgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6
CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6
ZV90IGlkeCkKKyAgICBSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpCiAgICAgewotICAgICAgICBp
ZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJh
bmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiB0
bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1
cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNh
c2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IHRtcCgwKTsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0g
ICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXRG
b3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBB
cmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBj
YXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwot
ICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6Cisg
ICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdG1wKDApOwogICAgIH0KLSAg
ICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKworICAgIHZvaWQgZW5zdXJl
TG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAgewot
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90
IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXplIDw9
IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxz
ID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJP
ZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAgICAgaWYgKCFX
VEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3ZhbHVlc1tuZXdTaXplIC0gMSAt
IGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07CisKKyAgICAgICAg
bV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAh
V1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2FsczsgKytpKQorICAgICAg
ICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxzICsgaSldID0gZW5zdXJl
ZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90
IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lkIGVuc3VyZVRtcHMoc2l6ZV90
IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVf
dCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1f
bnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAg
ICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
KyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7CisgICAgICAgIHNpemVf
dCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXpl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV92YWx1
ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkg
fHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAgICAgICAgfQogICAgIH0KICAg
ICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQpAQCAtMTY0
LDg0ICsyNzgsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4ID49IG51bWJlck9mTG9j
YWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRMb2NhbChpZHgsIHZhbHVl
KTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChpbnQgb3BlcmFuZCkgY29u
c3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlz
KS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAgc2l6ZV90IG9wZXJhbmRJbmRl
eChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4g
bG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5k
ZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVy
YW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAgICBzaXplX3Qgb3BlcmFuZElu
ZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4
KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAgfQogICAgIAotICAgIFQmIG9w
ZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQot
ICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0Fy
Z3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAgVCYgb3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5cGUgb3BlcmFuZChPcGVyYW5k
IG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
bmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wKG9wLnZhbHVlKCkp
OwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3Bl
cmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9w
ZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAgIENvbnN0UmVmVHlwZSBv
cGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5k
cyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0gICAgYm9vbCBoYXNPcGVyYW5k
KGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAgICAgICBpZiAob3AuaXNUbXAo
KSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51bWJlck9mVG1wcygpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3Rlcigp
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBjb25zdCBU
JiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kLCBjb25zdCBUJiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFuZCkgPSB2YWx1ZTsKICAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0T3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNvbnN0IFQmIGF0KHNpemVfdCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAgVCYgYXQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBjb25zdCBUJiBvcGVyYXRv
cltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgVCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQotCi0gICAgYm9vbCBp
c0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCBtX251bUFyZ3Vt
ZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFp
c0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFJlZlR5cGUgb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgT3BlcmFuZCBvcGVy
YW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGluZGV4
IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAgIHJldHVybiB2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpLm9mZnNldCgpOwotICAg
IH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpbmRleCk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgcmV0dXJu
IE9wZXJhbmQoVG1wT3BlcmFuZCwgaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9m
QXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kRmlyc3RUaW1l
KGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgc2V0QXJndW1lbnRGaXJzdFRpbWUo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRMb2NhbEZpcnN0VGlt
ZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2YWx1ZSk7Ci0gICAgfQotICAg
IAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAtMjU3LDYgKzM2Myw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFyZ3VtZW50cygpID09IG90aGVyLm51
bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQobnVtYmVyT2ZMb2NhbHMoKSA9PSBv
dGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mVG1wcygpID09
IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ZhbHVl
cyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUsOSArMzcyLDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgot
ICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRz
LCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7CisgICAgLy8gVGhl
IGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0
IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAgICBTdG9y
YWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKaW5kZXgg
NjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1NjZmZC4uMGIxY2MxZjJkMTk3YWQw
ODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAsNiArMzAsMTQgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgb3V0LnByaW50KCJ0bXAiLCB2YWx1
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7Cit9
CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewpAQCAtNDQs
NiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGluQ29udGV4
dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBmb3IgKHNpemVfdCB0
bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7ICsrdG1wSW5kZXgpIHsKKyAg
ICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1w
SW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAt
NjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxv
YyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkpOwogICAgIH0KKyAgICBmb3Ig
KHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7ICsrdG1wSW5k
ZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJ
bmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCBkNWRk
ZWU4ZDU2MDc3MDMyM2IxZmQ1ZjFhY2NjY2MwNTAyYzEyNjU0Li43ZTkzMjYyZGZiMDk1OWRlYzJh
OTI0MWZmOGM2MTFmMzNiOTJiNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTcyLDYgKzcyLDcgQEAgVW5saW5r
ZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1p
eGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMoZmFs
c2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgpKQogICAgICwgbV9jb2RlR2Vu
ZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwgbV9tZXRhZGF0YShVbmxpbmtl
ZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCBhZDFmOTBiNzBiZWI5ODE3ZjMyYmI4
MGM1NDdhZTRiYWI2NjU1MWE1Li4zMDgyYjBhMjYzYzMwNjU1MjU0YWQ4NmY5N2ZhMjMyMGRjNTBi
NDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaApAQCAtMTQxLDYgKzE0MSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0V4cHJl
c3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7IH0KICAgICBjb25z
dCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4g
bV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkg
eyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAgLy8gU3BlY2lhbCByZWdpc3RlcnMK
ICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7
IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAgdm9pZCBzZXRTY29wZVJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVSZWdpc3RlciA9IHNj
b3BlUmVnaXN0ZXI7IH0KQEAgLTE5OCw5ICsyMDEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Y29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllcjxV
bmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsg
fQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzKCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0
cy5zaXplKCkgOiAwOyB9CkBAIC00MTksNiArNDIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25l
ZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBtX2FnZSA6IDM7CiAgICAgc3RhdGlj
X2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsKKyAgICBib29sIG1faGFzQ2hlY2tw
b2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAppbmRl
eCBiYmI4YTRiMjQ1MzEwNDAzYTdmY2VmMmIyMWUxMTgzM2VmYjkwMzY3Li5lYjkxNzk0NTMwZGYx
YTMyOTJkY2RiZWQzMTY0ZTljNzkwOWE2OWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjggKzE3NiwyOCBAQCBpbmxpbmUgQnl0
ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUluZGV4KFJhcmVDYXNlUHJvZmls
ZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGUtPm1fYnl0ZWNvZGVJbmRl
eDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQgOiBwdWJsaWMgVmFsdWVQcm9m
aWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciB7CitzdHJ1
Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyIHsKICAgICBXVEZfTUFLRV9T
VFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
KHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAgewogICAgICAgICAv
LyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZmIHRoYW4gd2UgbmVlZC4gV2UgY291
bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAgICAgICAgLy8gdG8gYmUgbW9yZSBz
cGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFsdWVQcm9m
aWxlQW5kT3BlcmFuZD46Om1hbGxvYyhtX3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZCkpOworICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXI+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyAr
K2kpCi0gICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCgpOworICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0pIFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAotICAgIH5WYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyKCkKKyAgICB+VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkK
LSAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7
CisgICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyKCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgpAQCAt
MjA4LDcgKzIwOCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyIHsKICAg
ICB9CiAKICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQ+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXI+IG1fYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKaW5kZXggYzVjYTRk
ZTFlNGIzNjExMjE0YzM1YWIxZWEzMmRjMWNiZjQ1ZjNlOS4uYjEzOTQ3ZjBlMThkZjA2M2E4OGIz
ZjIyN2NkY2RiZmVmZmVkYzMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMzUsMjIgKzM1LDIyIEBAIEpTVmFsdWUgVmFsdWVS
ZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKIHsKICAgICBzd2l0
Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
IHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1
ZSgpOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBq
c051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJ
bnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOwogICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUyKCkpOwogICAgIGNhc2Ug
U3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihj
YWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRTdHJpY3RJbnQ1
MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOwogICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJsZSgpKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51
bmJveGVkRG91YmxlKCkpKTsKICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAg
ICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94
ZWRDZWxsKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkp
LnVuYm94ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lz
dGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGpzQm9v
bGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRCb29s
ZWFuKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CiAjZW5kaWYKICAgICBjYXNlIENvbnN0YW50Ogog
ICAgICAgICByZXR1cm4gY29uc3RhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCmluZGV4IGQ4ZjE4YzNmZTg1NTk0ZjMyYTI5M2FmZDg5MDky
MjM2MTM2MmVhNjMuLjVlNDNiYzcyYmJjYzRmZjk3YTY4ZjgzZGE4MzA5NGU1OGRhM2IzMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJl
Z2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVy
LmgKaW5kZXggMzYxOTUyOTQyZDJiODZiYWIxMmY2Y2NjN2NjMWJhMDIxZjVhZDA0OC4uZmQxNzAw
NzE3YzNiZmYzYmFmMGMzYjAwMzE3NmZlNjY1OTI0ZGY0YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaApAQCAtMzEsMTIgKzMxLDEyIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNMb2NhbChpbnQgb3Bl
cmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwoaW50IG9wZXJhbmQpCiB7
CiAgICAgcmV0dXJuIG9wZXJhbmQgPCAwOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1
bWVudChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQo
aW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPj0gMDsKIH0KQEAgLTQ5LDI1ICs0
OSwzMiBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW50LCBpbnQpOwogCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52
YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eDsKKwogICAgIFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlcklEKik7CiAgICAgVmlydHVhbFJlZ2lz
dGVyKFJlZlB0cjxSZWdpc3RlcklEPik7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIoKQotICAgICAg
ICA6IG1fdmlydHVhbFJlZ2lzdGVyKHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAg
OiBtX3ZpcnR1YWxSZWdpc3RlcihpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgIHsgfQogCiAg
ICAgZXhwbGljaXQgVmlydHVhbFJlZ2lzdGVyKGludCB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAg
IDogbV92aXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQogICAgIHsgfQogCi0gICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IHNfaW52YWxp
ZFZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBv
cGVyYW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQo
KSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0K
KyAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdCBzbG90KQorICAgICAgICA6IG1fdmly
dHVhbFJlZ2lzdGVyKHN0YXRpY19jYXN0PGludD4oc2xvdCkpCisgICAgeyB9CisKKyAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZp
cnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFs
UmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQ7IH0KLSAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgYm9vbCBp
c0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlz
TG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAg
ICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7IHJldHVybiBv
cGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBpbnQgdG9Db25zdGFu
dEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0dXJuIG1fdmlydHVhbFJl
Z2lzdGVyIC0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIGludCB0b0NvbnN0
YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92aXJ0dWFs
UmVnaXN0ZXIgLSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsgfQogICAgIGludCBvZmZzZXRJbkJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIp
OyB9CiAKQEAgLTEwNiw5ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNf
aW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OwotCiAgICAgc3RhdGljIGludCBsb2NhbFRvT3BlcmFuZChpbnQgbG9jYWwpIHsgcmV0
dXJuIC0xIC0gbG9jYWw7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVy
YW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0Fy
Z3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJn
dW1lbnRPZmZzZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBmODBhN2M0ZjYwODE5NTVlMWUy
NGNlMjA1NGMwMTNhZGNiZDc4N2UzLi44ZDJhN2ZiODI0NzU4ZmQwNGFiMDNiNzAyMDgyYmRiZjYz
MTZiZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSk7CiAgICAgbV9wYXJhbWV0ZXJzLmdyb3cobV9wYXJhbWV0ZXJzLnNp
emUoKSArIDEpOwogICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHJlZyk7Ci0gICAg
cGFyYW1ldGVyLnNldEluZGV4KHJlZy5vZmZzZXQoKSk7CisgICAgcGFyYW1ldGVyLnNldEluZGV4
KHJlZyk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwogICAgIHJldHVybiAmcGFy
YW1ldGVyOwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
aW5pdGlhbGl6ZVBhcmFtZXRlcnMoRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewog
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBibG9jayBrbm93cyBhYm91dCBhbGwgb2Ygb3VyIHBh
cmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzCiAgICAgLy8gbmVlZGluZyBk
ZXN0cnVjdHVyaW5nIGFyZSBub3RlZC4KLSAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRleChpbml0
aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsgLy8gdGhpcworICAgIG1fdGhpc1JlZ2lz
dGVyLnNldEluZGV4KFZpcnR1YWxSZWdpc3Rlcihpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5p
bmRleCgpKSk7IC8vIHRoaXMKIAogICAgIGJvb2wgbm9uU2ltcGxlQXJndW1lbnRzID0gZmFsc2U7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsK
QEAgLTE2MzcsMTEgKzE2MzcsMTEgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFs
aXR5T3BJbXBsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmUKIAogICAgIGlm
IChtX2xhc3RJbnN0cnVjdGlvbi0+aXM8T3BUeXBlb2Y+KCkpIHsKICAgICAgICAgYXV0byBvcCA9
IG1fbGFzdEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKTsKLSAgICAgICAgaWYgKHNyYzEtPmlu
ZGV4KCkgPT0gb3AubV9kc3Qub2Zmc2V0KCkKKyAgICAgICAgaWYgKHNyYzEtPnZpcnR1YWxSZWdp
c3RlcigpID09IG9wLm1fZHN0CiAgICAgICAgICAgICAmJiBzcmMxLT5pc1RlbXBvcmFyeSgpCi0g
ICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjMi0+
aW5kZXgoKSkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNy
YzItPmluZGV4KCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT5p
bmRleCgpKS5nZXQoKSktPnRyeUdldFZhbHVlKCk7CisgICAgICAgICAgICAmJiBzcmMyLT52aXJ0
dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQoKS5pc1N0cmluZygp
KSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpKS0+dHJ5
R2V0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAidW5kZWZpbmVkIikgewogICAg
ICAgICAgICAgICAgIHJld2luZCgpOwogICAgICAgICAgICAgICAgIE9wSXNVbmRlZmluZWQ6OmVt
aXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKQEAgLTMyMjksNiArMzIyOSw4IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBmdW5jCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIEFTU0VSVChkc3QgIT0gaWdu
b3JlZFJlc3VsdCgpKTsKICAgICBWYXJhcmdzT3A6OmVtaXQodGhpcywgZHN0LCBmdW5jLCB0aGlz
UmVnaXN0ZXIsIGFyZ3VtZW50cyA/IGFyZ3VtZW50cyA6IFZpcnR1YWxSZWdpc3RlcigwKSwgZmly
c3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBpZiAoVmFyYXJnc09wOjpv
cGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1ZmZlZjBlZjI2Y2I1MWU2Zjku
LjQyZGI5N2Q2NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2NTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
QEAgLTEwMDcsNiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3Vs
ZEVtaXRDb250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVHZW5l
cmF0aW9uTW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNvbnRyb2xGbG93UHJvZmls
ZXIpOyB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAgICB2b2lkIHNldFVzZXND
aGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KIAogICAg
ICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPnBhcnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAppbmRleCAzNTYyMGExMTE2MTFjNWUwYjgxMDFjZDQ1
NTRjMDZiYzgwMzAzNzgwLi5mODE5YjEyM2Q0ZDg5YmEwNTk5MDhhYWFkYzUwZjYyOWRiM2U0OTI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVy
SUQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQu
aApAQCAtNjksMTIgKzY5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHNldEluZGV4KGludCBpbmRleCkKKyAgICAgICAgdm9pZCBzZXRJ
bmRleChWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpCiAgICAgICAgIHsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgICAgICBtX2RpZFNldEluZGV4ID0gdHJ1ZTsKICNlbmRpZgotICAgICAgICAgICAgbV92
aXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpOworICAgICAgICAgICAgbV92
aXJ0dWFsUmVnaXN0ZXIgPSBpbmRleDsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0VGVt
cG9yYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNw
cAppbmRleCBiODNmZWUwZDNjMDlkMTQ5N2FhN2VhMWRlM2UwNDkwNjJmMjI2YzE0Li5lNjQwNzFi
MWFhMGUzNDg5NDQzNDM5ZmYyOGZjYTI1MWI2MmI5NjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCkBAIC00MCw2ICs0MCwxNCBAQCB2b2lkIEFi
c3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAg
ICBvdXQucHJpbnQodmFsdWUoKSk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpk
dW1wQXNPcGVyYW5kKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQo
T3BlcmFuZDo6ZnJvbUJpdHModmFsdWUoKSkpOworfQorCiB2b2lkIEFic3RyYWN0SGVhcDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChraW5kKCkpOwpAQCAt
NDksNiArNTcsMTMgQEAgdm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKICAgICAgICAgb3V0LnByaW50KCIoIiwgRE9NSklUOjpIZWFwUmFuZ2U6OmZyb21SYXco
cGF5bG9hZCgpLnZhbHVlMzIoKSksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAg
aWYgKGtpbmQoKSA9PSBTdGFjaykgeworICAgICAgICBvdXQucHJpbnQoIigiKTsKKyAgICAgICAg
cGF5bG9hZCgpLmR1bXBBc09wZXJhbmQob3V0KTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBvdXQucHJpbnQoIigiLCBwYXlsb2FkKCksICIp
Iik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCmlu
ZGV4IGJmOTkzNzc5NzA0NzAyZDhkNWIyMGI2YzJmNmY3Mzk1YWZlNmI4NjguLjNjNGNlM2Q1ZDAy
ZGMzYTgxZjNhYTQyNGNmYzNmZDFjNDQ3YzUyOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShERkdf
SklUKQogCiAjaW5jbHVkZSAiRE9NSklUSGVhcFJhbmdlLmgiCisjaW5jbHVkZSAiT3BlcmFuZHNJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTEyMywxMCArMTI0LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbV92YWx1ZShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXIpKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisKKyAgICAgICAgUGF5bG9hZChPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCi0gICAgICAgICAgICAsIG1fdmFs
dWUob3BlcmFuZC5vZmZzZXQoKSkKKyAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLmFzQml0
cygpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICAgICAgOiBQYXlsb2FkKE9wZXJhbmQob3BlcmFuZCkpCiAg
ICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4Myw2ICsxODksNyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgICAgICB2b2lkIGR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2lzVG9wOwpAQCAtMjA0LDYgKzIx
MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kICE9IEludmFsaWRBYnN0
cmFjdEhlYXAgJiYga2luZCAhPSBXb3JsZCAmJiBraW5kICE9IEhlYXAgJiYga2luZCAhPSBTaWRl
U3RhdGUpOwogICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKGtpbmQsIHBheWxvYWQpOworICAgICAg
ICBBU1NFUlQodGhpcy0+a2luZCgpID09IGtpbmQgJiYgdGhpcy0+cGF5bG9hZCgpID09IHBheWxv
YWQpOwogICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQpAQCAtMjE5LDYgKzIyNywxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChr
aW5kKCkgIT0gV29ybGQgJiYga2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOwogICAgICAg
ICByZXR1cm4gcGF5bG9hZEltcGwoKTsKICAgICB9CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2sgJiYgIXBheWxvYWQoKS5p
c1RvcCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OmZyb21CaXRzKHBheWxvYWQoKS52YWx1
ZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwIHN1cGVydHlwZSgpIGNvbnN0CiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCmluZGV4IDY0YWNiNTQwZDQwYWUxNzk4ZjdjMjIzNmQ4MWRm
ZTFjODQwOGQ1MzAuLjVkOWUxN2M5MGEyYzViNTE4MmIzNjU2MTI4NzYxZDg1MzcxODQ1NzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTM4MSw3ICszODEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDogewogICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUg
dmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpOwog
ICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNr
ZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVG
aWx0ZXJGb3IodmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICBp
ZiAodmFsdWUudmFsdWUoKSkKQEAgLTM5Miw3ICszOTIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZh
bHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAg
Ly8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFkeSBiZSBjaGVja2VkLgogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9y
KGRhdGEtPmZvcm1hdCkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC00MDIsMTIg
KzQwMiwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBTZXRMb2NhbDogewotICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
Pm9wZXJhbmQoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIG1fc3RhdGUub3Bl
cmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
b3BlcmFuZCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNl
dC4gU2V0QXJndW1lbnREZWZpbml0ZWx5L1NldEFyZ3VtZW50TWF5YmUgbWVhbnMKICAgICAgICAg
Ly8gdGhhdCBzb21lb25lIHNldCB0aGUgYXJndW1lbnQgdmFsdWVzIG91dC1vZi1iYW5kLCBhbmQg
Y3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8gYQogICAgICAgICAvLyBub24t
Y2xlYXIgdmFsdWUuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEluaXRpYWxp
emVFbnRyeXBvaW50QXJndW1lbnRzOiB7CkBAIC00NTgsNiArNDU4LDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDogeworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAvLyBGSVhN
RTogRm9yd2FyZFZhcmFyZ3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3VudCBiZWNvbWVzIGtub3du
LCBhbmQgaWYgaXQgZG9lcywgaXQgc2hvdWxkIHR1cm4KQEAgLTQ3Niw3ICs0ODIsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmNvdW50
KS5zZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS0+bGltaXQgLSAxOyBpLS07KQotICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgIG1fc3Rh
dGUub3BlcmFuZChkYXRhLT5zdGFydCArIGkpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMjM1OCw3ICsyMzY0LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkK
ICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXg7CiAgICAgICAgICAgICBpZiAoYXJn
dW1lbnRJbmRleENoZWNrZWQuc2FmZUdldChhcmd1bWVudEluZGV4KSAhPSBDaGVja2VkU3RhdGU6
OkRpZE92ZXJmbG93KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudEluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0Rm9yTm9kZShub2RlLCBtX3N0YXRlLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpICsg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCmluZGV4IGQ3MzI0N2I5M2M1
ZGM3ODZiNjE3YWE1YWFkYzJiMGY2MTUyODZiNWYuLjg5YzA4ZmEwODBjZWEzMmZkOWM1OTFmMzBm
MWU3ZGQ0NmYxZDEyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZXNbaV0t
PmZpbmQoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUt
PmxvY2FsKCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFu
ZCgpOwogCiAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAi
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxp
bWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGFmMmVkYTRhZDg4ZTliOTdhYWQ1ZjRmOTM5MjM3
NjIxOTUyYWVmODQuLjE1NTE4NmQwYmY4MjI1ZjE5MTU1ZmM4MzNiMzMwMDBhN2Y1ZDk5ZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlLmNwcApAQCAtMzU4LDkgKzM1OCwxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5n
dGg6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2FzZSBM
b2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVh
ZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9w
KCkgPT0gTmV3QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0g
TmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gU3By
ZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCksIG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTQ5MywxMCArNDk2LDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxv
YWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IGhlYXAub3BlcmFuZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIHJlZ2lzdGVyIG1heSBub3QgcG9pbnQgdG8gYW4gYXJndW1lbnQgb3IgbG9jYWwsIGZv
ciBleGFtcGxlIGlmIHdlIGFyZSBsb29raW5nIGF0IFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNIZWFkZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKHJlZykg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVyYW5kLmlzSGVhZGVyKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFu
ZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAg
ICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgfQpAQCAtNTYwLDE2ICs1NjMs
MTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJl
ZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2Nr
IHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2su
b3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJl
cmVkQnlCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtIDE7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSk7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2Ji
ZXJpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhl
YXAgaGVhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAu
a2luZCgpID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUz
MigpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04MDYsNyArODA5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBzYWZlVG9HZXRTdGFjayA9IGluZGV4ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhZmVUb0dldFN0YWNrICY9IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVUb0dl
dFN0YWNrICY9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpIC0gMTsKQEAgLTg0
NSw5ICs4NDgsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBWYXJh
cmdzTGVuZ3RoIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhpdE9LLgorICAgICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbi53aXRo
RXhpdE9LKHRydWUpOworCisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRl
bnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBj
YW5kaWRhdGUsIG5vZGVJbmRleCwgb3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRp
ZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
Y2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtODYyLDEwICs4
NzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5F
eGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNv
dW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFy
Z3NEYXRhLT5jb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSks
IEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCksIEVkZ2UoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXNOb2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNw
ZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCkBAIC04NzQsMTQgKzg5MSwx
NSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsm
XSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUlu
ZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNo
ZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZy5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRh
a2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0
KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0
KCkpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJl
ZyksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKQEAgLTkzNSw3
ICs5NTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5k
aWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVBcmd1bWVudENvdW50ID49IG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTk4Myw3ICsxMDAx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBj
YW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9hZEluZGV4IDwgZnJh
bWVBcmd1bWVudENvdW50OyArK2xvYWRJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7
CkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiB2YXJh
cmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwpAQCAtMTAzMCw3ICsx
MDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0
YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2
YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJnc0RhdGEtPmxpbWl0LCB2YXJhcmdz
RGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXggNjI2MTEyM2NiZmVjM2ViYTE5NWQw
OWI5MzEwMjZmMjZjNzI1ODQ3Ni4uYThkMzg0NjVjZTQ4YTlkOGY1NDIwMGJjNzQ5NmNiNzRhZThk
NjZkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNV
dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVy
YW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiAocmVnLmlz
QXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCByZWcuaXNIZWFkZXIoKTsKLSAgICAK
KwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgJiYgcmVn
ID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NiwxOSArNTAsMTkg
QEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAg
ICAgLy8gV2UgZG8gbm90IGluY2x1ZGUgZml4dXBzIGhlcmUgc2luY2UgaXQgaXMgbm90IHJlbGF0
ZWQgdG8gfGFyZ3VtZW50c3wsIHJlc3QgcGFyYW1ldGVycywgYW5kIHZhcmFyZ3MuCi0gICAgdW5z
aWduZWQgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDE7CisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRTdGFydCA9CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArIENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXQoMCk7CiAgICAgcmV0dXJuIHJlZyA+PSBhcmd1bWVudFN0YXJ0ICYmIHJlZyA8IGFyZ3Vt
ZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5kIG9wZXJhbmQpCiB7Ci0g
ICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIHJlZyk7CisgICAgcmV0dXJuIGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCks
IG9wZXJhbmQpOwogfQogCiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
Ci0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbikKKyAgICBJbnNlcnRpb25TZXQmIGluc2Vy
dGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4g
b3JpZ2luLCBib29sIGFkZFRoaXMpCiB7CiAgICAgR3JhcGgmIGdyYXBoID0gaW5zZXJ0aW9uU2V0
LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3MywxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1
ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50
cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cwogICAgICAgICB8
fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgotICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwKKyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21T
cHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSk7CiAKKyAgICBpZiAoYXJndW1lbnRzLT5v
cCgpID09IFBoYW50b21TcHJlYWQpCisgICAgICAgIHJldHVybiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBhcmd1bWVudHMtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMpOworCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9m
Tm9uU3ByZWFkQXJndW1lbnRzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJl
YWRBcmd1bWVudHMgPSBhZGRUaGlzOwogICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFy
Z3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAgICAgIE5vZGUqIGN1cnJlbnRTdW0gPSBudWxscHRy
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzLT5udW1DaGlsZHJl
bigpOyBpKyspIHsKQEAgLTEwMyw3ICsxMTAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVm
ZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAg
ICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJ
bmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2lu
LCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4o
KS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CiAgICAgfQogICAgIAogICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CkBAIC0xMTMsNyArMTIwLDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50
c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50
cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAhYWRkVGhpczsKICAgICAgICAgaWYgKGFy
Z3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICBhcmd1
bWVudHNTaXplIC09IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAgICAgICBlbHNlCkBAIC0x
MjksMTQgKzEzNiwxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
CiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJ
bmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMy
VXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAg
ICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1i
ZXIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgKyAhYWRkVGhpcyksIEludDMyVXNlKSk7CiAKICAg
ICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAgICAgICAgLy8gVGhlIGFib3ZlIHN1
YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVtYmVyIGlz
IG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQgaGVyZS4KICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHks
IEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAgICAgICAgRWRnZShyZXN1bHQsIEludDMyVXNlKSwg
Ci0gICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4
LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhZGRU
aGlzKSwgSW50MzJVc2UpKTsKICAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHQoTm9kZVJlc3VsdElu
dDMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzVXRpbGl0aWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1V0aWxpdGllcy5oCmluZGV4IDlhNzcxOGZiYmY1NDdiMmY2YWUxMDFkYWYzNzRhMDZhMmMz
ZGRmMTIuLjc0ZjkzOWU4MTYyMmQ0MDI0NmUyMzU1ZDUwOThhOWVkMmE4NTIxMGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaApAQCAt
MzEsMTEgKzMxLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9v
bCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdp
c3Rlcik7Ci1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBW
aXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNh
bGxGcmFtZSosIE9wZXJhbmQpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUq
IGNhbmRpZGF0ZSwgT3BlcmFuZCk7CiAKIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJh
eUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5v
ZGVJbmRleCwgTm9kZU9yaWdpbik7CisgICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRz
LCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIGJvb2wgYWRkVGhpcyA9IGZhbHNlKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCmluZGV4IDk2ZGFjMzlhNDQ0ZmZiZDNj
ZTU0M2Y1N2YzNmNkNjFkZWNjMjhiZDQuLjg5N2M3MGRmZmJhMDY2YjY0OWNhZmRjYzFlZjA5MzM3
NjgxMDRkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5oCkBAIC0xMzksOCArMTM5LDcgQEAgcHVibGljOgogICAgIAogICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVz
QXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fs
cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2Fscygp
OyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gbV9i
bG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KLSAgICBBYnN0cmFjdFZhbHVl
JiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1
ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQo
T3BlcmFuZCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChv
cGVyYW5kKTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4KTsgfQogICAgIEFic3RyYWN0VmFs
dWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
LmFyZ3VtZW50KGluZGV4KTsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCmluZGV4IDc3NDNlN2QwMWYxY2FkNzgxZDg0YWIwM2Qz
YzA5Yzc3ZjgwMjliYTUuLmMyYjU1YWE1YzRhNTIyOWIxYjFhNDQzMWMxODdhZGVmNDZjM2RiMjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5j
cHAKQEAgLTY1LDEwICs2NSwxMCBAQCB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVIZWFwKCkK
IAogdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIENv
ZGVPcmlnaW4gd2hlcmUpCiB7Ci0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5
KG1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksIG1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCks
IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CisgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5
PiBsb2NhbHNDb3B5KE9wZXJhbmRzTGlrZSwgbV9sb2NhbHMsIEF2YWlsYWJpbGl0eTo6dW5hdmFp
bGFibGUoKSk7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIHdoZXJl
LAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVy
YW5kIHJlZykgewogICAgICAgICAgICAgbG9jYWxzQ29weS5vcGVyYW5kKHJlZykgPSBtX2xvY2Fs
cy5vcGVyYW5kKHJlZyk7CiAgICAgICAgIH0pOwogICAgIG1fbG9jYWxzID0gV1RGTW92ZShsb2Nh
bHNDb3B5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5TWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5oCmluZGV4IDUzNTUyNTYwMjNkZGNmMjgwZGM1OTViMzNhN2M3ZmRlYzU0ZTY0ZjAuLjgwYzEy
YmYxODAyNWE1NjEwNTk2ZGEyNGUyM2MwMjVmMmFiZTRmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaApAQCAtNjYsOSArNjYsOSBAQCBzdHJ1
Y3QgQXZhaWxhYmlsaXR5TWFwIHsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SGFzRnVuY3RvciwgdHlwZW5hbWUgQWRkRnVuY3Rvcj4KLSAgICB2b2lkIGNsb3NlU3RhcnRpbmdX
aXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25z
dCBBZGRGdW5jdG9yJiBhZGQpCisgICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKE9wZXJh
bmQgb3AsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQogICAg
IHsKLSAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQo
cmVnKTsKKyAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJh
bmQob3ApOwogICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAKaW5kZXggMDU4NDQ5NjNlNjEwZWQyOTNjNTYwZmFiZmQzODlhOWYzOTc4MGEwNy4u
ZTIxYjI4YjUyMjFmMTU2MThiODA2NGEzYTdiMmQ3ODY5MTM4NDIxZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCkBAIC0zMiw3ICszMiw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotQmFzaWNCbG9jazo6QmFzaWNCbG9jayhC
eXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKK0Jhc2ljQmxvY2s6OkJhc2ljQmxv
Y2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVu
c2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywgZmxvYXQgZXhlY3V0aW9uQ291bnQp
CiAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCiAgICAgLCBpbmRleChOb0Jsb2Nr
KQogICAgICwgY2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkKFN0cnVjdHVyZXNBcmVXYXRj
aGVkKQpAQCAtNDgsMTEgKzQ4LDExIEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnCiAgICAgLCBp
c0xpbmtlZChmYWxzZSkKICNlbmRpZgogICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCi0gICAgLCB2
YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YXJpYWJsZXNB
dFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJn
dW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIHZhcmlhYmxlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIHZhcmlhYmxlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0SGVh
ZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0VGFpbChu
dW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7
CiB9CkBAIC03MCw2ICs3MCwxNSBAQCB2b2lkIEJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyh1bnNp
Z25lZCBuZXdOdW1Mb2NhbHMpCiAgICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVu
c3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7CiB9CiAK
K3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQoreworICAg
IHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhcmlhYmxlc0F0
VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVUbXBz
KG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwor
ICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMs
IEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6cmVwbGFj
ZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBOb2RlQW5kSW5kZXgg
cmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5oCmluZGV4IGI1YWRmMDkxMmQwOTQyYmU5N2U5ODdjZGM4OWY0YWUzNGQwYzBiYzgu
LjFkZDM4Yzc5MDhkYzZmNGQxYjA4NWJjOGUwNjI1NDgwZGI0NDk3Y2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00NiwxMSArNDYsMTIgQEAgdHlwZWRl
ZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDog
UmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKLSAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bUxvY2FscywKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBu
dW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywKICAgICAg
ICAgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwogICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAgCiAgICAg
dm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKTsKKyAgICB2b2lkIGVuc3Vy
ZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcyk7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuICFzaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja0luc2VydGlvblNldC5jcHAKaW5kZXggNzUwOGUyMTlkYzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4
OTk5ZTA0NjBmOS4uMDA4Y2Y1MjI2OTU3YzlhODM1ODVjNWU1ZTJjMTI1ZjJmOGNlNGIyZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5j
cHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVf
dCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+JiYgYmxvY2spCiAKIEJhc2ljQmxvY2sqIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCkKIHsK
LSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0
ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9j
YWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRv
cHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCksIGV4ZWN1dGlvbkNvdW50KSk7CiAgICAgYmxvY2stPmlz
UmVhY2hhYmxlID0gdHJ1ZTsKICAgICBhdXRvKiByZXN1bHQgPSBibG9jay5wdHIoKTsKICAgICBp
bnNlcnQoaW5kZXgsIFdURk1vdmUoYmxvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggN2U0YTlmZTYyMzNiNzQ0OWU4Mjg2NjJj
MWU0OTlkYzllODQ0MDhiNy4uMDEzNDIxMjc0NzYwMTEyMzRjMTRhMTFhZmFjZmM0MjUyOTE1OTg5
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKQEAgLTExMSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb25zdGFudE9uZShn
cmFwaC5mcmVlemUoanNOdW1iZXIoMSkpKQogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKG1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKQorICAgICAgICAsIG1fbnVtVG1wcyhtX2NvZGVCbG9jay0+
bnVtVG1wcygpKQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251
bVBhc3NlZFZhckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9wKDApCkBAIC0xMzks
NiArMTQwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAKKyAgICB2b2lkIGVuc3VyZVRtcHModW5z
aWduZWQgbmV3TnVtVG1wcykKKyAgICB7CisgICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVU
bXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIs
IG5ld051bVRtcHMsICJcbiIpOworICAgICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQor
ICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAg
ICB9CisKKwogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBA
IC0yNzAsMjUgKzI4MiwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxv
Y2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlu
a0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lk
IHByb2dyZXNzQ2hlY2twb2ludCgpCisgICAgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5
dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIG1fY3VycmVudEluZGV4LmNoZWNr
cG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCdzIGFnYWluIE9LIHRv
IE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgo
RXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOworICAgIH0KKworICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFu
ZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAg
ICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlz
Q29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFu
ZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVjdChPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAg
ICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIo
KS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAg
ICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1
bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpKTsKIAotICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAg
IHJldHVybiBnZXRMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAo
b3BlcmFuZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQpAQCAtMjk4LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRT
aXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXgg
Pj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0pIHsKICAgICAgICAgICAg
ICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jazsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENv
bnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kKTsKKyAgICAg
ICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0
aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50
cy5zaXplKCk7ICsraSkKQEAgLTM1OCw5ICszNzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
aW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgIElt
bWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsKLSAgICBOb2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisK
KyAgICBOb2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKIAogICAgICAgICAvLyBXZSBjYW4ndCBl
eGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAg
ICAgIG1fZXhpdE9LID0gZmFsc2U7CkBAIC0zNzQsNyArMzk1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUodGhpcyk7CiAgICAgfQotICAgIAor
CiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQpAQCAtMzkyLDE4
ICs0MTMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgo
KSA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkp
OworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgs
IG5vZGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBt
X2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tlciwga2V5KTsK
ICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7
CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50
aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxl
LgotICAgIE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUq
IGdldExvY2FsT3JUbXAoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQg
bG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLQotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgIEFTU0VSVChv
cGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOworICAgICAgICBOb2RlKiYgbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2
YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3Jl
YXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtNDI4LDIw
ICs0NDgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkp
OwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9
IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRMb2NhbChj
b25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0
TG9jYWxPclRtcChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVy
YW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAg
ICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRp
Y09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3Bl
cmFuZC50b0xvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlh
dGVOYWtlZFNldCkgewotICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUo
KSkgPj0gbV9udW1UbXBzKSB7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50IG51bWJl
ciBvZiB0bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1fcHJvZmls
ZWRCbG9jay0+bnVtVG1wcygpLCAiIHRtcHMuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQgJiYgIW9w
ZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1
bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChyZWcpOwogICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qo
b3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2dyYXBo
Lm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVn
aXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVy
KCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAgICAg
ICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUxLDcgKzQ3Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVja0FycmF5SG9pc3RpbmdG
YWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgQmFkSW5kZXhpbmdUeXBlKSk7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KIApAQCAtNDgzLDIwICs1MDksMjEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwogICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29k
ZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldEFyZ3VtZW50
KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBTZXRG
b3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4s
IHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQu
dG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSByZWcudG9Bcmd1bWVu
dCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAg
IAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEocmVnKTsKIAogICAgICAg
ICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9yICd0aGlzJy4gSWYgJ3RoaXMn
IGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFrZSBzdXJlIHRoYXQgaXQncyBu
ZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwgbV9ncmFwaC5uZWVkc0ZsdXNo
ZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0
KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQpOworICAgICAgICAgICAgICAg
IGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghYXJn
dW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25z
dHJ1Y3QpCkBAIC01MzIsMTQgKzU1OSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW50IGFy
Z3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkgLSBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhY2st
Pm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAgQXJndW1lbnRQ
b3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChvcGVyYW5kLnRvQXJndW1l
bnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJh
bmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGRG
bHVzaERpcmVjdEZ1bmM+CkBAIC01NTAsOSArNTc5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1Z2dlckVuYWJsZWQoKSk7CiAgICAgICAgICAgICBudW1B
cmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7CiAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAg
ICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGlu
ZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAg
ICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICAgICAgYWRkRmx1
c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAg
ICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxp
bmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGlubGluZUNhbGxGcmFtZSktPm51bVBhcmFtZXRlcnMoKTsKIApAQCAtNTc1LDYgKzYwNCw3
IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Z3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAg
ICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gbV9ncmFwaC5saXZlbmVz
c0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQg
dG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNhdXNlIHRtcHMgYXJlIG5vdCByZXF1aXJlZCB0byBiZSBm
bHVzaGVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlbmVz
c0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgbV9n
cmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludChvcmlnaW4sIGlzQ2FsbGVy
T3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9jYWxdKQpAQCAtNTg0LDI3ICs2MTQsMjcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2goVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAg
ICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAg
ICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwog
ICAgIH0KIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFy
Z3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBmbHVzaERpcmVjdChP
cGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAg
ewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPEZsdXNoPihvcGVyYW5kLCBhcmd1bWVu
dFBvc2l0aW9uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZT4KLSAg
ICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFy
Z3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBhZGRGbHVzaE9yUGhh
bnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAg
ICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
LmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiYg
bm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAg
IApAQCAtNjE0LDI2ICs2NDQsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9
IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAg
ICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFk
ZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChP
cGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPFBo
YW50b21Mb2NhbD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAg
IH0KIAogICAgIHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRyeSogaW5saW5lU3RhY2tFbnRyeSkK
ICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFt
ZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKKyAgICAgICAg
YXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVy
YW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEltcGwoaW5saW5l
U3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZsdXNoRGlyZWN0KTsKICAgICB9CiAK
ICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVz
aERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBm
bHVzaERpcmVjdChyZWcpOyB9OwotICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9
IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBwaGFudG9tTG9j
YWxEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5s
aW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9
OworICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZy
YW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2NhbERpcmVjdChvcGVyYW5kKTsgfTsK
ICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVudENvZGVPcmlnaW4oKSwgYWRkRmx1
c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAgICAgfQogCkBAIC03NjEsNiArNzkw
LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwg
RWRnZShjaGlsZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9
CisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kLCBOb2Rl
KiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQob3AgPT0gTW92SGludCk7CisgICAgICAg
IHJldHVybiBhZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFuZC5raW5kKCkpLCBPcEluZm8ob3Bl
cmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2Rl
VHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIEVkZ2UgY2hpbGQxLCBFZGdlIGNo
aWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCkBAIC0xMDkxLDggKzExMjUsMTAgQEAgcHJpdmF0
ZToKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rp
b24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7Ci0gICAgLy8gVGhlIG51bWJlciBvZiBs
b2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBpbiB0aGUgZnVuY3Rpb24uCisgICAgLy8g
VGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBieSB0aGUgYnl0
ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUxvY2FsczsKKyAgICAv
LyBUaGUgbWF4IG51bWJlciBvZiB0ZW1wcyB1c2VkIGZvciBmb3J3YXJkaW5nIGRhdGEgdG8gYW4g
T1NSIGV4aXQgdG8gY2hlY2twb2ludC4KKyAgICB1bnNpZ25lZCBtX251bVRtcHM7CiAgICAgLy8g
VGhlIG51bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3
ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGFyZ3VtZW50cyB0byBvdXRnb2luZyBj
YWxscyBmcm9tIHRoaXMgZnJhbWUuIFRoaXMKICAgICAvLyBudW1iZXIgaW5jbHVkZXMgdGhlIENh
bGxGcmFtZSBzbG90cyB0aGF0IHdlIGluaXRpYWxpemUgZm9yIHRoZSBjYWxsZWUKQEAgLTExNTks
MTQgKzExOTUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIH5JbmxpbmVTdGFja0Vu
dHJ5KCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAorICAgICAgICBPcGVyYW5kIHJlbWFwT3BlcmFu
ZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9p
bmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQ7CisKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJh
bmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9m
ZnNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0
YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlz
Q29uc3RhbnQoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldDsKICAgICAgICAgfQogICAgIH07CiAgICAgCkBAIC0xMTc1LDEzICsxMjE0LDgg
QEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayBtX2ljQ29udGV4dFN0YWNrOwog
ICAgIAogICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgewotICAgICAgICBDb2RlT3JpZ2luIG1f
b3JpZ2luOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwotICAgICAgICBOb2Rl
KiBtX3ZhbHVlOwotICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKLSAgICAgICAgCiAgICAgICAg
IERlbGF5ZWRTZXRMb2NhbCgpIHsgfQotICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29k
ZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNl
dE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4m
IG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQog
ICAgICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQpAQCAtMTE5NCw4ICsxMjI4LDEz
IEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX29wZXJhbmQuaXNBcmd1
bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldEFyZ3VtZW50KG1fb3Jp
Z2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7Ci0gICAgICAgICAgICByZXR1cm4g
cGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUp
OworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWxPclRtcChtX29yaWdpbiwgbV9v
cGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwogICAgICAgICB9CisKKyAgICAgICAgQ29kZU9y
aWdpbiBtX29yaWdpbjsKKyAgICAgICAgT3BlcmFuZCBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUq
IG1fdmFsdWUgeyBudWxscHRyIH07CisgICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwogICAgIH07
CiAgICAgCiAgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRMb2NhbFF1ZXVlOwpA
QCAtMTIwOCw3ICsxMjQ3LDcgQEAgcHJpdmF0ZToKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2Vy
OjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7
CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9
IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywg
bV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigq
bmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxz
LCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigp
OwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4g
aW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tU
b3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCkpCkBAIC0xMjIwLDcgKzEyNTksNyBAQCBC
YXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxs
b2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0g
YWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVudHMs
IG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYo
Km5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9j
YWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0
cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVy
biBibG9ja1B0cjsKQEAgLTE0MjMsNyArMTQ2Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBj
CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gc3RhdGljX2Nh
c3Q8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgSW5saW5lQ2Fs
bEZyYW1lIGlzIFZhcmFyZ3MsIHdlIGRvIG5vdCBrbm93IGhvdyBtYW55IGFyZ3VtZW50cyBhcmUg
YWN0dWFsbHkgZmlsbGVkIGJ5IExvYWRWYXJhcmdzLiBWYXJhcmdzIElubGluZUNhbGxGcmFtZSdz
Ci0gICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51
bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IExvYWRWYXJhcmdzLiBXZSAi
Y29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKKyAgICAgICAgICAgIC8v
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlh
bGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgeGtMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0
aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCiAgICAgICAgICAgICAvLyBhIGdvb2QgdGFyZ2V0
IHRvIGp1bXAgaW50by4KICAgICAgICAgICAgIGlmIChjYWxsRnJhbWUtPmlzVmFyYXJncygpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OSw3ICsxNDg4LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUs
IENhbGxWYXJpYW50IGMKICAgICAgICAgLy8gV2UgbXVzdCBzZXQgdGhlIGNhbGxlZSB0byB0aGUg
cmlnaHQgdmFsdWUKICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lKSB7
CiAgICAgICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpCi0gICAgICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIGNhbGxUYXJnZXROb2Rl
LCBOb3JtYWxTZXQpOworICAgICAgICAgICAgICAgIHNldERpcmVjdChyZW1hcE9wZXJhbmQoc3Rh
Y2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGNhbGxU
YXJnZXROb2RlLCBOb3JtYWxTZXQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAKQEAgLTE2MTQsMTYgKzE2NTMsMTgg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFk
ZGluZ1Nsb3RzICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rl
ck9mZnNldEFmdGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5n
U2xvdHM7CiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4
dXApKS5vZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9w
ZXJhbmQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4
dXApKS52YWx1ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAog
ICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9M
b2NhbCgpICsgMSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsg
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcygobV9p
bmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+bnVtVG1wcygpICsgY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFy
Z3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7
CiAKICAgICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNh
bGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzYsNyArMTY3Nyw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1f
aW5saW5lU3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRo
aXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAg
ICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVD
YWxsRnJhbWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhl
IGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZElu
ZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBAIC0xNjcxLDkgKzE3MTIsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0
aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiBy
ZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBN
b3ZIaW50cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0
IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dl
dCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50
VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldCksIHZhbHVlKTsKICAgICAg
ICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENv
ZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxNywxNiArMTc1OCwxNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBkbyBub3QgbmVl
ZCB0byBtb3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCAh
PSByZWdpc3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVy
T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1l
bnRUb0dldCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQg
PSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhh
cmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIE9wZXJhbmQg
YXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92
SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9z
ZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigp
LCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5
Rml4dXBDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSks
IHVuZGVmaW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBt
X3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGFyZ3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAg
ICAgIH0KIApAQCAtMTg5MywxMiArMTkzNCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rlcgog
ICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJnZXROb2RlLCB0
aGlzQXJndW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZz
ZXQgPQotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgIG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFs
UmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgCiAg
ICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCkpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0
KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgICAg
ICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAx
KTsKQEAgLTE5MDYsMTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFy
YXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAg
ICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OwogICAgICAgICBkYXRhLT5saW1pdCA9
IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBkYXRhLT5tYW5kYXRvcnlN
aW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsT3Ag
PT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2Fy
ZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7
CisKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChHZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICBlbHNlIGlmIChpbmxpbmVD
YWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9
IGdldERpcmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lKCksIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXpl
KGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSks
IGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTm9kZSogYXJn
dW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJnQ291
bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3BlcmFuZChUbXBPcGVyYW5k
LCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICAgICAgc2V0RGlyZWN0KGFyZ0Nv
dW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRz
KSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQoKTsKKworICAgICAgICAgICAgYWRk
VG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXRMb2NhbE9yVG1wKGFyZ0NvdW50
VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTG9hZFZh
cmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVwIGFsaXZlIGNhbGxUYXJn
ZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3VtZW50c0FyZ3VtZW50IGZv
ciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQgYSBQaGFudG9tIGZvcgpA
QCAtMTkyMiwxNCArMTk3NiwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdz
SW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAv
LyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3Igbm90IGlu
c2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNTQS4KICAgICAgICAgCi0g
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3Vu
dFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNvdW50KTsKICAgICAgICAg
Ly8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2UgdGhlIGNvdW50IHRvIGJl
IGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAgLy8gbWF0dGVyIHZlcnkg
bXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBhbmQgRmx1c2hl
cyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3RseSBqdXN0IGEgZm9ybWFs
aXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAg
ICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50RGVmaW5p
dGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3Vt
ZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9w
ZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudENvdW50KTsKICAgICAg
ICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlz
QXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVNldEFy
Z3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rl
cgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1
bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRhdG9yeU1pbmltdW0gPyBT
ZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8odmFyaWFibGUp
KTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHNl
dEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRzOwogICAgICAgICB9CiAg
ICAgfTsKQEAgLTIwNTMsNyArMjEwNyw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0
aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAvLyB5ZXQuCiAg
ICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0ZXJPZmZzZXQpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZFUkJPU0VfTE9HKCJDYWxs
ZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAgICBzZXREaXJlY3QoY2Fs
bGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKIApAQCAtNTEw
Miw3ICs1MTU2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICAgICAg
ICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cC5vZmZz
ZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGgu
ZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChi
eXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpzQ29uc3RhbnQoanNOdW1i
ZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfcmVnZXhwKTsKICAgICAg
ICAgfQpAQCAtNTExMiw3ICs1MTY2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICBOb2RlKiBsZW5n
dGg7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3Ro
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3RMZW5ndGg7CiAgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0xlbmd0aCA8PSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXApCiAgICAgICAg
ICAgICAgICAgICAgIHJlc3RMZW5ndGggPSBqc051bWJlcigwKTsKQEAgLTYxNzgsNyArNjIzMiw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+c2l6ZSgpIHx8IChtX2dy
YXBoLmNvbXBpbGF0aW9uKCkgJiYgbV9jdXJyZW50QmxvY2stPnNpemUoKSA9PSAxICYmIG1fY3Vy
cmVudEJsb2NrLT5hdCgwKS0+b3AoKSA9PSBDb3VudEV4ZWN1dGlvbikpOwogCi0gICAgICAgICAg
ICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
YnVmZmVyOwogCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2NhdGNoKTsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5v
dGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KQEAgLTYxOTUs
NyArNjI0OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAKLSAgICAg
ICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9j
YWwoKSkKQEAgLTYyMjMsMTQgKzYyNzcsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7IAogCiAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscyA9IDA7Ci0gICAgICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAg
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChw
cm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQVNTRVJU
KG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGFkZFRv
R3JhcGgoRXh0cmFjdENhdGNoTG9jYWwsIE9wSW5mbyhudW1iZXJPZkxvY2FscyksIE9wSW5mbyhs
b2NhbFByZWRpY3Rpb25zW251bWJlck9mTG9jYWxzXSkpOwogICAgICAgICAgICAgICAgICsrbnVt
YmVyT2ZMb2NhbHM7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8o
cHJvZmlsZS5tX29wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKICAgICAgICAgICAgICAgICBsb2NhbHNU
b1NldC51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIob3BlcmFuZCwgdmFsdWUpKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG51bWJlck9mTG9jYWxzKQpAQCAtNjM1OCw3
ICs2NDEyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7CiAgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0g
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ry
b25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5t
X3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJv
emVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKSk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVl
KTsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVt
cGVkKSB7CkBAIC02ODI2LDggKzY4ODAsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKICAgICAgICAgICAgIEFTU0VSVChi
eXRlY29kZS5tX3N5bWJvbFRhYmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29kZS5tX2luaXRpYWxW
YWx1ZS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxl
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUub2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFs
dWUub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
aW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKSk7CiAgICAgICAg
ICAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAgICAgICAgICAgIE5v
ZGUqIGxleGljYWxFbnZpcm9ubWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJ
bmZvKHN5bWJvbFRhYmxlKSwgT3BJbmZvKGluaXRpYWxWYWx1ZSksIHNjb3BlKTsKICAgICAgICAg
ICAgIHNldChieXRlY29kZS5tX2RzdCwgbGV4aWNhbEVudmlyb25tZW50KTsKQEAgLTY4NTcsNyAr
NjkxMSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICAvLyBsb2FkcyBmcm9tIHRoZSBzY29wZSByZWdpc3RlciBsYXRlciwgYXMg
dGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBERkcgZnJvbSB0cmFja2luZyB0aGUKICAgICAgICAgICAg
IC8vIGJ5dGVjb2RlLWxldmVsIGxpdmVuZXNzIG9mIHRoZSBzY29wZSByZWdpc3Rlci4KICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+
KCk7Ci0gICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgICAg
ICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8
SlNGdW5jdGlvbio+KCptX3ZtKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSB3ZWFrSlNDb25z
dGFudChmdW5jdGlvbi0+c2NvcGUoKSk7CkBAIC03Mjc1LDggKzczMjksMTAgQEAgQnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIC8vIFRo
ZSBvd25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEg
YmFycmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCiAgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNh
bGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2Nh
bGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9jYWxsZXItPm1fY29k
ZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0U3RhY2tP
ZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpZiAoY2FsbGVlKSB7CiAg
ICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkgPSBWYWx1ZVJlY292
ZXJ5Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc2MzgsNyArNzY5NCw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC03NjU4LDI0ICs3NzE0LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzb3ItPnByZWRl
Y2Vzc29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2Vydmlu
Z09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3As
IE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVy
YW5kIGFyZ3VtZW50ID0gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQuaXNBcmd1bWVudCgpICYmICFhcmd1
bWVudC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVj
dG9yPEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRzID0gbV9pbmxpbmVDYWxsRnJhbWVUb0Fy
Z3VtZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0FyZ3VtZW50KCldLT5hZGRWYXJpYWJsZSh2
YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBvcCwgb3Jp
Z2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgRmx1c2gsIG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFBo
YW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRk
UGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaXZl
bmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIFBoYW50b21Mb2NhbCwgb3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIGZsdXNoRm9yVGVy
bWluYWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2Nh
bERpcmVjdCk7CkBAIC03NzQwLDYgKzc3OTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZSgpCiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1l
bnRzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCkpOwogICAgIH0KIAorICAgIG1fZ3JhcGgubV90bXBzID0gbV9udW1UbXBzOwogICAgIG1f
Z3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVy
U2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGQVBoYXNlLmNwcAppbmRleCA4ZTliYjRhY2JlNTUwMmRkYTdiMzc0Nzg0YjVhODVmZmRlNzAz
YmZkLi4zZGM3NTY4ZjFlZTJjNjk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2MjUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTcwLDIyICsxNzAsMjIgQEAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNvbnN0IE9w
ZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9w
bGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG11c3RIYW5k
bGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RI
YW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBP
cHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAoIW5v
ZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIG9wZXJhbmQs
ICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgIFdpZGVuaW5nICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiB3aXRoICIsIHZh
bHVlLnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5n
ICIsIG9wZXJhbmQsICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxvY2stPnZhbHVlc0F0SGVh
ZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0YXJnZXQubWVyZ2VP
U1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVlKCksIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2JjMTZiNjdkNjAyYmE2
NDI2YWYwZjIzODIuLjU3NzBmMDk4OTQyYzg5NmI3YWNmODIzZmNhYjk0NDRhMjI0Y2NlZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWNpYWxDYXNlQXJn
dW1lbnRzKCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5kPigpOwogICAgICAg
ICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAgcHJvcGFnYXRlUGhp
czxUbXBPcGVyYW5kPigpOwogICAgICAgICBjb21wdXRlSXNGbHVzaGVkKCk7CiAgICAgICAgIAog
ICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwpAQCAtMjExLDEwICsyMTIsMjAg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5vZGUqIG5vZGUpCiAg
ICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50
KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBz
d2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1l
bnRPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVu
dE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsT3Bl
cmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiB7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJs
ZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9k
ZVR5cGUsIE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYgKzI0MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIEFTU0VSVChv
dGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0g
b3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgpAQCAtMjcwLDE1ICsyODIsMjUgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3Vt
ZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9t
TG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxl
LT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJhbmQo
KS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsKKyAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3Bl
cmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5k
OiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVU
eXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRv
TG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRt
cE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxG
b3I8bm9kZVR5cGUsIFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFu
ZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9jYWwo
KSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSwgbm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXpl
TG9jYWxzSW5CbG9jaygpCkBAIC0yODksNiArMzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIGNsZWFyVmFyaWFibGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKICAgICAgICAgY2xlYXJW
YXJpYWJsZXM8TG9jYWxPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlhYmxlczxUbXBPcGVy
YW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkgcmVmZXJl
bmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CiAgICAgICAg
IC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQsIGJ1dCBkb2Vzbid0
IGFzc3VtZSB0aGF0IHRoZSByZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJvcGFnYXRlUGhpcygp
CiAgICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sgPSBv
cGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBtX2xv
Y2FsUGhpU3RhY2s7CisgICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFj
ayA9IHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gRW5z
dXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHkuCiAgICAgICAgIG1f
YmxvY2sgPSAwOwpAQCAtNDY2LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9w
ZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBw
aGlTdGFja0ZvcigpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsKLSAgICAgICAg
cmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgewor
ICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsK
KyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAg
ICAgIGNhc2UgVG1wT3BlcmFuZDogcmV0dXJuIG1fdG1wUGhpU3RhY2s7CisgICAgICAgIH0KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21wdXRlSXNGbHVzaGVkKCkKQEAgLTUyMSw2ICs1NDcsNyBAQCBwcml2YXRlOgogICAgIEJh
c2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9hcmd1
bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fbG9jYWxQaGlT
dGFjazsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX3RtcFBoaVN0YWNrOwogICAg
IFZlY3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4IDIzODFjNmI4ZjhmNGJh
NzYzNGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UuLjRjY2UxNzQ4ODNlMjA0MTBkNjIyM2E2ZjQxNzJl
ZGRlNjk4YWFlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
CkBAIC0xNDcsOCArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3Ao
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBoZWFwLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5y
ZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAg
aWYgKGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrU3Rh
Y2tNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE3Miw3ICsxNzEsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChwYWlyLmtleS5oZWFwKCku
a2luZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1
ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhl
YXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVu
ZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBhaXIua2V5KQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTIyNiw4ICsyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQWJzdHJhY3RIZWFwIGFi
c3RyYWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAgICAgICAgICAgIGlmIChhYnN0cmFjdEhl
YXAucGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZChtX2ZhbGxi
YWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAgIEFTU0VSVChhYnN0cmFj
dEhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMy
KCkpOwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
LmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0
SGVhcC5wYXlsb2FkKCkudmFsdWUoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5vZGUsIDB9KTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0OSw4ICsyNDcsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKLSAgICAgICAgICAgIEFTU0VSVChsb2Nh
dGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24uaGVhcCgpLnBheWxvYWQo
KS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAg
ICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0
aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQogICAgICAgICAgICAgICAgICYmIGl0ZXJh
dG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk4LDcgKzI5NSw3IEBAIHByaXZhdGU6CiAgICAgLy8g
YSBkdXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBvbmx5IGxpdmUgaW4gbV9mYWxsYmFja1N0
YWNrTWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5LCBUT1AgYWx3YXlzIGdvZXMgaW50byBt
X2ZhbGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZSB2YWx1ZS4K
LSAgICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERl
ZmF1bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czxpbnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKKyAgICBIYXNoTWFwPGludDY0X3Qs
IHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDY0X3Q+OjpI
YXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2NF90Pj4gbV9hYnN0cmFj
dEhlYXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOwogCiAgICAgTWFwIG1f
aGVhcE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cAppbmRleCBmZDBiNmQ3NGRhNjc3YmM0NTA4Y2FjNDlmYzRlZTFjOThkYTRlN2FkLi40ZDVhMmEw
YWFhMWE3NDNiZmJlNjk0YjQzOThjZmY3ZjViZGYxMDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0zMDYsNiArMzA2LDggQEAgQ2FwYWJp
bGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBv
bGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToK
ICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgor
ICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5l
OgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgogICAgIGNhc2UgaGFu
ZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoK
ICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDg5YmM2NDFmNTI2YmI1M2ZmMDM3ZjczY2Y5
NTBiYWM2NDZkNDk5NTQuLjgyZjNjYTY0MTg0ZjkxOTM2NTAzOWIxMzIyMTdkZDk5ZWE5NzEwNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xMTEsOSAr
MTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3Qg
UmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAvLyBzY2FuIHdvdWxkIHJlYWQu
IFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOyBpbmxp
bmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2Fs
bGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAg
ICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ss
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHNwZWNpZmljYWxseSBhY2NvdW50IHdoaWNoIG5vZGVzIGNhbiByZWFkIGZyb20gdGhlIHNjb3Bl
CkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBj
b25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgd3JpdGUoU2lk
ZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBAIC03NjQsMTIgKzc2NCwxMiBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0
Q2FsbGVlOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVh
cChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0
SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFNldENhbGxlZToKLSAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsK
KyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6IHsKQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgIH0KIAogICAgIGNhc2UgU2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgICAg
ICByZXR1cm47CiAKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CkBAIC03ODgsMzYgKzc4OCw0MyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5s
b2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwg
TGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0
TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3Bl
cmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFw
IGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFi
c3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCk7
CiAgICAgICAgIHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2Ms
IGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ss
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBo
ZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHdy
aXRlKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6
eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgICAgIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICByZWFkKFdvcmxkKTsK
KyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IGRhdGEtPmNvdW50KSk7CisgICAgICAgIHJldHVybjsgIAorICAgIH0KKwogICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKEhlYXApOwog
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
LSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQoKSkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0
aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKQEAgLTgyNiw5ICs4MzMsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVG
dQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGlu
dD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAppbmRleCA5NTg2NmE3
ZjkxYTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0NmMwNTRmMGRmMzNiYTMyZDM5
ZmFmZTAyZGJiZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgc3RhdGljIHZvaWQgYWRk
Qnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmls
aXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICBub2Rl
LT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Cisg
ICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5j
bG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAgIHJlZywKICAgICAgICAgICAg
ICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUwOWY5MzAwMDdlMzU2YWMwNTVl
YTY2YmZlN2FkYi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEzMzJmZDUyNDk2NTVhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC01Niw3ICs1
Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNv
ZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxs
U2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0LDEzICs2NCwxMyBAQCBDYWxs
U2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVPcmln
aW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGlu
ZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjpsYXN0Q2FsbFNpdGUoKSBjb25z
dAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNpemUoKSk7Ci0gICAgcmV0dXJu
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lucy5zaXplKCkgLSAxKSk7Cisg
ICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW5zLnNpemUoKSAtIDEp
OwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGREaXNwb3NhYmxl
Q2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IDNiMTY1
ZjJjNDAyMTAwM2QwNDFjY2E2ZDlhZTBjZmU3YWU4MjcxM2YuLjE4NTM2NmQwNGUyNjNlZTllZDk2
NGM4NmE3ZWQ5NTI0YTk1YmI5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zODMsNyArMzgzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwgaW4gc3VjaCBzdGF0
aWNhbGx5LW91dC1vZi1ib3VuZHMgYWNjZXNzZXM7IHdlIGp1c3QgbG9zZSBDRkEgdW5sZXNzCiAg
ICAgICAgICAgICAgICAgLy8gR0NTRSByZW1vdmVzIHRoZSBhY2Nlc3MgZW50aXJlbHkuCiAgICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc3RhdGUubnVtYmVyT2ZBcmd1bWVudHMo
KSAtIDEpCkBAIC00MDQsNyArNDA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4ICsgMSksIEZsdXNoZWRKU1ZhbHVl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSAmJiBp
bmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSB7
CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvR2V0U3RhY2soZGF0YSk7CiAgICAgICAgICAgICAgICAgICAg
IGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA4NTQxMjMxNDc0MWU2ZjExMjYxZjJl
OTdjNDlmZTY0NGRhZTdiYWY3Li5mMzhjODNmZGQzMGMyZjUzYjNkNTA5M2Y0MGIyYzcwZTk1MzEw
NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yOTQsNiAr
Mjk0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2Ug
SW5CeVZhbDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9t
OgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNh
c2UgTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXg6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhW
YWxpZFJhZGl4Q29uc3RhbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAK
aW5kZXggMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIyNzJkNDc5OTk4YjUzOS4uNDVmYmM0Mzlk
NTNiYTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcApAQCAtOTAsNyArOTAsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1
bHQgY29tcGlsZUltcGwoCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhl
IERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAgLy8g
bWFrZSBzdXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24g
b24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRv
cik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdl
dENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhZWUxZjAwNzNiMGY0YmJjYzQ3MzRlYjY0MWU0
NjQ4YzMwNTVhMjQ0Li5jYTMzZGIyMjdkNGI5Mjc3M2ZhODZkNzJlZTNkNGQxYjg1YmY5ODNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTI0MzIs
NiArMjQzMiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAor
ICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7
CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9i
b2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CkBAIC0yNDY0LDggKzI0NzIsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lu
bGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBQ
cm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNl
IE5ld1Byb21pc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zv
ckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgK
aW5kZXggMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRjZmRlMjhiOS4uOTMzYTJiZGUy
MmUxNjZjMmFlYjZkNGFjMWJiZTljZTFlNWNlZDU2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtMzIsNiArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2UgRm9yQWxsS2lsbHNJbnRlcm5hbCB7Citj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIC8vIFV0aWxpdGllcyBmb3IgZmlu
ZGluZyB0aGUgbGFzdCBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUgaW4gREZHIFNTQS4gVGhp
cyBhY2NvdW50cyBmb3IgbGl2ZW5lc3MgZHVlCiAvLyB0byBPU1IgZXhpdC4gVGhpcyBpcyB1c3Vh
bGx5IHVzZWQgZm9yIGVudW1lcmF0aW5nIG92ZXIgYWxsIG9mIHRoZSBwcm9ncmFtIHBvaW50cyB3
aGVyZSBhIG5vZGUgaXMgbGl2ZSwKIC8vIGJ5IGV4cGxvcmluZyBhbGwgYmxvY2tzIHdoZXJlIHRo
ZSBub2RlIGlzIGxpdmUgYXQgdGFpbCBhbmQgdGhlbiBleHBsb3JpbmcgYWxsIHByb2dyYW0gcG9p
bnRzIHdoZXJlIHRoZQpAQCAtNTMsMTMgKzU3LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFu
ZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0
CiAgICAgCiAgICAgQ29kZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRlci0+b3JpZ2luLmZvckV4aXQ7
CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3RlZDsKKyAgICBPcGVyYW5kIGFs
cmVhZHlOb3RlZDsKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0aGluZyB0aGF0IGlzIGxpdmUg
YXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVlLgogICAgIGlmIChub2RlQWZ0
ZXItPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBu
b2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0
ZWNvZGUocmVnLCBhZnRlcikpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKLSAgICAgICAg
ICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZUFm
dGVyLT51bmxpbmtlZE9wZXJhbmQoKTsKKyAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNv
ZGUob3BlcmFuZCwgYWZ0ZXIpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOworICAg
ICAgICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTcwLDggKzc0LDI0IEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgLy8gb3RoZXIg
bG9vcCwgYmVsb3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5lQ2FsbEZyYW1lID0gYmVmb3JlLmlu
bGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPT0gYWZ0ZXIu
aW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5s
aW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
YmVmb3JlSW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFmdGVyLmJ5dGVjb2RlSW5kZXgo
KS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0ZWNvZGVJbmRl
eCgpLmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKTsK
KworICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50
KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgYXV0byBs
aXZlQWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYWZ0ZXIuYnl0
ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGludCB0bXBPZmZzZXQgPSBiZWZvcmVJbmxpbmVD
YWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAg
ICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZpbHRlcihs
aXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQoWyZdIChz
aXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihPcGVyYW5kKFRtcE9wZXJhbmQs
IHRtcCArIHRtcE9mZnNldCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBObyBs
b2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUg
PyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9j
ayk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVCZWZvcmUgPSBmdWxsTGl2ZW5l
c3MuZ2V0TGl2ZW5lc3MoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxjdWxhdGlv
blBvaW50OjpCZWZvcmVVc2UpOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQWZ0
ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLCBMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CkBAIC04MiwxNyArMTAyLDIxIEBAIHZv
aWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBO
b2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFmdGVyLmJ5dGVjb2RlSW5k
ZXgoKS5jaGVja3BvaW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9zcyBhIGNoZWNrcG9pbnQgYnV0
IGJlZm9yZSBhbmQgYWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5lQ2FsbEZyYW1lLiIpOworCiAg
ICAgLy8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRpdmUgd2F5OiBpdCBpcyBraWxs
ZWQgaWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVyLgotICAgIEJpdFZlY3RvciBs
aXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShhZnRlcik7Ci0gICAgZ3JhcGgu
Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdy
YXBoLmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShhZnRlcik7CisgICAgdW5zaWduZWQgbnVt
TG9jYWxzID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
OworICAgIGdyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAgICAg
YmVmb3JlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAg
IGlmIChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
eworICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5vdGVkKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50b0xvY2FsKCkp
KQorICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9j
YWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAgICBp
ZiAobGl2ZUFmdGVyLmdldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CiAgICAg
ICAgIH0pOwogfQogICAgIApAQCAtMTA1LDcgKzEyOSw4IEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9k
ZXNBdE5vZGVJbmRleCgKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNlZW5JbkNsb3N1
cmVGbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGxlZEZ1bmN0b3JG
bGFnID0gMjsKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gZmxhZ3M7Ci0gICAgCisKKyAg
ICBBU1NFUlQobm9kZUluZGV4KTsKICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7CiAgICAgCiAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAtMTIwLDE1ICsxNDUsMTMgQEAg
dm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAgICAg
ICB9KTsKIAotICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7Ci0gICAgaWYgKG5vZGVJbmRleCkK
LSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAgIE5vZGUqIGJl
Zm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAgIGZvckFsbEtpbGxlZE9wZXJh
bmRzKAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAotICAgICAgICAgICAg
ICAgIHJlZywKKyAgICAgICAgICAgICAgICBvcGVyYW5kLAogICAgICAgICAgICAgICAgIFsmXSAo
Tm9kZSogbm9kZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFncy5n
ZXQobm9kZSkgJiBzZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAgICAgICAgICB9LApAQCAtMTU5
LDYgKzE4Miw3IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIC8vIFN0YXJ0IGF0IHRo
ZSBzZWNvbmQgbm9kZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBleHBlY3RlZCB0byBvbmx5IGlu
c3BlY3Qgbm9kZXMgZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0aGUgYmxvY2sgdXAgdG8gbm9k
ZUluZGV4IChleGNsdXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMgemVybyB0aGVuIHRoZSBmdW5j
dG9yIGhhcyBub3RoaW5nIHRvIGRvLgogICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMTsg
bm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgZGF0YUxv
Z0xuSWYoRm9yQWxsS2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxvY2FsIGF2YWlsYWJpbGl0eSBh
dCBpbmRleDogIiwgbm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmls
aXR5KTsKICAgICAgICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAg
IGdyYXBoLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSwgYmxvY2ssIG5vZGVJbmRl
eCwKICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAppbmRleCBiMzIwZjcwN2M5NWYxMjM5Mzg1MWJjM2IyYjJiNDJiOTU2ZGQw
YmY1Li4wNzFkZTIzOTJiOWM1YzkyODZkZTljNzg3OGZlOWFmMDBjMGI0ZTQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDggKzMwOCw4IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBu
b2RlLCBEdW1wQ29udGV4CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhp
cykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlz
LCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgICAgICBv
cGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsKICAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJtYWNoaW5lOiIsIG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUs
IER1bXBDb250ZXgKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0YWNrQWNjZXNzRGF0YSgpKSB7
CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
OwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVMb2Nh
bC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOiIsIGRh
dGEtPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Zm9ybWF0
KTsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgCi0gICAgICAgIG91
dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICBpZiAobm9kZS0+aGFz
VW5saW5rZWRPcGVyYW5kKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5r
ZWRPcGVyYW5kKCkpOwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JMZW5ndGhIaW50KCkpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQgPSAiLCBub2RlLT52ZWN0b3JM
ZW5ndGhIaW50KCkpOwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNWYWx1ZSgpKQpAQCAtNTE1LDkg
KzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAgICAgICBvdXQucHJpbnQocHJl
Zml4LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9j
ay0+cGhpc1tpXTsKKyAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT5vcCgpID09IFBoaSk7CiAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBN
b2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5s
b2NhbCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5vcGVyYW5kKCks
ICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAgICAgIGlmIChwaGlO
b2RlLT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUt
PmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQy
KCkpIHsKQEAgLTg4NCw3ICs4ODUsNyBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwo
QmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAg
ICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5sb2Nh
bCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgIGlmIChub2Rl
LT5vcGVyYW5kKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpCiAgICAgICAgICAg
ICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC04OTMsOSArODk0LDkgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJh
c2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAgICAgICAg
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2Nr
LCBpbmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAgICAgICAgICAgIE5vZGUqIG9s
ZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpOwogICAg
ICAgICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAgICAgYmxvY2su
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5l
d0dldExvY2FsOworICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAg
ICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0xMTMzLDM2ICsxMTM0LDU2IEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpraWxsc0ZvcihJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICByZXR1cm4ga2lsbHNGb3IoYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9CiAKLWJvb2wgR3JhcGg6Omlz
TGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCBvcGVyYW5kLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ2hlY2tp
bmcgb2Ygb3BlcmFuZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICBib29sIGlzQ2Fs
bGVyT3JpZ2luID0gZmFsc2U7CisKICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luUHRyID0gJmNv
ZGVPcmlnaW47Ci0gICAgZm9yICg7OykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
VmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmln
aW5QdHItPnN0YWNrT2Zmc2V0KCkpOworICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRh
aWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKKyAgICAvLyB0
aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgorICAgIGZvciAoOyBj
b2RlT3JpZ2luUHRyOyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2FsbEZyYW1lID8gJmlubGluZUNh
bGxGcmFtZS0+ZGlyZWN0Q2FsbGVyIDogbnVsbHB0cikgeworICAgICAgICBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNUbXAoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgdG1wT2Zmc2V0ID0gaW5saW5lQ2Fs
bEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAgICAgICAgICAgdW5z
aWduZWQgb3BlcmFuZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUo
KSk7CisKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVlKCkgPj0gMCk7CisgICAgICAg
ICAgICAvLyBUaGlzIHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0byBzb21lb25lIHdlIGlubGlu
ZWQuCisgICAgICAgICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1wT2Zmc2V0ICsgbWF4TnVtQ2hl
Y2twb2ludFRtcHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZSk7CisgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVtVG1wcygpIHx8IG9wZXJhbmRJ
bmRleCA8IHRtcE9mZnNldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgYXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29k
ZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiBiaXRNYXAu
Z2V0KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGNvZGVPcmlnaW5Q
dHItPnN0YWNrT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAKLSAgICAgICAgYXV0byogaW5s
aW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAg
IGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICBpZiAocmVn
LmlzQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZy5vZmZz
ZXQoKSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKIAogCiAgICAgICAgICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAotICAgICAgICAgICAgICAg
ICAgICAmJiByZWcub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJMb29rcyBsaWtlIGEgY2FsbGVlLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQotICAgICAgICAgICAgICAgICAgICAm
JiByZWcub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgeworICAgICAg
ICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkxvb2tzIGxpa2UgdGhlIGFyZ3VtZW50IGNvdW50LlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Niw0MiArMTE5Nyw0MSBAQCBib29sIEdyYXBo
Ojppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgZnVsbExpdmVuZXNzID0gbGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5k
ZXgoKTsKLSAgICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5lc3Mub3BlcmFuZElzTGl2ZShyZWcu
b2Zmc2V0KCksIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBv
aW50KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmdWxsTGl2
ZW5lc3MudmlydHVhbFJlZ2lzdGVySXNMaXZlKHJlZywgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlh
dGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2lu
KSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBU
aGlzIHdvdWxkIGJlIHJlZHVuZGFudCBpZiBpdCB3YXNuJ3QgZm9yIG91cgogICAgICAgICAvLyBv
cF9jYWxsX3ZhcmFyZ3MgaW5saW5pbmcuCi0gICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpCisg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgcmVnLmlzQXJndW1lbnQoKQogICAgICAgICAg
ICAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQXJndW1lbnQgaXMgbGl2ZS5cbiIpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBuZWVkIHRv
IGhhbmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhl
Ci0gICAgICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwu
Ci0gICAgICAgIGNvZGVPcmlnaW5QdHIgPSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7
CiAgICAgICAgIGlzQ2FsbGVyT3JpZ2luID0gdHJ1ZTsKICAgICB9CisKKyAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKKyAg
ICByZXR1cm4gdHJ1ZTsgICAgCiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotQml0VmVjdG9yIEdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCitCaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgQml0VmVjdG9yIHJlc3VsdDsKLSAgICBy
ZXN1bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCkpOwotICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIHVuc2lnbmVkIG51bUxv
Y2FscyA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKKyAgICBy
ZXN1bHQuZW5zdXJlU2l6ZShudW1Mb2NhbHMgKyBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mVG1wcygpKTsKKyAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAg
ICAgICAgIGNvZGVPcmlnaW4sCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewot
ICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwotICAgICAgICAgICAgcmVzdWx0LnF1
aWNrU2V0KHJlZy50b0xvY2FsKCkpOworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewor
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxz
ICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAgICByZXN1
bHQucXVpY2tTZXQob2Zmc2V0KTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTE2MzUsOCArMTY1NSw4IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6
Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBvcGVyYW5kTm9kZTsgbm9kZTspIHsKICAgICAgICAgaWYgKG5vZGUtPmFj
Y2Vzc2VzU3RhY2soKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBu
b2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBhcmd1bWVu
dCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOworICAgICAgICAgICAgaWYgKG1fZm9ybSAh
PSBTU0EgJiYgbm9kZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGludCBhcmd1bWVudCA9IG5vZGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAg
ICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jaygw
KSktPnZhbHVlW2FyZ3VtZW50XTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IG1hdGNoIFNldEFyZ3VtZW50RGVmaW5pdGVseSBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBh
cyB3ZWxsOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzU4NDEKQEAgLTE2NTYsNyArMTY3Niw3IEBAIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSog
Y3VycmVuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxl
ZEJsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKSwgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPm9wZXJhbmQo
KSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCmluZGV4IGZhYjljZjAyYTI1OTc2ZWY0N2QxNzkwNWJhZDljZTAzZTM4
MmJjZTUuLmY3YTFkODIxNGMzMDJkN2Q5NmFjMmE3N2EwMTg2NmE5ZDExOWY1MmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTg0MCwxMyArODQwLDEzIEBAIHB1YmxpYzoK
ICAgICAvLyBRdWlja2x5IHF1ZXJ5IGlmIGEgc2luZ2xlIGxvY2FsIGlzIGxpdmUgYXQgdGhlIGdp
dmVuIHBvaW50LiBUaGlzIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcKICAgICAvLyBmb3JBbGxMaXZl
SW5CeXRlY29kZSgpIGlmIHlvdSB3aWxsIG9ubHkgcXVlcnkgb25lIGxvY2FsLiBCdXQsIGlmIHlv
dSB3YW50IHRvIGtub3cgYWxsIG9mIHRoZQogICAgIC8vIGxvY2FscyBsaXZlLCB0aGVuIGNhbGxp
bmcgdGhpcyBmb3IgZWFjaCBsb2NhbCBpcyBtdWNoIHNsb3dlciB0aGFuIGZvckFsbExpdmVJbkJ5
dGVjb2RlKCkuCi0gICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciwgQ29k
ZU9yaWdpbik7CisgICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQsIENvZGVPcmlnaW4p
OwogICAgIAotICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2Fs
cyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CisgICAgLy8g
UXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGFuZCB0bXBzIGxpdmUg
YXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKICAgICAvLyBhbnkgYXJn
dW1lbnRzIGJlY2F1c2UgdGhvc2UgYXJlIGFsbCBwcmVzdW1lZCBsaXZlLiBZb3UgY2FuIGNhbGwg
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSB0bwogICAgIC8vIGFsc28gZ2V0IHRoZSBhcmd1bWVudHMu
IFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiBjYWxsaW5nIGlzTGl2ZUluQnl0ZWNvZGUoKSBmb3Ig
ZWFjaCBsb2NhbC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9y
QWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHZvaWQgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2Rl
KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAg
ICAgICAgIC8vIFN1cHBvcnQgZm9yIG5vdCByZWR1bmRhbnRseSByZXBvcnRpbmcgYXJndW1lbnRz
LiBOZWNlc3NhcnkgYmVjYXVzZSBpbiBjYXNlIG9mIGEgdmFyYXJncwogICAgICAgICAvLyBjYWxs
LCBvbmx5IHRoZSBjYWxsZWUga25vd3MgdGhhdCBhcmd1bWVudHMgYXJlIGxpdmUgd2hpbGUgaW4g
dGhlIGNhc2Ugb2YgYSBub24tdmFyYXJncwpAQCAtODgxLDYgKzg4MSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtyZWxhdGl2ZUxvY2FsXSkKICAg
ICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwogICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgICAgICAg
ICAgICAgYXV0byBsaXZlVG1wcyA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVU
bXBzLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChUbXBPcGVyYW5k
LCB0bXApKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxz
IGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKKyAgICAvLyBHZXQgYSBC
aXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMgYW5kIHRtcHMgbGl2ZSByaWdodCBub3cuIFRo
aXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgogICAgIC8vIHlvdSB3YW50IHRvIGNvbXBhcmUgdHdvIHNl
dHMgb2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28gZGlmZmVyZW50IENvZGVPcmlnaW5zLgotICAgIEJp
dFZlY3RvciBsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsKKyAgICBCaXRWZWN0b3Ig
bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwogCiAgICAgTGl2ZW5lc3ND
YWxjdWxhdGlvblBvaW50IGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KENvZGVP
cmlnaW4gb3JpZ2luLCBib29sIGlzQ2FsbGVyT3JpZ2luKQogICAgIHsKQEAgLTkzOCwxMiArOTQ2
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6
QmVmb3JlVXNlOwogICAgIH0KICAgICAKLSAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBhcmd1
bWVudHMgYW5kIGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEg
c21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoKSwg
c2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCisgICAgLy8gVGVs
bHMgeW91IGFsbCBvZiB0aGUgb3BlcmFuZHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4g
VGhpcyBpcyBhIHNtYWxsCisgICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExvY2Fsc09yVG1wc0xp
dmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBs
aXZlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxMaXZl
SW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgewotICAgICAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBm
dW5jdG9yKTsKKyAgICAgICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGNvZGVP
cmlnaW4sIGZ1bmN0b3IpOwogICAgICAgICAKICAgICAgICAgLy8gUmVwb3J0IGFsbCBhcmd1bWVu
dHMgYXMgYmVpbmcgbGl2ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspCkBA
IC0xMTE0LDYgKzExMjIsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJk
c0NGRz4gbV9iYWNrd2FyZHNDRkc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWlu
YXRvcnM+IG1fYmFja3dhcmRzRG9taW5hdG9yczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJv
bEVxdWl2YWxlbmNlQW5hbHlzaXM+IG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM7CisgICAg
dW5zaWduZWQgbV90bXBzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVk
IG1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmNwcAppbmRleCA5OWFlZmZjZGMwNWExMWM0NWIwNTc0MTI1MGY0ZDJhZWI0ZTIyOGNkLi4yMDJk
MjI1MDUzZmE5ZGZiZTVjMjNjNjRiY2Y4YmUzODRlM2U3NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcApAQCAtNDUs
OCArNDUsOCBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogSW5QbGFj
ZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6
IG1fZ3JhcGgoZ3JhcGgpCiAgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0
VmFsdWVzQ2FjaGUpCi0gICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQotICAgICwgbV9ibG9jaygwKQorICAgICwg
bV92YXJpYWJsZXMoT3BlcmFuZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
KQorICAgICwgbV9ibG9jayhudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKaW5kZXggYmY1ZWFkMThlYzE2
NDdlZTE2NzY2ODgzNTc0MDFmYTdmZWM3MTI5OS4uMTg2NWU2YTFlZmZjM2RhYWVmZTU4NGNhODYy
YzQ5YmMzNjg1ODUwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaApAQCAtMTY3LDEzICsxNjcsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXNbaW5kZXhdKTsKICAgICB9CiAKLSAg
ICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIEFic3RyYWN0VmFsdWUm
IG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxl
QXQobV92YXJpYWJsZXMub3BlcmFuZEluZGV4KG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAg
QWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4g
dGhpcy0+b3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKTsgfQotICAgIAogICAgIEFic3RyYWN0VmFs
dWUmIGxvY2FsKHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0
KG1fdmFyaWFibGVzLmxvY2FsSW5kZXgoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggM2Q4NDNjZTU4ZjIwYjQxMTYzMzlmY2RhOTU4
OGFlYmE2YjdhOGMyZS4uNTNkYjljZDE0Y2FjNmI2ZTY2ODJlZmRmNGJhNzk0ODk3Y2E1ZDVhNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTg1
LDggKzg1LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9z
ckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwotICAg
IGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRh
Zz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
aml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRp
b25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBKdW1wTGlz
dCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVKdW1wczsKQEAgLTk3LDEzICs5NSw3IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAKICAgICAgICAgaml0QXNzZXJ0SGFz
VmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgp
Lm9zckV4aXRJbmRleCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSkg
ewotICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBqdW1wKCk7Ci0gICAgICAgICAgICBhZGRMaW5r
VGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsodGFyZ2V0LCBvc3JFeGl0VGh1bmtM
YWJlbCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbmZv
Lm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKKyAgICAgICAgaW5mby5tX3BhdGNo
YWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CiAgICAgfQogfQogCkBAIC01OTUsMTEgKzU4Nywx
MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Js
b2NrLCBKSVRDb21waWxlcjo6TGFiZWwgYmxvYwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewor
CisgICAgICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5vcGVyYW5kKCkuaXNUbXAoKSk7CisgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSAhPSB2YXJp
YWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9yZXNodWZm
bGluZ3MuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICBPU1JFbnRyeVJlc2h1ZmZsaW5nKAot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCksIHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSwgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggNjhj
YTk4ZGY2ZjVjNGI3YjYzNzJjYzE1ODE4ZWMyNTcyODJmODlkOS4uNTBmMWQ4OTNkYTMwMjEwMmI5
NWU3OGFjNjA0MzlkODYyMzZmM2NhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaApAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW1p
dFN0b3JlQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQogICAgIHsKLSAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCmluZGV4IDQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkz
ZTA4YWMyNWNhNjMxMzQuLjQ1ZWNiNDZhYTI0NDNiYTFiOTU1NzE2YmMxZjQyYTcwOGExYTA0ODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAtNjMsNyArNjMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxp
ZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24o
QmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmQgb3BlcmFu
ZCkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4g
V2UganVzdCB1c2UgaXQgZm9yIGFzc2VydGlvbnMuIElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywK
ICAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2gg
dGhhdCB3ZSBpbnNlcnQuCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBm
bHVzaElzRGVmaW5pdGVseUludmFsaWQgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25l
ZCBpbmRleCkgewogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBpbmRleDsgaS0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+bG9j
YWwoKSA9PSBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNj
ZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJhbmQoKSA9PSBvcGVyYW5k
KSB7CiAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgaGFuZGxlQmxvY2tGb3JUcnlDYXRjaChCYXNpY0Jsb2NrKiBibG9jaywgSW5z
ZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQpCiAgICAgewogICAgICAgICBIYW5kbGVySW5mbyogY3Vy
cmVudEV4Y2VwdGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBGYXN0Qml0VmVjdG9yIGxp
dmVBdENhdGNoSGVhZDsKLSAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIE9wZXJh
bmRzPGJvb2w+IGxpdmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mVG1wcygpKTsKIAogICAgICAgICBIYW5kbGVySW5mbyogY2FjaGVkSGFuZGxlclJl
c3VsdDsKICAgICAgICAgQ29kZU9yaWdpbiBjYWNoZWRDb2RlT3JpZ2luOwpAQCAtMTMzLDExICsx
MzIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gb3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNv
ZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOworICAgICAg
ICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KGhhbmRsZXItPnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9j
YWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNh
bGxGcmFtZSksIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVh
ZC5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7CkBAIC0xNTYs
MTIgKzE1NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJl
c3VsdDsKICAgICAgICAgfTsKIAotICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEq
PiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZB
cmd1bWVudHMoKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxs
cHRyKTsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2Nr
QWNjZXNzRGF0YShPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG51bGxwdHIp
OwogCiAgICAgICAgIGF1dG8gZmx1c2hFdmVyeXRoaW5nID0gWyZdIChOb2RlT3JpZ2luIG9yaWdp
biwgdW5zaWduZWQgaW5kZXgpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRF
eGNlcHRpb25IYW5kbGVyKTsKLSAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwo
KSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJn
dW1lbnQoKSkgeworICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5k
KSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENh
dGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQpKSB7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGlzVmFsaWRGbHVzaExvY2F0aW9uKGJsb2NrLCBpbmRleCwgb3BlcmFuZCkpOwogCkBAIC0xNzgs
NiArMTc3LDggQEAgcHVibGljOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0g
MDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGxvY2Fs
KyspCiAgICAgICAgICAgICAgICAgZmx1c2godmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwp
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG1wID0gMDsgdG1wIDwgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZlRtcHMoKTsgKyt0bXApCisgICAgICAgICAgICAgICAgZmx1c2go
T3BlcmFuZChUbXBPcGVyYW5kLCB0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAg
LTE5Miw5ICsxOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
IChjdXJyZW50RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBu
b2RlLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFy
Z3VtZW50TWF5YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBub2RlLT5sb2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkg
JiYgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpIHsKLQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJh
bmQoKTsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0
Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGlzVmFsaWRGbHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nl
c3Nlc1N0YWNrKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0Rh
dGEub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVy
YW5kKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw5ICsyMTYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAg
ICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJh
bmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwog
ICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQob3Bl
cmFuZCk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcAppbmRleCA3M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3
Li5mZmY5NmJmY2Y2MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAg
LTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwog
ICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2st
PnRlcm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7CisgICAgICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2Nh
bEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIs
IG5vZGUsICI6IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxF
cG9jaCwgIlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBv
Y2ggPT0gY3VycmVudEVwb2NoKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBv
Y2goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4
aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZv
ckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+
YXQobm9kZUluZGV4IC0gMSksIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVh
bFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBz
bG9wcHkgLSBpdCBtaWdodCBjbGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3Rl
Y3QgYWdhaW5zdCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5v
cGVyYW5kKHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJh
bmQob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGlu
dFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJc
biIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJy
ZW50RXBvY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxl
ZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJlNjU1ZjUyNTFmOTZm
NDA0ZTMzYjQ2Li5iODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0
IFN0YWNrQWNjZXNzRGF0YSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0Rh
dGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDog
bG9jYWwobG9jYWwpCisgICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hG
b3JtYXQgZm9ybWF0KQorICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3Jt
YXQoZm9ybWF0KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
OworICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2Fs
OwogICAgIEZsdXNoRm9ybWF0IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5MDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTIz
LDkgKzkyNCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxP
dXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0
dXJuIGNoaWxkMSgpOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAg
cmV0dXJuIGNoaWxkMigpOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAt
OTczLDkgKzk3Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlh
YmxlQWNjZXNzRGF0YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lz
dGVyIGxvY2FsKCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVB
Y2Nlc3NEYXRhKCktPm9wZXJhbmQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG1hY2hpbmVMb2NhbCgpCkBAIC05ODMsNyArOTg2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAg
ICBib29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JF
bnRyeUxvY2FsOgpAQCAtOTk2LDEwICs5OTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5k
IHVubGlua2VkT3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2Nh
bCgpKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90
PigpKTsKKyAgICAgICAgQVNTRVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0
dXJuIE9wZXJhbmQ6OmZyb21CaXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3ICsxMzUzLDcgQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7
CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZh
cmFyZ3MgfHwgb3AoKSA9PSBWYXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFy
YXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKaW5kZXggMjRjNzMzZDM4NzAyNzlmNGE1NmI0ZTY4OGJmMGJmMDZhYzI0YzFkNC4u
ZTNlOWMzMmY4ZDA4MTNhNmFkYTIyYWFjY2QzNzQ0MmQ0ZWJkOWQzZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAv
KiBUaGVzZSBhcmUgdXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAg
ICAgbWFjcm8oUHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3Rh
Y2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpT
KSBcCkBAIC0yMDIsNiArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIG1hY3JvKEdldEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5n
dGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2Fk
VmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXgg
MzI4MGY4N2E2MjY3ZGYwMzRjODRlMzMxODUzMGM3NDE5ZTU1ZTk3ZS4uNDI0N2RlYWVjN2NiYmNl
NjA4M2FhODczMmI5YzI3N2Y1ZWZkMjhkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBA
IC0zNSwxMSArMzUsOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwot
fQogCiBjbGFzcyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAg
IE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBo
YXNlKGdyYXBoLCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9n
cmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCkt
Pm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAg
ICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KG9wZXJhbmQsICIgIik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9n
TG4oIiIpOwogICAgICAgICB9OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMi
LCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJs
b2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3Iu
bV9hdmFpbGFiaWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAg
ICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2
ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsK
ICAgICAgICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTIwLDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQu
cHJ1bmVCeUxpdmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vz
c29yLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkFmdGVyIHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAg
LTIwOCwyOCArMjA2LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpl
eGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNh
c2UgUHV0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
ZGF0YS0+bG9jYWwpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5m
bHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBL
aWxsU3RhY2s6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7
CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUs
IGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChkYXRhLT5vcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSku
c2V0Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmll
SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2
YWlsYWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBA
IHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBu
b2RlKQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBj
YXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7Cisg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+
c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQu
b2Zmc2V0KCkgKyBpKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChkYXRhLT5zdGFydCArIGkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1
c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBS
ZWNvcmQgaG93IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50Lgog
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRI
ZWFwTG9jYXRpb24oQXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKTsKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRI
ZWFwTG9jYXRpb24oQXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5
IGFyZ3VtZW50ID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldChpKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFw
TG9jYXRpb24oQXJndW1lbnRQTG9jLCBub2RlLCBpKSwgYXJndW1lbnQpOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5
NDQ1MDcyNTcxYTViMGM3Yzk0Yjg0M2U4OTBkYzcuLmVlNWY3ZjNkNjhlMmVhMGViMWRkZWYxMzlm
ZjkzOWI2YWQ4OWQ5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCkBAIC0zMjIsNyArMzIyLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY28KICAgICAKICAg
ICAvLyA3KSBGaXggdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSB0aGUgcmlnaHQgY29kZSBibG9jay4K
ICAgICAKLSAgICAqYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPihwaXZvdCAtIDEgLSBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spID0gY29kZUJsb2NrOworICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJs
b2NrKio+KHBpdm90IC0gKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayArIDEpKSA9IGNvZGVCbG9j
azsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9n
RigiICAgIE9TUiByZXR1cm5pbmcgZGF0YSBidWZmZXIgJXAuXG4iLCBzY3JhdGNoKTsKQEAgLTM4
MiwxMCArMzgyLDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGCiAKICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkp
OwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9u
LT5hczxPcENhdGNoPigpLm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0
aW9uLT5hczxPcENhdGNoPigpLm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsK
ICAgICBKU1ZhbHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZn
Q29tbW9uLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKLSAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kJiBwcm9maWxlKSB7CisgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVy
KHByb2ZpbGUubV9vcGVyYW5kKS5pc0xvY2FsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGRhdGFCdWZmZXJbaW5kZXhdID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9v
cGVyYW5kKS5qc1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCmluZGV4IGRjNzZiY2JhZWQ0
MWVlZTA2M2RmZGJlYTg0NTA2NjU1M2QwY2I0ZDYuLjYwOTY4NjYzYjY0YzJiNjg1NGU0NjE2MWY5
NDk5NDY1N2UxYWVmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCkBAIC0xMDIsMTAgKzEwMiwx
MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
cHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGxvY2Fsc1ts
b2NhbF0gPSBuZXdSb290LT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZh
cmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBvcmlnaW4sCi0gICAg
ICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFi
bGUtPmxvY2FsKCkub2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25l
LCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpKSwKICAgICAgICAgICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAxOGM2NDE0
NzkzNDI0NjliNDFjYThmOThmMzA4YjNhNGM5MzNiYTk4Li4wNWRlOTU4Y2FlZWYxYjhmMDllMzJk
MDk3YThmZTMyZDY3NzQyMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJERkdH
cmFwaC5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKQEAgLTQ3LDg5NSArNDgsNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFByb2JlIGJhc2VkIE9TUiBFeGl0
LgotCi11c2luZyBDUFVTdGF0ZSA9IFByb2JlOjpDUFVTdGF0ZTsKLXVzaW5nIENvbnRleHQgPSBQ
cm9iZTo6Q29udGV4dDsKLXVzaW5nIEZyYW1lID0gUHJvYmU6OkZyYW1lOwotCi1zdGF0aWMgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKFByb2JlOjpDb250ZXh0JiwgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jaywgY29uc3QgT1NSRXhpdEJhc2UmKTsKLXN0YXRpYyB2b2lkIGFkanVzdEFu
ZEp1bXBUb1RhcmdldChQcm9iZTo6Q29udGV4dCYsIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYpOwotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0
KENvbnRleHQmLCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmKTsKLQotc3Rh
dGljIEpTVmFsdWUganNWYWx1ZUZvcihDUFVTdGF0ZSYgY3B1LCBKU1ZhbHVlU291cmNlIHNvdXJj
ZSkKLXsKLSAgICBpZiAoc291cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVz
dWx0OwotICAgICAgICBzdGQ6Om1lbWNweSgmcmVzdWx0LCBjcHUuZ3ByPHVpbnQ4X3QqPihzb3Vy
Y2UuYmFzZSgpKSArIHNvdXJjZS5vZmZzZXQoKSwgc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZGVjb2RlKGNwdS5ncHI8RW5jb2RlZEpTVmFsdWU+KHNvdXJjZS5ncHIoKSkpOwotI2Vs
c2UKLSAgICBpZiAoc291cmNlLmhhc0tub3duVGFnKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
KHNvdXJjZS50YWcoKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UudGFnR1BSKCkpLCBjcHUu
Z3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSNlbmRpZgotfQotCi0jaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9y
ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQot
ewotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAg
UmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWdu
ZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBVQ1BVUmVnaXN0
ZXIqIHBoeXNpY2FsU3RhY2tGcmFtZSA9IGNvbnRleHQuZnA8VUNQVVJlZ2lzdGVyKj4oKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlm
IChkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIC8vIFRoZSBjYWxsZWUgc2F2ZWQgdmFsdWVzIGNvbWUgZnJvbSB0aGUg
b3JpZ2luYWwgc3RhY2ssIG5vdCB0aGUgcmVjb3ZlcmVkIHN0YWNrLgotICAgICAgICAvLyBIZW5j
ZSwgd2UgcmVhZCB0aGUgdmFsdWVzIGRpcmVjdGx5IGZyb20gdGhlIHBoeXNpY2FsIHN0YWNrIG1l
bW9yeSBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIGdvaW5nIHRocm91Z2ggY29udGV4dC5zdGFjaygp
LgotICAgICAgICBBU1NFUlQoIShlbnRyeS5vZmZzZXQoKSAlIHNpemVvZihVQ1BVUmVnaXN0ZXIp
KSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IHBoeXNpY2FsU3Rh
Y2tGcmFtZVtlbnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpXTsKLSAgICB9Ci19
Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcigp
Lgotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVC
bG9jayogY29kZUJsb2NrKQotewotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwot
ICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVn
aXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVn
aXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQg
ZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVy
cy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YWNr
LnNldChjb250ZXh0LmZwKCksIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0
ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRl
eHQuYXJnPFZNKj4oKTsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZl
cyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdp
c3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgp
OwotCi0gICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRv
cEVudHJ5RnJhbWUpOwotICAgIFVDUFVSZWdpc3RlciogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VUNQVVJlZ2lzdGVyKj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3Rl
cnNCdWZmZXIpOwotCi0gICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRv
bnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgc2l6ZV90IHVpbnRwdHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVv
ZihVQ1BVUmVnaXN0ZXIpOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAg
ICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJb
dWludHB0ck9mZnNldF07Ci0gICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICBjb250ZXh0LmZwcihlbnRyeS5yZWcoKS5mcHIoKSkgPSBiaXR3aXNlX2Nhc3Q8ZG91
YmxlPihjYWxsZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdKTsKLSNlbHNlCi0gICAgICAgICAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUt
c2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0
KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byYgc3RhY2sg
PSBjb250ZXh0LnN0YWNrKCk7Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZt
RW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAgdm9pZCogY2FsbGVlU2F2ZUJ1ZmZl
ciA9IGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyOwotCi0gICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2
ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3Vu
dCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkg
PSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRy
eS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIs
IGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdw
cigpKSk7Ci0gICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBz
dGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZnByPFVD
UFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZnByKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBG
SVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQg
ZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVPckNvcHlDYWxs
ZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRl
eHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIgb2Zmc2V0
VmlydHVhbFJlZ2lzdGVyLCBib29sIHdhc0NhbGxlZFZpYVRhaWxDYWxsKQotewotICAgIEZyYW1l
IGZyYW1lKGNvbnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoY29kZUJs
b2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZl
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJl
Z2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxs
ZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgUmVnaXN0ZXJTZXQgYmFzZWxpbmVDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBS
ZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAo
ZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIHVpbnRwdHJfdCBzYXZlZFJlZ2lzdGVyVmFsdWU7Ci0KLSAgICAgICAgaWYg
KHdhc0NhbGxlZFZpYVRhaWxDYWxsICYmIGJhc2VsaW5lQ2FsbGVlU2F2ZXMuZ2V0KGVudHJ5LnJl
ZygpKSkKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGZyYW1lLmdldDx1aW50cHRy
X3Q+KGVudHJ5Lm9mZnNldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2F2ZWRSZWdp
c3RlclZhbHVlID0gY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpOwotCi0gICAgICAgIGZy
YW1lLnNldChvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zm
c2V0KCksIHNhdmVkUmVnaXN0ZXJWYWx1ZSk7Ci0gICAgfQotfQotI2Vsc2UgLy8gbm90IE5VTUJF
Ul9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2Fs
bGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgc2F2ZUNh
bGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0Jikg
eyB9Ci1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0Zv
cihDb250ZXh0JiwgQ29kZUJsb2NrKiwgVmlydHVhbFJlZ2lzdGVyLCBib29sKSB7IH0KLQotI2Vu
ZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgSlND
ZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNG
dW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0mIHZtID0g
KmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7
Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5z
aWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkg
PSBzdGQ6Om1heChsZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSAtIDEpKTsKLSAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERpcmVjdEFy
Z3VtZW50czo6Y3JlYXRlKAotICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCksIGxlbmd0aCwgY2FwYWNpdHkpOwotCi0gICAgcmVz
dWx0LT5zZXRDYWxsZWUodm0sIGNhbGxlZSk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250
ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0
YWNrKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVz
dWx0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1
cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJn
dW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAg
QVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1l
KGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVu
dENvdW50IC0gMTsKLSAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50
czo6Y3JlYXRlRW1wdHkoCi0gICAgICAgIHZtLCBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50
c1N0cnVjdHVyZSgpLCBjYWxsZWUsIGxlbmd0aCk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBj
b250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0
LnN0YWNrKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGksIGZyYW1lLmFyZ3VtZW50KGkp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3Vt
ZW50cyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2Rl
KiBkZmdKSVRDb2RlLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCi17
Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAg
SGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1h
cHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgotICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAg
IGludCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLQotICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkCi0gICAgICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1
bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBNaW5pZmllZElEIGlkID0gcmVjb3Zlcnkubm9kZUlEKCk7Ci0gICAgICAgIGF1dG8gaXRlciA9
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZmluZChpZCk7Ci0gICAgICAgIGlmIChpdGVyICE9
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZW5kKCkpIHsKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgZnJhbWUub3BlcmFuZChpdGVyLT52YWx1ZSkpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9Ci0gICAgICAgICAgICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCkt
PmlubGluZUNhbGxGcmFtZSgpOwotCi0gICAgICAgIGludCBzdGFja09mZnNldDsKLSAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2tPZmZz
ZXQgPSAwOwotCi0gICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKLSAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAg
ICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihmcmFtZS5vcGVyYW5kKHN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS5hc0NlbGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKLQotICAgICAgICBpbnQzMl90IGFyZ3Vt
ZW50Q291bnQ7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZnJhbWUub3BlcmFu
ZDxpbnQzMl90PihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBh
eWxvYWRPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLQotICAgICAgICBK
U0NlbGwqIGFyZ3VtZW50c09iamVjdDsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
LSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmlu
Z0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1l
bnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVh
dGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2Fs
bEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOwotCi0gICAgICAgIGFscmVhZHlBbGxv
Y2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKLSAgICB9Ci19Ci0KLS8vIFRoZSBmb2xs
b3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUg
ZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9zdCBsaWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVl
KSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51bSB2YWx1ZSkuCi0vLyBFYWNoIGxl
dmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVl
IChzZWUgdXNlIG9mIHRoZQotLy8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93
KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHsKLSAgICBOb25lLAotICAg
IFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0gICAgVmFsdWVQcm9maWxlVXBkYXRlLAotICAgIEFycmF5
UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhlcgotfTsKLQotdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NS
RXhpdChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQVNTRVJU
KCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7Ci0gICAgYXV0byYgY3B1ID0gY29u
dGV4dC5jcHU7Ci0KLSAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpIHsKLSAgICAgICAgLy8gV2Un
cmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFu
eSBvcHRpbWl6ZWQKLSAgICAgICAgLy8gY29kZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4K
LSAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYg
KHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFt
ZUZvckNhdGNoOwotICAgICAgICBjb250ZXh0LmZwKCkgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFT
U0VSVChjb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpERkdKSVQpOwotCi0gICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAotICAgIC8v
IHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5o
ZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBE
Rkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0g
ICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLQotICAg
IEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCk7Ci0gICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0
aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwotCi0gICAgaWYgKFVOTElLRUxZ
KCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAgICAgICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsK
LQotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9y
IGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdp
bGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJl
c3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsK
LSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKLQotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkg
ewotICAgICAgICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVy
eVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpCi0gICAgICAgICAgICBl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFs
dWVTb3VyY2UpIHsKLSAgICAgICAgICAgIGlmIChleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAg
ICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRh
dGUpOwotICAgICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9r
aW5kID09IEJhZEluZGV4aW5nVHlwZSkgewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7Ci0gICAgICAgICAgICAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3Jp
Z2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwot
ICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJh
eVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlm
IChhcnJheVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+
YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVt
b3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxp
bmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAg
ICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBw
ZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQp
OwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldDsKLSAgICAgICAg
aWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAg
anVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVC
bG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7
Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVz
LgotICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICAgICAgVmVj
dG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0gICAgICAg
IGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBl
eGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1J
bmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3BhbnMpOwotICAgICAgICBwdHJkaWZm
X3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAq
IHNpemVvZihSZWdpc3Rlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihu
ZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJh
bmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50
ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQs
IGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQpKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+Y29tcGlsYXRpb24pKSB7Ci0gICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFi
YXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpD
b21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmNvbXBpbGF0aW9uLmdldCgpOwotCi0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCog
cHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAg
ZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhp
dC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2lu
ZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBleGl0LmV4aXRTdGF0
ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJFeGl0OwotICAgICAgICAgICAgZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZS0+
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwotCi0g
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVy
Ym9zZURGR09TUkV4aXQoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQg
IyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlc1xuIiwKLSAgICAgICAgICAg
ICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAg
ICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNv
ZGVCbG9jaykuZGF0YSgpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRl
eHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOwotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxv
Y2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKLQotICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9
IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1
bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOwot
Ci0gICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5z
dGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAgICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRo
aXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJv
cHJpYXRlLgotICAgIGRvIHsKLSAgICAgICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwpOwotCi0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRp
b25SZWNvdmVyeQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3Zl
cnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZwotICAg
ICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRo
YXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5Ci0gICAgICAgIC8vIHRvIGhhdmUgYSBy
ZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVOTElLRUxZLgotICAgICAg
ICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5KSkgewotICAgICAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAg
ICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90Pihy
ZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNlbGY6Ci0gICAgICAgICAg
ICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAg
ICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+
KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgpKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9
IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVj
b3ZlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0
aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUKLSAgICAgICAgSlNWYWx1ZSBwcm9m
aWxlZFZhbHVlOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAg
ICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJj
ZSk7Ci0gICAgICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZh
bHVlKHByb2ZpbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxp
emF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRh
dGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxp
emF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKLSAgICAgICAgaWYgKEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAg
QVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgQVNTRVJUKGV4aXQu
bV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7Ci0g
ICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhp
dC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAg
ICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8
fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2Nr
KS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAg
ICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpB
cnJheVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdp
biBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgotICAgICAgICBpZiAoVU5MSUtFTFko
ZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBh
Y3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBn
ZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBj
YWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotICAgICAgICAg
ICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkKLSAgICAgICAgICAgIGV4
aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBwcmludE9TUkV4aXQo
Y29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBleGl0KTsKLQotICAgIH0gd2hpbGUgKGZhbHNlKTsg
Ly8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9uLgotCi0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkg
JiAweDcpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRf
dD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0g
ICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcikg
PT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICAvLyBEbyBhbGwgZGF0YSBm
b3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgot
ICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBj
YWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBt
YXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0KLSAg
ICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50
PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkp
OwotICAgIHNpemVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMuc2l6ZSgpOwotICAgIHNp
emVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6
ZSgpOwotCi0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFuSW5kZXggPSAwOwotICAgIHNpemVf
dCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICBpZiAo
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZElu
ZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0
SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgZm9y
IChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNw
YW5zOyArK3NwYW5JbmRleCkgewotICAgICAgICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFu
ZFNwYW5zW3NwYW5JbmRleF07Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zm
c2V0OwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJP
ZlJlZ2lzdGVyczsKLQotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zm
c2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9mZnNldCwgdW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQot
ICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkp
IHsKLSAgICAgICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZp
bmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0gMTsKLSAgICAgICAgICAgIGlmIChu
ZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAg
ICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3Bh
bnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVy
YW5kczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJl
Zy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0g
cmVnLm9mZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
LSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEluRlBSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpT
VmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50
YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxK
U0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9v
bD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAg
ICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwotI2Vsc2UKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihy
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkp
KTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BS
OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8
aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZy
YW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUy
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdElu
dDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5G
UFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAg
ICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAv
LyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNh
bGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4K
LSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgY29kZUJsb2NrKTsKLSAgICBzYXZl
Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRp
Y19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIGNwdS5n
cHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVS
ZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLQotICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBv
biB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2Ug
YXNzdW1lIHRoYXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVs
eSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0
aGV5IG9ubHkKLSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNl
IHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUu
Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1l
bnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAgIC8vIGlu
bGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0
aGF0LgotCi0gICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ss
IGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4
ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8g
dGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQs
IHNvIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMg
dGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJl
IHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwg
ZnJhbWUncwotICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xs
b3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNv
ZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9u
J3QKLSAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkg
KHNlZSAoYykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24g
dGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAg
SklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFu
Y2UgdG8KLSAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0
IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRy
eSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0g
ICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJl
cXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUg
Y29kZQotICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBp
bGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwg
d2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5k
YW5nZXIKLSAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3Vs
ZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBw
ZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAv
LyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291
bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5
IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFw
cGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0
eQotICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vz
bid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWls
dXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sg
aGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50
bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5
MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2Ug
ZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3Vu
dGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0KLSAgICBpZiAoVU5MSUtFTFkoY29kZUJs
b2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRT
dGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCi0gICAg
ICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2Nr
LCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5l
Q29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0s
IGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotfQotCi1zdGF0aWMgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJt
b3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQotewotICAgIGF1
dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0
LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0
aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ug
b2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
b3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAgIGZyYW1lLnNldE9w
ZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNl
bGluZUNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAg
IGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2Rl
T3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1v
c3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVl
Q2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVD
YWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQp
OwotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgpOwotCi0gICAgICAgIGJvb2wg
Y2FsbGVySXNMTEludCA9IGZhbHNlOwotCi0gICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewotICAg
ICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOwotICAgICAgICAgICAg
dm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZz
ZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAg
ICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1l
LT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIHJldHVyblBD
ID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQ
KSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAg
ICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0
dXJuUEMpOwotICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFz
ZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJ
bmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2Fs
bEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7Ci0KLSAg
ICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAg
ICAgICBjYWxsZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHRydWVDYWxsZXItPmlubGlu
ZUNhbGxGcmFtZSgpLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSNp
ZiBDUFUoQVJNNjRFKQotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50
OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lk
Kik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1l
LnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dm9pZCo+KGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIGJhc2VsaW5l
Q29kZUJsb2NrKTsKLQotICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSdz
IGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLSAgICAgICAgLy8gSWYgdGhpcyBpbmxpbmVkIGZyYW1l
IGlzIGEgdGFpbCBjYWxsIHRoYXQgd2lsbCByZXR1cm4gYmFjayB0byB0aGUgb3JpZ2luYWwgY2Fs
bGVyLCB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIGNvcHkgdGhlIHByaW9yIGNvbnRlbnRzIG9mIHRo
ZSB0YWcgcmVnaXN0ZXJzIGFscmVhZHkgc2F2ZWQgZm9yIHRoZSBvdXRlciBmcmFtZSB0byB0aGlz
IGZyYW1lLgotICAgICAgICBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxp
bmVDb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
KSwgIXRydWVDYWxsZXIpOwotCi0gICAgICAgIGlmIChjYWxsZXJJc0xMSW50KSB7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0
QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihj
YWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6
UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAg
ICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwg
YmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKS5vZmZzZXQsIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOwotI2VuZGlm
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNl
dCwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Ci0gICAgICAg
IEFTU0VSVChjYWxsZXJGcmFtZSk7Ci0gICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpLCBjYWxsZXJGcmFtZSk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7Ci0jZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihK
U1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8v
IGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBw
YXJ0Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUg
b3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNhbGxzCi0gICAgaWYgKGNvZGVPcmln
aW4pIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotI2Vs
c2UKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gb3V0ZXJtb3N0QmFz
ZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJp
dHMoKTsKLSNlbmRpZgotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwg
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
aywgT1NSRXhpdCYgZXhpdCkKLXsKLSAgICBPU1JFeGl0U3RhdGUqIGV4aXRTdGF0ZSA9IGV4aXQu
ZXhpdFN0YXRlLmdldCgpOwotCi0gICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOyAvLyBUaGUgb3B0
aW1pemluZyBjb21waWxlciBleHBlY3RzIHRoYXQgdGhlIE9TUiBleGl0IG1lY2hhbmlzbSB3aWxs
IGV4ZWN1dGUgdGhpcyBmZW5jZS4KLSAgICB2bS5oZWFwLndyaXRlQmFycmllcihiYXNlbGluZUNv
ZGVCbG9jayk7Ci0KLSAgICAvLyBXZSBiYXJyaWVyIGFsbCBpbmxpbmVkIGZyYW1lcyAtLSBhbmQg
bm90IGp1c3QgdGhlIGN1cnJlbnQgaW5saW5lIHN0YWNrIC0tCi0gICAgLy8gYmVjYXVzZSB3ZSBk
b24ndCBrbm93IHdoaWNoIGlubGluZWQgZnVuY3Rpb24gb3ducyB0aGUgdmFsdWUgcHJvZmlsZSB0
aGF0Ci0gICAgLy8gd2UnbGwgdXBkYXRlIHdoZW4gd2UgZXhpdC4gSW4gdGhlIGNhc2Ugb2YgImYo
KSB7IGEoKTsgYigpOyB9IiwgaWYgYm90aAotICAgIC8vIGEgYW5kIGIgYXJlIGlubGluZWQsIHdl
IG1pZ2h0IGV4aXQgaW5zaWRlIGIgZHVlIHRvIGEgYmFkIHZhbHVlIGxvYWRlZAotICAgIC8vIGZy
b20gYS4KLSAgICAvLyBGSVhNRTogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBzaG91bGQg
cmVtZW1iZXIgd2hpY2ggQ29kZUJsb2NrIG93bnMKLSAgICAvLyB0aGUgdmFsdWUgcHJvZmlsZS4K
LSAgICBJbmxpbmVDYWxsRnJhbWVTZXQqIGlubGluZUNhbGxGcmFtZXMgPSBjb2RlQmxvY2stPmpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPmlubGluZUNhbGxGcmFtZXMuZ2V0KCk7Ci0gICAgaWYgKGlu
bGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA6ICppbmxpbmVDYWxsRnJhbWVzKQotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Ci0gICAgfQot
Ci0gICAgYXV0byogZXhpdElubGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSgpOwotICAgIGlmIChleGl0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb250
ZXh0LmZwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdElubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAgdm9pZCoganVtcFRh
cmdldCA9IGV4aXRTdGF0ZS0+anVtcFRhcmdldDsKLSAgICBBU1NFUlQoanVtcFRhcmdldCk7Ci0K
LSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICAvLyBTaW5jZSB3
ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRj
aC4KLSAgICAgICAgdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+
KCk7Ci0gICAgfQotCi0gICAgdm0udG9wQ2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUq
PigpOwotCi0gICAgaWYgKGV4aXRTdGF0ZS0+aXNKdW1wVG9MTEludCkgewotICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0g
ICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVj
dGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KS5wdHIoKTsKLQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0
YVRhYmxlR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPm1l
dGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY29udGV4dC5ncHIo
TExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJs
b2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSAgICAgICAgY29udGV4dC5n
cHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkpOwotI2Vsc2UKLSAgICAgICAg
Y29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlvbik7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtLnRhcmdldEludGVycHJldGVyUENG
b3JUaHJvdyA9ICZjdXJyZW50SW5zdHJ1Y3Rpb247Ci0gICAgfQotCi0gICAgY29udGV4dC5wYygp
ID0gdW50YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGp1bXBUYXJnZXQpOwotfQotCi1zdGF0aWMg
dm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3Qgb3NyRXhpdEluZGV4
LCBjb25zdCBPU1JFeGl0JiBleGl0KQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29u
dGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpOwotICAgIEV4aXRLaW5kIGtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpOwotCi0gICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJs
b2NrKTsKLSAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKCIsIGJ5dGVj
b2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOwotICAg
IGlmIChhbHRlcm5hdGl2ZSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImV4ZWN1
dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAg
ICAgICAiLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5yZW9w
dGltaXphdGlvblJldHJ5Q291bnRlcigpLAotICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgZGF0YUxvZygibm8gYWx0ZXJuYXRpdmUgY29kZSBibG9jayAo
aS5lLiB3ZSd2ZSBiZWVuIGpldHRpc29uZWQpIik7Ci0gICAgZGF0YUxvZygiLCBvc3JFeGl0Q291
bnRlciA9ICIsIGNvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSwgIlxuIik7Ci0gICAgZGF0YUxv
ZygiICAgIEdQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEdQUlJlZyBn
cHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4
dC5ncHJOYW1lKGdwciksICI6IiwgUmF3UG9pbnRlcihjb250ZXh0Lmdwcjx2b2lkKj4oZ3ByKSkp
OwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRp
bWUgb2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9S
ZWdpc3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZnByTmFtZShmcHIpLCAi
OiIpOwotICAgICAgICB1aW50NjRfdCBiaXRzID0gY29udGV4dC5mcHI8dWludDY0X3Q+KGZwcik7
Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNvbnRleHQuZnByKGZwcik7Ci0gICAgICAgIGRhdGFM
b2dGKCIlbGx4OiVsZiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYml0cyksIHZhbHVlKTsKLSAg
ICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLX0KLQotLy8gSklUIGJhc2VkIE9TUiBFeGl0LgotCiBP
U1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZl
SklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQog
ICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3Jp
Z2luLnNlbWFudGljLCBqaXQtPm1fb3JpZ2luLndhc0hvaXN0ZWQpCiAgICAgLCBtX2pzVmFsdWVT
b3VyY2UoanNWYWx1ZVNvdXJjZSkKQEAgLTk1OCwxNSArNzAsMTggQEAgQ29kZUxvY2F0aW9uSnVt
cDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCkgY29u
c3QKIAogdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGpp
dCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCiB7Ci0g
ICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8v
IE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgorICAgIEhhc2hNYXA8
TWluaWZpZWRJRCwgVmlydHVhbFJlZ2lzdGVyPiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAv
LyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KICAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAg
ICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAKICAg
ICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZAogICAgICAgICAgICAgJiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ2xvbmVk
QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAg
ICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKICAgICAgICAgYXV0byBp
dGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKICAgICAgICAgaWYgKGl0
ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewpAQCAtOTg3LDcgKzEwMiw3
IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQs
IFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBqaXQu
bG9hZFB0cigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLAorICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTk5Nyw3ICsxMTIsNyBA
QCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBW
TSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
IHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIGppdC5sb2Fk
MzIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksCisgICAgICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpy
ZWdUMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTEwMjMs
NyArMTM4LDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBl
cnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKICAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2Vs
bChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKIAotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3Bl
cmFuZCk7CisgICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiB9CiAKQEAgLTE0NjYsMTYgKzU4MSw4NCBAQCB2
b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0
IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
CiAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS50b3BFbnRyeUZyYW1lKTsKIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVT
dGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXli
ZSB3ZSBzaG91bGRuJ3QgdXNlIGEgcHJvYmUgYnV0IGZpbGxpbmcgYWxsIHRoZSBzaWRlIHN0YXRl
IG9iamVjdHMgaXMgdHJpY2t5IG90aGVyd2lzZS4uLgorICAgICAgICBWZWN0b3I8VmFsdWVSZWNv
dmVyeT4gdmFsdWVzKG9wZXJhbmRzLm51bWJlck9mVG1wcygpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvcGVyYW5kcy5udW1iZXJPZlRtcHMoKTsgKytpKQorICAgICAgICAgICAg
dmFsdWVzW2ldID0gb3BlcmFuZHMudG1wKGkpOworCisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsK
KyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgw
KTsKKyAgICAgICAgaml0LnByb2JlKFs9LCB2YWx1ZXMgPSBXVEZNb3ZlKHZhbHVlcyldIChQcm9i
ZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBb
Jl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZz
ZXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZT4oKTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9
IGluZGV4OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hl
Y2twb2ludFRtcHM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiByZWNvdmVyeSA9
IHZhbHVlc1tpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBkbyB3aGF0IHRoZSBGVEwgZG9lcyBhbmQgbWF0ZXJpYWxpemUgYWxsIHRoZSBKU1Zh
bHVlcyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0
YW50OgorICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1
ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0
YWNrOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIElu
dDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3Rh
dGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4odG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFj
ZWRJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3Rh
dGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNv
ZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3By
PENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZv
ciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3Jp
Z2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNh
bGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBh
dXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAg
ICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihy
ZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1
cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBp
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNp
ZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9
CisKICAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSBy
ZXN1bHRzIGludG8gdGhlIHN0YWNrLgogCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAg
ICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50Pihq
aXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCkpKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4o
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IGE3ZTU4NzhjMDcxNzA4YTFkYTc2YzBi
MGViNTRkNTRmMWEwNGViOGUuLjllOWJjZWE0ODFjMWQ2ODc3OTcyZjI1OWQ2MmMxYTIzMDBiMmIx
NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCkBAIC0xNTAsOCArMTUw
LDYgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogCiAgICAgZnJpZW5k
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21waWxlT1NSRXhpdChDYWxsRnJhbWUqKTsK
IAotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVPU1JFeGl0KFByb2JlOjpDb250ZXh0Jik7Ci0KICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXBMb2Nh
dGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8T1NSRXhpdFB0clRhZz4gbV9jb2RlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKaW5kZXggMzEwOTYz
ZDg0NDM2YzUzMzI3ODRmMGEyOTJhNDljYmUxYjgyYTU5Yi4uMDAzYjYxOGNkNDQwZTQwMGFiYWFj
ZWMwYWZiYzNjMTI0MzVkYjk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdEJhc2UuaApAQCAtNzAsNiArNzAsMTEgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBHZW5lcmljVW53aW5kOwogICAgIH0KIAorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0V4aXRpbmdUb0NoZWNrcG9pbnRIYW5kbGVyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKTsK
KyAgICB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5
cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IDJmZjNlYThiNWZiYjZmM2YyNzIxZDUwMjQ0NTYy
OThiMDg0ZDUxMTUuLjYyNzZhNTk1OGU4MDA3NmFhYmQ3ODE2MzdiYjMxMGNhZWVmMjFlZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiQnl0ZWNvZGVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxM
SW50VGh1bmtzLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTQz
LDYgKzE0Niw5IEBAIHZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5CiB7CiAgICAgY2FsbGVySXNMTElu
dCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKKyAgICBp
ZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICByZXR1cm4gTExJbnQ6
OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGlu
ZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpOworCiAgICAgdm9pZCoganVt
cFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBAIC0yMzgsNyArMjQ0LDcgQEAg
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JF
eGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUxMQog
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGpp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29k
ZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwogICAgIGZvciAo
Y29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2lu
LT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CkBAIC0zMDUsMzMgKzMxMSwz
NCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0
KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXhG
b3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKKyAgICAgICAgaml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9yZTY0
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhl
IDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZy
YW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
YmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkp
LmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSkpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KCku
Yml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
KTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3Nl
bWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0
aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9w
bGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKICAgICBp
ZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5i
aXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaml0
LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKICNlbHNlCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5h
dChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVp
bnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRl
eCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKGJ5dGVjb2RlSW5k
ZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpLmJpdHMoKTsKICNlbmRp
ZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgfQogfQogCkBAIC0zODIs
MTEgKzM4OSwxMiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICBBU1NFUlQoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpKSk7CiAKICAgICB2b2lk
KiBqdW1wVGFyZ2V0OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNoZWNr
cG9pbnRSZXR1cm5UYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRvTExJbnQpIHsKICAgICAgICAgYXV0
byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0Zv
ckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6
Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6
Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSA/IGNo
ZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSA6IGN1cnJlbnRJbnN0cnVjdGlvbi5vcGNvZGVJ
RCgpKTsKIAogICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewogICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50SW5zdHJ1
Y3Rpb24pLCBHUFJJbmZvOjpyZWdUMik7CkBAIC00MDIsNyArNDEwLDE0IEBAIHZvaWQgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRC
YXNlJiBleGl0KQogI2VuZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRh
Z2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0g
Y29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1f
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggaW5kZXhG
b3JDaGVja3BvaW50UmV0dXJuID0gY29kZUJsb2NrRm9yRXhpdC0+Ynl0ZWNvZGVJbmRleEZvckV4
aXQoZXhpdEluZGV4KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4g
Y29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoaW5kZXhG
b3JDaGVja3BvaW50UmV0dXJuKTsKKyAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkp
IHsKKyAgICAgICAgICAgIGNoZWNrcG9pbnRSZXR1cm5UYXJnZXQgPSBjb2RlTG9jYXRpb247Cisg
ICAgICAgICAgICBjb2RlTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFn
PihMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X3Ry
YW1wb2xpbmUpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwog
CiAgICAgICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRh
Zz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXgg
MjE2YzViYWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRiMDNkYzE5OS4uN2RhNmFmZDVjMjIxYzk3
ZmY5M2Y0MDBjYjM0OTQ0NTRkNGQ0OTI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBA
IC0yMTA3LDcgKzIxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVhcC5mb2xs
b3coYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5m
byhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdl
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggZjM5YzE0YjlmMGE0
NDg3ODlkNzcyZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0YmY1ZWE2MGE2ZTY2
NTIwZmUwNTE0NGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cEluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCkBAIC00
NCw3ICs0NCw3IEBAIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJbnRlZ3Jh
bFR5cGUgdmFsdWUpCiAgICAgICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFs
dWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1
cmUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oc3RydWN0dXJlKSkpIHsgfQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQgb3ApIDog
bV92YWx1ZShvcC5hc0JpdHMoKSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAg
ICBleHBsaWNpdCBPcEluZm8oVCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKaW5kZXggNTBjYTAwYjAwYjk0ODhhMTAzMjg3MjYyOGE5ZTJlZTg3M2Yy
YzM3OS4uY2YwOWQ4NzM5NzRhODU2MzNhMmVkYjY4Nzc2OTJkYjEwNzY4NDA3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTQ2LDE1ICsyOTQ2
LDE2IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURv
dWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGZp
cnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90
IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogewor
ICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZhcmFy
Z3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnRE
ZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3MoZ2xvYmFs
T2JqZWN0LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
KSksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGggLSAxKTsKICAgICAKLSAgICBmb3IgKHVpbnQz
Ml90IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCi0gICAgICAgIGNhbGxG
cmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgIGZvciAo
dWludDMyX3QgaSA9IGxlbmd0aCAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAg
ICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CiB9CiAK
IGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQz
Ml90IGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21J
bnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21J
bnNlcnRpb25QaGFzZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2RiMzZhYjVh
MGM2YWRjMi4uMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVlMDliYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmNwcApAQCAtNDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50
ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQogY2xh
c3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21JbnNlcnRp
b25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGlu
c2VydGlvbiIpCkBAIC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0TG9jYWxz
IGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2VydCB0
b28gZmV3IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1f
Z3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUGhh
bnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICB9CkBAIC03Miw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAgIGhhbmRs
ZUJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9u
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAg
ICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIgKzEwMCwyMiBAQCBw
cml2YXRlOgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K25vZGVJbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOwotICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGlu
dDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwo
KSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZp
bml0ZWx5OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgpAQCAtMTM0LDM4ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZdIChF
ZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlVw
ZGF0aW5nIGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAg
ICAgICAgICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRF
cG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOworICAg
ICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHByb2Nl
c3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIHJlZywgIlxu
Iik7CisgICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5k
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIEtp
bGxlZCBvcGVyYW5kOiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkg
aGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFk
eUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAi
LCBvcGVyYW5kLCAiIGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJlZyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIGtp
bGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAgICAgICAgICAgICBp
ZiAoIWtpbGxlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVkIGluIHRoaXMgYmxv
Y2suIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQgYSBQaGFu
dG9tIGlmIHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAgICAgICAg
ICAgICAgICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQuCi0gICAg
ICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKQorICAg
ICAgICAgICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9jaCkgewor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwg
b3BlcmFuZCwgIiBoYXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIEluc2VydGlu
ZyBQaGFudG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsCisgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2ls
bGVkTm9kZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4
aXRpbmdJbmRleCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhh
dmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRoYXQgd2Ug
aGF2ZSB0bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAg
ICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3OSwxNCArMTgwLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9
IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+
b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBuZWVkIHRoZSBNb3ZI
aW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBsaXZlIHVudGls
IHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVk
T3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBsb2Nh
bDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2FsKSA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1fZ3JhcGgs
IG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tpbGxlZE9wZXJhbmQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxD
bG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0Mjk4ODZlMDc4ZjBhZmNj
Li5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApA
QCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3Jl
YWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAgICAgICAg
ICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVjaXNl
bHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhlYXAu
a2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5wYXls
b2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0
aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOwor
ICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIGhlYXAu
b3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VS
VChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAgCi0gICAgICAgIG1f
ZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSks
IG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFuZCgpLCBub2RlKTsK
ICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0g
ICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50b0xvY2FsKCkpID49
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKQogICAg
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2UyNGUyYTExNjMzN2M4
M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMzODY5NjUy
OWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhh
bmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBt
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAg
ICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07
CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZjYmZlY2M4NGZlMTk1ODQyOGEw
Y2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5YmU2ZDMxOTdjMTNmMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAg
Y2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBQ
dXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMyZWFlNjAzYmFjYmQx
MDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBlN2VkZjYzZjA3Zjc4ZDgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBj
bGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQdXRTdGFja1Npbmtp
bmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRTdGFjayBz
aW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUgc3RhY2su
IEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9yIG5vdC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5NgogICAg
ICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBo
IGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAgICAgICBCbG9ja01h
cDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFu
ZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxb
YmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChm
YWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAg
ICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Js
b2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQ7CkBA
IC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8Ym9v
bD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+
IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCA0PiB3
cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9wZXJh
bmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gd3Jp
dGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJh
bmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFk
ZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhh
bmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBLaWxsU3RhY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBvcCA9PSBW
YXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZvcndhcmRWYXJhcmdz
IHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXMuYXBw
ZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAg
ICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0ZXMpCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQogICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9j
a107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6Iiwg
ZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsyNTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXND
b25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5nRmx1c2g7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVk
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2Rl
LCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQdXRTdGFj
aykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0aW5nIGZsdXNoIGZv
cm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFjaykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEgUHV0U3RhY2sg
cGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2Nh
cGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZv
ciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAg
ICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVy
ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFyZ3NM
ZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndh
cmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBE
ZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywxMyArMzEzLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwg
VmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIgYXQgIiwgcG9p
bnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZl
cnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMg
dG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZlcnJlZC5vcGVyYW5k
Rm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVt
cChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRb
c3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ldKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1
dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGRl
ZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGljOgogICAgICAg
ICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9W
YXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09w
ZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGguYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAg
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAgICBTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CiAgICAg
ICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAg
ICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRl
eCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRkKG5vZGUp
OwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxl
Lm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAg
ICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
LAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAg
c3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFy
aWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4
VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwgb3BlcmFu
ZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBU
b3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkpOwpAQCAtNDEx
LDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGlu
Zy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCht
YXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFyaWFi
bGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYq
IGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsK
QEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygi
TWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBwaW5nLCAi
XG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYq
IHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52
YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBp
bmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1
ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAi
IHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWFwcGluZy5v
cGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtNDM3
LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJlZEF0
SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5v
ZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChE
RkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAi
LCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0
YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5k
KG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5n
ICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDUz
LDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBG
bHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAg
ICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRh
LT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJl
ZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJl
ZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBkZWZlcnJhbC4g
Tm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdoYXQgaXMgc3Rv
cmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRo
ZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRh
LT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5k
KGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcyLDIwICs0
NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0b3JlZCBhbmQg
Z2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBkYXRhLT5mb3Jt
YXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5j
b21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKTsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Y2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChu
b2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGlj
dGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5k
bGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAiLCBu
b2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9wZXJhbmQs
ICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGlu
Y29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkg
PSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJh
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRpdGlvbmFsIHdy
aXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1ha2VzIHRo
b3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMgd2Ugc2hv
dWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNrcyByaWdo
dCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0g
VmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkg
PT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAg
ICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAg
ICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAo
U1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhz
dWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBo
aURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4
VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBVcHNpbG9u
IGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRl
ckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwg
aXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtpbmc6XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXggNDM2
ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRmMmMwY2QzOTk4YjE4MWI5
ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0
YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFw
aC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVz
aEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZv
cm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5vZGUpOwog
ICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hpbGROb2Rl
KTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+
aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gUHJ1bmUgYnkg
bGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBpbGUgdGlt
ZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGhl
YWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVudCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhpRGVm
LT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+dmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgTW92SGludCwg
YmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksCi0gICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFsdWUoKS0+
ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+b3Bl
cmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4aXRPSykKQEAgLTMzNyw3
ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CiAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gZmFs
c2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwxOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0YWNrKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUt
PmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFw
aCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxl
LT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVy
YW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkg
PSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzcx
LDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAi
LCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1
ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM4NSw3ICszODUsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsK
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVmYXVsdEVk
Z2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQyNSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAgICAgICAgICAgICAgICAgICAg
IFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KTsKIAotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9y
ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZvciAiLCB2
YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUs
IFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
cGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVy
YW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2EzMTY5MTkuLjlhMzJkNjdh
NTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIyLDcgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENv
bnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RG
b3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKaW5kZXggYjVhMTFjNTFlZjEwY2Y3YTZiMjMxNzJkMmQ4YmY4ZjY3NWUwNTJi
ZC4uYmU1ODVkNWQ0M2M5Mjc3ODc5Mjk4M2IwOTMzZjVhMjYyODUwMzJiOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE3NzUsNyAr
MTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUp
CiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NS
QmlydGgoY2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVF
dmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7
CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlm
aWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29uIHJlYXNvbikKQEAgLTE4MjUsNyArMTgyNSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgIG1fc3RhdGUu
YmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Js
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGludCBvcGVyYW5k
ID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRl
eChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsK
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8g
cmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4MzUsMTEgKzE4MzUsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAgaWYgKCFub2RlLT5yZWZD
b3VudCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQg
U2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2YXJpYWJsZS0+Zmx1
c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAg
ICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAot
ICAgICAgICAgICAgICAgIGZvcm1hdCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBo
KCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhW
YXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCks
IGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwpAQCAtMTkx
OSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkK
ICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CiAK
ICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApAQCAtNzM0MSw1
NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1l
KE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFsdWVSZWdzIGFyZ3Vt
ZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFs
dWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIGxvY2soR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlz
LCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRz
LmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB1bmxvY2soR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZW
YXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIHsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBHUFJUZW1wb3JhcnkgYXJnQ291bnRJbmNsdWRpbmdU
aGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPSBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBh
biBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAvLyBm
cm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5
IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVz
dCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9j
YWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAg
ICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGludDMyUmVzdWx0KGFyZ0NvdW50SW5jbHVkaW5nVGhp
c0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7Cit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3sKKyAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKworICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3Vt
ZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50
cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVmFyYXJn
c092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOworICAg
ICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFu
Y2hUZXN0MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAog
ICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5i
cmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAg
IGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwogCi0g
ICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisK
KyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBkYXRhLT5t
YWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBk
YXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTczOTgs
MTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdz
KE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAg
aWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGls
ZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgIGlmIChub2RlLT5h
cmd1bWVudHNDaGlsZCgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgZWxzZQog
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3Vu
dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlzKTsK
ICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQUlJlZyBsZW5ndGhH
UFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gYXJndW1lbnRD
b3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAucmVncygpOwotICAg
ICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBp
bmNsdWRlVGhpcyA9ICovIHRydWUpOworICAgIAorICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAgICAgaWYgKGRhdGEtPm9mZnNldCkKICAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxlbmd0aEdQUik7CiAg
ICAgICAgIApAQCAtNzU2Nyw3ICs3NTY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGF1dG8qIGlubGluZUNhbGxG
cmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lCiAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KSB7Ci0gICAgICAgIGtub3duTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIGtub3duTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
ICAgICAgICAgbGVuZ3RoSXNLbm93biA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAga25v
d25MZW5ndGggPSBVSU5UX01BWDsKQEAgLTEyNDQ3LDcgKzEyNDQ4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKE5vZGUqIG5vZGUp
CiAgICAgaWYgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+YXJndW1l
bnRzSW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIGVsc2UKLSAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpOworICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50OwogICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHQuZ3ByKCkpOwogICAgIGludDMyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggYzY0Zjk3OGFkZjg1ZmJmMjc3YmJhNzkyMTYwNjRm
NDI4MWI4ZDVhOS4uMDNkNDgzNWJmNGI3YThkZTA5MzllZmNmYTM3MDIyYjQ2MjY5MDk0MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTM5
Myw2ICsxMzkzLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVj
dEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjY5LDE1ICsxNjcwLDE2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7CiAgICAgCiAgICAgdm9p
ZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBW
aXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9w
ZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0
IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VSVCghYnl0ZWNvZGVSZWcuaXNBcmd1bWVudCgp
IHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKICAg
ICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChieXRl
Y29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVj
b3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5v
cGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKICAgICB9CiAKICAg
ICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA2N2IwZTBiMzcwNGNhNTlh
ODkwYWM1OWM4NmRiZDBkMmEwNTZkYjgxLi4wYWYzZjE3MTgxNTQxMGQ5YmVmNjRhMjBmZDA5MDVk
ZGMwM2U2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdl
dExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUu
b3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJh
Y2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAg
ICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHBy
b2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAg
ICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0
dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbCht
X2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFG
b3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTM4MjQsNiArMzgyNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAg
ICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggM2U2
MzhjOWI5NDllYjVlYTI2YTMxMDVkZGI4YWZlNzY2MjE2MzM0NC4uN2IxZTI1N2Q2MGQ0Njg0NWYx
YTk0MGZmNmRmZGM5M2FjODZjN2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xOTM2LDcgKzE5MzYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUu
b3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZB
IGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxl
CiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1w
dCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50
OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwo
KSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0
TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3Rlcigp
LCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC00NDY0LDYgKzQ0NjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7
CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5n
dGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6
IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCmlu
ZGV4IGJlZWM4NmFjN2E3ZDMzM2UzOTY3OWUyNjc1NTkwNzRlNDY0YzliODIuLmQ3NjI4ZTVhMTE3
Y2UzM2RlMWQxNjE1ZjYwNDI3NTIyMDQ3N2EyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcApAQCAtNTEsNyArNTEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFibGUgYXMgYmVpbmcgInVzZWQiIGlmIHRoZXJl
IGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExvY2FsLCBHZXRMb2NhbCwKICAgICAgICAgLy8g
Rmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAgIAotICAgICAgICBCaXRWZWN0b3IgdXNlZExv
Y2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gdXNlZE9wZXJhbmRzKDAsIGdyYXBoKCkubV9s
b2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBD
b2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCiAgICAgICAgIGJv
b2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CkBAIC02NywyMyArNjcsMjIgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQ
aGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFi
bGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRz
LnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+
Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQo
ZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRz
LnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
ZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgogICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEt
PmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5z
ZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBw
ZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTIsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNr
OiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogc3RhY2sgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5sb2NhbC5p
c0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay0+b3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxvY2FsLnRvTG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHN0YWNrLT5vcGVyYW5kLCB0cnVlKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0ZXI7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50
LS07KSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAor
ICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigK
ICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQp
Lm9mZnNldCgpICsKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZExvY2Fscy5zaXplKCkpOwor
ICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZE9wZXJhbmRzLnNpemUoKSk7
CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsID0gY29kZUJsb2NrKCktPmNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdXNlZExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCF1c2Vk
TG9jYWxzLmdldChpKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZE9w
ZXJhbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXVzZWRPcGVyYW5kcy5nZXRG
b3JPcGVyYW5kSW5kZXgoaSkpIHsKICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW2ldID0gVUlO
VF9NQVg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC0xMzUs
NDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3Qo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGxvY2FsID0gdmFyaWFibGUtPmxvY2FsKCkudG9M
b2NhbCgpOwotICAgICAgICAgICAgaWYgKGxvY2FsID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIHNpemVfdCBpbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7Cisg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gYWxsb2NhdGlvbi5zaXplKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xv
Y2FsXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2luZGV4XSA9PSBV
SU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlh
YmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFz
c2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIHZhcmlhYmxlLT5vcGVyYW5kKCkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0YWNrQWNjZXNzRGF0YSogZGF0YSA6IG1f
Z3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIGlmICghZGF0YS0+bG9jYWwu
aXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+
bG9jYWw7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5vcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sb2Nh
bC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+bG9jYWwudG9Mb2NhbCgpXSA9
PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChk
YXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9j
YXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCldID09IFVJTlRfTUFYKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmxvY2FsKTsK
KyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFs
bG9jYXRpb24sIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAgICBjb2RlQmxvY2so
KS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbihhbGxvY2F0aW9u
LCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBjb2RlQmxvY2so
KS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBjb2Rl
QmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAg
IElubGluZVZhcmlhYmxlRGF0YSBkYXRhID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtp
XTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5p
bmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCi0gICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbih1
c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworCiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNX
aXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewogICAgICAgICAgICAgICAgIEFyZ3VtZW50
UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAg
ICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9zaXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAg
LTIxNSw4ICsyMTUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0g
YXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24odXNlZE9w
ZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBk
YXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMzEsMTcgKzIzMSwxNiBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24o
Y29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IE9wZXJhbmRzPGJvb2w+JiB1c2VkT3Bl
cmFuZHMsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIE9wZXJhbmQgb3BlcmFu
ZCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7Ci0gICAgICAg
IGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRp
b24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2FsKCldOwotICAgICAgICAgICAgaWYgKG15QWxs
b2NhdGlvbiA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVn
aXN0ZXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworCisgICAgICAgIHNpemVfdCBv
cGVyYW5kSW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAg
ICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW29wZXJhbmRJbmRleF07CisgICAg
ICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCht
eUFsbG9jYXRpb24pOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCmluZGV4IGViM2RkYmQ3MTg0
M2Q0OWY2NWIzMmNlOTYxZmY5YTA3MTJhMWEwNTEuLmI0OGM2ZjdmMTkwOTc3NWQ3Mjc5Nzk5MWYz
ZmI5ODNkZTYzOGE3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0
TG9jYWwgPSBudWxscHRyOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbV9u
b2RlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ub2RlLT5vcGVy
YW5kKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbm9k
ZUluZGV4OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0
KGkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9k
ZS0+bG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFNldExvY2FsICYmIG5vZGUtPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHNldExvY2FsID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dy
YXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIGxvY2FsKSkpCisgICAgICAgICAgICAgICAg
aWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG9w
ZXJhbmQpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCA2YWNhZmJmM2JmNTM1Yzk2
OTZiZTY0OGEyMDcwYjZlZTZmNGY4YmY5Li5mMWIxZmY2NGRkYTUzY2Y0NTk2NzA0ZWViODMxNWYx
NmJmYmU5MDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC00
MCwxNCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZN
JiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwotICAgIGppdC5wcm9iZShP
U1JFeGl0OjpleGVjdXRlT1NSRXhpdCwgJnZtKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKLX0KLQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKaW5kZXggMDVhNTBhNTRiMjVkNTFkYmNiMTg1OGZl
N2FhZGNhNDg2ODIwNWQ5ZS4uOGI1YzNmMDFhNDg1MjBiN2FhYWFhZWJhZmY5M2MzYjI2Y2NkOTg0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCkBAIC0zNSw3ICszNSw2IEBA
IGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihW
TSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5r
R2VuZXJhdG9yKFZNJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDYwZmJmODk5NWZkYWQ3ODI1NmEw
NjdiODljNGVjNWY1NzEzZjFkN2UuLjc5NjY1ZjhhYjg1ZmMxMTE2ZDYzOWZiM2Q4YjU1ZjZlZDkw
MjY4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNoZWNrT3AgPSBDaGVja1N0cnVjdHVyZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChTcGVjQ2VsbENoZWNrICYgU3BlY0VtcHR5KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQoKS52
aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxp
bmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsb2NhbCAtIChpbmxpbmVDYWxsRnJhbWUg
PyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkpID09IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHx0aGlz
fCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhlIGNhbGwgZW50cnlwb2ludCB3b24ndCBoYXZlIHx0
aGlzfCBhcyBURFosCkBAIC0xNjgsOCArMTY4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBnZXRMb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9PSBub2RlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCkpID0gZ2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2NhbCgqYmxvY2ssIGluZGV4SW5CbG9jaywgdmFyaWFi
bGUsIGdldExvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC00NDYsNyArNDQ2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IE9w
ZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9w
bGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGludCBv
cGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAppbmRleCA5ZWU1ZTAwNzQwOWRmNTI5NGJmY2Y1MWI3NzZlYjhjZmNmNDdjNTBlLi5hMmQ2
Y2ZjMjQ5MzRlM2RjM2M0NmMwZTI0ZDRkYTFjZTFiMGNmNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtNDgzLDcgKzQ4Myw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5waGlzW2ldOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOwogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBp
bnZhbGlkLgogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0
b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQpAQCAtNTE5LDEwICs1MTksMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5w
cmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHByZXZCbG9jayA9IGJsb2NrLT5wcmVkZWNlc3NvcnNba107CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5v
dCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jaywgYmxvY2stPnByZWRl
Y2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChvcGVyYW5kLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOgpAQCAtNTMzLDExICs1MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJh
bmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10s
IHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlcmFuZCwgYmxvY2st
PnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZQpAQCAt
NTQ3LDE5ICs1NDcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1tr
XSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3Jz
W2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4g
Z2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNl
dExvY2FsUG9zaXRpb25zKAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRM
b2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAg
ICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2Us
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkp
IHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmFjY2Vzc2VzU3RhY2sobV9n
cmFwaCkpOwpAQCAtNjY4LDI0ICs2NjQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX215UmVmQ291bnRzLmdldChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFk
ZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayks
IGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9PSBub3RTZXQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgISFub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBub2RlLT5jaGls
ZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+Y2hpbGQxKCktPm9w
KCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAg
ICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2Fs
LiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSAhPSBu
b3RTZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAg
ICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9
IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlr
ZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBzZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwg
aW4gdGhlIHNhbWUKICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0
QXJndW1lbnREZWZpbml0ZWx5IGZvciB0aGF0IGxvY2FsLgotICAgICAgICAgICAgICAgICAgICBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OwotICAgICAg
ICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0g
bm90U2V0OworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk2OCwyNiArOTY0LDI2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBlZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVy
YW5kLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAg
ICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gbnVsbCBCbG9jayAiKTsKKyAgICAgICAgICAg
IGRhdGFMb2cob3BlcmFuZCwgIiBpbiBudWxsIEJsb2NrICIpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqYmxv
Y2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayog
ZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBz
b3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKICAgICB7Ci0gICAgICAg
IGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0
aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpz
b3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQorICAgICAgICBP
cGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkK
ICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJs
b2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIs
IG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9j
aykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuY3BwCmluZGV4IDI2ZjAzMjlkNTQzMDQxNTcyMDVlNzgxNDk4YzY0ZTBiZTk5
MzIxMTAuLjk1Y2RjOTJlMmMyNDEwYTM1YzAxMzEzMWZkYzNiN2NjYzI4MjllZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNs
YXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdz
IGZvcndhcmRpbmciKQpAQCAtNTYsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAg
ICAgIAotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFw
aCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1
bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBX
ZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlz
IHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBtYW5uZXIuCiAgICAgICAgIAogICAgICAgICBOb2Rl
KiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2FuZGlkYXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2Fu
ZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0
ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1bWVudHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5
CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYXV0byBkZWZhdWx0
RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNh
bmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0xMTcsOSArMTE1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkuaXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRs
eSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0byBhbiBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAg
ICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAg
aWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZExvY2FsKCkpKQotICAg
ICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxS
ZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgpAQCAtMTQwLDEzICsxMzksMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAg
IGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICAgICAgY2FzZSBUYWls
Q2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hpbGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoK
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xvYWRlZEZyb20oKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmICghdmFsaWRHZXRCeU9mZnNldCkgewogICAgICAgICAgICAgICAgIGZv
ciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlkYXRlQnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJ1dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3JB
bGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+
dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1
bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIG9wZXJhbmQsICIgd2hpbGUgd2Ug
YXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2Nh
bHNbaV0gPT0gcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBy
ZWxldmFudExvY2Fsc1tpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50
TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fscy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0
ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RVc2VySW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0
VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBi
dXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdlZW4gdGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3Qg
dXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2MywxNiArMjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAg
ICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2
ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVu
Y2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJ
bnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAg
ICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+b3BlcmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBA
IC0yOTcsMTMgKzI5NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUsIHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNl
IGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMzExLDcgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtlIHRoaXMgd29yay4KLSAgICAgICAgaWYgKERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgV2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIApAQCAtMzQxLDggKzM0MCwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRo
aW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5v
ZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjYXNlIExvYWRWYXJh
cmdzOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5j
cHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2MmFlZDRjMzQzMmVhNWE4MjkwMi4uMmFjMmVl
MzliNGNjYWQzMDgxMjViNGU2ZWNjODhhODdjN2QxNzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcApAQCAtMzEsOCArMzEs
NyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0Rh
dGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCi0gICAgLCBtX3By
ZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBt
X2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9mbGFncygwKQogICAg
ICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQpAQCAtNDUsMTAgKzQ0LDEwIEBAIFZhcmlhYmxl
QWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAK
LVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBs
b2NhbCkKLSAgICA6IG1fbG9jYWwobG9jYWwpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQp
CisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVk
aWN0aW9uKFNwZWNOb25lKQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdz
KDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBAIC04Nyw3ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVB
Y2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAg
IC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAg
ICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZvciBhcmd1bWVudHMuCi0gICAgaWYgKGxvY2Fs
KCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3Qg
YSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0aGlzIGRvZXNuJ3QKQEAgLTEyMSw3ICsxMjAsNyBA
QCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZv
cm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgpKTsKICAgICAgICAgCi0gICAgaWYgKGxvY2Fs
KCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQorICAgIGlmIChvcGVyYW5kKCku
aXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAm
IE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgpKQogICAgICAgICByZXR1cm4gREZHOjptZXJn
ZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9ybWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9y
bWF0KTsKICAgICAKQEAgLTE3Niw3ICsxNzUsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6
Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBhcmd1bWVudHMuCi0gICAgaWYgKG1fbG9jYWwuaXNB
cmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlIGFyZ3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0g
d2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5saW5lZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKaW5kZXggMWQzODky
ZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRhMjg0ZS4uYmUyZmI1NDAxMzUyNjU1YjljN2Fj
YjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC00OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFi
bGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJsZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwpOworICAgIFZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kKTsKICAgICAKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewot
ICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwpOwotICAgICAgICByZXR1
cm4gbV9sb2NhbDsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmFuZCA9PSBmaW5kKCktPm1fb3BlcmFu
ZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxS
ZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAgLTIwOCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAg
ICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0
IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVz
IGRvIGJlIHNpZ25pZmljYW50LgogCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJl
ZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlwZSBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOwor
ICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2Nh
bDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsKIAogICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5k
ZXggMjhlNDM3ZmQ1MWZlYTQ5NjllYjQ4ZWNmMGMwNTA4ZjBhMzdkZjgzNS4uNWIyYzFlZTkwOWI1
NDhmMzk4MjcwYzQzYmQzNmVkNzJlM2Y5Y2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkBAIC01OSwxMSArNTksMTEgQEAgdm9pZCBWYXJp
YWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmlu
dCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50
RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29k
ZVJlZ2lzdGVyKCksICIpIik7CisgICAgICAgIG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAi
LCAiLCBvcGVyYW5kKCksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxF
dmVudDoKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6
IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3Rlcigp
LAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIg
LT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAogICAgICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRv
U3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCmluZGV4IDIw
NjBkNGEyZmQyNzIyM2RkNmY2OTljNmRiYWQ2ZDIyNDY3Yzk4MzQuLmMxZjU0YmE0ZmJkY2FhYTVh
MWQ5YTVlZGMxYWM0ODEzOGQzNGUzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5oCkBAIC02OCw2ICs2OCwxMCBAQCBlbnVtIFZhcmlhYmxlRXZlbnRL
aW5kIDogdWludDhfdCB7CiB9OwogCiB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKKyAg
ICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uKCkgCisgICAgICAgIDogb3BlcmFuZCgpIAorICAgIHsg
fQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpGUFJlZ2lzdGVySUQgZnByOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC03Niw3ICs4
MCw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgIH0gcGFpcjsKICNlbmRpZgotICAgIGlu
dDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiB9OwogCiBjbGFzcyBWYXJp
YWJsZUV2ZW50IHsKQEAgLTE2Miw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdoaWNoVHlw
ZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxl
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZp
cnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0
aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtp
bmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQu
bV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTgxLDEzICsxODUsMTMgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbCgKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywg
RGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAg
ICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAg
IHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVnLm9mZnNldCgpOwogICAgICAgICBWYXJpYWJs
ZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52
aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9u
Lm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExv
Y2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAg
ZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTk1LDEzICsxOTksMTMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBWYXJp
YWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2Rl
UmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgT3Bl
cmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAg
ICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAg
ICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJl
cHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQoKTsKKyAgICAgICAg
cmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlUmVnOwogICAgICAgICBldmVudC5tX2tp
bmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNo
KTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRhdGlvbiA9IFdURk1vdmUocmVwcmVzZW50YXRp
b24pOwpAQCAtMjY1LDEzICsyNjksMTMgQEAgcHVibGljOgogICAgIFZpcnR1YWxSZWdpc3RlciBz
cGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmly
dGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0dXJu
IG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9
Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnaXN0ZXIoKSBjb25zdAorCisg
ICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0gTW92SGludEV2ZW50KTsKLSAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZpcnR1YWxSZWcpOwor
ICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5kOwogICAgIH0KICAg
ICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZ2lzdGVyKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCmlu
ZGV4IDQ1MjZkMzliYjA5NGM0Yjg2NmU2N2VkM2UyZWUxYjQ4OTZhYmI3MjYuLjhjZjcwODA0MDNh
OGVmZmQ5YjIyMWEzNWFmOGQyMWRlMzJiNWRkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApAQCAtNDIsNyArNDIsNyBA
QCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OmxvZ0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQm
IGV2ZW50KQogewogICAgIGRhdGFMb2dGKCJzZXEjJXU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHNpemUoKSkpOwogICAgIGV2ZW50LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICBkYXRhTG9n
RigiICIpOworICAgIGRhdGFMb2dMbigiICIpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMTE5LDEw
ICsxMTksMTIgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRH
cmFwaCYgZ3JhcGgsCiAgICAgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+
JiB2YWx1ZVJlY292ZXJpZXMsIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4qIHVuZGVmaW5l
ZE9wZXJhbmRTcGFucykgY29uc3QKIHsKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7
CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CisgICAgdW5zaWduZWQgbnVt
VG1wczsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGludmFsaWRJbmRleCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICB1bnNpZ25lZCBmaXJzdFVuZGVm
aW5lZCA9IGludmFsaWRJbmRleDsKICAgICBib29sIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9
IGZhbHNlOwpAQCAtMTMwLDM3ICsxMzIsNDIgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVh
bTo6cmVjb25zdHJ1Y3QoCiAgICAgYXV0byBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuID0gWyZd
ICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5k
ZXgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVl
UmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChmaXJzdFVuZGVmaW5lZCkub2Zmc2V0
KCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdp
c3RlckZvckluZGV4KGkgLSAxKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0g
dmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChmaXJzdFVuZGVmaW5lZCkudmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCk7CisgICAgICAgIGludCBsYXN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVy
aWVzLm9wZXJhbmRGb3JJbmRleChpIC0gMSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAg
ICAgICAgIGludCBtaW5PZmZzZXQgPSBzdGQ6Om1pbihmaXJzdE9mZnNldCwgbGFzdE9mZnNldCk7
CiAgICAgICAgIHVuZGVmaW5lZE9wZXJhbmRTcGFucy0+YXBwZW5kKHsgZmlyc3RVbmRlZmluZWQs
IG1pbk9mZnNldCwgaSAtIGZpcnN0VW5kZWZpbmVkIH0pOwogICAgICAgICBmaXJzdFVuZGVmaW5l
ZCA9IGludmFsaWRJbmRleDsKICAgICB9OwogICAgIGF1dG8gcmVjb3JkVW5kZWZpbmVkT3BlcmFu
ZCA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICAvLyBXZSB3YW50IHRvIHNlcGFyYXRlIHRo
ZSBzcGFuIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSBzcGFuIG9mIGxvY2FscyBldmVuIGlmIHRoZXkg
aGF2ZSBhZGphY2VudCBvcGVyYW5kcyBpbmRleGVzLgotICAgICAgICBpZiAoZmlyc3RVbmRlZmlu
ZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJl
Y292ZXJpZXMuaXNBcmd1bWVudChpKSkKKyAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGlu
dmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVz
Lm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICBmbHVzaFVuZGVm
aW5lZE9wZXJhbmRTcGFuKGkpOwogCiAgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZh
bGlkSW5kZXgpIHsKICAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaTsKLSAgICAgICAgICAg
IGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkp
OworICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVz
Lm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCk7CiAgICAgICAgIH0KICAgICB9OwogCiAg
ICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsK
LSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpLT5udW1DYWxsZWVM
b2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50
b0xvY2FsKCkgKyAxOwotICAgIGVsc2UKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgbnVtVmFyaWFibGVzID0gY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOworICAgICAgICBudW1UbXBzID0gY29kZUJsb2NrLT5u
dW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKKyAgICB9IGVsc2UgewogICAg
ICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7
CisgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOworICAgIH0K
ICAgICAKICAgICAvLyBDcmF6eSBzcGVjaWFsIGNhc2U6IGlmIHdlJ3JlIGF0IGluZGV4ID09IDAg
dGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1lbnQgY2hlY2sKICAgICAvLyBmYWlsdXJlLCBpbiB3
aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJlIGFscmVhZHkgc2V0IHVwLiBUaGUgcmVjb3Zlcmll
cyBzaG91bGQKICAgICAvLyByZWZsZWN0IHRoaXMuCiAgICAgaWYgKCFpbmRleCkgewotICAgICAg
ICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVk
ZSB0bXBzIGhlcmUgYmVjYXVzZSB0aGV5IGNhbid0IGJlIHVzZWQgeWV0LgorICAgICAgICB2YWx1
ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbnVtVmFyaWFibGVzLCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zl
cmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSks
IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRG
b3JJbmRleChpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gbnVtVmFyaWFibGVzOwogICAgIH0KQEAgLTE3MSwxMiArMTc4LDEzIEBA
IHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBzdGFy
dEluZGV4LS07CiAgICAgCiAgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBE
RkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291
cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFi
bGVzKTsKKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBvcGVyYW5kU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmll
ZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3Qg
VmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZXZlbnQgIiwgZXZlbnQpOwogICAgICAgICBzd2l0Y2ggKGV2ZW50Lmtp
bmQoKSkgewogICAgICAgICBjYXNlIFJlc2V0OgogICAgICAgICAgICAgLy8gbm90aGluZyB0byBk
by4KQEAgLTE5OCwyMSArMjA2LDIzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJl
Y29uc3RydWN0KAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBN
b3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChl
dmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2Vz
LnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZShldmVudC5p
ZCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5v
cGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZl
bnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRT
b3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAg
ICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwg
VmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50
LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJh
bmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRP
cGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQu
bWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCBzb3VyY2VzOiAiLCBvcGVyYW5kU291cmNlcyk7CiAg
ICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVS
ZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZh
bHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJj
ZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTIzMCw2ICsyNDAsNyBAQCB1bnNpZ25l
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgTWluaWZpZWROb2Rl
KiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlkKCkpOwogICAgICAgICBNaW5pZmllZEdlbmVyYXRp
b25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5mb3MuZ2V0KHNvdXJjZS5pZCgpKTsKICAgICAgICAg
aWYgKCFpbmZvLmFsaXZlKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3Bl
cmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGRlYWQuIik7
CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dChqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlv
blN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgICAgICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFu
ZChpKTsKQEAgLTIzNyw2ICsyNDgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjdCgKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVj
b3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBub2RlKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChp
KSwgIiBpcyBjb25zdGFudC4iKTsKICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVj
dGlvblN0eWxlOjpTZXBhcmF0ZWQpIHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSAmJiBub2RlLT5jb25zdGFudCgpID09IGpzVW5kZWZpbmVkKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQoaSk7CkBAIC0yNjYsNyArMjc4LDcgQEAg
dW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9Ci0gICAgICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihp
bmZvLnUudmlydHVhbFJlZyksIGluZm8uZm9ybWF0KTsKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjayhpbmZvLnUub3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwg
aW5mby5mb3JtYXQpOwogICAgIH0KICAgICBpZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHls
ZTo6U2VwYXJhdGVkKQogICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKG9wZXJhbmRT
b3VyY2VzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudFN0cmVhbS5oCmluZGV4IDAxNTczMDA3ZWRkZGQ3MGYzMWQxN2FjMGQ5OWY3OGVi
ZjVlYTZlYmMuLmU5ZTQzYWJmZWM0ODVmZWM3ZTY2MzE1MWMxYzIyZWM1MTg5NzQxM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5o
CkBAIC00Miw5ICs0MiwxMiBAQCBzdHJ1Y3QgVW5kZWZpbmVkT3BlcmFuZFNwYW4gewogfTsKIAog
Y2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6IHB1YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAg
ICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiAgICAgewor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICAg
ICAgYXBwZW5kKGV2ZW50KTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggNzgxYjcxZTY5MjQzODI4NjQ4OTdlZmY3Zjlk
ZTY4ZTRlZTRlYmYxZC4uMzJjYmMxMDc2ZGU1OWRhYTRhNzI3ZGFjN2Q3NWZiZGNhNjA3ZGU3NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAt
MTkxLDYgKzE5MSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBu
b2RlKQogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZh
cmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBCcmFuY2g6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKaW5kZXggMzA4MGRj
MzQ1MDljNzMzMzI0YjgxNDNkMmE5NTRmMDhlZGFmMTNmYi4uYzAwNGZhY2NjMWFkMDVkMzZjZWRi
ZWRmOTY3ODJhYWI3ZGNiOTgzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5
SklUQ29kZSgpCi0gICAgOiBtX2J5dGVjb2RlSW5kZXgoVUlOVF9NQVgpCi0gICAgLCBtX2VudHJ5
RmFpbHVyZUNvdW50KDApCisgICAgOiBtX2VudHJ5RmFpbHVyZUNvdW50KDApCiB7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA5NDU2
NTc3NTVhMGVjYjc4MWNmYjg5YjExYzM5Zjk4ZjdhOWFiYTNkLi40NWU4MWJjZGRhMjg4MTczZmUx
OTllODRjNjdiOWY4OGM4MDI2ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmNsZWFyU3RhY2tGcmFtZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAs
IGNvZGUuZnJhbWVTaXplKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIoY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSk7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0
Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVj
b2RlSW5kZXgua2V5cygpKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgQ29kZUJsb2NrIHRvIGhhdmUgYSB3ZWFrIHBv
aW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UKICAgICAgICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBpdCB0
byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29u
c3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJl
c3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsKIAogICAg
ICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVjay4KICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1l
U2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJl
Z2lzdGVyKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENo
ZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0g
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJp
bGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7CisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpKSkpOwpAQCAtMTI4MSw2ICsxMjgxLDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBDYWxsRXZhbDoKICAgICAgICAgICAgIGNvbXBpbGVDYWxsRXZhbCgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgIGNv
bXBpbGVWYXJhcmdzTGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xOTUzLDcgKzE5NTYsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
RW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCiAg
ICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVm
ZmVyKCktPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1f
b3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkp
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVy
ICsgbV9ub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCkp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoKQpAQCAtMTk3
Miw3ICsxOTc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVHZXRTdGFjaygpCiAgICAg
ewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRh
LT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5k
KGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9ybWF0KSwgZGF0YS0+Zm9ybWF0KTsKICAgICAgICAg
CkBAIC03OTI2LDEzICs3OTI5LDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxl
R2V0Q2FsbGVlKCkKICAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlU2V0Q2FsbGVlKCkKICAgICB7CiAgICAg
ICAgIGF1dG8gY2FsbGVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbV9v
dXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwor
ICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
R2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtNzk0Nyw3ICs3OTUwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkK
ICAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1f
bm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBheWxvYWRGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldFNjb3BlKCkKQEAgLTk1NDIsNTEgKzk1NDUsNTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBj
b21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKQogICAg
IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgTFZhbHVlIGpz
QXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCisgICAg
ICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGls
ZCgpKTsKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAogICAgICAgICAgICAgSW50
MzIsIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGpz
QXJndW1lbnRzLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdp
bGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUK
LSAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1
dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgICAgIC8vIHN0
YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhp
dCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgICAgICAvLyBwYXN0IHRoZSBz
aXppbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDE0NDgKLSAgICAgICAgCisKICAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMg
PSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CiAKLSAgICAgICAgc3BlY3VsYXRl
KAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAg
ICAgICAgICBtX291dC5hYm92ZShsZW5ndGgsIGxlbmd0aEluY2x1ZGluZ1RoaXMpKTsKKyAgICAg
ICAgc2V0SW50MzIobGVuZ3RoSW5jbHVkaW5nVGhpcyk7CisgICAgfQogCisgICAgdm9pZCBjb21w
aWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCkpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKAogICAg
ICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAg
ICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEt
PmxpbWl0KSkpOwotICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJpdE9yKG1fb3V0LmlzWmVy
bzMyKGxlbmd0aEluY2x1ZGluZ1RoaXMpLCBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlz
LCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpKTsgCisKICAgICAgICAgbV9vdXQuc3Rv
cmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkp
OwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVy
IHNpbGx5LiBJZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3Rl
YWQKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVyIHNpbGx5LiBJ
ZiBvcGVyYXRpb25Mb2FkVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3RlYWQKICAgICAg
ICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxkbid0IGhhdmUgdG8gZG8gdGhpcy4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTY2
MAogICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9vdXQubFNocigKLSAgICAgICAgICAg
IG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSkudmFsdWUo
KSwgbV9jYWxsRnJhbWUpLAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+
bWFjaGluZVN0YXJ0KS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCiAgICAgICAgICAgICBtX291dC5j
b25zdEludFB0cigzKSk7CiAgICAgICAgIAogICAgICAgICB2bUNhbGwoCiAgICAgICAgICAgICBW
b2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAg
ICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBt
X291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBsZW5ndGgsIG1fb3V0
LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgICAgICAgICAgbGVuZ3Ro
SW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKICAgICB7Ci0g
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBhcmd1bWVu
dHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSkgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1
bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5l
d0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTk1OTUsNTAgKzk1OTgsMjcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmNoaWxk
MSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlmIChtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9
IG51bGxwdHI7IAotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG51bGxwdHI7
Ci0gICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1bWVudHNM
ZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aC5pc0tu
b3duKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0
aC5rbm93bjsKLSAgICAgICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBkYXRhLT5vZmZzZXQpCi0g
ICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIGRhdGEtPm9mZnNldDsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IDA7Ci0gICAg
ICAgICAgICBsZW5ndGggPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoKTsKLSAgICAgICAg
ICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoICsg
MSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0g
dGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUsIGJ1dCB0aHJvdWdo
IGR5bmFtaWMgb3BlcmF0aW9ucy4KLSAgICAgICAgICAgIGlmICghZGF0YS0+b2Zmc2V0KQotICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3
QmxvY2soKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9y
RXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5h
Ym92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0
KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBjb250
aW51YXRpb24pOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291
dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC5waGkoSW50
MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChs
ZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOwotICAgICAgICB9Ci0KKyAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5vZmZzZXQ7CisgICAgICAgIExWYWx1
ZSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzOyAKKyAgICAgICAgaWYgKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKSB7CisgICAgICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGggPSBt
X291dC5zdWIoY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCkpOworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9
IG1fb3V0LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgsIG1fb3V0
LmludDMyWmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFByZWRpY3Rh
YmlsaXR5OjpQcmVkaWN0YWJsZSk7CisgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgIGxlbmd0
aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzOworCisgICAgICAgIExW
YWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuaW50MzJP
bmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAgIAogICAgICAg
ICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFj
aGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0
QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7
CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0
YXJ0KS52YWx1ZSgpOwogCkBAIC05Njk3LDY1ICs5Njc3LDIwIEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUg
Y29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAgICAgICBpZiAo
IW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c0xl
bmd0aC52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVDMyX01JTikpOwogCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTFZhbHVl
IGZpeGVkTGVuZ3RoID0gbV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29u
c3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCi0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0
SW50MzIoMCkpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5hYm92
ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBjb250
aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJ
bnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0
aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnNlbGVj
dChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybyks
IGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFByZWRpY3RhYmlsaXR5OjpQcmVk
aWN0YWJsZSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3By
ZWFkKCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBX
VEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFz
aFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKLQotICAgICAg
ICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9k
ZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZT
dGF0aWNBcmd1bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5n
dGhzOwotCi0gICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSByZWN1cnNhYmxlTGFt
YmRhKFsmXShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICBp
ZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzZWxm
KHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZCkgewotICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0g
dGFyZ2V0LT5iaXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGJpdFZlY3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZihtX2dy
YXBoLnZhckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50czsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZl
cikgewotICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRzICs9IHRhcmdldC0+
Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVCh0YXJn
ZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
dGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgc3ByZWFkTGVu
Z3Rocy5hcHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBb
Jl0gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJlYWRMZW5ndGhGcm9t
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
OwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgY29sbGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAgICAgICAgTFZhbHVlIGxlbmd0
aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0FyZ3Vt
ZW50cyk7Ci0gICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCi0gICAg
ICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRlKApAQCAtOTc2Niw3
ICs5NzAxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRy
ZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAgICBhdXRvIGZvcndh
cmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVkU3ByZWFkTGVuZ3Rocywg
JnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgp
IC0+IExWYWx1ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1i
ZGEoW3RoaXMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBz
dG9yZUluZGV4KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQ
aGFudG9tU3ByZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRhcmdldC0+Y2hpbGQx
KCkubm9kZSgpLCBzdG9yZUluZGV4KTsKIApAQCAtOTc5OCw4ICs5NzMzLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRl
UmVzdCk7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRh
cmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICBM
VmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJh
bWUsIHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAgICAgICAgICBMVmFs
dWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhzLmdl
dChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICBM
VmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJh
bWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRM
ZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJh
bWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCiAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjI1NCw4ICsx
MjE5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIHBhY2tl
dCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0
b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBhY2tldCwgbV9oZWFwcy5TaGFk
b3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1f
b3V0LmxvYWRQdHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcGFja2V0LCBt
X2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoMCkpKSwgcGFja2V0
LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKKyAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tl
dF9jYWxsZWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFja2V0LCBtX2hlYXBz
LlNoYWRvd0NoaWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBAIC0xMjMxNiw3ICsx
MjI1Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5ndGg7CiAKICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewotICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICBsZW5ndGgua25vd24gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpOwogICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSB0cnVlOwogICAgICAgICAg
ICAgbGVuZ3RoLnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5ndGgua25vd24pOwogICAgICAg
ICB9IGVsc2UgewpAQCAtMTIzNDYsNyArMTIyODIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIoZnJh
bWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGdl
dEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25l
ZCBvZmZzZXQgPSAwKQpAQCAtMTc2MTEsNyArMTc1NDcsNyBAQCBwcml2YXRlOgogICAgICAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5h
ZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAg
ICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgdGFn
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogI2lm
ICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxs
RnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTksNyArMTc2NTUsOCBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFsbG9jKAog
ICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsCiAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpLAorICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZUbXBzKCkpOwogICAgIH0KIAog
ICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODI0LDE1ICsxNzc2MSwxNSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5l
c3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9wbGFuLm1vZGUoKSAhPSBGVExGb3JP
U1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFk
KCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
ZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5k
ID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiLCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFp
bGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNv
ZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZhaWxh
YmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxhYmlsaXR5ID0gIiwgYXZhaWxhYmls
aXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0
eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgIGlmIChleGl0VmFs
dWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCkBAIC0xODEzMiwzOSArMTgwNjksMzkg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmFscmVhZHlSZWdpc3RlcmVkV2Vha1Bv
aW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsKICAgICB9CiAgICAgCi0gICAgVHlwZWRQ
b2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zm
c2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFu
ZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmRdLCBvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwgb2Zmc2V0KTsKICAgICB9Ci0gICAgVHlw
ZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIFR5cGVk
UG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsK
ICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQp
CisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgVGFnT2Zmc2V0
KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQsIHB0cmRp
ZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKE9wZXJhbmQgb3Bl
cmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4gYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNldCk7CisgICAgICAgIHJldHVybiBh
ZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIG9mZnNldCk7CiAgICAgfQogICAg
IFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZm
X3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQub2Zmc2V0KCks
IG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5k
Lm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0
dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYWxs
RnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBwYXlsb2Fk
Rm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKE9wZXJhbmQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQsIFBh
eWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKGludCBvcGVyYW5k
KQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICByZXR1
cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBv
aW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggOTMzMTc3MTBmNmQwNjg2MDkxOWJj
MDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5ODM0MDc2YThkNmY5MTc0MmNjYjVjYWQ1
ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKQEAgLTc1
LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgICAgICBkYXRhTG9nKCIgICAg
VmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOwogICAgIAogICAgIGZvciAoaW50IGFy
Z3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAg
ICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNhblVuc2FmZUpTVmFsdWUoKTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOwogICAgICAgICBPcHRpb25h
bDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQp
OwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1ZSAmJiB2YWx1ZU9uU3RhY2sgPT0gcmVj
b25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1bWVudCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKaW5kZXggMDk5NThk
MmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThlMy4uMDRjODU3OTllNGQ0NjkyM2EzMTg2
NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogT1NSRXhp
dERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAogICAgIERhdGFGb3JtYXQgcHJvZmlsZURh
dGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLAotICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscykKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVu
c2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJvZmlsZURhdGFGb3JtYXQocHJvZmlsZURh
dGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCi0gICAgLCBtX3Zh
bHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCisgICAgLCBtX3ZhbHVlcyhu
dW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMsIG51bWJlck9mVG1wcykKIHsKIH0KIApA
QCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NS
RXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0CiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRhODdjY2YzMjczZmU0YmUzNjA2ODNiOGFm
M2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2YWVjZTA5N2FkOGE0ZDFlMjdiODAzMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCkBAIC02OSw3ICs2OSw3IEBA
IHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICBP
U1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKTsKKyAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzLCB1bnNpZ25lZCBudW1iZXJP
ZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBleGl0IGNhbGwgbWF5
IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgogICAgIC8vIElmIHRoYXQncyB0aGUgY2Fz
ZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3ZSdsbCBoYXZlIGEKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAppbmRleCA2
NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgxNzZlZTcyLi5hMzc4NDEwZGE5YjgwMTU3
MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNv
bW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCIKICNpbmNsdWRl
ICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEgQEAKICNpbmNsdWRlICJGVExPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJPcGVyYW5k
c0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUHJvYmVDb250
ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDc0LDE2ICs0
NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZCBleGl0SUQs
IEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAogICAgIHNpemVfdCBiYXNlbGluZVZp
cnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdp
bi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CisgICAgICAgIGF1dG8q
IHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnRtcElu
ZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGppdC5wcm9iZShbPV0g
KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0
ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRt
cE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUlu
ZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhO
dW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRt
cHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworCisgICAgICAgICAgICAgICAgdm1Q
dHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxs
RnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNv
ZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJh
bWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byog
aW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAg
ICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
OyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3Rh
dGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAg
ICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBp
dCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFscmVhZHkgcmVi
b3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhp
dC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy52aXJ0dWFsUmVn
aXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXQubV9k
ZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAo
cmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGlu
ZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
TG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVW
aXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgfQog
ICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCA3ZjdjZDM4MzI0OTYxYThmZjRl
NDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFiZDllYjNiNDcxMzM3NDRmODQzZWM2NGQ2
M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAK
QEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAg
Ly8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRp
b24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAg
ICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5l
d0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVC
bG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBj
b2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVkYjNhZDljZTVlOWNmLi5kNTdm
YjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2NTUsMzcgQEAgTFZhbHVlIE91dHB1
dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRa
ZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRh
a2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQcmVkaWN0YWJpbGl0eSBwcmVkaWN0
YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFrZW47CisgICAgICAgICAgICBy
ZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuOwor
ICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIHRh
a2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFiaWxpdHkgPT0gU2VsZWN0UHJlZGlj
dGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIGxlZnQs
IHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG5ld0Jsb2NrKCk7Cisg
ICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworICAgIExCYXNpY0Js
b2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisKKyAgICBtX2Jsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIHZh
bHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRha2VuQmxvY2ssIHByZWRpY3RhYmls
aXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExpa2VseSA/IEZyZXF1ZW5jeUNsYXNz
OjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5
OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpS
YXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwgb3JpZ2luKCkpOworCisgICAgbGVm
dFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2soY29udGludWF0
aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAgICByaWdodFRha2VuQmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1fYmxvY2sgPSBjb250aW51YXRpb247
CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNoZ0FkZChMVmFs
dWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRlZjdlMDYwZjkzNjJiM2JkY2EwZmQ0
NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2MjdkNWZmMzFjNzgxMGQ4ZmI3NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKKyNpbmNsdWRlICJG
VExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVk
ZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgpAQCAtMzY1
LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFs
dWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0K
ICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyBy
ZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZhbHVlIHNlbGVj
dChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKTsKKyAgICBMVmFs
dWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4sIFNl
bGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxl
KTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5IGRlZmF1bHQuIFVz
ZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2VzcygpIHdpdGggYQog
ICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVuY2VkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmExODUzYmE5ODUyMmFhYWM2MWI4NDk5NTUyNzk0YTUwOTMwYzdkNmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFByZWRpY3Rh
YmlsaXR5LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVExfSklUKQorCitu
YW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNlbGVjdFByZWRpY3RhYmlsaXR5IDog
dWludDhfdCB7CisgICAgTm90UHJlZGljdGFibGUsCisgICAgUHJlZGljdGFibGUsCisgICAgTGVm
dExpa2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IDY5MzRjM2YwZDM3OTFmNjRiYTQyOTYzZTA1NTYzZGJi
YzdkZGE1YTQuLmM3MjZhZDI3YzgxNWFjNjdhNjcwZDI1ODA0YWE4Y2FlMjJiM2EwZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaApAQCAtMTAwLDcgKzEw
MCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlmIChjYWxsU2l0ZUluZGV4
KSB7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKSk7CiAgICAgfQogICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKHZtLCB1c2VkUmVnaXN0
ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRz
Li4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hl
Y2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRz
LnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk2YTVmNTI3N2RkNjMxYWNkNGNjYmVjZDE0YjI0Y2M1ZDRhMzlhMjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNr
cG9pbnRzLnJiCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2NsYXNzIENoZWNrcG9pbnQKKyAgICBhdHRyX3JlYWRlciA6dXNlcworICAgIGF0
dHJfcmVhZGVyIDpkZWZzCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX3JlYWRlciA6
aW5kZXgKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIGluZGV4LCB0bXBzKQorICAgICAgICBA
bmFtZSA9IG5hbWUKKyAgICAgICAgQGluZGV4ID0gaW5kZXgKKyAgICAgICAgQHVzZXMgPSB0bXBz
LmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0gOnVzZSB9CisgICAgICAgIEBkZWZz
ID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDpkZWZpbmUgfQorICAg
IGVuZAorCisgICAgZGVmIGxpdmVuZXNzKG5hbWVzcGFjZSkKKyAgICAgICAgRU9GPC0tCisgICAg
Y2FzZSAje25hbWVzcGFjZX06OiN7bmFtZX06CitFT0YKKyAgICBlbmQKK2VuZAorCitjbGFzcyBD
aGVja3BvaW50cworICAgIGRlZiBpbml0aWFsaXplKG9wY29kZSwgdG1wcywgY2hlY2twb2ludHMp
CisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAg
IEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcF93aXRoX2luZGV4IHsgfChuYW1lLCB0bXBz
KSwgaW5kZXh8IENoZWNrcG9pbnQubmV3KG5hbWUsIGluZGV4LCB0bXBzKSB9CisgICAgZW5kCisK
KyAgICBkZWYgbGl2ZW5lc3MKKyAgICAgICAgQGNoZWNrcG9pbnRzLmVhY2ggZG8gfGNoZWNrcG9p
bnR8CisKKyAgICAgICAgZW5kCisgICAgICAgIEVPRjwtLQorQml0TWFwPG1heE51bVRtcHM+IHRt
cExpdmVuZXNzRm9yI3tAb3Bjb2RlLmNhcGl0YWxpemVkX25hbWV9KHVpbnQ4X3QgY2hlY2twb2lu
dCkKK3sKKyAgICBzd2l0Y2ggKGNoZWNrcG9pbnQpIHsKKworICAgIH0KK30KK0VPRgorICAgIGVu
ZAorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29k
ZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCmluZGV4IGRh
Yjg2ODZjYTMzYTEwMmM5YmZhMWRmMTgwM2ViYjRmMGFiMjQ0ODUuLmNmZDlkZjE1MTE0N2E4NmRh
NGJjNzViZTQ2YTY3ODI1ZTI1Mzc1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvT3Bjb2RlLnJiCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIE9wY29kZQogICAgIGF0dHJfcmVh
ZGVyIDphcmdzCiAgICAgYXR0cl9yZWFkZXIgOm1ldGFkYXRhCiAgICAgYXR0cl9yZWFkZXIgOmV4
dHJhcworICAgIGF0dHJfcmVhZGVyIDpjaGVja3BvaW50cwogCiAgICAgbW9kdWxlIFNpemUKICAg
ICAgICAgTmFycm93ID0gIk9wY29kZVNpemU6Ok5hcnJvdyIKQEAgLTQ1LDEyICs0NiwxNCBAQCBj
bGFzcyBPcGNvZGUKICAgICAgICAgdGlkCiAgICAgZW5kCiAKLSAgICBkZWYgaW5pdGlhbGl6ZShz
ZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXpl
cnMpCisgICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRh
ZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0bXBzLCBjaGVja3BvaW50cykKICAgICAgICAg
QHNlY3Rpb24gPSBzZWN0aW9uCiAgICAgICAgIEBuYW1lID0gbmFtZQogICAgICAgICBAZXh0cmFz
ID0gZXh0cmFzIHx8IHt9CiAgICAgICAgIEBtZXRhZGF0YSA9IE1ldGFkYXRhLm5ldyBtZXRhZGF0
YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzCiAgICAgICAgIEBhcmdzID0gYXJncy5tYXAud2l0aF9p
bmRleCB7IHwoYXJnX25hbWUsIHR5cGUpLCBpbmRleHwgQXJndW1lbnQubmV3IGFyZ19uYW1lLCB0
eXBlLCBpbmRleCArIDEgfSB1bmxlc3MgYXJncy5uaWw/CisgICAgICAgIEB0bXBzID0gdG1wcwor
ICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXAgeyB8KGNoZWNrcG9pbnQsIF8p
fCBjaGVja3BvaW50IH0gdW5sZXNzIGNoZWNrcG9pbnRzLm5pbD8KICAgICBlbmQKIAogICAgIGRl
ZiBjcmVhdGVfaWQhCkBAIC0xMTgsNiArMTIxLDggQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIDw8
LUVPRgogc3RydWN0ICN7Y2FwaXRhbGl6ZWRfbmFtZX0gOiBwdWJsaWMgSW5zdHJ1Y3Rpb24gewog
ICAgICN7b3Bjb2RlSUR9CisgICAgI3t0ZW1wc30KKyAgICAje2NoZWNrcG9pbnRWYWx1ZXN9CiAK
ICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQpAQCAtMTMyLDYgKzEzNywxOCBAQCBFT0YKICAgICAgICAg
InN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJRFR5cGV9IG9wY29kZUlEID0gI3tuYW1lfTsiCiAg
ICAgZW5kCiAKKyAgICBkZWYgY2hlY2twb2ludFZhbHVlcworICAgICAgICByZXR1cm4gaWYgQGNo
ZWNrcG9pbnRzLm5pbD8KKworICAgICAgICBbImVudW0gQ2hlY2twb2ludHMgOiB1aW50OF90IHsi
XS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8Y2hlY2twb2ludHwgIiAgICAgICAgI3tjaGVja3Bv
aW50fSwiIH0pLmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZDaGVja3BvaW50cywiLCAiICAgIH07
Il0pLmpvaW4oIlxuIikKKyAgICBlbmQKKworICAgIGRlZiB0ZW1wcworICAgICAgICByZXR1cm4g
aWYgQHRtcHMubmlsPworCisgICAgICAgIFsiZW51bSBUbXBzIDogdWludDhfdCB7Il0uY29uY2F0
KEB0bXBzLm1hcCB7fCh0bXAsIHR5cGUpfCAiICAgICAgICAje3RtcH0sIn0pLnB1c2goIiAgICB9
OyIpLmpvaW4oIlxuIikKKyAgICBlbmQKKwogICAgIGRlZiBlbWl0dGVyCiAgICAgICAgIG9wX3dp
ZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYsIG9wY29kZUlEVHlwZSwgMCkKICAgICAgICAgb3Bf
d2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUzMiwgb3Bjb2RlSURUeXBlLCAwKQpAQCAtMjAwLDYg
KzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bjb2RlU2l6ZSBfX3NpemUsIGJvb2wg
cmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRlY29kZUdlbmVyYXRvcj4KICAgICBzdGF0aWMgYm9v
bCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRvciogZ2VuI3t0eXBlZF9hcmdzfSN7bWV0YWRhdGFf
cGFyYW19KQogICAgIHsKKyAgICAgICAgI3shQGNoZWNrcG9pbnRzLm5pbD8gPyAiZ2VuLT5zZXRV
c2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAgICAgICAgIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6
ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2VuLT5hbGlnbldpZGVPcGNvZGUxNigpOwogICAgICAg
ICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTMyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4IDIwNGFjNzU5ZTEzZWZmMTUxZjhjZDE3
N2YzYmYxYjcwZTA3NzljYWEuLjY2ODU1YmE2NTAwODBlNGMyM2NjMGViZWMxMGU3OTQ5Y2RlNzY4
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5y
YgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKQEAgLTQz
LDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgogICBlbmQKIAogICBkZWYgY3JlYXRlX29wY29kZShu
YW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFz
XSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5p
dGlhbGl6ZXJzXSkKKyAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmlnWzpleHRyYXNd
LCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRhZGF0YV9pbml0
aWFsaXplcnNdLCBjb25maWdbOnRtcHNdLCBjb25maWdbOmNoZWNrcG9pbnRzXSkKICAgZW5kCiAK
ICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFtZSwgb3Bjb2RlcywgY29uZmlnKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRleCBmNjM5NGFj
NzEwNzEyNWI3Y2FiMjFhZDJiOTExM2MwNzk1MzZhNjAwLi5lZjdmNmM5NGY0MTY4YjRhMjg0NjA1
M2E1ZDAxM2JlMTEyMjBkZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIENhbGxGcmFtZTo6aW5p
dERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihDYWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpT
Q2FsbAogICAgIEFTU0VSVChnbG9iYWxFeGVjLT5pc0RlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1
Z2dlcigpKTsKIH0KIAotYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zm
c2V0KCkgY29uc3QKK2Jvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJs
b2NrKCktPmppdFR5cGUoKSkgewpAQCAtOTAsMTIgKzkwLDEyIEBAIGJvb2wgQ2FsbEZyYW1lOjpj
YWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogCiB1bnNpZ25lZCBDYWxsRnJh
bWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50YWcoKTsKIH0KIAogU1VQUFJF
U1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS51bnNh
ZmVUYWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpXS51bnNhZmVUYWcoKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDYWxsRnJh
bWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdApAQCAtMTA1LDcgKzEwNSw3IEBAIENhbGxTaXRlSW5k
ZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIAogU1VQUFJFU1NfQVNBTiBDYWxs
U2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0
cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxs
U2l0ZUFzUmF3Qml0cygpICYgKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSA+
PiBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQpKSk7CiB9CiAKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQpAQCAtMTE3LDMzICsxMTcsMzQgQEAgY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFt
ZTo6Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhjb25z
dCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUoQnl0ZWNv
ZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZwYykpKTsKLSAgICB0aGlzW0NhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gY2FsbFNpdGUuYml0cygpOworICAgIHRoaXNb
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFnKCkgPSBj
YWxsU2l0ZS5iaXRzKCk7CiB9CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNC
eXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBB
U1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5ieXRl
Y29kZU9mZnNldChjdXJyZW50VlBDKCkpOyAgICAgCiB9CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCiBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNT
RVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgcmV0dXJuIGNvZGVCbG9j
aygpLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpLnB0
cigpOwogfQogCiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhjb25zdCBJbnN0cnVjdGlv
biogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUoY29kZUJsb2NrKCktPmJ5dGVj
b2RlSW5kZXgodnBjKSk7Ci0gICAgdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50
YWcoKSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGNhbGxTaXRlLmJpdHMoKSk7CisgICAgdGhpc1tz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50YWcoKSA9IGNh
bGxTaXRlLmJpdHMoKTsKKyAgICBBU1NFUlQoY3VycmVudFZQQygpID09IHZwYyk7CiB9CiAKIHVu
c2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0
ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgo
KSk7CiAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiB9CiAKQEAgLTE2NSw4ICsx
NjYsOCBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAgICAgICAg
IHJldHVybiBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICB9CiAjZW5kaWYKLSAgICBB
U1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJuIEJ5dGVj
b2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgp
LmJ5dGVjb2RlSW5kZXgoKTsKIH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4o
KQpAQCAtMTgwLDcgKzE4MSw3IEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkK
ICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAj
ZW5kaWYKLSAgICByZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0Fz
Qnl0ZWNvZGVPZmZzZXQoKSkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgo
KS5ieXRlY29kZUluZGV4KCkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1l
SW50ZXJuYWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5oCmluZGV4IGNmYjc3MTg1NjAzOTkzMzkxMDA0ZmMxMzIxMTgzODQyM2M1ZGM2YTkuLjY0NDkw
ZTdhNzA3ZWViMDFiYTA3YWNhMzMyNjIzYWRlMTNlMGM5NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJTdGFja1Zpc2l0b3IuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlZNRW50cnlS
ZWNvcmQuaCIKKyNpbmNsdWRlIDx3dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaD4KIAog
bmFtZXNwYWNlIEpTQyAgewogCkBAIC00NiwxOCArNDcsMjQgQEAgbmFtZXNwYWNlIEpTQyAgewog
ICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKICAgICAgICAgZXhw
bGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQotICAgICAgICB7IH0KKyAgICAg
ICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCisgICAgICAgIHsgCisgICAg
ICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKKyAgICAgICAgfQog
Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYnl0
ZWNvZGVJbmRleDsgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRl
eCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5tX2J5dGVj
b2RlSW5kZXg7IH0KKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9iaXRzOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUlu
ZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9iaXRzID09IG90aGVyLm1fYml0czsgfQogCi0g
ICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXguYXNC
aXRzKCk7IH0KKyAgICAgICAgdWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsg
fQogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgo
KSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KGJpdHMoKSk7IH0KIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRzKQorICAgICAgICAgICAgOiBt
X2JpdHMoYml0cykKKyAgICAgICAgeyB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IG1fYml0cyB7IEJ5dGVjb2Rl
SW5kZXgoKS5vZmZzZXQoKSB9OwogICAgIH07CiAKICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNp
dGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAgLTY1LDcgKzcyLDcgQEAgbmFtZXNw
YWNlIEpTQyAgewogICAgICAgICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsK
IAogICAgICAgICBleHBsaWNpdCBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRz
KQotICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJp
dHMpKQorICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KGJpdHMpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCkBAIC03OCwyNCArODUsMjcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIGFybTY0
XzMyIGV4cGVjdHMgY2FsbGVyIGZyYW1lIGFuZCByZXR1cm4gcGMgdG8gdXNlIDggYnl0ZXMgCiAg
ICAgc3RydWN0IENhbGxlckZyYW1lQW5kUEMgewogICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVy
KSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lOwotICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBj
b25zdCBJbnN0cnVjdGlvbiogcmV0dXJuUEM7CisgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIp
IHZvaWQqIHJldHVyblBDOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBzaXplSW5SZWdp
c3RlcnMgPSAyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSAvIHNpemVvZihSZWdpc3Rlcik7CiAgICAg
fTsKICAgICBzdGF0aWNfYXNzZXJ0KENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyA9
PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpLCAiQ2FsbGVyRnJh
bWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzIGlzIGluY29ycmVjdC4iKTsKIAotICAgIHN0cnVjdCBD
YWxsRnJhbWVTbG90IHsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY29kZUJsb2NrID0g
Q2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBhcmd1bWVudENvdW50ID0gY2FsbGVlICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRDb3VudCArIDE7Ci0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxOworICAgIGVudW0g
Y2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7CisgICAgICAgIGNvZGVCbG9jayA9IENhbGxlckZy
YW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKKyAgICAgICAgY2FsbGVlID0gY29kZUJsb2NrICsg
MSwKKyAgICAgICAgYXJndW1lbnRDb3VudCA9IGNhbGxlZSArIDEsCisgICAgICAgIHRoaXNBcmd1
bWVudCA9IGFyZ3VtZW50Q291bnQgKyAxLAorICAgICAgICBmaXJzdEFyZ3VtZW50ID0gdGhpc0Fy
Z3VtZW50ICsgMSwKICAgICB9OwogCisgICAgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VO
VU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoQ2FsbEZyYW1lU2xvdCkKKyAgICBPVkVSTE9BRF9SRUxB
VElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhDYWxsRnJhbWVT
bG90KQorCiAgICAgLy8gUmVwcmVzZW50cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBzY3JpcHQgZXhl
Y3V0aW9uLgogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbW9zdCBmdW5j
dGlvbnMuCiAgICAgY2xhc3MgQ2FsbEZyYW1lIDogcHJpdmF0ZSBSZWdpc3RlciB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBoZWFkZXJTaXplSW5SZWdpc3RlcnMg
PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSArIDE7CiAKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBz
aG91bGQgb25seSBiZSBjYWxsZWQgaW4gdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzCiAgICAg
ICAgIC8vIHdoZW4geW91J3ZlIGd1YXJhbnRlZWQgdGhlIGNhbGxlZSBjYW4ndCBiZSBhIFdhc20g
Y2FsbGVlLCBhbmQgY2FuCkBAIC0xMDYsMTAgKzExNiwxMCBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgY2VsbCwgYW5kIGlmIGl0J3Mgbm90LCB3ZSB0aHJv
dyBhbiBleGNlcHRpb24uCiAgICAgICAgIGlubGluZSBKU1ZhbHVlIGd1YXJhbnRlZWRKU1ZhbHVl
Q2FsbGVlKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU09iamVjdCoganNDYWxsZWUoKSBjb25z
dDsKLSAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRz
KHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5wb2ludGVyKCkpOyB9Ci0gICAgICAgIFNVUFBS
RVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVC
aXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQor
ICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhp
c1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLnBvaW50ZXIoKSk7IH0K
KyAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxsZWVCaXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsg
cmV0dXJuIENhbGxlZUJpdHModGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSldLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgY29uc3Q7Ci0gICAgICAgIENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayk7IH0KKyAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsgfQogICAgICAgICBpbmxpbmUg
U1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sqIHVuc2FmZUNvZGVCbG9jaygpIGNvbnN0OwogICAgICAg
ICBpbmxpbmUgSlNTY29wZSogc2NvcGUoaW50IHNjb3BlUmVnaXN0ZXJPZmZzZXQpIGNvbnN0Owog
CkBAIC0xNDYsNyArMTU2LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxlckZy
YW1lQW5kUEMsIHJldHVyblBDKTsgfQogICAgICAgICBBYnN0cmFjdFBDIGFic3RyYWN0UmV0dXJu
UEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBDKHZtLCB0aGlzKTsgfQogCi0gICAgICAgIGJv
b2wgY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBj
YWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgY2FsbFNp
dGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3Q7CiAKICAgICAgICAgdW5zaWduZWQgY2Fs
bFNpdGVBc1Jhd0JpdHMoKSBjb25zdDsKQEAgLTE4MiwxNSArMTkyLDEzIEBAIG5hbWVzcGFjZSBK
U0MgIHsKICAgICAgICAgc3RhdGljIHZvaWQgaW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1
Z2dlcihDYWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2FsbGVlKiBnbG9iYWxDYWxsZWUpOwogCiAg
ICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBjb2RlZnJhbWUgKG9yIGNvbnN0YW50
IGZyb20gdGhlIENvZGVCbG9jaykuCi0gICAgICAgIFJlZ2lzdGVyJiByKGludCk7CiAgICAgICAg
IFJlZ2lzdGVyJiByKFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIC8vIFJlYWQgYSByZWdpc3Rl
ciBmb3IgYSBub24tY29uc3RhbnQKLSAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoaW50KTsK
KyAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIGtub3duIG5vbi1jb25zdGFudAogICAg
ICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIC8v
IEFjY2VzcyB0byBhcmd1bWVudHMgYXMgcGFzc2VkLiAoQWZ0ZXIgY2FwdHVyZSwgYXJndW1lbnRz
IG1heSBtb3ZlIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uLikKICAgICAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIC0g
MTsgfQotICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7
IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnBheWxvYWQoKTsgfQor
ICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVy
biB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnBh
eWxvYWQoKTsgfQogICAgICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0KGludCBhcmd1bWVu
dCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKyBhcmd1bWVudCk7IH0K
ICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoaW50IGFyZ3Vt
ZW50KSB7IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgYXJndW1lbnQpOyB9
CiAKQEAgLTIzOSw3ICsyNDcsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAKICAgICAgICAgSlNWYWx1
ZSBhcmd1bWVudEFmdGVyQ2FwdHVyZShzaXplX3QgYXJndW1lbnQpOwogCi0gICAgICAgIHN0YXRp
YyBpbnQgb2Zmc2V0Rm9yKHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgeyByZXR1
cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgLSAxOyB9CisgICAgICAgIHN0YXRpYyBpbnQgb2Zmc2V0Rm9yKHNpemVfdCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykgeyByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAKICAgICAgICAgc3RhdGljIENhbGxG
cmFtZSogbm9DYWxsZXIoKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgICAgIGJvb2wgaXNEZXBy
ZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSBjb25zdApAQCAtMjUxLDEwICsyNTksMTAgQEAg
bmFtZXNwYWNlIEpTQyAgewogICAgICAgICBib29sIGlzU3RhY2tPdmVyZmxvd0ZyYW1lKCkgY29u
c3Q7CiAgICAgICAgIGJvb2wgaXNXYXNtRnJhbWUoKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdp
c3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnBheWxvYWQoKSA9IGNv
dW50OyB9CisgICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW50IGNv
dW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50PihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5bG9hZCgpID0gY291bnQ7IH0KICAgICAgICAg
aW5saW5lIHZvaWQgc2V0Q2FsbGVlKEpTT2JqZWN0Kik7CiAgICAgICAgIGlubGluZSB2b2lkIHNl
dENvZGVCbG9jayhDb2RlQmxvY2sqKTsKLSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2
YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IEluc3RydWN0aW9uKj4odmFsdWUpOyB9CisgICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9p
ZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gdmFsdWU7IH0KIAogICAg
ICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKaW5kZXggYTk3ZGVj
YTUzYmNlMTc5Mjg5YjBjMzgwZDA0ZThmMmE4NjA0NzdkMS4uZWU3ZWMyYWIxMDRhN2EzNGQ5OGIw
ZjQzOGY2NDRjMmRjYTFjNTE2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCkBAIC0zMiw1MCArMzIsMzkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBpbmRleCkK
LXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAgIGlm
IChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihpbmRleCkpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKLX0KLQogaW5saW5lIFJlZ2lz
dGVyJiBDYWxsRnJhbWU6OnIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gcihy
ZWcub2Zmc2V0KCkpOwotfQotCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2Vk
UihpbnQgaW5kZXgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOworICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigm
dGhpcy0+Y29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIocmVnKSk7CisgICAgcmV0dXJuIHRo
aXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hl
Y2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gdW5jaGVja2VkUihyZWcu
b2Zmc2V0KCkpOworICAgIEFTU0VSVCghcmVnLmlzQ29uc3RhbnQoKSk7CisgICAgcmV0dXJuIHRo
aXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIEpTVmFsdWUgQ2FsbEZyYW1lOjpndWFyYW50
ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20o
KSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7Cisg
ICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5q
c1ZhbHVlKCk7CiB9CiAKIGlubGluZSBKU09iamVjdCogQ2FsbEZyYW1lOjpqc0NhbGxlZSgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5vYmplY3QoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNf
Y2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLm9iamVjdCgpOwogfQogCiBpbmxpbmUg
Q29kZUJsb2NrKiBDYWxsRnJhbWU6OmNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRo
aXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CisgICAg
cmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5S
ZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBTVVBQUkVTU19BU0FOIENvZGVCbG9j
ayogQ2FsbEZyYW1lOjp1bnNhZmVDb2RlQmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0aGlz
W0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2so
KTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayldLlJlZ2lzdGVyOjphc2FuVW5zYWZlQ29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBKU0ds
b2JhbE9iamVjdCogQ2FsbEZyYW1lOjpsZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkgY29uc3QK
QEAgLTEwMiwxMiArOTEsMTIgQEAgaW5saW5lIGJvb2wgQ2FsbEZyYW1lOjppc1dhc21GcmFtZSgp
IGNvbnN0CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q2FsbGVlKEpTT2JqZWN0KiBjYWxs
ZWUpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojpj
YWxsZWVdID0gY2FsbGVlOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGNhbGxlZTsKIH0KIAogaW5saW5l
IHZvaWQgQ2FsbEZyYW1lOjpzZXRDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2td
ID0gY29kZUJsb2NrOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXSA9IGNvZGVCbG9jazsKIH0KIAogaW5s
aW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRTY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCwgSlNT
Y29wZSogc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyMDlj
M2ExYmU0ZjU4ZGFlYTgwN2UzYmFmZWYwZDRiYTAyZmY0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgVCBnZXRUbXAoc2l6ZV90IG9mZnNldCkgCisgICAgeworICAgICAgICBp
ZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDY0X3QpKQorICAgICAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxUPih0bXBzW29mZnNldF0pOworICAgICAgICBlbHNlIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MzJfdCkpCisgICAgICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih0bXBzW29mZnNldF0pKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDE2X3Qp
KQorICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50MTZf
dD4odG1wc1tvZmZzZXRdKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDhfdD4odG1wc1tvZmZzZXRdKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgdm9p
ZCogbmV4dEluc3RydWN0aW9uSnVtcFRhcmdldDsKKyAgICB1aW50NjRfdCB0bXBzW21heE51bUNo
ZWNrcG9pbnRUbXBzXTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGRhYTk0Yzg5ZjkwMDVhOTk3MmZjMGUzYjAy
ZWI4OTNkMjExY2RkOTcuLjhlZjFjM2Q4NTBjMmM4YTAxNTQ2ZjJjOGE5ZGViM2Q4NTQ3YTViMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgogI2luY2x1ZGUg
IkNhbGxGcmFtZUNsb3N1cmUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCisjaW5jbHVkZSAi
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKQEAgLTEy
Myw3ICsxMjQsNyBAQCBKU1ZhbHVlIGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxlckNhbGxTaXRlSW5k
ZXggPSBjYWxsZXJGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOwogICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIGNhbGxl
clNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2VkUihjYWxsZXJDb2RlQmxvY2stPnNj
b3BlUmVnaXN0ZXIoKS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSog
Y2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9j
ay0+c2NvcGVSZWdpc3RlcigpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBVbmxpbmtlZENvZGVC
bG9jayogY2FsbGVyVW5saW5rZWRDb2RlQmxvY2sgPSBjYWxsZXJDb2RlQmxvY2stPnVubGlua2Vk
Q29kZUJsb2NrKCk7CiAKICAgICBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQgPSBjYWxsZXJV
bmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgY2FsbGVyVW5saW5rZWRDb2Rl
QmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKTsKQEAgLTIxMyw2ICsyMTQsOSBAQCB1bnNp
Z25lZCBzaXplT2ZWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdAogICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCAwKTsKICAgICAKKyAgICBpZiAobGVuZ3RoID4gbWF4QXJndW1lbnRzKQorICAgICAgICB0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKwogICAgIGlmIChsZW5n
dGggPj0gZmlyc3RWYXJBcmdPZmZzZXQpCiAgICAgICAgIGxlbmd0aCAtPSBmaXJzdFZhckFyZ09m
ZnNldDsKICAgICBlbHNlCkBAIC0yNDksNyArMjUzLDcgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9y
VmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3QgbGVuZ3RoKQordm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVu
dHMuaXNDZWxsKCkpIHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MSwzMSArMjY1
LDMxIEBAIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpCiAgICAgc3dpdGNoIChjZWxsLT50eXBlKCkp
IHsKICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1
bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6CiAgICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5j
b3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3Qs
IG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwp
LT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQs
IGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5
VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNJbW11dGFi
bGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxK
U0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0
LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsgCiAg
ICAgZGVmYXVsdDogewogICAgICAgICBBU1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwogICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgICAg
IGlmIChpc0pTQXJyYXkob2JqZWN0KSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRzKGds
b2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBsZW5ndGggJiYgb2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaSArIG9mZnNl
dCk7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkg
PSBvYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0
RWxlbWVudERlc3RbaV0gPSBvYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAg
ICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHZhbHVlOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpXSA9IHZhbHVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9IH0K
QEAgLTI5Nyw4ICszMDEsNyBAQCB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsRgogICAgIAogICAgIGxv
YWRWYXJhcmdzKAogICAgICAgICBnbG9iYWxPYmplY3QsCi0gICAgICAgIGNhbGxGcmFtZSwKLSAg
ICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApLAor
ICAgICAgICBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoY2FsbGVlRnJhbWVP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKSksCiAgICAgICAgIGFyZ3VtZW50
cywgb2Zmc2V0LCBsZW5ndGgpOwogICAgIAogICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMobGVuZ3RoICsgMSk7CkBAIC01MzgsOCArNTQxLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAogICAgICAg
ICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewot
ICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykg
eworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlvbiBoYW5k
bGluZyBpbiBjaGVja3BvaW50cy4KKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgIGlm
IChtX3JldHVyblBDID09IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9T
UlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rl
cm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhh
bmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7
CiAgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAgLTU2MSw2ICs1NjksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6RG9uZTsKIAorICAgICAgICBtX3JldHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBD
KCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAg
fQogCkBAIC01OTcsNiArNjA2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlv
bjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFu
ZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZvaWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9
OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZt
LCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY2LDcg
Kzg3Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2Nv
cGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlz
U2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vy
c2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKQogICAgICAgICByZXR1cm4g
Y2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUpKTsKIAogICAgIGlmIChpc0pTQ2FsbCkgewpAQCAtOTM1LDcgKzk0NSw3IEBAIEpTT2Jq
ZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNPCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUo
dm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VT
b2Z0KCkpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwg
YXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmgKaW5kZXggODZjMzI0NjkyMDRlOWFlNTkxMWZlY2VhOTAyYWU5N2NhYjU1ZDNhMC4uZmYx
YjRlODYxMDRjOTYyNTk3NzllMjUyNzkyMmFmMzM0N2NmMjk0NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFyZ3Vt
ZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51
bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWdu
ZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1
ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgp
OwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVl
LCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBkNzFhNTk3MWRkYzhmMGY1ZWE2NzhkNWZjZTQ4
ZTM5NmUyMmE4NzU0Li44MThmNGRiMmI2N2RlMzkzYTE3OTg0ZGQ1MDY4YTg0MmQyMWZiMDUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZy
YW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAgICAg
IG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxp
bmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2ZyYW1l
Lm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAg
ICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1l
LT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIo
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
ICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVD
b2RlQmxvY2suZ2V0KCk7CkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZy
YW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwgV1RGOjpGdW5jdGlv
bjwKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiAhaXNJbmxpbmVkKSB7CiAgICAgICAgICAgICBp
bmRlbnQrKzsKIAotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJlQnl0
ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRz
QXJlQnl0ZWNvZGVJbmRleCgpKSB7CiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KGluZGVudCwgYnl0ZWNvZGVJbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyMjAwOWM1ZmQyYmEyMjdk
NDdjZmU4NTQ5MzlmNTJkZWYyZDcxYmMyLi5lMDZjYjQ5YjI5NWRlNWVjN2MxOWRiMjRlNzMzODli
YTM1NWVkZWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTY0NywyOCArNjQ3LDI4IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQ
UlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywg
R1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCB0byk7CiAgICAgfQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoVmlydHVhbFJl
Z2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNp
emVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoaW50IGVudHJ5LCBH
UFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAg
dm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KFZpcnR1YWxSZWdpc3RlciBlbnRyeSwg
R1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAg
IHsKLSAgICAgICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgdG8pOworICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0g
ICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSUmVnIGZyb20sIGludCBlbnRyeSkK
KyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
ICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCisgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwog
ICAgIH0KIAogICAgIHZvaWQgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0
cihSZWdpc3RlcklEIHRvKQpAQCAtNjk2LDE5ICs2OTYsMTkgQEAgcHVibGljOgogICAgIC8vIGNh
bGxlcidzIGZyYW1lIHBvaW50ZXIuIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVlIGlzIHJl
c3BvbnNpYmxlIGZvciBwdXNoaW5nIHRoZQogICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBjb250YWlu
aW5nIHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xv
Z3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQog
ICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJv
bG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkp
OwogICAgIH0KICNlbHNlCi0gICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVy
QmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRQ
YXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBz
dG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQo
KSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0
YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxs
RnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCisg
ICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVk
SW1tMzIgdGFnLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0
cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEo
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OworICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTE0
OCw5ICsxMTQ4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5p
c1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAg
fQotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGlj
IEFkZHJlc3MgYWRkcmVzc0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVz
cyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIp
CkBAIC0xMTYzLDkgKzExNjQsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJl
Z2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVy
YW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICByZXR1cm4gdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFu
ZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiB0
YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFk
ZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcg
YmFzZUdQUikKQEAgLTExNzgsMzAgKzExODAsMzEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
dmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBh
eWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlz
VG1wKCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpKTsKICAgICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJh
bWUuCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KGludCBzbG90KQorICAgIHN0
YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChzbG90ID49IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cyk7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yo
UmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpKTsK
KyAgICAgICAgQVNTRVJUKHNsb3Qub2Zmc2V0KCkgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycykub2Zmc2V0KCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2Fs
bGVlIENhbGxGcmFtZS4KICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50
IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOworICAgICAgICByZXR1cm4g
Y2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQor
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xv
dCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNl
dChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5
bG9hZFNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2Fk
U2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVG
cmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CkBAIC0xMjE4
LDcgKzEyMjEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZUNh
bGxlckZyYW1lKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoMCkud2l0
aE9mZnNldChDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOworICAgICAgICByZXR1cm4g
Y2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlcigwKSkud2l0aE9mZnNldChDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0
U2NyYXRjaEdQUihSZWdpc3RlclNldCBwcmVzZXJ2ZWQpCkBAIC0xNTI3LDcgKzE1MzAsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpOworICAgICAgICAgICAgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7
CiAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5jcHAKaW5kZXggOTY5MGUwOWM4YjU3MjcwZGVmN2Y4N2E0NmNjMmI1N2U0Zjc2MjAzZS4uMzk1
ZDkxMzNiY2Q5NDA3NTNmODg4MGI5ODM3YjVjNjRkNGM1NjQyMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAg
Q2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBDYWxsRnJhbWVTaHVmZmxlRGEKICNlbmRpZgogCiAgICAgQVNTRVJUKCFkYXRhLmNhbGxl
ZS5pc0luSlNTdGFjaygpIHx8IGRhdGEuY2FsbGVlLnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwo
KSk7Ci0gICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBk
YXRhLmNhbGxlZSk7CisgICAgYWRkTmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgZGF0YS5jYWxs
ZWUpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgQVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRhLmFy
Z3NbaV0udmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAppbmRleCA2MjQzOWJkZjM0NDNiODdiZTk5OTYw
MmZkOWMzZWJjOTZhZjZhOWY1Li40YzZhYTMyZjRmNTg3NjM4MzEwOTM4ZjAwZjkyYzA5OThkNjZm
OTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5o
CkBAIC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVW5k
ZWNpZGVkKCkpOwogICAgICAgICBBU1NFUlQoIWdldE5ldyhqc1ZhbHVlUmVncykpOwotICAgICAg
ICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpIH07CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNo
ZWRSZWNvdmVyeSB7IGdldE5ldyhDYWxsRnJhbWVTbG90OjpjYWxsZWUpIH07CiAgICAgICAgIEFT
U0VSVChjYWNoZWRSZWNvdmVyeSk7CiAgICAgICAgIGFkZE5ldyhqc1ZhbHVlUmVncywgY2FjaGVk
UmVjb3ZlcnktPnJlY292ZXJ5KCkpOwogICAgIH0KQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhc3N1bWVDYWxsZWVJc0NlbGwoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0
TmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5ldyhDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOwogICAgICAgICBzd2l0Y2ggKGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBJblBhaXI6CiAgICAgICAgICAgICB1cGRh
dGVSZWNvdmVyeSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDI4MDMyYTIxYWFjYjlhMmQ5
MzIyODVmZTFmOTY1YWRlM2UyN2E4MGEuLjg3MzE1ZWY4NDc3YWMxMmE3M2M1NzBhZWY5MTI1MGM1
NjlhNGYxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMzMxLDE2ICszMzEsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFz
cyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07CiAgICAgICAgIHZvaWQgY29tcGlsZU9wRXFK
dW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBl
LCBpbnQganVtcFRhcmdldCk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
aW50IHNyYyk7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoaW50IGluZGV4
LCBGUFJlZ2lzdGVySUQgdmFsdWUpOwotICAgICAgICB2b2lkIGVtaXRMb2FkSW50MzJUb0RvdWJs
ZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lk
IGVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSk7CiAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJy
aWVyIGlzIHVzZWQgYmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBt
YXkgc2FmZWx5IGJlIHRoZSBzYW1lIGFzIGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMu
Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
SlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOworICAgICAg
ICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOwogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKQEAgLTQwNCwzMiArNDA0LDMyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVG
aW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKKyAgICAgICAgdm9pZCBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7
CisgICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBKU1ZhbHVlUmVncyBzcmMpOwogCi0gICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50
SW50KGludCBzcmMpOwotICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGlu
dCBzcmMpOworICAgICAgICBpbnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKTsKKyAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgc3JjKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGJvb2wg
Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3Qm
IGNvbnN0YW50KTsKKyAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3Rh
bnQpOwogCi0gICAgICAgIHZvaWQgZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRh
Zyk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHBheWxvYWQpOwogCiAgICAgICAgIHZvaWQgZW1pdExvYWQoY29uc3QgSlNW
YWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIHZv
aWQgZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwg
aW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3Rl
cklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAg
ICAgdm9pZCBlbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lz
dGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3Rl
cklEIHBheWxvYWQyKTsKIAotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1Zh
bHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJv
b2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGlu
dCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2Up
OwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQm9v
bChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNl
KTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQg
dmFsdWUpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBK
U1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBh
eWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9y
ZUludDMyKFZpcnR1YWxSZWdpc3RlciwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJ
c0ludDMyID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCi0gICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7Ci0g
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAg
ICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7CiAKQEAgLTQz
OCwxNyArNDM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRCaW5hcnlE
b3VibGVPcChjb25zdCBJbnN0cnVjdGlvbiAqLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJ
bnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0
cnVlLCBib29sIG9wMklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAogI2Vsc2UgLy8gVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJl
Z2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0
ZXJJRCBkc3QyKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVn
aXN0ZXJJRCBkc3QyKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBk
c3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsK
LSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKGludCBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVn
aXN0ZXJJRCBwYXlsb2FkKQorICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVl
MzJfNjQgKi8gPSBmYWxzZSkKICAgICAgICAgewogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHBheWxvYWQpOwogICAgICAgICB9CkBAIC00NTYsMjkgKzQ0OSwyOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmSlNDZWxsKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCwgaW50IFZSZWcpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBK
dW1wIGVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKTsKICAgICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50
KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdp
c3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0
ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQs
IFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKLSAgICAgICAgdm9pZCBjb21waWxl
R2V0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CisgICAgICAg
IHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKFZpcnR1YWxSZWdpc3RlciBiYXNlUmVnLCBjb25z
dCBJZGVudGlmaWVyKik7CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJ
bXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRp
dGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQg
b3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKQEAgLTY4NSw4ICs2NzgsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2
b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwor
ICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJh
bmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
SlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC02OTQsMjAgKzY4NywyMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1Zh
bHVlKiogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwogICAgICAgICB2b2lk
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJS
ZWcgcGF5bG9hZCk7CiAjZW5kaWYKLSAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXROb3Rp
ZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Ci0g
ICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKLSAgICAgICAgdm9pZCBl
bWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNW
YWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Cisg
ICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKKyAg
ICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAot
ICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CisgICAgICAgIHZvaWQgZW1p
dEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dElu
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAg
dm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogCi0gICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMp
OwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpOwotICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKTsKKyAgICAgICAgSlNWYWx1ZSBnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVFVu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rp
b24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwpAQCAtNzM0LDcgKzcyNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwogICAgICAgICAg
ICAgKytpdGVyOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGludCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCk7CisgICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgbGlu
a0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsCiAgICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7CiAKQEAgLTc1NCwxMyArNzQ3LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4pOwogI2VuZGlmCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAg
c3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0
LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBB
cmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJh
dGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTgwNCw3
ICs3OTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAg
ICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1
bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVu
dHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODY0LDcgKzg1Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJh
bmRUeXBlcyhpbnQgc3JjMSwgaW50IHNyYzIpOworICAgICAgICB2b2lkIHByaW50Qnl0ZWNvZGVP
cGVyYW5kVHlwZXMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggMzQ1ODc0NGZiY2RkNTNhY2Y5YTQzMzI4
YmM0OTRiMGZlZGNiODkzZi4uM2EzMmMzMjYxODlmYWIxOTdkN2NmOWY5MWQ1ZjZiNGIzMTAyMDJj
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC0x
NTgsOCArMTU4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamJlbG93ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCk7CkBAIC0xNzIsMTMgKzE3MiwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICAv
LyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUg
ZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCkBAIC0yMzAsMTMgKzIzMCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CkBAIC0yNTYsMTMgKzI1NiwxMyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGRzdCwgb3AxLCBv
cDIsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwo
aW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CkBAIC0yODQsMTMg
KzI4NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9m
ZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRp
b24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3Jj
RHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+
KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKQEAgLTQxNSw5ICs0MTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3Ig
eDg2IElESVYgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6
OmVheCk7CkBAIC00OTEsOSArNDkxLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNuaXBwZXRHZW5lcmF0b3I+CiB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHByb2Zp
bGluZ1BvbGljeSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01Mzgs
OCArNTM4LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGkKIHZvaWQgSklUOjplbWl0X29wX2Jp
dG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIGludCBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKQEAgLTU5OSw5ICs1OTksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNoaWZ0VHlwZSBzbmlwcGV0U2hp
ZnRUeXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTY3NCw4ICs2
NzQsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Q
cm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0
aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KQEAgLTcyNCw5ICs3MjQsOSBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5j
dGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKQEAgLTc5OSw3ICs3OTksNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHNy
Y1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC04NDUsOSArODQ1LDkgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKgogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTkwNiw5ICs5
MDYsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRl
eCBiZjIzMDZiY2U0ZDU2ZjEwOWEwMzYxOGIzNDA3MmZjNTdjMGU1YWMzLi5hZjllZWI2Mjc5Y2Nl
NGQxMWI5MzRhZTFmMWI1YzZlNGQ2NzIyZjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CkBAIC02Niw3ICs2Niw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qKQogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNf
Y2FzdDxpbnQ+KGJ5dGVjb2RlLm1fYXJndik7CiAKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9w
X2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVk
aW5nVGhpcygwKSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNs
dWRpbmdUaGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDApOwogICAgICAgICBzdG9yZTMyKHJlZ1QwLCBtZXRhZGF0YS5t
X2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlE
KCkpOwpAQCAtODUsOSArODUsOSBAQCBzdGQ6OmVuYWJsZV9pZl90PAogLCB2b2lkPgogSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykK
IHsKLSAgICBpbnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7Ci0g
ICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOwotICAgIGlu
dCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CisgICAgaW50
IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7IC8vIEZJ
WE1FOiBXaHkgaXMgdGhpcyBhIHZpcnR1YWwgcmVnaXN0ZXIgaWYgd2UgbmV2ZXIgdXNlIGl0IGFz
IG9uZS4uLgogICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJB
cmc7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDEpOwpAQCAt
MjA2LDcgKzIwNiw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiB7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogCiAgICAg
LyogQ2FsbGVyIGFsd2F5czoKICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRv
IGNhbGxlZSBjYWxsRnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcAppbmRleCBiN2QwY2EyMzU4YmU1MjUwMThhM2Y0ZTk2MTZkOWNiODQ4ZmZmNTIxLi5l
MDdhODMzZDRjODUzYjljN2EwMmRlOGI3NDYwMWRmMzA2NmJhZTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBn
ZW5lcmljVW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKE9wdGlv
bnM6OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdG9w
SlNDYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1l
ICIsIFJhd1BvaW50ZXIodG9wSlNDYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsIGNvZGVC
bG9jaywgIlxuIik7Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFdURkJyZWFrcG9pbnRUcmFw
KCk7CiAgICAgfQogICAgIAogICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93
Q2hpY2tlbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCAyMjE0
OWM5YmQxYjhlYzExODEyY2JlMGI4NTQxYmVlOTNiMTBhYjM0Li5jNjZjMWIxMTkwMzY4NTFjMjcy
ZDBkOGEyNGViZTM5ZTMxMTc2NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaApAQCAtNDgsMTkgKzQ4LDIwIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IEpJVDo6ZW1pdExvYWRGb3JBcnJheU1vZGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3Rh
bnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYykKK0FMV0FZU19J
TkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3Jj
KSk7CisgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwogICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogeworICAgIEFTU0VSVChlbnRyeS5pc0hlYWRl
cigpKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGVudHJ5KSk7CiAgICAgc3RvcmUzMihmcm9tLCBwYXls
b2FkRm9yKGVudHJ5KSk7CkBAIC0xNDMsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGkKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTE1NSw3ICsxNTYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CkBAIC0xNjcs
OSArMTY4LDkgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bk5vdEltbWVkaWF0ZShyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9
CiAKQEAgLTI4NCw5ICsyODUsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVDb2Rl
QmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAjZW5kaWYKICNlbmRpZgogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYykKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFz
U3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsK
IH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlKQpAQCAtMzYzLDI2ICszNjQsMjYgQEAgaW5saW5lIEpJVEFycmF5TW9k
ZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiAgICAgcmV0dXJu
IEpJVENvbnRpZ3VvdXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBkb3VibGUg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgZG91
YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7
CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwog
fQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRh
ZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRh
ZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXND
b25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4
KS50YWcoKSksIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTAsOSArMzkxLDkg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFn
KQogICAgIGxvYWQzMih0YWdGb3IoaW5kZXgpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
cGF5bG9hZCkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTQwNiwxMzYgKzQwNywxMzMgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkKQogICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3Mg
ZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
LCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRz
dC5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFs
dWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5w
YXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGludCBpbmRleCwg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRh
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQodGFnICE9IHBheWxvYWQpOwogCiAgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0
ZXIpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAg
ZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcoaW5k
ZXgsIHRhZyk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChyZWcsIHBheWxvYWQpOworICAgICAg
ICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKICAgICBpZiAocGF5bG9hZCA9PSBiYXNl
KSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQs
IGJhc2UpLCB0YWcpOwotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBw
YXlsb2FkKTsKKyAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQp
OwotICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKKyAgICBsb2FkMzIocGF5
bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFz
ZSksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKGludCBpbmRleDEsIFJl
Z2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJ
RCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIo
VmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2Fk
MSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXls
b2FkMikKIHsKLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAgICBlbWl0
TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKKyAgICBlbWl0TG9hZChyZWcyLCB0YWcyLCBw
YXlsb2FkMik7CisgICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVl
KQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBG
UFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGlu
Q29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAg
ICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOwor
ICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdp
c3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5k
ZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihy
ZWcpOwogICAgICAgICBjaGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KCZpbkNvbnN0YW50UG9vbCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRl
QWRkcmVzcyhieXRlUG9pbnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocGF5bG9hZEZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocGF5bG9hZEZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0
b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0
ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQog
ewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9y
KHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJh
c2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBi
b29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsK
LSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwg
VHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1tMzIgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlm
ICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXND
ZWxsKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKLSAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQs
IGJvb2wgaW5kZXhJc0Jvb2wpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQogewot
ICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNCb29sKQotICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGluZGV4KSk7
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdG
b3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKGludCBpbmRl
eCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIHN0b3JlRG91
YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7CisgICAgc3RvcmVEb3VibGUodmFsdWUsIGFk
ZHJlc3NGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRl
eCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFu
dCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRl
eCB9OwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcih0
YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9y
KHRhcmdldCwgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwg
cGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygp
KSwgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewog
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVy
SW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7CiAg
ICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2
aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRhZykpOwogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAg
ICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0lu
dDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudElu
dChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBjb25zdGFudCA9IGdl
dENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTsKQEAgLTU1NSwxMSArNTUzLDExIEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQg
b3AyLCBpbnQmIG9wLCBpbnQzMl90CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBn
ZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cg
cmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgZHN0KTsKQEAgLTU3MSw0NyArNTY5LDMyIEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgbG9hZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCksIGRzdCk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGlu
dCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJ
RCBkc3QyKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJl
Z2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLm9mZnNldCgpLCBkc3QxLCBzcmMyLm9m
ZnNldCgpLCBkc3QyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
SW50MzIoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdp
c3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3Qs
IEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3Qub2Zmc2V0KCksIGZyb20pOwotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVn
aXN0ZXJJRCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC02MjksMjgg
KzYxMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
ZykpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0
ZXIgdlJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZS
ZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBp
bkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAg
ICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsK
KyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5l
IHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQg
dmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgQVNTRVJUKGlzT3BlcmFu
ZENvbnN0YW50SW50KGluZGV4KSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChy
ZWcpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKHJlZykuYXNJbnQzMigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAogQUxXQVlTX0lOTElO
RSBKSVQ6OlBhdGNoYWJsZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lz
dGVySUQgcmVnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXgg
N2NmYTA5NWYwMGQxN2UxNDExYmU5Y2ZiODBmODA4MDZmNzg4ZjZjMS4uNjI2MzJkYTg0YWZlZjk3
ODIxMTkwM2M0ODZkMjE5YTFlOWE3ZTVhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVj
b2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAg
ICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRy
ZXNzRm9yKGRzdCkpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChy
ZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CiAgICAgcmV0KCk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1
cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0
cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKQEAgLTEyOSw5ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hh
c0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1f
Y29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0
ZWNvZGUubV9wcm90b3R5cGU7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwg
cHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdl
IHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZp
cnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2LDcgKzE4
Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0
YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlZ1QwKTsKQEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19l
bXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVm
aW5lZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKQEAgLTI0Niw4
ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAK
QEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CkBA
IC0yNzQsOCArMjc0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAg
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHRlc3Q2NChO
b25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4ICsyODYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAg
aW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAg
LTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXgu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fc3JjOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
ICAgICAKQEAgLTM2MCwxNSArMzYwLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRG
dW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3Qg
SlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhl
biBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzkwLDE0ICszOTAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwg
dmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgaW50
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBKU1ZhbHVlIHNw
ZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIub2Zmc2V0KCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OworICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgp
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCkBAIC00ODUsMTggKzQ4NSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MTAsMjYg
KzUxMCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwg
cmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VS
VChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFu
ZGxlcih2bSgpKTsKIH0KQEAgLTU0OCw5ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9y
aHM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVn
VDEpOwogICAgIApAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
aW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAg
IGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNy
YzIsIHJlZ1QxKTsKIApAQCAtNjUwLDggKzY1MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvTnVtYmVyPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihyZWdUMCkpOwpAQCAtNjY0LDggKzY2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1l
cmljPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKQEAgLTY4NCwyMCArNjg0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0g
ICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkp
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9P
YmplY3Q+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CkBAIC03MjgsMTAgKzcyOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zm
c2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uKTsKIAogICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlLm9mZnNl
dCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUp
OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBj
YWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCkBAIC03Mzks
NyArNzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlP
U1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVs
c2UKQEAgLTc0OSw3ICs3NDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwog
ICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZl
ci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBw
cm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAg
ICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUm
Pihwcm9maWxlKSk7CkBAIC03NjYsMTAgKzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50
U2NvcGU+KCk7Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwot
ICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBl
bWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBi
eXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAg
IHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3ICs3OTQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU3dpdGNoQ2hhcj4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFi
bGVJbmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0
cmluZz4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsK
ICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0
aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAg
ICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMx
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtODY3LDggKzg2
Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihj
b25zdCBJbnN0cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
CiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdElu
aXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7CisgICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCiAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1
cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVn
VDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIApAQCAtOTM3
LDcgKzkzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUu
bV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9
ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJl
Z1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2NSwxMyArOTY1
LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVj
dHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAgLTk4NSw3ICs5
ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zm
c2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNl
VmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTA0LDggKzEx
MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNv
ZGUubV9yZWdleHAub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQpAQCAtMTExNSwxMiArMTExNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxh
enlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vs
c2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9u
RGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNjEsMTEgKzExNjEsMTEgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKQEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlc0luZGV4ID0gYnl0ZWNvZGUu
bV9hcmd2Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAg
ICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2
YWx1ZXNJbmRleCAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjE5LDggKzEyMTksOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjM2LDkgKzEyMzYsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0
eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjgyLDkgKzEyODIsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5Pigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAt
MTM0OSwxMCArMTM0OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CkBAIC0xMzkwLDkgKzEzOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGly
ZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRh
ZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUwOSw3
ICsxNTA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFS
ZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIu
CiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCBy
ZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
Myk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTUyMyw4ICsxNTIzLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBU
aGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gy
UmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQ
YWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJl
Z1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkp
OwogfQogCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDApOwogICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpT
VmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwpAQCAtMTU1Niw3
ICsxNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xl
bmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5
dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwpAQCAtMTU4Niw3ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEFyZ3VtZW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDApOwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVn
VDIpOwogICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSwgcmVzdWx0UmVncyk7Cisg
ICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBhZTViNmFkNTRjYTgxMzZl
Y2FjMWI2NDExYzk1NzM0MzBlNWMxZjdhLi5jNDYzNzlhOWY5ZWNjYWU3NDRhOGU3YWM4MDg1NTFm
ZWJmMmZhNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCkBAIC05MzMsNyArOTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlm
IChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNC
aXRzKCkpOwogICAgIGVsc2UKQEAgLTk0Myw3ICs5NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsK
ICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMSwgcmVnVDApOwog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVn
cyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVl
UHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDNiNDg1MGZhYjhkNmZhZTkzMGU5ZTg2OTNjNDRiYmY0YTFlNDM5M2Qu
LjhjYjU1ZmI1YjdlZjg1ZjBhYzExOWYyMmVlMmFkMTkxYWMxOTA0NGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMTY1NCwxOCArMTY1NCwxOCBA
QCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShWTSog
dm1Qb2ludGVyLCB1aW50MzJfdCBieXRlYwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSkKICAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVk
IGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwogCi0gICAgICAgIHVuc2lnbmVk
IG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyA9
IDA7CiAgICAgICAgIGlmIChieXRlY29kZUluZGV4KQogICAgICAgICAgICAgbnVtVmFyc1dpdGhW
YWx1ZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Ci0gICAgICAgIE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBu
dW1WYXJzV2l0aFZhbHVlcyk7CisKKyAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+
IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRo
VmFsdWVzLCAwKTsKICAgICAgICAgaW50IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcyA9IHN0YXRp
Y19jYXN0PGludD4oQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5k
bGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBpZiAob3BlcmFuZElz
TG9jYWwob3BlcmFuZCkgJiYgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSA8IGxv
Y2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworCisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVl
U2F2ZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtdXN0SGFuZGxl
VmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAg
ICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAg
Q29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKTsKQEAgLTE3ODMsNyArMTc4Myw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKFZNKiB2bVBvaW50ZXIsIHVpCiAgICAg
Y29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1l
dGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgp
KTsKICAgICB9KTsKIApAQCAtMTkwNyw4ICsxOTA3LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qgc2Nv
cGUKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogCi0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVS
ZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJl
ZykgPSBzY29wZS0+bmV4dCgpOworICAgIGF1dG8mIHNjb3BlU2xvdCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoc2NvcGVSZWcpKTsKKyAgICBzY29wZVNsb3QgPSBzY29w
ZVNsb3QuUmVnaXN0ZXI6OnNjb3BlKCktPm5leHQoKTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU09iamVjdCogY29uc3RydWN0b3IsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5jZSkKQEAgLTI0MTYsNyArMjQxNiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RnJvbVNjb3BlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KSkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBH
ZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2dl
dFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgaXMgYWx3YXlzIGNvbnZlcnRlZCB0byBDbG9z
dXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KQEAgLTI0NTksOCArMjQ1OSw4IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IEluc3RyCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxK
U09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgp
KS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2Fz
dDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1Zh
bHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1
ZSkuanNWYWx1ZSgpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dl
dFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgZG9lcyBub3Qga2VlcCB0aGUgc2NvcGUgcmVn
aXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZHLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBhYjk5ZmQ5ODdiMDYxZjJlNzZhMTdjMjhiZThj
NGU3MjY1YTJkODE1Li5lNzI5ZmMwNThlYzY4ZWMxMWYzMmQ1NzA3ODliNzdhMDk3NWQyNmYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApA
QCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHsKICAgICBpZiAo
aGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCkBAIC0xMTcsOCArMTE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAK
QEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yMDgs
NyArMjA4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5
VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWQKICAgICB9CiAgICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMjM1LDcgKzIz
NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKQEAgLTI0OSw3ICsyNDksNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogICAgIExhYmVs
IHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmll
cihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlz
KTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5
VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogICAgIC8vIHBy
b3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCiAKLSAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGVtaXRCeVZhbElkZW50
aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCByZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2Fz
ZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQ
dXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
Ym9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKLSAgICBpbnQgYmFzZTsKLSAgICBpbnQgcHJvcGVydHk7Ci0gICAgaW50
IHZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAKICAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Ci0g
ICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICAgICAgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKQEAgLTMzNywzNiArMzM3LDM2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZ2V0dGVyLm9mZnNldCgpLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NldHRlci5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwpAQCAtMzc1LDE4ICszNzUsMTggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIocHJvcGVydHkpLmltcGwoKSk7CkBAIC0zOTUsOSArMzk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKQEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ0NSw4ICs0NDUsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
LSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CkBAIC00ODUsOCArNDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MTMsOSArNTEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAg
LTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKQEAgLTU3MSw4ICs1NzEsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGludCBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgYm9vbCBkaXJlY3QgPSAhIShieXRlY29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGly
ZWN0KTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3Ry
dWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLApAQCAt
NjE1LDggKzYxNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4Kytd
OwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQordm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtNjcwLDggKzY3
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0
YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApAQCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90KQogewogICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJl
ZyByZWcpCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xv
c3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQordm9pZCBKSVQ6OmVtaXRHZXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCiB7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKQEAgLTgwMCw4ICs4MDAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9w
ZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVy
YW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSog
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXROb3RpZnlX
cml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKIH0KLXZvaWQgSklUOjpl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQordm9pZCBK
SVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNo
cG9pbnRTZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7CkBAIC05MzgsNyArOTM4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFcKICAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4ICs5NTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsxMDg2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IK
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwpAQCAtMTA5OSw5ICsxMDk5LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBpbnQgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAtMTExMCw3ICsxMTEwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUpIHsKQEAgLTExMzMsNyArMTEzMyw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
CiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwpAQCAt
MTE1MCw4ICsxMTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7CkBAIC0xMTY0LDggKzExNjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CkBAIC0xMTc2LDcgKzExNzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50
ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2Vs
c2UgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWdu
ZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxs
OwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTk5LDcgKzExOTksNyBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1
bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CkBA
IC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZQogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNJ
bnQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CkBAIC0xNTAxLDcg
KzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeQogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCAyY2Y5MTk4ZjQwZWRhYWY1M2E2MWRiZjMz
OTBhNmM3ZGIyODZhNWMxLi41ODI3MTNlNjQwODdhNTFmNTkzOWI5MGI5ODU0NWRmMTMzZDBjNmFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC00NSwx
OCArNDUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZElu
dDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCk7Ci0gICAg
ICAgIGlubGluZSBKdW1wIGVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOworICAgICAgICBpbmxp
bmUgSnVtcCBlbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9h
ZCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEIGRzdCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0Nl
bGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICBpbmxpbmUgSnVtcCBl
bWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAjZW5kaWYKIAotICAgICAgICB2
b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0
bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkp
OwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9t
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZv
aWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwogCiAgICAgICAgIFZNKiB2bSgpIGNv
bnN0IHsgcmV0dXJuIG1fdm07IH0KIApAQCAtNjQsMzYgKzY0LDM2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIH07CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlubGluZSBKU0ludGVyZmFj
ZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVh
bFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICBpbmxpbmUgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCkKICAgICB7Ci0gICAgICAgIGxv
YWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHBheWxvYWQpOwotICAgICAg
ICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBwYXlsb2FkKTsKKyAgICAg
ICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAK
LSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1w
SWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgaW5saW5lIEpT
SW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1
YWxSZWdpc3RlckluZGV4KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICB9CiAgICAgCi0gICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVu
c2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwg
dGFnRm9yKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIg
PCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1
YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJl
Z2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNl
SklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAg
ICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGxvYWRQdHIodGFnRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFs
UmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIo
dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIGlzRG91Ymxl
ID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9h
ZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKHBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAg
ICAgICAgaXNEb3VibGUubGluayh0aGlzKTsKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAg
ICAgICAgcmV0dXJuIG5vdEludDsKICAgICB9CkBAIC0xMDEsMjMgKzEwMSwyMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpbmxpbmUgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkNjQo
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICByZXR1cm4gYnJhbmNo
SWZOb3RDZWxsKGRzdCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6
SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1w
IEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBKdW1wIG5vdEludDMyID0gYnJhbmNoSWZO
b3RJbnQzMihkc3QpOwogICAgICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihkc3QsIGRzdCk7CiAgICAg
ICAgIHJldHVybiBub3RJbnQzMjsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6
Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdp
c3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgSnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5v
dE51bWJlcihzY3JhdGNoKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMy
KHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwpA
QCAtMTI5LDEyICsxMjksMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklE
IGZyb20pCiAgICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBzdG9y
ZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CkBAIC0xNDMsMTIgKzE0MywxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50
cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAg
ICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBhZGRyZXNzRm9yKGVudHJ5KSk7
CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCAzODg3MzA1MmQxMjg1MmZjNmJiOTE0MmQ0NTYw
N2FlOGUxOWE2NzBhLi4wYmE3M2VmOGMxMzRlYmJiZDFkMDRhNGIxNzIxNGY0ZmE3MzUxODNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcApA
QCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoVk0m
IHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90CiAgICAgICAgICAgICBm
aXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQsIERhdGFGb3JtYXRJbnQzMik7CiAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcg
PSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSk7CiAgICAgfQog
ICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtLCBqaXQsIG51bVVzZWRTbG90c0dQ
Uiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgYXJndW1lbnRDb3VudFJl
Y292ZXJ5LCBmaXJzdEFyZ3VtZW50UmVnLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklU
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAppbmRl
eCA0ZjU2N2QwNmFlYTU0NGFiMjY3MTU1YzEzZGYzNmE3MjQ5YjZjMzQzLi45MzNjYTliZTEwMmUw
ZWRmOTRiYjRlYWU4MjgyMTQ4MjI5YzgyNmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50IGFy
Z3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJn
dW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVt
aXRMb2FkRG91YmxlKHNyYywgZHN0LCBzY3JhdGNoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHZvaWQgbG9hZENlbGxBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0
KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1
cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChzcmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYg
ZmFpbFRhcmdldCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZy
YW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAg
ICAgZmFpbFRhcmdldCA9IGVtaXRMb2FkSW50MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAgICAg
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmlu
ZGV4IDUyNDFlNWY3Y2MzMzJhNjRlMGRlNmRiNDRiZGFmOWU4ZTgwZjIyYWEuLmMzNzZkYmUyY2Q3
ZDZkZDNmYTU0ODdiNTdiNTg5NDdmNmRmYmEzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQog
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4ID0g
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCk7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdlciA9
IGppdC5icmFuY2hJZk5vdEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJbnQz
Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmlu
ZGV4IDM1N2E0NmU4ZTU3ODk3ZjI3ODVjZDMzOWZjYmUyYmMwYzkwY2VkYjIuLmUwMmQ4N2ExNGFh
ZjQ5YjI3YTEwYmU4OGViOWYxYmZjY2U0YmVlNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNp
bmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7ICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlubGlu
ZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29u
c3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRPcGVy
YW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KK2lu
bGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihv
cGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUt
PnIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhmaXJz
dCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJz
dCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSog
Y2FsbEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5dGVj
b2RlLm1fYXJndjsKICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+
dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxs
ZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwog
ICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsK
QEAgLTE2ODksNyArMTY5MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1Nl
dHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgc2V0
dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
KSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUo
Y2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAg
IGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7
CkBAIC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNh
bGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAg
IGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2Fy
Z2MpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNh
bGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1Zh
bHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldFJl
dHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZyYW1l
LT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBj
KTsKQEAgLTE5MzAsNyArMTkzMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
cm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBt
ZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHBy
b2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0
c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29w
ZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NjEsMTEgKzE5NjIsMTI1IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKICAg
ICBMTElOVF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+CitzdGF0
aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVjb2Rl
LCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS5nZXRUbXA8SlNWYWx1ZT4oT3Bjb2RlOjphcmdDb3Vu
dCkuYXNVSW50MzIoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBidWZm
ZXIpIHsKKyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxGcmFt
ZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCAwLCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDEpOworICAgIH0pOworICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQoKSkg
eworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwoZ2xv
YmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRP
cGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisgICAg
ZWxzZQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0
ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2Rz
dCkgPSByZXN1bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hOZXh0
SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYg
cGMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+dm0oKS5leGNlcHRpb25Gb3JJ
bnNwZWN0aW9uKCkpOworICAgIGlmIChPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwg
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgeworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0cigpOworICAgICAg
ICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpw
Yy5uZXh0KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgbmV4
dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworI2lmIEVOQUJMRShKSVQp
CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KTsKKyAgICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4
KCk7CisgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5k
KG5leHRCeXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG5l
eHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNs
b3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCB2b2lkKiwgRW5jb2RlZEpTVmFsdWUpOworZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQpCit7Cisg
ICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5nIGNoZWNrcG9pbnRzIGRvIHJpZ2h0IG5vdyBpcyBt
b3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdlIGNhbiBqdXN0IGRvIHRoYXQgaGVyZSBhbmQgcmV0
dXJuLgorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
KyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRl
KGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRl
LT5ieXRlY29kZUluZGV4OworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsK
KyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDYWxsVmFyYXJncz4oKS5tX2RzdCkg
PSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJl
c3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBvcF90YWlsX2NhbGxfdmFyYXJn
cyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRoZSB0aGluZyBpdCB3YXMgY2FsbGluZyB3YXMgaW5s
aW5lZC4KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0SW5zdHJ1
Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBl
IHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KENhbGxGcmFtZSogY2FsbEZyYW1lKTsKK2V4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0
KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAg
U2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIEFTU0VSVChieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSk7CisKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7
CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAg
ICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBw
Yy0+YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3ND
aGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ29uc3RydWN0
VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGMubmV4
dCgpLT5vcGNvZGVJRCgpID09IG9wX3JldCwgIldlIHN0cm9uZ2x5IGFzc3VtZSBhbGwgdGFpbCBj
YWxscyBhcmUgZm9sbG93ZWQgYnkgYW4gb3BfcmV0LiIpOworICAgICAgICBoYW5kbGVWYXJhcmdz
Q2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcFRhaWxDYWxs
VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQocmV0dXJuVG9UaHJvdyh2bSksIDApOworCisgICAgcmV0dXJu
IGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCiBleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSog
dm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0ZyYW1lKQogewogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gdm0tPnRvcENhbGxGcmFtZTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSgqdm0pOwotCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxwdHI7
CiAgICAgaWYgKGNhbGxGcmFtZSkKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCp2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggZTE3MzRkY2Y2MWI0Y2ZjNTUxMmZh
Mjg1NjAxYmNhYjMwYzg4ZjJlNC4uODhkY2Y3YTAxZDAxN2NjMDg5ODJjODI2NDBiM2MxNjk4MDM5
MTAzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0dGVyU2V0dGVyT1NS
RXhpdFJldHVyblBvaW50KG9wTmFtZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JFeGl0UmV0dXJuTGFi
ZWwob3BOYW1lLCBzaXplKQogCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCi0g
ICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRpIExM
SW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVByb2ZpbGUob2Zmc2V0LCBj
ZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4MzksMTMgKzE4Mzks
MTcgQEAgZW5kKQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1
bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFjcm8gZG9DYWxsVmFy
YXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQ
YXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1Bh
dGgpCittYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QzXSwgdDMKICAg
ICBidHB6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgotICAgIGptcCBfbGxpbnRf
dGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0aW9uOgorICAgIGptcCBl
eGNlcHRpb25UYXJnZXQKKy5ub0V4Y2VwdGlvbjogICAgCitlbmQKKworbWFjcm8gZG9DYWxsVmFy
YXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQ
YXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1Bh
dGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3Ry
YW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQogICAgIGlmIEpTVkFMVUU2NAogICAg
ICAgICBtb3ZlIHIxLCBzcApAQCAtMjAwMCw2ICsyMDA0LDIxIEBAIG9wKGxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogZW5kKQogCiAKK29wKGNo
ZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkK
KyAgICBtb3ZlIHIwLCBhMgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50
X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgam1wIHIxCitlbmQpCisKK29w
KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICAjIEZJWE1FOiBX
ZSBjYW4gcHJvYmFibHkgZGlzcGF0Y2ggdG8gdGhlIGNoZWNrcG9pbnQgaGFuZGxlciBkaXJlY3Rs
eSBidXQgdGhpcyB3YXMgZWFzaWVyIAorICAgICMgYW5kIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVy
IGZvciBwZXJmb3JtYW5jZS4KKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jaGVja3BvaW50
X29zcl9leGl0KQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lKQorICAgIGptcCByMQorZW5kKQorCiAjIExhc3RseSwgbWFrZSBzdXJl
IHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rl
cy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBv
ciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggM2RkMmVi
NDhjYmJhNmVmNWNkOTg4NjM5Yzc5MTFlMjJhNzEzMzE0OC4uNDExZGYyYzY3NTIzMzBiMzdiOTZh
YmNlZDg3YTg0NDZhODc1Njk5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTQyLDYgKzQyLDE0IEBAIG1hY3Jv
IG5leHRJbnN0cnVjdGlvbldpZGUzMigpCiAgICAgam1wIFt0MSwgdDAsIFB0clNpemVdLCBCeXRl
Y29kZVB0clRhZwogZW5kCiAKK21hY3JvIHN0b3JlUEMoKQorICAgIHN0b3JlaSBQQywgTExJbnRS
ZXR1cm5QQ1tjZnJdCitlbmQKKworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTEludFJldHVy
blBDW2Nmcl0sIFBDCitlbmQKKwogbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3Bjb2RlU3RydWN0
LCBmaWVsZE5hbWUsIGRzdCkKICAgICBsb2FkYiBjb25zdGV4cHIgJW9wY29kZVN0cnVjdCVfJWZp
ZWxkTmFtZSVfaW5kZXhbUEIsIFBDLCAxXSwgZHN0CiBlbmQKQEAgLTkyLDcgKzEwMCw3IEBAIGVu
ZAogCiAjIEFmdGVyIGNhbGxpbmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQg
cmVnaXN0ZXJzIGFyZSBub3QgdXNlZC4KIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKHNpemUsIG9w
Y29kZVN0cnVjdCwgZGlzcGF0Y2gpCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNl
dFtjZnJdLCBQQworICAgIGxvYWRQQygpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAg
IGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fZHN0LCB0MSkKQEAgLTM5MCw3ICszOTgsNyBAQCBl
bmQKIAogIyBDYWxsIGEgc2xvdyBwYXRoIGZvciBjYWxsIG9wY29kZXMuCiBtYWNybyBjYWxsQ2Fs
bFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50
ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2Fs
bCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTM5OSwyMCArNDA3LDIw
IEBAIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNy
byBjYWxsVHJhcEhhbmRsZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRD
b3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9y
Q0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCiAgICAgY0NhbGwyKF9s
bGludF9zbG93X3BhdGhfaGFuZGxlX3RyYXBzKQogICAgIGJ0cG56IHIwLCB0aHJvd0hhbmRsZXIK
LSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkg
TExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JM
b29wKCkKICAgICBjaGVja1N3aXRjaFRvSklUKAogICAgICAgICAxLAogICAgICAgICBtYWNybygp
Ci0gICAgICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQor
ICAgICAgICAgICAgc3RvcmVQQygpCiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgp
CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00
MjEsNyArNDI5LDcgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAg
ICAgbW92ZSByMSwgc3AKICAgICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAg
ICAucmVjb3ZlcjoKLSAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRb
Y2ZyXSwgUEMKKyAgICAgICAgICAgIGxvYWRQQygpCiAgICAgICAgIGVuZCkKIGVuZAogCkBAIC0x
NzY4LDYgKzE3NzYsOCBAQCBtYWNybyBwdXRCeVZhbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgb3NyRXhpdFBvaW50KQogICAgIGVuZCkKIGVuZAogCisKKwogcHV0QnlWYWxPcChwdXRfYnlf
dmFsLCBPcFB1dEJ5VmFsLCBtYWNybyAoc2l6ZSwgZGlzcGF0Y2gpCiAub3NyUmV0dXJuUG9pbnQ6
CiAgICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX3B1dF9ieV92YWwsIHNpemUp
CkBAIC0yMDU3LDcgKzIwNjcsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xv
d1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBhZGRw
IGNmciwgdDMKICAgICAgICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgICAgIGdldHUoc2l6
ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIHQyKQotICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50
Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVp
IHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywg
c3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRh
ZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCA4NDBmODliODhk
NDIwY2MzYjc1YzgzZDZjNTc4MjQxNTQwMmYzMzY2Li44ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1MDBm
ZGZiZTY5OTk4MDdjZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5o
CkBAIC0xMzMsNiArMTMzLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3ZlcmZsb3dDaGVja05v
dE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50LCBjb25zdCBGdW5j
dG9yJiBmdW5jKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAgICAgICBlbnN1
cmVDYXBhY2l0eShjb3VudCk7CisgICAgICAgIGlmIChCYXNlOjpoYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc2l6ZSA9IGNvdW50OworICAgICAgICBmdW5j
KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7CisgICAgfQorCiBwcml2
YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5
KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAKaW5kZXggZjhkOTc5OTU4NzQ1MjI2YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNlODdh
MS4uZmZiNzQ1OWE2YWRjY2JhYjE2ZGE4YTRlZjhiMTcxMWQ4NzJhMWFmOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMTc4OCw2ICsxNzg4
LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgZXZhbENvbnRleHRU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBo
YXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxDYWxsczsgfQorICAgIHVuc2ln
bmVkIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQog
ICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CiAg
ICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KIApA
QCAtMTgyMCw2ICsxODIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0
VHlwZSA6IDI7CiAgICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOwogICAgIHVuc2lnbmVk
IG1fY29kZVR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1faGFzQ2hlY2twb2ludHMgOiAxOwogCiAg
ICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VN
b2RlOwpAQCAtMjAxOCw2ICsyMDIwLDcgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9j
azo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKgogCiAgICAg
LCBtX2RpZE9wdGltaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAg
ICAsIG1fYWdlKDApCisgICAgLCBtX2hhc0NoZWNrcG9pbnRzKGNhY2hlZENvZGVCbG9jay5oYXND
aGVja3BvaW50cygpKQogCiAgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJl
cygpKQogICAgICwgbV9wYXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQpAQCAt
MjIwNiw2ICsyMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2Rl
QmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAgICBtX3BhcnNlTW9k
ZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKICAgICBtX2NvZGVHZW5lcmF0aW9uTW9kZSA9IGNv
ZGVCbG9jay5tX2NvZGVHZW5lcmF0aW9uTW9kZTsKICAgICBtX2NvZGVUeXBlID0gY29kZUJsb2Nr
Lm1fY29kZVR5cGU7CisgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNr
cG9pbnRzOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0
YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5t
X3JhcmVEYXRhLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCmluZGV4IGYzNThkNDhhNTBkZTczZWFiMzg1Njk5YjNhNmY1MTEz
YmJiZTliYmEuLmUyN2ZlM2NhOTc4YjM5NDQ4MjYxNjdkNGEwNjFhMmVhZDRmOTI2MTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApA
QCAtOTgsOCArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBCRUdJTl9OT19TRVRfUEMoKTsg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBTRVRfUENfRk9SX1NUVUJTKCkKIAotI2RlZmluZSBH
RVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKSkKLSNk
ZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKSkKKyNk
ZWZpbmUgR0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkpCisjZGVm
aW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZCkpCiAKICNkZWZpbmUgUkVU
VVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTExMzksOCArMTEzOSw3IEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKIHsKICAg
ICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVMZXhpY2FsRW52
aXJvbm1lbnQ+KCk7Ci0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2Nv
cGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihHRVRf
QyhieXRlY29kZS5tX3N5bWJvbFRhYmxlKS5qc1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgaW5pdGlh
bFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKICAgICBB
U1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpz
VERaVmFsdWUoKSk7CkBAIC0xMTU1LDggKzExNTQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHVzaF93aXRoX3Njb3BlKQogICAgIEpTT2JqZWN0KiBuZXdTY29wZSA9IEdFVF9DKGJ5dGVj
b2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENI
RUNLX0VYQ0VQVElPTigpOwogCi0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9jdXJyZW50
U2NvcGUub2Zmc2V0KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJy
ZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUp
LlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIApAQCAtMTE2NSw3ICsx
MTYzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0
aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7CiAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29w
ZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0
ZXI6OnNjb3BlKCk7CiAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVu
dCk7CiAKICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTExNzksNyArMTE3Nyw3IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6
c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRl
Y29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU09iamVjdCogcmVzb2x2ZWRT
Y29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwogICAg
IC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJlLCBlLmcuIFByb3h5IGluIHdpdGggc3Rh
dGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTQyNCw3
ICsxNDIyLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiB7
CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlCdWZm
ZXI+KCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoYnl0
ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpKTsKKyAgICBBU1NFUlQoYnl0ZWNv
ZGUubV9pbW11dGFibGVCdXR0ZXJmbHkuaXNDb25zdGFudCgpKTsKICAgICBKU0ltbXV0YWJsZUJ1
dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gYml0d2lzZV9jYXN0PEpTSW1tdXRhYmxlQnV0
dGVyZmx5Kj4oR0VUX0MoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLmpzVmFsdWUoKS5h
c0NlbGwoKSk7CiAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
aykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlOwogCkBAIC0xNDQzLDcgKzE0NDEsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAgLy8gV2UgYWxz
byBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFk
cyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAvLyBh
IGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAg
ICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0
dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsK
KyAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxl
QnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAKQEAgLTE0ODgsNCArMTQ4NiwxNiBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3ByZWFkKQogICAgIFJFVFVSTihKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6Y3JlYXRlRnJvbUFycmF5KGdsb2JhbE9iamVjdCwgdm0sIGFycmF5KSk7CiB9
CiAKK2V4dGVybiAiQyIgdm9pZCBkdW1wUmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKTsKK2V4
dGVybiAiQyIgdm9pZCBkdW1wUmVnaXN0ZXIoVUNQVVJlZ2lzdGVyIHZhbHVlKQoreworICAgIGRh
dGFMb2dMbihSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpKSk7Cit9CisKKy8v
IGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIFNMT1dfUEFUSCBjaGVja1BDKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMpOworLy8gZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IEluc3RydWN0aW9uKiBwYywgKQorLy8geworCisvLyB9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0
YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApp
bmRleCA0YmQxOTJhNmM3N2VmYzAyNmU3YTk1YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0MThj
YTg4ZWZkMWI3OGU2MzExYjY3NWQxZWZhNWE1ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNv
bnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2JhbE9i
amVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJvck1l
c3NhZ2UpOworfQorCitKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25z
dCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTQ2LDEwICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5
cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9i
amVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAK
IH0KIAotCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwg
Y29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywg
SlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4IGQw
YWUwMGJhMTFkN2NlZTI0ZGZmYWU5MTkxMTk2N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzljNDkx
ZjlmOTNiYWViNmNhYzEyNjIxZjNiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmgKQEAgLTYwLDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVjdERh
dGEgewogCiAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwg
d2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRo
ZW0uCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVy
cm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNv
bnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1
Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3Qm
LCBKU1ZhbHVlIG5ld1RhcmdldCk7CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0
LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEwMjJh
YzJkZDlhZWZhZmQ0M2EwMWE1Yzg1Li40YjM0NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1
MDlmMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAKQEAgLTEzNywyMCArMTM3LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1
bm1hcEFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVu
dHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RB
cmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6OmNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJz
dEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBp
ZiAoIW1fbWFwcGVkQXJndW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjpt
aW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAg
ICAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBjYWxs
RnJhbWUtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGZp
cnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAgICAg
IGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQg
KyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgR2Vu
ZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6Om1h
cHBlZEFyZ3VtZW50c1NpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaAppbmRleCAwYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNl
NzcyZTBhLi44ZDk2NDJhMmM5NDA0MDgwYjkxM2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0
LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8RGly
ZWN0QXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9sZW5n
dGgpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBhYmQw
MGNlZWFmNWViYjdlZTFkNDY3ZGE0ODg3MGQ1MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJk
YWIzZGFlZWIyNzJjYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50cy5oCkBAIC01OSw3ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IHNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVuc2ln
bmVkIGxlbmd0aCk7CiAgICAgYm9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2ln
bmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1
bWVudHNQdHIgPSBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47CiAg
ICAgTW9kaWZpZWRBcmd1bWVudHNQdHIgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaAppbmRleCAyMTgyYTYyYjEzMDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZm
Li5lMGFhYmY1ZjJlZTE4NWI3ZDEzMzE2MDM3ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVz
LmgKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9k
aWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9B
cmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0zMDUsOSArMzA1LDkgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBUeXBl
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+aXNN
YXBwZWRBcmd1bWVudChpICsgb2Zmc2V0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJz
dEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNl
dCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0
LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCmluZGV4IDQ0YzdlNTIwZjFjMGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAu
LjZkMDc1OTE3MTFlZWRiYzI4ZTBlNGRhNzg0OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lk
IEpTQXJyYXk6OmZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyJiBhcgogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0
LCBpKSk7CiB9CiAKLXZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpT
QXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUKICAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKCkuYXQodGhpcywgaSk7CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOworICAg
ICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6
RW5jb2RlQXNEb3VibGUsIHYpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTEyOTQsMTEgKzEyOTQsMTEgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBp
IC0gb2Zmc2V0KSA9IHYuZ2V0KCk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNl
dF0gPSB2LmdldCgpOwogICAgIH0KICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBn
ZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0
XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAppbmRleCAzMTc5NDljNTcyYTExYjc1YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2
NWI1ZmY0OTI1NGNjMWE2YzQ3OTAyYjc5MTBhYzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3Qq
LCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29sRmFz
dEFuZE5vbk9ic2VydmFibGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAz
M2RhYTk5YTU5MzZkZWExOWExYzQ5YzAuLmU0OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEy
YzE5MTFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRh
YmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1
b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0lt
bXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVi
bGljTGVuZ3RoKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCAr
IGkpID0gZ2V0KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9
IGdldChpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1lLT5y
KGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBmaXJz
dEVsZW1lbnREZXN0W2ldID0ganNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4
IGFjYjY4NDgxOTFhMTkwMzUyMmI5YjNlNGQwMGY5NjllNDBiNzgxNWEuLjA3ZTFhOGExMGMzY2Rj
NzExN2FjYTNkYzU0M2VkN2RkYjBkNDFmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAg
ICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3
OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZhYTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhm
YjZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQs
NiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVm
UHRyPFZNPiB2bSA9IG1fdm07CiAgICAgaWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfTUVTU0FHRSghdm0tPmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2lu
ZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hlY2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJs
ZSIpOwogICAgICAgICB2bS0+ZHJhaW5NaWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+
dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMy
YmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2
NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJv
bFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xU
YWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50
UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZt
KCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0
KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIo
dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNv
bnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2Jq
ZWN0LT52bSgpKSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEwNTBj
ZGU4NmNiMjUyMWU1NDExNi4uOTFlZDczOWUyNWY0OTM4ZWY1MDI3MjdkZjUxNjgwZDg2Y2EyMDg3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwx
MSArNTA5LDkgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAg
aWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpv
bmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29m
dFJlc2VydmVkWm9uZVNpemUoKSA9IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmlt
dW1SZXNlcnZlZFpvbmVTaXplOwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBGSVhN
RTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3b3JrIG9uIDMyLWJpdDoKICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJv
YmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2Rl
Q2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmlu
ZGV4IDA4MWQ5NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYy
NDFiMDI2MDVmYmY1MjViZGRmMjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZv
aWQgU2NvcGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAg
ICAgICAgc3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29w
ZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAg
ICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1l
bnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZz
ZXQsIGxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdj
MzcwNGYyOWVkNGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFh
YmMwZGUwODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHMuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdl
bmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3Jp
cHRvcihpbmRleCwgbV90YWJsZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVf
SU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA2NGRkZmNi
MWEyNTYwZTZmZTFiNDU0ZTRmZWUxNDg5MmFkYzA4YTlmLi44ZjZlNTY1ZTI0N2U1YTIzMTkzMzE5
ODgyODY3MmUyMTA0ODgxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1
aWx0aW5FeGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNs
b25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVD
YWNoZS5oIgpAQCAtMTAyNyw2ICsxMDI4LDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZm
ZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYK
IAordm9pZCBWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxvYWQp
Cit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdURk1v
dmUocGF5bG9hZCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4gVk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQor
eworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRv
IHNpZGVTdGF0ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7CisgICAg
cmV0dXJuIHNpZGVTdGF0ZTsKK30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsK
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJh
bWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDI4MDg2YzRlZDkxNjA2YzI4
MWIxYTFkNWI3YTFkYWIwNjA4ODA3MGEuLjI1YzRhNTE0YTE4YzY3MGU2NTQzMWFiOTY4Nzg4MzM4
MWQ3MWVjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsK
IGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtOTQ5LDYgKzk1MCwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwog
CisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVudHJ5
U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tG
aXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMDAsNiArMTIwNSw3IEBAIHByaXZhdGU6CiAg
ICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4g
bV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7
IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRj
aHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggODFjOWYxZjY3NDcwNzll
ZDgzMTI2NjJjMDgzMDBjNmNjMzYyOGUzNy4uZTE0ODQwMGQ0ODdkZmM2NGU0NDA1NGRkYWRiMDg1
ODk3MmUzOWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5z
cGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3Iu
Y3BwCkBAIC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAgY29uc3Qg
UmVnaXN0ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwotICAg
IGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgLSAxOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgZW5kID0g
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAx
KTsKICAgICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpzVmFs
dWUoKTsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lz
dGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3
Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAtNzIs
MTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFu
dHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0K
IAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoaW50IGluZGV4KSBj
b25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgp
XTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJh
dGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fY29uc3Rh
bnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwogICAgIH0KIAogICAgIHZvaWQgc2V0SW5z
dHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggYWIx
NzQwNmFmYjczNGE3MDhkZjExZGJiNjgwMTUxOGI3NjY1ZmI0Mi4uZWUyYjMyN2QyYWY1NDcxOTY4
Nzk2OWFjMjUyYTg0Yzc4OGVmNmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsNiArMjQyLDkgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJz
ZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1
dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgorICAgIHZvaWQgc2V0
VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQor
CiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5j
cHAKaW5kZXggZTJhNGM0MjUzM2EyZjQ0N2RkMzIwMjA1Yjc3N2I3OGIwMzljMGI2OC4uMjA2OWFk
OGIyNGI3MzY5ZGNkOWQ1ZjBjN2Y1OGVlYzkyYjM1Yzc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNzQzLDcgKzc0Myw3IEBAIHZvaWQq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxs
RnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAg
ICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCBy
ZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxs
RnJhbWUpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGlu
c3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1l
KVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0
PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJnZXRNYWNo
aW5lUENGb3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcAppbmRleCA5MjdhNjk4NGEzYmUwMTRjZjNlYTdkNjdmMDM0NTg0ZWViZWI2MGNl
Li41NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5MGQ1ZjMzM2NlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzYsNyArNzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1YWxS
ZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAgICAg
PyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+
Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29k
ZUJsb2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA1YmQ3YWI0M2RlMDZmODkzYzE2NGQ1OTljNmNjNGY1ZmIx
N2IwNWJiLi40ZWU3ZjUxZTgyNWVhNjZmYjczMWJiNzFlYzg3NzBhNzQzNmQyZjIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3Miw2ICszNzIsNyBAQAog
CQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAv
KiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVm
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMuZGVmczsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8q
IExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTQsNiArOTU1
LDcgQEAKIAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYS5oICovLAogCQkJCUZF
MDVGQUU2MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRyVHJhaXRzLmggKi8sCiAJCQkJQUQ2NTNE
QTgyMDA2QjZDMjAwRDgyMEQ3IC8qIER1bWJWYWx1ZVRyYWl0cy5oICovLAorCQkJCTUzMzhFQkE0
MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovLAogCQkJ
CTFBRUE4OEUxMUQ2QkJDRjQwMEU1QUQ2NCAvKiBFbnVtVHJhaXRzLmggKi8sCiAJCQkJQUQ3QzQz
NEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8sCiAJCQkJQThBNDcyOUYxNTFBODI1
QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAppbmRleCA0YzZmNWQ0NDI2MzJj
M2VmYzAwMGJkMThlOWUzNjk0NTJmYWYxYzEwLi5iNDZkYTllODVhYjliNjg2MjQzOGE2OTJlMzY2
YTc1MDU0ZGNjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgc2l6
ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhcihzaXpl
X3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGludmVydCgpOwogICAgIGludDY0
X3QgZmluZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1bkxlbmd0aCkgY29uc3Q7CiAgICAgc2l6ZV90IGNv
dW50KHNpemVfdCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBpc0VtcHR5KCkgY29uc3Q7
CkBAIC0xMDIsNiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcj0oYm9v
bCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAtPnNldChtX2luZGV4LCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRtYXA7CiAgICAgICAgIHNpemVfdCBtX2lu
ZGV4OwpAQCAtMTExLDYgKzExOCw5IEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBmaW5kQml0KDAsIHRydWUpKTsgfQogICAgIGl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBiaXRtYXBTaXplKTsg
fQogICAgIAorICAgIGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KTsKKyAgICBjb25zdCBpdGVy
YXRvciBvcGVyYXRvcltdKHNpemVfdCkgY29uc3Q7CisKICAgICB2b2lkIG1lcmdlQW5kQ2xlYXIo
Qml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihCaXRtYXAmKTsKICAgICAKQEAgLTIyNCw2
ICsyMzQsMTMgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y2xl
YXJBbGwoKQogICAgIG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsKIH0KIAor
dGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHZv
aWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aW52ZXJ0KCkKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgICAgIGJpdHNbaV0gPSB+Yml0c1tpXTsK
K30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5s
aW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpuZXh0UG9zc2libHlVbnNl
dChzaXplX3Qgc3RhcnQpIGNvbnN0CiB7CkBAIC00MDksNiArNDI2LDE5IEBAIGlubGluZSBib29s
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yIT0oY29uc3QgQml0bWFwJiBv
dGhlcikgY29uc3QKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9CiAKK3RlbXBsYXRl
PHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSAtPiBpdGVy
YXRvcgoreworICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCAtPiBjb25zdCBpdGVyYXRvcgoreworICAgIHJl
dHVybiAoKmNvbnN0X2Nhc3Q8Qml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPio+KHRoaXMpKVtp
bmRleF07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlw
ZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpoYXNoKCkg
Y29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggZGFlNGE3MWIyOGQxMzA0MjRjMGJkNzMx
YmU0MTY0M2YwNTJiM2VhOS4uMmEzMjYyYzliOGI2ZDU2ZGUzY2E0ZGEwMTU2OTZkNzUyN2FhNGI5
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdURl9QVUJMSUNf
SEVBREVSUwogICAgIER1bWJQdHJUcmFpdHMuaAogICAgIER1bWJWYWx1ZVRyYWl0cy5oCiAgICAg
RW51bVRyYWl0cy5oCisgICAgRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaAogICAgIEV4cGVj
dGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaAogICAgIEZhc3RCaXRWZWN0b3IuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCBiL1NvdXJjZS9X
VEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZkZTczZjVi
MmQ3ZDU3NDRhM2QwODU3N2NjNzI0ODcxZTkzZTYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisjZGVmaW5lIE9WRVJMT0FEX09QRVJBVE9S
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIG9wLCBlbmFibGVFeHByZXNzaW9uKSBcCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yIG9w
KGVudW1OYW1lIGVudW1FbnRyeSwgVCB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDwoZW5hYmxl
RXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KGVudW1FbnRyeSkgb3AgdmFsdWU7IFwKKyAgICB9IFwKKyAgICAgIFwKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoVCB2YWx1ZSwgZW51
bU5hbWUgZW51bUVudHJ5KSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9uKSwg
VD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gdmFsdWUgb3Agc3RhdGljX2Nhc3Q8VD4oZW51
bUVudHJ5KTsgXAorICAgIH0gXAorCisjZGVmaW5lIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVS
TE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCArLCBlbmFibGVFeHBy
ZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgLSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9F
TlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICosIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVS
TE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAvLCBlbmFibGVFeHBy
ZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgJSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX01BVEhfT1BF
UkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9BRF9N
QVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2ludGVn
cmFsX3Y8VD4pCisKKyNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VO
VU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FE
X09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID09LCBlbmFibGVFeHByZXNz
aW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFt
ZSwgIT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5V
TV9DTEFTU19XSEVOKGVudW1OYW1lLCA8LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxP
QURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPD0sIGVuYWJsZUV4cHJl
c3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1O
YW1lLCA+LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VO
VU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPj0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKworI2RlZmlu
ZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVH
UkFMUyhlbnVtTmFtZSkgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgc3RkOjppc19pbnRlZ3JhbF92PFQ+KQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVj
dG9yLmgKaW5kZXggODg1YjdiMTczYjExYTYwMWJlMjlhMzMyYWI5ZDJhNDE0ZDU2MjEyMi4uOTIw
ODk1ZmM0OWU3MWJmOTY2OTIyMWMxMzFhMTc0MmZiNzU4ZmZkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0
b3IuaApAQCAtNDUwLDcgKzQ1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gISEoKm1fd29yZCAmIG1fbWFzayk7CiAgICAgfQpAQCAtNDY0
LDYgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAg
IEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PyAqdGhpcyA9IHZhbHVlIDogKnRoaXM7IH0KKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRv
ciY9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgOiAqdGhpcyA9IHZhbHVlOyB9
CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29yZCB7IG51bGxwdHIgfTsKICAgICB1aW50
MzJfdCBtX21hc2sgeyAwIH07CkBAIC01MDksNyArNTEyLDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBGb3IgdGVt
cGxhdGluZyBhcyBWZWN0b3I8Ym9vbD4KKyAgICB2b2lkIGZpbGwoYm9vbCB2YWx1ZSkgeyB2YWx1
ZSA/IHNldEFsbCgpIDogY2xlYXJBbGwoKTsgfQorICAgIHZvaWQgZ3JvdyhzaXplX3QgbmV3U2l6
ZSkgeyByZXNpemUobmV3U2l6ZSk7IH0KKwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNs
ZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KQEAgLTU4OSw0ICs1
OTYsNSBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2luZyBXVEY6OkZhc3RC
aXRSZWZlcmVuY2U7CiB1c2luZyBXVEY6OkZhc3RCaXRWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaCBiL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFj
Y2Vzcy5oCmluZGV4IDVhNGU5ZWY0NDk0ZWY0NmNhOWU0ZWVmNzdmZGNjMGQ2MGZhYTRhMTEuLjNh
MzViMzhmNGMwMjM2NzlhYzdjZmM5YzQ2NTYwODRhMzkxNDgzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25l
ZEFjY2Vzcy5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KIGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9pbnRl
cikKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbDxUeXBlPjo6dmFsdWUsICIi
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2
YWx1ZSwgIiIpOwogICAgIFR5cGUgcmVzdWx0IHsgfTsKICAgICBtZW1jcHkoJnJlc3VsdCwgcG9p
bnRlciwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDMsNyArNDMsNyBA
QCBpbmxpbmUgVHlwZSB1bmFsaWduZWRMb2FkKGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIHZvaWQgdW5hbGlnbmVkU3RvcmUodm9pZCogcG9pbnRl
ciwgVHlwZSB2YWx1ZSkKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbDxUeXBl
Pjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlh
YmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIG1lbWNweShwb2ludGVyLCAmdmFsdWUsIHNpemVv
ZihUeXBlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCBhMGQ4ZTc1ZDdlZWUyZDZhYzU4ZTA2OGVlMTgyNjRkNDhkYWY2ZDEzLi5jOTg5
ZDA0YjkyODU1ZDU5NmY5YzcwNDE5MDE1NDk1YzI2MWJlY2MyIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTIt
MTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZH
L0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisK
KyAgICAgICAgUmVtb3ZlIHByb2JlIE9TUiBleGl0IG9wdGlvbiBzaW5jZSB3ZSBhcmUgbm90IHVz
aW5nIHRoYXQgYW55bW9yZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMTItMTcg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4gTWFyayBXZWJLaXQuRm9jdXNlZEZyYW1lQWZ0ZXJDcmFz
aCBhcyB0aW1lb3V0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCBjZGJmOWMwZGJm
OTMyZTI4YzZkNWE4MjA4YTBhOThjY2VlNmFlZDlmLi41ZmJjMjA5ZWRlNGQzNDVhNDYwNWIwMGQy
NzE3MjA0NWQwNDkyY2U2IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTQ5OCw3
ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIs
ICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMAogQjNPMV9PUFRJT05TID0gWyItLWRl
ZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0gWyItLW1heERGR05vZGVzSW5CYXNp
Y0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRlZmF1bHRCM09wdExldmVsPTAiXQog
RlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQotUFJPQkVfT1NSX0VYSVRfT1BUSU9O
ID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyA9
IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQogCiByZXF1aXJlX3JlbGF0aXZlICJ3ZWJr
aXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3skdGVzdFdyaXRlcn0iCkBAIC03MTMsNyAr
NzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVy
IiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwg
Ii0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09Q
VElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAi
LS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1h
aXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJ
VE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtNzI5
LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxpZGF0aW9uKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMgKyBDT0xM
RUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsgRk9SQ0Vf
TExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBy
dW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09Q
VElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZjYzM3OThmYWQ0MzZjY2IxZDg4M2I1MTlm
YTEuLjFjMTAwMGIyOTYzOGM5NTRjOTgyYTA1OGEzY2Q4MzIzMmYzYjZjMTEgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisK
KyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2Yg
YSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRp
b25zLW9jY2FzaW9uYWxseS5qczogQWRkZWQuCisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50KToK
KyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJheS5n
ZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1s
ZW5ndGgtb25jZS5qczogQWRkZWQuCisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAgICAg
ICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQgbGVu
Z3RoKToKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFu
ZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorICAgICAgICAqIHN0cmVz
cy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzOgor
CiAyMDE5LTEyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0pTQ10gUmVtb3ZlIEpTRml4ZWRBcnJheSwgYW5kIHVzZSBKU0ltbXV0YWJsZUJ1dHRlcmZs
eSBpbnN0ZWFkCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91
bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzIGIvSlNUZXN0cy9z
dHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9j
Y2FzaW9uYWxseS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2YxNWE2ZWI4YzI3Y2MwYWQyZTlmNTk1NDFmZmUy
YzUwYWMwYTIzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4
aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qcwpAQCAt
MCwwICsxLDM2IEBACisKK2xldCBjdXJyZW50QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFy
Z0NvdW50KCkgeworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Cit9Citub0lubGluZShleHBl
Y3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVk
LCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsKK2N1
cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgo
KSB7CisgICAgaWYgKGxlbmd0aENhbGxzKysgJSAxMCA9PSAxKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoInRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiBsZW5ndGgiKTsKKyAgICByZXR1cm4gY3Vy
cmVudEFyZ0NvdW50Cit9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU2OyBpKyspIHsKKyAgICB0
cnkgeworICAgICAgICB0ZXN0KGFycmF5KTsKKyAgICB9IGNhdGNoIHsgfQorfQorCitjdXJyZW50
QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYgKGxl
bmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1v
bmNlLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgt
b25jZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44YmVlNDVjZTFjNzI4MzY1MzgyNzA1ZDk5ZDMwMWFlNmJjYjhk
ODdhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hv
dWxkLWdldC1sZW5ndGgtb25jZS5qcwpAQCAtMCwwICsxLDMxIEBACisKK2xldCBjdXJyZW50QXJn
Q291bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJyZW50
QXJnQ291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2Fs
bGVlKCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsK
KyAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsK
KworbGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkg
PSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7IGxlbmd0aENhbGxzKys7IHJldHVybiBjdXJy
ZW50QXJnQ291bnQgfSB9Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKQorICAgIHRlc3Qo
YXJyYXkpOworCisKK3Rlc3QoYXJyYXkpOworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3Ro
Q2FsbHMgPSAwOwordGVzdChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0
aHJvdyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
bG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pTVGVz
dHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3Qu
anMKaW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3MzIz
MTkwY2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9z
dHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwor
KysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4
aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikg
ewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJz
dXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEuYy5s
ZW5ndGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2Yg
YywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBpZiAo
YS5jLmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIgKyBi
LmMubGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAgICAg
IGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIg
KyBiLmM7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdp
dGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZl
LXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwppbmRleCAwNDdmYjAx
Zjg4MzE0NWNjNzU1NGY1Y2Y3MDFhNzA3NGYyNjdkZWVlLi41M2Q3NTJkZWNkN2QwZjMxYmMyZjFk
Nzg5OTFjNjkxMDFmMDhiZmYzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUt
dGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCisrKyBiL0pTVGVzdHMv
c3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQu
anMKQEAgLTE4LDggKzE4LDggQEAgbm9JbmxpbmUoYmFyKTsKIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgewogICAgIHZhciByZXN1bHQgPSBmb28oNDAsIDIpOwogICAgIGlmIChyZXN1
bHQgIT09IDQyKQotICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVjdGVk
IDQyLCBnb3QgIiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3VsdCBm
b3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOwogICAgIHJlc3VsdCA9IGJhcig0
MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0gICAgICAgIHRocm93ICJXcm9uZyByZXN1
bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0OworICAgICAgICB0aHJvdyBF
cnJvcigiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386056</attachid>
            <date>2019-12-18 20:18:17 -0800</date>
            <delta_ts>2019-12-18 20:29:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218201745.patch</filename>
            <type>text/plain</type>
            <size>669096</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi43ZDIwZTg0NjNhMWZkZWQ4
NGE2NDE1MTk4ODNhNjY1YWY0ZjEwM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MTYgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAg
IChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFt
ZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0
ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6CisgICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMp
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlw
cGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFy
Z3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3Qp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAg
Y29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNr
cG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0
cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1
ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmly
dHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZp
cnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhG
b3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVu
ZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bVRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1l
ZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpp
c1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3Rlcklz
TGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5k
SXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgor
ICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAg
KEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxl
S2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5j
cHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5
T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVt
aXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fs
cyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjps
b2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdEZvcik6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBj
b25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRG
b3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBj
b25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9y
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9jYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJh
bmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4
dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0No
ZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhh
c0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50
UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29u
c3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9j
YWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVn
aXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6Omlz
QXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3Rh
bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRl
eCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVj
a3BvaW50cyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAg
KEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhl
YXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFz
T3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RI
ZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9H
ZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxp
dGllcy5oOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5
TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRo
TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAg
ICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qmxv
Y2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJn
dW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpmbHVzaEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZs
dXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0
TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAg
ICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQ
U1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRp
bmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1Jl
dGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQ
aGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNh
bm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6
Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVu
ZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAg
ICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0
YTo6YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5p
cXVlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENh
bGxTaXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2Vz
R0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxs
S2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5kcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3Vic3Rp
dHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFj
ZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjplbWl0U3RvcmVD
YWxsU2l0ZUluZGV4KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRsZUJsb2NrRm9yVHJ5Q2F0
Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjphcmd1
bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0xv
YWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bG9jYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9jYWwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZH
OjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpqc1ZhbHVlRm9y
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGb3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnNhdmVDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OmNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OmNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OmVtaXRSZXN0b3JlQXJndW1lbnRzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpwcmludE9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Lmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmlzRXhpdGluZ1RvQ2hlY2twb2ludEhhbmRsZXIgY29uc3QpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJh
bWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAg
ICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHT3BJbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbUlu
c2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpy
ZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6
d3JpdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
OjpkZWYpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
OjpjYWxsSWZBcHByb3ByaWF0ZSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252
ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJy
ZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3Vt
ZW50VHlwZXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFy
YXJnc0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVG
b3J3YXJkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6CisgICAgICAgICogZGZnL0RG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmRpc2Fi
bGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9y
U2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmxvY2FsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxl
RXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0
cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6YXBwZW5k
QW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5
SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2spOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxlZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVW
YXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTG9nU2hhZG93
Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Z2V0QXJndW1lbnRzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcik6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICog
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVy
aWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6
CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgICogZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAg
ICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9y
L09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBp
bnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNh
ZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5z
YWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3Vy
cmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29k
ZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3VycmVudFZQQyBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGlu
dGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpDYWxs
U2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3BlcmF0b3IgYm9vbCBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRpc3Bv
c2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1
bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmFkZHJlc3NPZkNv
ZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6Om9mZnNldEZvcik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6cik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjb2Rl
QmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNvZGVCbG9jayBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVycHJldGVyL0NoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFyZ3MpOgorICAgICAg
ICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFyYXJnc0ZyYW1lKToK
KyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAgIChK
U0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNr
VmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVBy
b2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0VGFnVG9DYWxs
RnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dGFnRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgor
ICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rl
Yyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Jp
dG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRN
YXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICog
aml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpT
Qzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJ
bnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRQYXlsb2Fk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZERv
dWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUlu
dDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVEb3VibGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVs
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
dGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRj
aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRO
ZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAq
IGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldENs
b3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0
Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVs
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBq
aXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMik6Cisg
ICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChK
U0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAg
ICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcik6
CisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRo
dW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWREb3VibGVB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRDZWxsQXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpsb2FkSW50MzJBcmd1
bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6
OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2Fs
bCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpM
TEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQp
OgorICAgICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVk
X2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4
aXQpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJy
b3IpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3QuaDoKKyAgICAgICAgKEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXI6OmZpbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpkdW1wUmVnaXN0ZXIpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6Cisg
ICAgICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmg6CisgICAgICAgICogcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxsUmVsZWFzZUxvY2spOgorICAg
ICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3Bl
ZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlND
OjpWTTo6aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogdG9vbHMv
Vk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVy
cyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50VHlwZSBjb25zdCk6Cisg
ICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uV2Fz
bVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisKIDIw
MTktMTItMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHTElCXSBqc2NfY29udGV4dF9ldmFsdWF0ZV9pbl9vYmplY3Qgc2hvdWxkIHRha2Ug
dGhlIEFQSSBsb2NrIGJlZm9yZSBjYWxsaW5nIHNldEdsb2JhbFNjb3BlRXh0ZW5zaW9uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4
IDIxNGJkMDU0YWE0N2IwYjVmZjQzNGUzODBmMmEzNGUxOWU3MzVkYmUuLjdiY2RlOTQ5MWFhN2E1
NWI5ZjBlMjg5MmQwN2NiMDU1YWQ2NDU2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMTIt
MTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZH
L0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAg
IChXVEY6OldvcmRUeXBlPjo6aW52ZXJ0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVy
YXRvcik6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IgY29uc3QgY29uc3QpOgor
ICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRW51bUNsYXNzT3Bl
cmF0b3JPdmVybG9hZHMuaDogQWRkZWQuCisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoK
KyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV1RG
OjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvciY9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZl
Y3Rvcjo6ZmlsbCk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6Omdyb3cpOgorICAgICAg
ICAqIHd0Zi9VbmFsaWduZWRBY2Nlc3MuaDoKKyAgICAgICAgKFdURjo6dW5hbGlnbmVkTG9hZCk6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZFN0b3JlKToKKwogMjAxOS0xMi0xNiAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAzZGNjZTBmODFlZDQ0Yzc0ZDYwZWE1YTBjNjI4ZDhiZmFkOTMzMDhmLi5jY2VmMWFm
ZDQ1ZGExOTMwMWM4NmE5Zjc1NzIyYmFkYTM3YzgzMTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC01MjUsNiArNTI1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmgKICAgICBieXRlY29kZS9PcGNvZGVTaXplLmgKKyAg
ICBieXRlY29kZS9PcGVyYW5kcy5oCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAog
ICAgIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5oCiAgICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQu
eGNmaWxlbGlzdAppbmRleCBmOGMxYjRhZTU1NmI1MzRjMmFiMTAxYWMzOTBiYTcxMWI0NWNiYWVh
Li45ZWFkNjUzZmFhYWIxODkzZWI5MmRkMDJlOTc1Nzk2NmRmYTk5YWM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApA
QCAtNjQsNiArNjQsNyBAQCAkKFBST0pFQ1RfRElSKS9kaXNhc3NlbWJsZXIvdWRpczg2L29wdGFi
bGUueG1sCiAkKFBST0pFQ1RfRElSKS9kaXNhc3NlbWJsZXIvdWRpczg2L3VkX2l0YWIucHkKICQo
UFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bcmd1bWVudC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJh
dG9yL0Fzc2VydGlvbi5yYgorJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJi
CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvRFNMLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0
b3IvRml0cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0dlbmVyYXRlZEZpbGUucmIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGJjZTViYWNlZGMwNWMzZGMwZWE4YjA0MzM0
NmQxNTFkMGRlZjQ0MS4uYjI2NGY0ZWRkMzk2MjY5MDVlMWIyMmE4MmUxZTQxNTIzNTU2NzRkYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkzMSw2ICs5MzEsOCBAQAogCQk1MzMz
QkJEQjIxMTBGN0QyMDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxQjE0MzI4QkI5
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi87IH07CiAJCTUzMzNCQkRD
MjExMEY3RDkwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcg
LyogREZHU3BlY3VsYXRpdmVKSVQuY3BwICovOyB9OwogCQk1MzMzQkJERDIxMTBGN0UxMDA3NjE4
RUMgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEY0QzE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAgKi87IH07CisJCTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTMzOEVCQTMyM0FCMDRCODAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmls
aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzM4
RUJBMjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLzsgfTsK
IAkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzcxMURB
QzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi87IH07CiAJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8q
IEpTUnVuTG9vcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VUaW1lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzQxRTcw
RERFQzAwRjEyQUMxIC8qIFByb21pc2VUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTk3LDYgKzM1OTksOCBAQAogCQk1MzE4MDQ1RDIy
RUFBRjBGMDA0QTczNDIgLyogQjNFeHRyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNFeHRyYWN0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNFeHRyYWN0VmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFw
aS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0YXBpLmNwcDsgcGF0aCA9IEFQSS90ZXN0cy90
ZXN0YXBpLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNjMxQjMyMTg3NzdB
NTAwN0I4MTkxIC8qIEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9ICJzb3VyY2Vj
b2RlLm1vZHVsZS1tYXAiOyBwYXRoID0gSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5
Lmg7IHBhdGggPSBmdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hl
Y2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21C
b3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcg
LyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVj
a1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjExLDYgKzM2MTUsOSBA
QAogCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2QTcgLyogVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gVHlwZWRBcnJheUNvbnN0
cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRDNDU3QjFCQzcyNDEx
MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzNEQ5QkY4MjM2M0M1NUQwMDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3Rv
dHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFNldEl0ZXJh
dG9yUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGOTIz
NjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gSXRlcmF0b3JIZWxwZXJzLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzREOUJGQTIzNjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90
b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBNYXBJdGVy
YXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEQx
RTRENEIxNjAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRF
MDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0RTAzNTMxRTUzQkQyOTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUyMSw2ICs1NTI4
LDcgQEAKIAkJCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUu
aCAqLywKIAkJCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3Bw
ICovLAogCQkJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICov
LAorCQkJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0
eS5oICovLAogCQkJCTBGMjVGMUFBMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
Y3BwICovLAogCQkJCTBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
aCAqLywKIAkJCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5
LmNwcCAqLywKQEAgLTU5NDcsNiArNTk1NSw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBD
YWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENh
bGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BT
dGFja0lubGluZXMuaCAqLywKQEAgLTg1NzYsNyArODU4NSw5IEBACiAJCQkJQTUyNzA0ODUxRDAy
N0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJ
CQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAq
LywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMg
Ki8sCkBAIC04NTg3LDYgKzg1OTgsNyBAQAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAv
KiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBS
ZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4
NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEw
MDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIx
MDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MDg3LDYgKzkw
OTksNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQy
NjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFB
OTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTk0MzIsNiArOTQ0NSw3IEBACiAJCQkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzJBMTg3
REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzM4RUJBMzIzQUIwNEI4MDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExT
bG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjJFNUE3MURB
NjQ0QTgwMDZFNzcwOSAvKiBGVExTbmlwcGV0UGFyYW1zLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMuLjY4
ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApA
QCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BP
SU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBl
eHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0gICAg
ICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7
Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1Byb2JlRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVG
cmFtZS5oCmluZGV4IGNhYjM2OGRjN2NkMGYzYjRmODViNzY5Yjc4OGQ0MGQ2M2VhNTYzNzcuLjQy
MjlhMGQwOTk3YTRiMGY1ODNhY2FlYTNhMGYxNjU3MjlmNDZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5oCkBAIC00NiwxNCArNDYsMTQgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZ2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJn
dW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQgPSBKU1ZhbHVlPgotICAgIFQgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBUIG9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIGdldDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgot
ICAgIFQgb3BlcmFuZChpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCkKKyAgICBUIG9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCiAgICAgewotICAg
ICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGdl
dDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBzZXQ8VD4oQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBUIHZhbHVlKQorICAgIHZv
aWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgVCB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKICAgICB9CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQsIFQgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0PFQ+KHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpICsgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldDxUPihvcGVyYW5kLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4
IDM1ZDAxNzU2ZDUzMmE3MWVjMDdmZTQwM2VmN2E1MjUwYjVmYzZmNjEuLjQxYmM5NjFhMTUzMDg1
ZmJhODU1MDY1YzM5YjZjNmRhNmZiMmE4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgK
QEAgLTI2MywyMCArMjYzLDIwIEBAIGlubGluZSB2b2lkIGNoZWNrRG9lc05vdFVzZUluc3RydWN0
aW9uKENvbXBpbGF0aW9uJiBjb21waWxhdGlvbiwgY29uc3QgY2hhciogdGV4CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Ci1zdHJ1Y3QgT3BlcmFuZCB7CitzdHJ1Y3QgQjNPcGVyYW5kIHsK
ICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgIFR5cGUgdmFsdWU7CiB9OwogCi10eXBlZGVmIE9w
ZXJhbmQ8aW50NjRfdD4gSW50NjRPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDMyX3Q+IElu
dDMyT3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Ci10eXBl
ZGVmIE9wZXJhbmQ8aW50OF90PiBJbnQ4T3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDY0
X3Q+IEludDY0T3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFu
ZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKK3R5cGVkZWYgQjNP
cGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7CiAKLSNkZWZpbmUgTUFLRV9PUEVSQU5EKHZhbHVl
KSBPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KKyNkZWZpbmUgTUFL
RV9PUEVSQU5EKHZhbHVlKSBCM09wZXJhbmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFs
dWUgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci12b2lkIHBvcHVsYXRlV2l0aElu
dGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKK3Zv
aWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5
cGU+PiYgb3BlcmFuZHMpCiB7CiAgICAgb3BlcmFuZHMuYXBwZW5kKHsgIjAuIiwgc3RhdGljX2Nh
c3Q8RmxvYXRUeXBlPigwLikgfSk7CiAgICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0wLiIsIHN0YXRp
Y19jYXN0PEZsb2F0VHlwZT4oLTAuKSB9KTsKQEAgLTMwMiw5ICszMDIsOSBAQCB2b2lkIHBvcHVs
YXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVy
YW5kcykKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotVmVjdG9yPE9wZXJhbmQ8
RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2ludE9wZXJhbmRzKCkKK1ZlY3RvcjxCM09wZXJhbmQ8Rmxv
YXRUeXBlPj4gZmxvYXRpbmdQb2ludE9wZXJhbmRzKCkKIHsKLSAgICBWZWN0b3I8T3BlcmFuZDxG
bG9hdFR5cGU+PiBvcGVyYW5kczsKKyAgICBWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IG9w
ZXJhbmRzOwogICAgIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKG9wZXJhbmRzKTsKICAg
ICByZXR1cm4gb3BlcmFuZHM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCmluZGV4IDYwMDYyZjlkNDgwNmY3OTIzYmQzOTNkM2E3NTkyZWI4YjUw
NTg4MzguLmVhYmRjODEwYWI0ZGJkMjYzZjQ4YjVhZmZiMDQ3NGIyNDU4MDc1NWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTE1MDgsNyAr
MTUwOCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSYgc3RhdGUpCiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxp
bmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKIAogICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUg
PT0gU2V0dGVyKSB7CiAgICAgICAgICAgICBhdXRvJiBhY2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlPigpOwpAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAg
ICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9y
RXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwog
ICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKaW5kZXggYTE3NGUyNDczZjc1MzBj
Yzc3NzE1M2M2M2IxMzEzMzBlZTU4ZjU4OC4uNDUyYzBlZjFiZTMwYjIxZTYzNDgxZGI3NTAyODhj
ZDMyYTIwMDg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2lu
YWwoKS5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOwogCiAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5kZXgg
NjA1OGZiMDYyMDM5NDZjNGNkNTZlZjZhOTgzODc5ZDJkNmM4MWZiNi4uODM2NTExNWY0MjE3OTFh
NWM2NjQ4M2E1YTc5MDVjYWU1YzBlZTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBsb2NhdGlvbiwKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUo
cmVnLm9mZnNldCgpKS5kYXRhKCkpOworICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5h
bWUocmVnKS5kYXRhKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04Mywx
MiArODMsMTIgQEAgdGVtcGxhdGUgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShH
ZW5lcmljQm91bmRMYWJlbDxXYXNtOjpHZW5lcmF0b3JUcmEKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBl
cjxCbG9jaz46OnJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyIHIpIGNvbnN0CiB7Ci0gICAg
aWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQorICAgIGlmIChyLmlzQ29uc3RhbnQoKSkK
ICAgICAgICAgcmV0dXJuIGNvbnN0YW50TmFtZShyKTsKIAotICAgIHJldHVybiB0b0NTdHJpbmco
VmlydHVhbFJlZ2lzdGVyKHIpKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHIpOwogfQogCiB0ZW1w
bGF0ZSA8Y2xhc3MgQmxvY2s+CkBAIC05OCwxMCArOTgsMTAgQEAgaW50IEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPjo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9m
ZnNldCkKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKIHsK
LSAgICBhdXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQoaW5kZXgpOwotICAgIHJldHVy
biB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKKyAg
ICBhdXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICByZXR1cm4gdG9D
U3RyaW5nKHZhbHVlLCAiKCIsIHJlZywgIikiKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygp
CiAgICAgfQogfQogCi1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUoaW50IGlu
ZGV4KSBjb25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKFZpcnR1YWxS
ZWdpc3RlciBpbmRleCkgY29uc3QKIHsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0
aGlzLT5ibG9jaygpOwogICAgIGF1dG8gdmFsdWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0
Q29uc3RhbnRUeXBlKGluZGV4KSwgYmxvY2stPmdldENvbnN0YW50KGluZGV4KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCmluZGV4IDBkNzE2
NzUwMzk0YjE1ZDRlYjVlODdjNWE4ODI1MTA3NWVmZTAzZWUuLmVkYjExMjkyMWFmNzUzZTYzZDg2
MTM3MmZiZGUwZWVmODlmY2ExNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGR1bXBWYWx1ZShUIHYpIHsgbV9vdXQucHJpbnQodik7IH0KIAogcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBD
U3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpIGNv
bnN0ID0gMDsKIAogICAgIEJ5dGVjb2RlRHVtcGVyQmFzZShQcmludFN0cmVhbSYgb3V0KQpAQCAt
OTEsMTEgKzkxLDExIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZHVtcEJ5dGVjb2RlKGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCi0gICAg
Q1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJpbmcg
cmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IG91
dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpIGNvbnN0
IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1
YWxSZWdpc3RlcikgY29uc3Q7CiAKICAgICBCbG9jayogbV9ibG9jazsKIH07CkBAIC0xMzUsNyAr
MTM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9u
Q29kZUJsb2NrPjo6Qnl0ZWNvZGVEdW1wZXI7CiAKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsK
LSAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAg
IENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgQ1N0cmluZyBmb3JtYXRDb25zdGFudChUeXBlLCB1aW50NjRfdCkgY29uc3Q7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5j
cHAKaW5kZXggMTVkNjFiYTkwNDAxYTcxMTdkYzBmOWYyNmUxOTEzN2ViMmMzMTU5Yi4uYTJjMWY0
MTViMTk3ZDQ2YmQ2ODE0YTIwMTExYzg3YzUwODcyMjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcApAQCAtMjUsNiArMjUsNyBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorCiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzIsNiArMzMs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgQnl0ZWNvZGVJbmRleDo6ZHVtcChXVEY6OlByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCJiYyMiLCBvZmZzZXQoKSk7Cisg
ICAgaWYgKGNoZWNrcG9pbnQoKSkKKyAgICAgICAgb3V0LnByaW50KCJjcCMiLCBjaGVja3BvaW50
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmluZGV4IDUyOTVjMjliMTIyODEzMWY3MmFjMjA3MzFj
MWQzYmNlOTM1MTU4ZGYuLjEwZmJhNDQwNThlYzlkZmVkMjU0ODA5YTZkNzgzMzdkMDExYTRiNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0
cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogY2xh
c3MgUHJpbnRTdHJlYW07CkBAIC0zNywyNCArMzgsMzMgQEAgY2xhc3MgQnl0ZWNvZGVJbmRleCB7
CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUlu
ZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChk
ZWxldGVkVmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZh
bHVlKCkuYXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4
KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KQotICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXQ7IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVp
bnQ4X3QgY2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNv
ZGVPZmZzZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMg
PSA0OworICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMp
LCAibnVtYmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2lu
dHMgLSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0g
V1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50
MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNo
aWZ0OyB9CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRC
aXRzICYgY2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJl
dHVybiBtX3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBXVEY6OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsg
cmV0dXJuIFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2Rl
SW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEp
OyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0
aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9t
Qml0cyh1aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBp
bnZhbGlkT2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsg
fQogICAgIGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRv
ciAhPShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KIApAQCAtNjksMTMgKzc5LDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlk
T2Zmc2V0IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRl
eCwgdWludDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGlu
dmFsaWRPZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNr
KHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NF
UlQoY2hlY2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNv
ZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29k
ZUluZGV4KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBj
aGVja3BvaW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9t
Qml0cyh1aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJl
c3VsdC5tX29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QucmIKaW5kZXggNzFiZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3
ODdhZmZhNC4uNjgwY2RkOTE4NjBmMzAxYWYxOGRkZWJmYTIyNjRmYTBlN2Q3MjBiZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3
ICs1OSw3IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2Zp
bGUsCi0gICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkJpbmFyeUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwx
MyBAQCBvcCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJv
ZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAg
fSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAg
IGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAg
ICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgw
NSw2ICs4MTIsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAg
ICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25l
ZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3Vu
dDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cywKQEAgLTg0NSw2ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJh
cmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7Cisg
ICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAg
ICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAog
ICAgIH0KIAogb3AgOnJldCwKQEAgLTk5Miw3ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAg
ICB0aHJvd25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsK
LSAgICAgICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAg
IGJ1ZmZlcjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQog
CiBvcCA6dGhyb3csCkBAIC0xMjM4LDYgKzEyNTksOCBAQCBvcCA6bGxpbnRfbmF0aXZlX2NhbGxf
dHJhbXBvbGluZQogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxs
aW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lCiBvcCA6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24KIG9wIDpvcF9jYWxsX3JldHVybl9s
b2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAKaW5kZXggOTE4ZTFkMjEzNGE2MGI2Y2ZmMTAxMTQzYWI1NTQzM2I4YjQzZjQ0MC4uN2Rh
MjJjMmQyY2M3YmZjMTFkMWY4ZjhkN2RiZTZkM2M5MTZjZTViYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAKQEAgLTIwMSw0ICsyMDEsMzkgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6
OmR1bXBSZXN1bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIH0KIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgRW51bVR5cGUxLCB0eXBlbmFtZSBFbnVtVHlwZTI+Citjb25zdGV4cHIgYm9vbCBl
bnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBlMSB2MSwgRW51bVR5cGUyIHYyKQorewor
ICAgIHVzaW5nIEludFR5cGUxID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RW51bVR5
cGUxPjo6dHlwZTsKKyAgICB1c2luZyBJbnRUeXBlMiA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWlu
Z190eXBlPEVudW1UeXBlMj46OnR5cGU7CisgICAgaWYgY29uc3RleHByIChzaXplb2YoSW50VHlw
ZTEpID4gc2l6ZW9mKEludFR5cGUyKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5
cGUxPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTE+KHYyKTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUy
Pih2Mik7Cit9CisKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JD
aGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCit7CisgICAgQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiByZXN1bHQ7Cisg
ICAgdWludDhfdCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7CisKKyAg
ICBpZiAoIWNoZWNrcG9pbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzd2l0Y2gg
KGNvZGVCbG9jay5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+b3Bjb2RlSUQoKSkg
eworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFy
Z3M6CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9w
VGFpbENhbGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChP
cENhbGxWYXJhcmdzOjphcmdDb3VudCwgT3BUYWlsQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJh
cmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVl
c0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudCwgT3BDb25zdHJ1Y3RWYXJh
cmdzOjphcmdDb3VudCkpOworICAgICAgICBpZiAoY2hlY2twb2ludCA9PSBPcENhbGxWYXJhcmdz
OjptYWtlQ2FsbCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQoT3BDYWxsVmFyYXJnczo6YXJnQ291
bnQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggNzM3OWIzYzliYzcyMzI1
OTEwOWM2MWU3YWRhNTMzZDllN2QyZjJjOS4uM2U1ZWRjMGE2OGFlNDRkZjY1MTVjZGJmZDRiNDI3
ZWY2OWVlZjE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkJ5dGVjb2RlQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05Nyw2ICs5OCw4IEBA
IHByaXZhdGU6CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogfTsKIAorQml0bWFwPG1heE51
bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2Nr
JiwgQnl0ZWNvZGVJbmRleCk7CisKIGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50
IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUo
Y29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVy
YW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggM2QxMmUxOTVjNjk5ZWZiZjk2MzZhMmI5NzRl
Nzk0NGNkYWVkNzJjMC4uZGU2Y2E4ZGM5MTA5Yjc4OTY3ZjEwNTUwMDlkYTMwZTg5OTg0ODI4MiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0zMywyMiArMzMsMjIgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9w
ZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUoVmlydHVhbFJl
Z2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gIVZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0xv
Y2FsKCk7CisgICAgcmV0dXJuICFyZWcuaXNMb2NhbCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGlu
dCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2
ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgdW5zaWduZWQgbG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgp
OworICAgIHVuc2lnbmVkIGxvY2FsID0gcmVnLnRvTG9jYWwoKTsKICAgICBpZiAobG9jYWwgPj0g
b3V0Lm51bUJpdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBvdXRbbG9j
YWxdOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3Im
IG91dCwgaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoY29u
c3QgRmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKIHsKLSAgICBy
ZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2
ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOwogfQogCiBpbmxpbmUgYm9vbCBpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggODY5ZjUzZjNmY2QwZDA3NjEwOWExZmRh
NWY5NDdmNTIwZmU1MTRkZC4uNjAyZGQ1MjVhMWJkMmMxNjNkYjhjZjEzYjM1Y2M2MzZlYTFlYjVj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAg
LTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJC
eXRlY29kZVVzZURlZi5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAi
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVz
LmgiCkBAIC00MDcsNyArNDA4LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7
CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmco
bG9ja2VyKTsKICAgICAgICAgfQotICAgICAgICByZXBsYWNlQ29uc3RhbnQodW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldCgpLCBjbG9uZWRTeW1ib2xUYWJsZSk7CisgICAgICAgIHJlcGxhY2VDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSwgY2xvbmVk
U3ltYm9sVGFibGUpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlID0gbV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aFR5cGVQcm9maWxl
ck9wY29kZXMoKSB8fCBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoQ29udHJvbEZsb3dQ
cm9maWxlck9wY29kZXMoKTsKQEAgLTY0MSw3ICs2NDIsNyBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGluawogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
ID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hp
bmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8gaXMgbm90IGFub255bW91cy4KICAg
ICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxl
Kj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xU
YWJsZSgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwog
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxl
LT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+
ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CkBAIC03MDksOCArNzEwLDcgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZlZDogewotICAg
ICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV9zeW1ib2xUYWJs
ZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpOwotICAgICAgICAgICAgICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50
KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJv
bFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV9pZGVudGlmaWVyKTsK
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5t
X2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0
ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJl
ZCBmb3IgcHJvZmlsaW5nIHlldC4KQEAgLTEwODYsNiArMTA4NiwxNSBAQCBzdGF0aWMgYm9vbCBz
aG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpbwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQorCitCeXRlY29kZUluZGV4IENv
ZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCBleGl0SW5kZXgpIGNv
bnN0Cit7CisgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgY29uc3Qg
YXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChleGl0SW5kZXgpOworICAgICAg
ICBleGl0SW5kZXggPSBpbnN0cnVjdGlvbi5uZXh0KCkuaW5kZXgoKTsKKyAgICB9CisgICAgcmV0
dXJuIGV4aXRJbmRleDsKK30KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBDb2Rl
QmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgxMSwxMCArMTgyMCwxMCBAQCB2b2lkIENvZGVCbG9j
azo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhjb25z
dCBPcENhdGNoJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1ldGVycygpOyArK2kp
CiAgICAgICAgIGxpdmVPcGVyYW5kcy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CisgICAgYXV0byBwcm9maWxlcyA9IG1h
a2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyPihsaXZlT3BlcmFu
ZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChwcm9maWxlcy0+bV9zaXplID09IGxpdmVP
cGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlcy0+
bV9zaXplOyArK2kpCi0gICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJh
bmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0KCk7CisgICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZl
ci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV07CiAKICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3MTMsNyArMjcyMiw3IEBAIHZvaWQgQ29kZUJsb2Nr
Ojp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWdu
ZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7
CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJv
ZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgICAgICBwcm9maWxlQnVja2V0LT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAg
ICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKaW5kZXggMTQ2NzQyZWIwNDhhMWQxNjZmMDE3OTFkNTZjZTU4MTUwZjUz
NDI2Ni4uMjUwNjcyNjNlMjQ3NmRhMWIyZGY2ZDVkMmY4ZTgwNDMxNWYzMDNjMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMTYxLDYgKzE2MSw3IEBA
IHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1D
YWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1W
YXJzOyB9CisgICAgaW50IG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAgICBpbnQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CkBAIC0yMjksMjAgKzIzMCwy
MCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNv
bnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUg
Ym9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKKyAgICBpbmxpbmUgYm9vbCBpc0tu
b3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICBpZiAo
aW5kZXggPT0gdGhpc1JlZ2lzdGVyKCkub2Zmc2V0KCkgJiYgIWlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICBpZiAocmVnID09IHRoaXNSZWdpc3RlcigpICYmICFpc1N0cmljdE1vZGUoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgp
OworICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXRD
b25zdGFudChyZWcpLmlzQ2VsbCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KGludCBpbmRl
eCkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKKyAg
ICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBtX251bVZhcnM7CiAgICAgfQogCiAgICAgSGFu
ZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVk
SGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CkBAIC01ODEsMTAgKzU4Miw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4
IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltyZWcudG9Db25zdGFudEluZGV4KCldOyB9
CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0
dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5j
dGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNzc0LDYg
Kzc3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFz
ZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0KTsKICAgICAKKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2RlSW5kZXgpIGNvbnN0OwogICAg
IHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRl
cjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsgfQpA
QCAtODc0LDcgKzg3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOworICAgICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAogICAgICAgICBEaXJlY3RFdmFsQ29kZUNhY2hlIG1f
ZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9OwpAQCAtOTQxLDEwICs5NDIsMTAgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFy
cmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0
YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAotICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KGlu
dCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHJlcGxhY2VDb25zdGFudChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkp
OwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOworICAgICAgICBBU1NFUlQocmVnLmlz
Q29uc3RhbnQoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0NvbnN0YW50SW5kZXgoKSkg
PCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9
CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCAy
MTA2ODEzZjBhMWVhYTUxMzRkMGYzOWJkNzUxYzczMThlYmMwNDMxLi5mOTgyOWEyODZmOGFhYmY0
ZDMzMmZmZjFlNzFlYTNjODNmOWJjNjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw3ICsxNjAsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFtZSogdGVybWluYWwgPSBudWxscHRyKSBj
b25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIHdhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CisgICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFj
ayhjb25zdCBGdW5jdGlvbiYpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgaW5saW5lU3RhY2tD
b250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAgICAvLyBHZXQgdGhlIGlu
bGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBv
bmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aAppbmRleCBlNGE1NzViMDNhN2QxYjU5OWFkMGQ1NmNlZGRkYWY0YmEwNTAyZjNhLi40N2M2NTdj
OGRmOTAzODNhZjY1ZWI1YzNiOGE4YjA1OTRkMGM0ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMjYsMTIg
KzI2LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czsKK2NsYXNzIENvZGVCbG9jazsKIAorLy8gTm90ZTogRnVsbCBieXRlY29kZSBsaXZlbmVzcyBk
b2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBz
LgorLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExp
dmVuZXNzRm9yQ2hlY2twb2ludC4KIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJs
aWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2
aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5k
VGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2lu
dCksIG9wZXJhbmQpOworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZl
KHJlZykgfHwgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZl
bmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8v
IEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBj
b21wYWN0LgorICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNt
IHRvIG1ha2UgdGhlbSBjb21wYWN0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDQ0Mjc8UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFz
dEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1l
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5k
ZXggOTc1MDhiYmYwYzQ1Y2I5N2E0Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uYTBhYTdjMDkyNDRm
OTk1NmJlZjFmYjk4MzhiNTYyYzE0ODk5OTRiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVj
dCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5l
Q29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVw
cy4KKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBu
b3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2ln
bmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlw
ZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3
ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3Qg
dHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBt
YW51YWxseS4KQEAgLTE5MSw3ICsxOTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAg
ICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBq
dXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6
ZSBleHBsaWNpdGx5LgogICAgIElubGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZz
ZXQoMCkKKyAgICAgICAgOiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAs
IHRtcE9mZnNldCgwKQorICAgICAgICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChD
YWxsKQogICAgICAgICAsIGlzQ2xvc3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIy
MiwxMiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3RhdGljX2Nhc3Q8c2lnbmVkPihzdGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICB2b2lkIHNldFRtcE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBP
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0bXBPZmZzZXQpID09IG9mZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxl
ckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJl
dHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0Nyw5ICsyNTYsOSBA
QCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5l
Q29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaQogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsK
IH0KIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3Jp
Z2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4g
SW5saW5lQ2FsbEZyYW1lCisvLyBUaGVzZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5v
dCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxs
ZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Ci1pbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlv
biYgZnVuY3Rpb24pCitpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhj
b25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gKnRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTI2MSwxMSArMjcwLDM4IEBAIGlu
bGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBm
dW5jdGlvbikKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgVmlydHVhbFJlZ2lzdGVyIHJlbWFw
T3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IHJlZykKK2lubGluZSBib29sIENvZGVPcmlnaW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVD
aGVja3BvaW50KCkgY29uc3QKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIHdhbGtV
cElubGluZVN0YWNrKFsmXSAoQ29kZU9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdp
bi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJh
bmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5k
IG9wZXJhbmQpCit7CisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIG9w
ZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpICsgaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpIDogb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FM
V0FZU19JTkxJTkUgT3BlcmFuZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHJlbWFwT3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgT3Bl
cmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQgb3BlcmFuZCkKIHsKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKHJlZy5vZmZzZXQoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpOwotICAgIHJldHVybiByZWc7CisgICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBP
cGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSAtIGlubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0KSA6IE9wZXJhbmQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQpOworICAgIHJldHVybiBvcGVyYW5kOworfQorCitBTFdBWVNfSU5M
SU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoreworICAgIHJldHVybiB1bm1hcE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLCBPcGVyYW5kKHJlZykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmgKaW5kZXggYmZiOTRiMzVmY2Q2MzlhNGExZjFkMDBjOGFiYjE0NWViMWM2NGE1OS4u
ZTAzZmEzOTM5NTk1NTUyZWJmMzhmN2I0YWIyZGQ1NzcwYTUwZjVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29uY3VycmVu
dEpTTG9jay5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxl
LmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KQEAgLTQ5LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgOiBtX2J5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
ICAgICB7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsg
bV9vcGVyYW5kLm9mZnNldCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2go
KSArIG1fb3BlcmFuZC52YWx1ZSgpICsgbV9vcGVyYW5kLmtpbmQoKTsKICAgICB9CiAgICAgCiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVy
YW5kOwpAQCAtOTAsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0
ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFu
ZDsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUtleUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlm
MzZjN2ZiZGExMDU1Nzg5ZGZmZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZl
Yzg3YWEyYzY5YThiYzA2NzA0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAg
LTQyLDcgKzQyLDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExh
enlPcGVyYW5kOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9j
azsKICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5k
KCkub2Zmc2V0KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVy
YW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMm
IGppdCwgSlNWYWx1ZVJlZwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6
eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6
eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9w
ZXJhbmQpKTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9w
ZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAog
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2Nr
LT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBA
IC05MSw3ICs5MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0
VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3Bl
cmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3Bl
cmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFu
ZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFu
ZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwog
ICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuaAppbmRleCA1ZDgxYzRjOTAwYjA4YTRkZWQ4M2E3NGRmYTVhMmRjZjMzNWVjODhk
Li4zNmQzNjlmMGMwMGZiZDQ0Yzg1NWEzODllMDY1MDg0YmM3OGU1ODE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5
ZmY5Zjk3MzZhZWIzNzM0NTk0NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uNDIxMzExN2RiNzZmNmVkN2Vl
YjkzOWQzNzc0M2ExYWE0NjBmZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSwxMTEgKzM1LDIyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVy
YW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5z
aWduZWQgbWF4TnVtQ2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25l
IHRoYXQgZXhpc3RzIGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhp
c3QgYmV0d2VlbiBieXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5k
LCBMb2NhbE9wZXJhbmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6
CisgICAgT3BlcmFuZCgpID0gZGVmYXVsdDsKKyAgICBPcGVyYW5kKGNvbnN0IE9wZXJhbmQmKSA9
IGRlZmF1bHQ7CisKKyAgICBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICA6IG1fa2luZChvcGVyYW5kLmlzTG9jYWwoKSA/IExvY2FsT3BlcmFuZCA6IEFyZ3VtZW50T3Bl
cmFuZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSkKKyAgICB7IH0KKwor
ICAgIE9wZXJhbmQoT3BlcmFuZEtpbmQga2luZCwgaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9r
aW5kKGtpbmQpCisgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCisgICAgeyAKKyAgICAgICAg
QVNTRVJUKGtpbmQgPT0gVG1wT3BlcmFuZCB8fCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNM
b2NhbCgpID09IChraW5kID09IExvY2FsT3BlcmFuZCkpOworICAgIH0KKworICAgIE9wZXJhbmRL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBpbnQgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX29wZXJhbmQ7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgIT0gVG1wT3BlcmFuZCk7
CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kKTsKKyAgICB9CisgICAg
dWludDY0X3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigq
dGhpcyk7IH0KKyAgICBzdGF0aWMgT3BlcmFuZCBmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSk7CisK
KyAgICBib29sIGlzVG1wKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IFRtcE9wZXJhbmQ7IH0K
KyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gQXJndW1lbnRP
cGVyYW5kOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IExv
Y2FsT3BlcmFuZCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCk7IH0KKyAgICBib29sIGlz
SGVhZGVyKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFRtcE9wZXJhbmQgJiYgdmlydHVhbFJl
Z2lzdGVyKCkuaXNIZWFkZXIoKTsgfQorCisgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFT
U0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgp
OyB9CisgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpc1ZhbGlk
KCkgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhbmQmKSBj
b25zdDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIE9wZXJhbmRLaW5kIG1fa2luZCB7IEFyZ3VtZW50T3BlcmFuZCB9OworICAgIGludCBtX29w
ZXJhbmQgeyBWaXJ0dWFsUmVnaXN0ZXI6OmludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgfTsKK307CisK
K0FMV0FZU19JTkxJTkUgYm9vbCBPcGVyYW5kOjpvcGVyYXRvcj09KGNvbnN0IE9wZXJhbmQmIG90
aGVyKSBjb25zdAoreworICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgpID09
IG90aGVyLnZhbHVlKCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpID09IG90aGVyLnZp
cnR1YWxSZWdpc3RlcigpOworfQorCitpbmxpbmUgYm9vbCBPcGVyYW5kOjppc1ZhbGlkKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkgPj0gMDsKKyAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpOworfQorCitpbmxpbmUgT3BlcmFu
ZCBPcGVyYW5kOjpmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBPcGVyYW5kIHJlc3Vs
dCA9IGJpdHdpc2VfY2FzdDxPcGVyYW5kPih2YWx1ZSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc1Zh
bGlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKE9w
ZXJhbmQpID09IHNpemVvZih1aW50NjRfdCksICJPcGVyYW5kOjphc0JpdHMoKSByZWxpZXMgb24g
dGhpcy4iKTsKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKLSAgICBPcGVyYW5k
cygpCi0gICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9Ci0gICAgCi0gICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykKKyAgICB1c2lu
ZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBG
YXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+PjsKKyAgICB1
c2luZyBSZWZUeXBlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+
LCBGYXN0Qml0UmVmZXJlbmNlLCBUJj47CisgICAgdXNpbmcgQ29uc3RSZWZUeXBlID0gc3RkOjpj
b25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBib29sLCBjb25zdCBUJj47CisK
KyAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCiAgICAgewotICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1bWVu
dHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1ZXMu
ZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0KKyAgICAgICAg
c2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAg
ICBtX3ZhbHVlcy5ncm93KHNpemUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+
OjpuZWVkc0luaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkpOwog
ICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVf
dCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5k
cyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKKyAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCiAgICAgewotICAgICAgICBt
X3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKKyAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsK
KyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRh
ZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJh
bmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1bWVu
dHMoKSkKKyAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQogICAg
IHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkg
KyBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5z
aXplKCkpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQotICAg
IAorCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1B
cmd1bWVudHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQotICAgIAorICAgIHNpemVfdCBudW1i
ZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9CisgICAgc2l6ZV90IG51
bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJn
dW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisKKyAgICBzaXplX3QgdG1wSW5kZXgoc2l6
ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMo
KSk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkgY29u
c3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CisgICAgICAg
IEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsK
ICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX251bUFyZ3VtZW50cyArIGlkeDsKKyAgICAgICAgQVNTRVJU
KGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIGlkeDsKICAgICB9CisKKyAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90
IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKLSAg
ICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVz
W2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQotICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNpemVf
dCBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRl
eChpZHgpXTsKLSAgICB9CisgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KICAgICAKLSAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9Ci0gICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIFJlZlR5cGUgbG9jYWwo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIENv
bnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2Nh
bEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJh
bmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkg
eworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZU
bXBzKCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJu
IG51bWJlck9mQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkxv
Y2FscygpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVy
YW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQorICAgIFJlZlR5cGUgYXRGb3Ioc2l6
ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJh
bmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVy
YW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBjYXNlIEFyZ3VtZW50
T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1
cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICBy
ZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdG1wKDApOwogICAgIH0KICAgICB0ZW1wbGF0ZTxP
cGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZvcihzaXplX3QgaWR4KSBj
b25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBjb25zdAogICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNo
IChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICBy
ZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAg
ICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgpOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiB0bXAoMCk7CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVf
dCBzaXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVu
c3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1
ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6
ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0g
bnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7Cisg
ICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOworICAgICAgICBz
aXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93
KG5ld1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRp
YWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1f
dmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gVCgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkKKyAgICAgICAg
ICAgIG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRleChvbGROdW1U
bXBzIC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7CisgICAgICAgIGlm
IChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0
aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplIC0g
b2xkTnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9jYWxJbmRleChv
bGROdW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlKQor
ICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0g
VCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0g
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBp
ZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZlRtcHMo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFs
dWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6
ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKworICAgICAg
ICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBp
IDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZh
bHVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlk
eCwgY29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3OCw3NiBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09IFQoKSk7CiAg
ICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRGb3JPcGVyYW5k
SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25z
dFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgoaW5kZXgpOyB9
CisKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25z
dAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJn
dW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAg
ICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCi0g
ICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBj
b25zdAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAg
ICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmRJbmRleChv
cC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChvcC52YWx1ZSgp
KTsKICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBSZWZUeXBl
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2Nh
bChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAg
ICB9CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisg
ICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlzVG1wKCkp
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3QgVCYgb3BlcmFu
ZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3Rf
Y2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAgIGNvbnN0IFQm
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5k
KSk7IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJh
bmQpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0K
ICAgICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgYm9vbCBo
YXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5k
LnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29sIGhhc09wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoT3BlcmFu
ZCBvcCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJlZy5vZmZzZXQo
KSk7CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AudmFs
dWUoKSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wLnZh
bHVlKCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc09w
ZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE9w
ZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChP
cGVyYW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy0+b3Bl
cmFuZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUpCi0gICAgewot
ICAgICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFsdWUpOwotICAg
IH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tp
bmRleF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4
XTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4g
YXQoaW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xvY2FsKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IG9w
ZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZUeXBlIGF0KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgUmVmVHlw
ZSBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0
UmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQotICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZzZXQoKTsK
LSAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgZWxzZSBp
ZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAg
ICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBpbmRleCAtIChu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAg
ICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1
bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xv
Y2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kp
CkBAIC0yNTcsNiArMzYzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFT
U0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAg
LTI2NSw5ICszNzIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRz
IG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVj
dG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBt
X251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9u
dW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2
YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBA
IC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFu
ZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAg
ICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnBy
aW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQg
T3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIs
IGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7
CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJP
ZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5k
ZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2Nh
bEluZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRl
eCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1w
IiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJj
MTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2Rl
VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQor
ICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFy
c2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUp
CiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmlu
ZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMwODJiMGEyNjNj
MzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Np
b25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYg
ZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29s
IGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAg
IHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisK
ICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7
IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0
ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0
YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0
YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQxOSw2ICs0MjEs
NyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2ln
bmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhB
Z2UpOworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3Vy
cmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTEx
ODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5YTY5ZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3
NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5
dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1
Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3Np
emUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUg
c3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxl
cwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1
ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1fc2l6ZSAq
IHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyhtX3NpemUgKiBz
aXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVy
LmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZt
X2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
fQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0u
flZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ld
Ln5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAg
ICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7CisgICAgTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVm
M2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCkBAIC0zNSwy
MiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1i
ZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSk7CiAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOwor
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51
bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CiAg
ICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJl
cihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJv
eGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBjYXNlIEJvb2xl
YW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJu
IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAj
ZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKICNl
bmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZDhm
MThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJiYmNjNGZmOTdh
NjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4NmJhYjEyZjZj
Y2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRk
ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJl
Z2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdp
c3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBi
b29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lz
dGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8IDA7CiB9CiAK
LWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wg
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3Bl
cmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBmcmllbmQgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGludCk7CiAKKyAg
ICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZm
ZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZ2lz
dGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+KTsKIAogICAg
IFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50
IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wg
aXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVy
KTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50Pihz
bG90KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3Zp
cnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNM
b2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJl
Z2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzSGVhZGVy
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdp
c3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
cnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NF
UlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lz
dGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0
YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29u
c3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lz
dGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxS
ZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZm
ZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMgaW50IGxvY2Fs
VG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAgIHN0YXRpYyBp
bnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQog
ICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CmluZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMuLjhkMmE3ZmI4
MjQ3NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0x
MTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6
ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAgICBtX3BhcmFt
ZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1ldGVy
ID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgp
KTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFy
YW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb2RlIGJsb2Nr
IGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IHBh
cmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgotICAgIG1f
dGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkp
OyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAgICAgYm9vbCBu
b25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVv
Zj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
PigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAg
ICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAg
ICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkg
ewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsK
KyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAg
ICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJl
Z2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0
dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZh
bHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAg
ICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAt
MzIyOSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNh
bGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6
ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRz
IDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZz
ZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMx
ZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZm
ZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0
aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wg
aXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
OyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0
SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4
IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTliMTIzZDRkODli
YTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50
IGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBpbmRleCkKICAg
ICAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVl
OwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWEx
ZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAK
QEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9p
ZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAg
ICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9
CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVh
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBE
T01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAg
IG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOwor
ICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91
dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2
ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFu
Z2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3Zh
bHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKwor
ICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChm
YWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBh
eWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFu
ZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBi
b29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
QVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtp
bmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNv
ZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAm
JiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0
SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0K
KyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFu
ZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFj
dEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRh
Y2I1NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uNWQ5ZTE3YzkwYTJjNWI1MTgy
YjM2NTYxMjg3NjFkODUzNzE4NDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4
MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFs
dWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgp
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9j
YWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
dXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0
YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5k
KGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3Vs
ZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAo
dmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3Rh
dGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0
ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJn
dW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVu
dCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0
dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJU
KCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1
OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sg
aWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVy
bgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBt
X3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFr
ZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMzU4LDcgKzIzNjQsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFyZ3Vt
ZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUub3Bl
cmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9s
ZGluZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmgKaW5kZXggZDczMjQ3YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4u
ODljMDhmYTA4MGNlYTMyZmQ5YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYy
ZWRhNGFkODhlOWI5N2FhZDVmNGY5MzkyMzc2MjE5NTJhZWY4NC4uMTU1MTg2ZDBiZjgyMjVmMTkx
NTVmYzgzM2IzMzAwMGE3ZjVkOTllZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSAr
MzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNw
cmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+
YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgpAQCAtNDkzLDEwICs0OTYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0
byBhbiBhcmd1bWVudCBvciBsb2NhbCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQg
U2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXJlZy5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJl
ZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAg
ICAgICAgICB9CkBAIC01NjAsMTYgKzU2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9j
ayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKTsKQEAg
LTYyNyw3ICs2MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCBoZWFwKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2sgJiYgIWhlYXAucGF5bG9h
ZCgpLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTgwNiw3ICs4MDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNhZmVUb0dldFN0YWNrID0gaW5kZXggPj0gbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9
IGluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0gaW5kZXggPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSkgLSAxOwpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRl
ciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNB
cnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8q
IGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGls
ZCgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0
aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50KSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVk
SW50MzIpKSwKQEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJ
bmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZh
cmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocmVnLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
S2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJl
ZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRo
RXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSwgRWRnZSh2YWx1ZSkpOwpAQCAtOTM1LDcgKzk1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVu
dENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRD
b3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVBcmd1bWVudENvdW50IC0g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwpAQCAtOTgzLDcgKzEwMDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBm
cmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGZyYW1lQXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOyBsb2FkSW5kZXggPCBmcmFtZUFyZ3VtZW50Q291bnQ7ICsrbG9hZEluZGV4KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKQEAgLTEwMTksOSArMTAzNyw3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NE
YXRhLT5vZmZzZXQ7CkBAIC0xMDMwLDcgKzEwNDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID49IDEpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2
YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCB2
YXJhcmdzRGF0YS0+bGltaXQsIHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApp
bmRleCA2MjYxMTIzY2JmZWMzZWJhMTk1ZDA5YjkzMTAyNmYyNmM3MjU4NDc2Li5hOGQzODQ2NWNl
NDhhOWQ4ZjU0MjAwYmM3NDk2Y2I3NGFlOGQ2NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCkBAIC0zMiwxMSArMzIsMTUg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKKyAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSkKICAgICAgICAgcmV0dXJuIChyZWcuaXNBcmd1bWVudCgpICYmIHJlZy50b0FyZ3VtZW50KCkp
IHx8IHJlZy5pc0hlYWRlcigpOwotICAgIAorCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbAogICAgICAgICAmJiByZWcgPT0gVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQ2LDE5ICs1MCwxOSBAQCBib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBXZSBkbyBub3QgaW5jbHVkZSBmaXh1cHMg
aGVyZSBzaW5jZSBpdCBpcyBub3QgcmVsYXRlZCB0byB8YXJndW1lbnRzfCwgcmVzdCBwYXJhbWV0
ZXJzLCBhbmQgdmFyYXJncy4KLSAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICB1bnNpZ25lZCBudW1B
cmd1bWVudHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFN0
YXJ0ID0KICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKICAgICByZXR1cm4gcmVnID49IGFy
Z3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51bUFyZ3VtZW50czsKIH0KIAot
Ym9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJl
Z2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRh
dGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgcmVnKTsK
KyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9CiAKIE5vZGUqIGVtaXRDb2Rl
VG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNl
dCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2lu
KQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2ln
bmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgYWRkVGhpcykKIHsKICAgICBH
cmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApAQCAtNjksMTEgKzczLDE0IEBA
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9t
Q2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyCi0gICAg
ICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLAorICAg
ICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAgICAgYXJndW1lbnRzLT5vcCgp
KTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkKKyAgICAgICAg
cmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGFy
Z3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9yaWdpbiwgYWRkVGhpcyk7CisK
ICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsK
LSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSAwOworICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IGFkZFRoaXM7CiAgICAgICAg
IEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRWZWN0b3IoKTsKICAgICAgICAg
Tm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpAQCAtMTAzLDcgKzExMCw3IEBA
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKIAogICAgIGlmIChhcmd1
bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50
b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50
cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSkpOworICAg
ICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJh
bmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRoaXMpKTsKICAgICB9
CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAgLTExMyw3ICsxMjAsNyBAQCBO
b2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwog
ICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
ICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+PSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0gbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0IEBAIE5vZGUqIGVtaXRDb2Rl
VG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJP
bmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tlZCksCiAgICAgICAg
IEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1i
ZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAg
IG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCArICFh
ZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkg
ewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1Y2UgYSBuZWdhdGl2
ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJlY3QgdGhhdCBoZXJl
LgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwgCiAgICAgICAgICAg
ICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMCksIEludDMyVXNl
KSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUlu
ZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1
bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5kZXggOWE3NzE4ZmJi
ZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5ZTgxNjIyZDQwMjQ2ZTIzNTVk
NTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5s
aW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCk7Citib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5kKTsKIAogTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYsIE5v
ZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luKTsKKyAgICBJbnNl
cnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdp
biwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2MyOGJkNC4uODk3Yzcw
ZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAgLTEzOSw4ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQog
ICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFs
dWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5k
KGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYg
bG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwo
aW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXgg
Nzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJhNS4uYzJiNTVhYTVjNGE1MjI5
YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZh
aWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVC
eUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5k
czxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwg
bV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsK
KyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xv
Y2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBsb2NhbHND
b3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAg
ICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1NTI1NjAyM2RkY2YyODBkYzU5
NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0ZTIzYzAyNWYyYWJl
NGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxp
dHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9y
PgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBj
b25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNs
b3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBj
b25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxh
YmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICBBdmFpbGFiaWxpdHkgYXZh
aWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAgICAgIGlmICghYXZhaWxhYmls
aXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCAwNTg0NDk2M2U2MTBlZDI5
M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYxNTYxOGI4MDY0YTNhN2IyZDc4
NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5z
aWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNv
dW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1U
bXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVC
ZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgsMTEgQEAgQmFzaWNC
bG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51
bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBp
c1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
LSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVl
c0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVs
bFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1U
bXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBz
KQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRp
b25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYgKzcwLDE1IEBAIHZvaWQgQmFz
aWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAgICBpbnRlcnNl
Y3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2FscywgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKHVu
c2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7Cisg
ICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRUYWls
LmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRI
ZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKK30K
Kwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWluYWwoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggYjVhZGYwOTEyZDA5NDJi
ZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRjNmY0ZDFiMDg1YmM4ZTA2MjU0
ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
QEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4gQmxvY2tOb2RlTGlz
dDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAgICBC
YXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVk
IG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxz
LCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAg
fkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKICAg
ICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAppbmRleCA3NTA4
ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4wMDhjZjUyMjY5NTdjOWE4MzU4
NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNCbG9jaz4mJiBibG9j
aykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgs
IGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFk
b3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKKyAgICBS
ZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJ
bmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCks
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSwgZXhlY3V0
aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgIGF1dG8qIHJl
c3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92ZShibG9jaykpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQwOGI3Li4wMTM0MjEyNzQ3NjAx
MTIzNGMxNGExMWFmYWNmYzQyNTI5MTU5ODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYgKzExMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJlcigxKSkpCiAgICAg
ICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkKICAgICAg
ICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCisgICAgICAg
ICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAgICwgbV9wYXJhbWV0
ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1f
aW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0K
IAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQorICAgIHsKKyAgICAg
ICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZVRtcHM6IHRyeWluZyB0byByYWlzZSBtX251bVRtcHMg
ZnJvbSAiLCBtX251bVRtcHMsICIgdG8gIiwgbmV3TnVtVG1wcywgIlxuIik7CisgICAgICAgIGlm
IChuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5l
bnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIH0KKworCiAgICAgLy8gSGVscGVyIGZvciBtaW4g
YW5kIG1heC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wg
aGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKQEAgLTI3MCwyNSArMjgyLDMzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3Np
YmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHVu
bGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAg
IAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcHJvZ3Jlc3NDaGVja3BvaW50KCkKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpICsgMSk7CisgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisgICAgICAgIG1fZXhpdE9LID0g
dHJ1ZTsKKyAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisgICAgICAgIHByb2Nlc3NTZXRM
b2NhbFF1ZXVlKCk7CisgICAgfQorCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVy
YW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICBy
ZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOwogICAgIH0KICAgICAK
ICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVj
dGlvbi4KLSAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
Tm9kZSogZ2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
b3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgLy8g
SXMgdGhpcyBhbiBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAgcmV0
dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogCi0gICAgICAgIC8v
IE11c3QgYmUgYSBsb2NhbC4KLSAgICAgICAgcmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOworICAg
ICAgICByZXR1cm4gZ2V0TG9jYWxPclRtcChvcGVyYW5kKTsKICAgICB9CiAKICAgICBOb2RlKiBn
ZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCkBAIC0yOTgsOCArMzE4LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0YW50cy5zaXplKCk7CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25z
dGFudEluZGV4XSkgewogICAgICAgICAgICAgICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2Nr
ID0gKm1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiA9IGNvZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5k
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdl
dENvbnN0YW50KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
SW5kZXggPj0gb2xkU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93
KGNvbnN0YW50SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gb2xkU2l6ZTsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQpAQCAtMzU4LDkgKzM3OCwx
MCBAQCBwcml2YXRlOgogICAgICAgICAvLyBpbml0aWFsaXppbmcgbG9jYWxzIGF0IHRoZSB0b3Ag
b2YgYSBmdW5jdGlvbi4KICAgICAgICAgSW1tZWRpYXRlTmFrZWRTZXQKICAgICB9OwotICAgIE5v
ZGUqIHNldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1v
ZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKworICAgIE5vZGUqIHNldERpcmVjdChPcGVyYW5kIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewot
ICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFs
dWUpOworICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUp
OwogCiAgICAgICAgIC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhp
dCBzdGF0ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKQEAgLTM3NCw3
ICszOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhl
Y3V0ZSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVl
KCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVl
dWUuc2l6ZSgpOyArK2kpCkBAIC0zOTIsMTggKzQxMywxNyBAQCBwcml2YXRlOgogICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpID09IG1fY3VycmVudEluZGV4KTsKICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1
cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRz
LnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwogICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQog
CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBv
cGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCi0gICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgTm9kZSogZ2V0TG9jYWxPclRtcChPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotCi0g
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KGxvY2FsKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9j
YWwoKSk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdv
IGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAg
ICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkg
aXMgcmVxdWlyZWQgZm9yCkBAIC00MjgsMjAgKzQ0OCwyNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAog
ICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQotICAgIE5vZGUqIHNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2lu
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKKyAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNl
bWFudGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1v
ZGUgPSBOb3JtYWxTZXQpCiAgICAgeworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
IG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3Jp
Z2luQ2hhbmdlKG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAg
ICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KSB7Ci0gICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChvcGVyYW5kKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKSA+PSBtX251bVRtcHMpIHsKKyAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKmlubGlu
ZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIG9wZXJhbmQ6ICIsIG9w
ZXJhbmQsICIgYnV0IGN1cnJlbnQgbnVtYmVyIG9mIHRtcHMgaXM6ICIsIG1fbnVtVG1wcywgIiBj
b2RlIGJsb2NrIGhhczogIiwgbV9wcm9maWxlZEJsb2NrLT5udW1UbXBzKCksICIgdG1wcy4iKTsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAh
PSBJbW1lZGlhdGVOYWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAg
ICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFu
ZCA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3Bl
UmVnaXN0ZXIoKSkKICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQog
CkBAIC00NTEsNyArNDc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRh
LT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpLCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3Jh
cGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0g
bm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODMsMjAgKzUwOSwyMSBA
QCBwcml2YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBO
b2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCisgICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmln
aW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKICAgICB7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5n
ZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudCA9IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShyZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4
Y2VwdCBmb3IgJ3RoaXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8g
dGhlbiBtYWtlIHN1cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1
bWVudCB8fCBtX2dyYXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNl
dE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzMiwxNCArNTU5LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZC5vZmZzZXQoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsK
ICAgICAgICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICAKLSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1l
bnRQb3NpdGlvbihPcGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1
bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1l
bnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU1MCw5ICs1Nzks
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoLmhhc0RlYnVnZ2VyRW5h
YmxlZCgpKTsKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzV2l0aEZpeHVwLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2Fs
bEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlu
bGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFw
T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNh
bGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKS0+bnVtUGFyYW1l
dGVycygpOwogCkBAIC01NzUsNiArNjA0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxs
TGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1w
cyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQgdG8gdGhlIHN0YWNrLgogICAgICAgICAg
ICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRlY29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRM
aXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxh
dGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsgbG9jYWwtLTsp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBA
IC01ODQsMjcgKzYxNCwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0g
ICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hE
aXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJn
dW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaERpcmVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9j
YWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFv
cGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwg
IW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02MTQsMjYgKzY0NCwyNSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7
CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9HcmFwaChub2RlVHlwZSwgT3BJbmZvKHZh
cmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAg
ICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAgIH0KIAot
ICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAg
IGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxvY2FsPihvcGVyYW5kLCBmaW5kQXJndW1l
bnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaChJbmxpbmVTdGFj
a0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERp
cmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVz
aERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07
CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwg
YWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAg
ICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1
dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRv
IGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQp
IHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2Fs
RGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRv
bUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1wbChj
dXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0
KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3OTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVk
Z2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxkMSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhv
cGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZhbHVlKCkpLCBjaGlsZDEpOworICAgIH0K
ICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBp
bmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVk
Z2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAg
LTEwOTEsOCArMTEyNSwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIG51bWJlciBvZiBhcmd1
bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2Vk
IGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRl
bXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBmb3IgdGhlIGZ1bmN0aW9uLgogICAgIHVu
c2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBtYXggbnVtYmVyIG9mIHRlbXBzIHVzZWQg
Zm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhpdCB0byBjaGVja3BvaW50LgorICAgIHVu
c2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBv
ZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KICAgICAvLyBwcmVhbGxvY2F0ZSBm
b3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZyb20gdGhpcyBmcmFtZS4gVGhpcwogICAg
IC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1lIHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6
ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5NSwxNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0Cisg
ICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkg
KyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKIAotICAgICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAgICB9CiAgICAgfTsK
ICAgICAKQEAgLTExNzUsMTMgKzEyMTQsOCBAQCBwcml2YXRlOgogICAgIElDU3RhdHVzQ29udGV4
dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAgICAgc3RydWN0IERlbGF5ZWRTZXRMb2Nh
bCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFsdWU7Ci0gICAgICAgIFNldE1vZGUgbV9z
ZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXllZFNldExvY2FsKCkgeyB9Ci0gICAgICAg
IERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQorICAgICAgICBEZWxheWVk
U2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAgICAgICA6IG1fb3JpZ2luKG9yaWdpbikK
ICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCkBAIC0xMTk0LDggKzEyMjgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRN
b2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsKG1fb3JpZ2luLCBtX29w
ZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5z
ZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAg
ICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOworICAgICAgICBPcGVyYW5k
IG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKKyAgICAgICAg
U2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8RGVsYXllZFNldExv
Y2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4LDcgKzEyNDcsNyBAQCBwcml2YXRlOgog
QmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVj
b2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxv
Y2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRz
IG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVn
aW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUo
KSkKQEAgLTEyMjAsNyArMTI1OSw3IEBAIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxv
Y2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2lj
QmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAg
ICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNv
ZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFz
aWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgp
LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2lj
QmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhX
VEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwpAQCAtMTQyMyw3ICsxNDYyLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ly8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUgaXMgVmFyYXJncywgd2UgZG8gbm90IGtu
b3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxseSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3Mu
IFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1
bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdo
aWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMg
bWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSB4a0xvYWRW
YXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKICAg
ICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVtcCBpbnRvLgogICAgICAgICAgICAgaWYg
KGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0x
NDQ5LDcgKzE0ODgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWls
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAvLyBXZSBt
dXN0IHNldCB0aGUgY2FsbGVlIHRvIHRoZSByaWdodCB2YWx1ZQogICAgICAgICBpZiAoc3RhY2tF
bnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGlmIChzdGFja0VudHJ5LT5t
X2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAgICBzZXREaXJl
Y3Qoc3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7CisgICAgICAgICAgICAgICAg
c2V0RGlyZWN0KHJlbWFwT3BlcmFuZChzdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgYWRkVG9HcmFwaChTZXRDYWxsZWUsIGNhbGxUYXJnZXROb2Rl
KTsKIApAQCAtMTYxNCwxNiArMTY1MywxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAg
IEFTU0VSVCghKG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHMgJSBzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpKSk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCA9IHJlZ2lzdGVyT2Zm
c2V0IC0gbnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90czsKICAgICAKLSAgICBpbnQgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLm9mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnM7CisgICAgT3BlcmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZp
cnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyk7CiAgICAgCiAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lU3RhcnQpLnRvTG9jYWwoKSArIDEgKworICAgICAg
ICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2FsKCkgKyAxICsKICAgICAgICAgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsK
ICAgICAKKyAgICBlbnN1cmVUbXBzKChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFt
ZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSAr
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51
bVRtcHMoKSk7CisKICAgICBzaXplX3QgYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFwaC5t
X2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsKIAogICAgIGlmIChyZXN1bHQuaXNWYWxpZCgpKQot
ICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KTsK
KyAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCku
dmlydHVhbFJlZ2lzdGVyKCk7CiAKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlh
YmxlID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAtMTYz
Niw3ICsxNjc3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKIAogICAgIElubGluZVN0YWNr
RW50cnkqIGNhbGxlclN0YWNrVG9wID0gbV9pbmxpbmVTdGFja1RvcDsKICAgICBJbmxpbmVTdGFj
a0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxl
ZS5mdW5jdGlvbigpLCByZXN1bHQsCi0gICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRp
b25CbG9jayk7CisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnZpcnR1YWxSZWdpc3Rlcigp
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOwog
CiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5z
LgogICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKQEAgLTE2NzEs
OSArMTcxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIEhvd2V2ZXIs
IHdoZW4gd2UgYmVnaW4gZXhlY3V0aW5nIHRoZSBjYWxsZWUsIHdlIG5lZWQgT1NSIGV4aXQgdG8g
YmUgYXdhcmUgb2Ygd2hlcmUgaXQgY2FuIHJlY292ZXIgdGhlIGFyZ3VtZW50cyB0byB0aGUgc2V0
dGVyLCBsb2M5IGFuZCBsb2MxMC4gVGhlIE1vdkhpbnRzIGluIHRoZSBpbmxpbmVkCiAgICAgICAg
IC8vIGNhbGxlZSBtYWtlIGl0IHNvIHRoYXQgaWYgd2UgZXhpdCBhdCA8SEVSRT4sIHdlIGNhbiBy
ZWNvdmVyIGxvYzkgYW5kIGxvYzEwLgogICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7
CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQub2Zmc2V0
KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1
bWVudFRvR2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChE
ZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvR2V0LCB2YWx1
ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
NzE3LDE2ICsxNzU4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIElu
IHN1Y2ggY2FzZXMsIHdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgZnJhbWVzLgogICAgICAgICBpZiAo
cmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwICE9IHJlZ2lzdGVyT2Zmc2V0KSB7CiAgICAgICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dl
dCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1
bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOwotICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHZh
bHVlKTsKICAgICAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRM
b2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHZhbHVlLCBJbW1lZGlh
dGVOYWtlZFNldCB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgYXJpdHlGaXh1cENvdW50OyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIGluZGV4KSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIE9wZXJh
bmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwg
dW5kZWZpbmVkKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNl
dExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb1NldCwgdW5kZWZpbmVkLCBJ
bW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAgfQogCkBAIC0xODkzLDEyICsxOTM0LDEyIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxs
VmFyaWFudCwgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudCk7CiAgICAgICAgIAogICAgICAg
ICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9Ci0gICAgICAgIG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsK
KyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCkpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAg
ICAgICAgZW5zdXJlTG9jYWxzKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
KS50b0xvY2FsKCkpOwogICAgICAgICAKICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBp
bnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkub2Zmc2V0KCk7CisgICAgICAgIGludCBy
ZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsK
ICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2Fk
VmFyYXJnc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVy
KHJlbWFwcGVkQXJndW1lbnRTdGFydCArIDEpOwpAQCAtMTkwNiwxMSArMTk0NywyNCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZz
ZXQ7CiAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CiAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKQotICAg
ICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEp
LCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKworICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnQ7Cisg
ICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnQgPSBhZGRUb0dyYXBoKEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlubGluZUNhbGxGcmFtZSgpLT5pc1ZhcmFyZ3MoKSkKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZ2V0RGlyZWN0KHJlbWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUoKSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAg
ZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0
YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
d2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQp
OworICAgICAgICAgICAgYXV0byBhcmdDb3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChPcGVyYW5kKFRtcE9wZXJhbmQsIE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7Cisg
ICAgICAgICAgICBzZXREaXJlY3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0
aCwgT3BJbmZvKGRhdGEpLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzQ2hlY2tw
b2ludCgpOworCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0
YSksIGdldExvY2FsT3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBu
ZWVkIHRvIGtlZXAgYWxpdmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAv
LyBhbmQgYXJndW1lbnRzQXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdl
IG9ubHkgbmVlZCBhIFBoYW50b20gZm9yCkBAIC0xOTIyLDE0ICsxOTc2LDE0IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2
ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAv
LyBiZWZvcmUgU1NBLgogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3Vu
dFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBl
ZFJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoZGF0YS0+Y291bnQpOwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQg
d2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24n
dAogICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJn
dW1lbnREZWZpbml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAg
ICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnBy
ZWRpY3QoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9m
aXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFk
ZFRvR3JhcGgoU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRW
YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCks
IHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsK
ICAgICAgICAgdW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTE5NTMsNyArMjAwNyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVu
dHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERl
ZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVu
dCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1T
ZXRBcmd1bWVudHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjA1Myw3ICsyMTA3LDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0
OiAiLCByZWdpc3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcs
ICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlh
dGVTZXRXaXRoRmx1c2gpOwogCkBAIC01MTAyLDcgKzUxNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdl
eHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlz
Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVu
UmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC01MTEyLDcgKzUxNjYsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlzLT5pbmxpbmVDYWxsRnJhbWUo
KTsKICAgICAgICAgICAgIE5vZGUqIGxlbmd0aDsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNM
ZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdExlbmd0
aDsKICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDw9IGJ5dGVjb2RlLm1fbnVt
UGFyYW1ldGVyc1RvU2tpcCkKICAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVt
YmVyKDApOwpAQCAtNjE3OCw3ICs2MjMyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3Vy
cmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAmJiBtX2N1cnJlbnRC
bG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5vcCgpID09IENvdW50
RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIq
IGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAg
ICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVm
ZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNh
dGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGgg
dGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5t
X29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIyMywxNCArNjI3NywxNCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTG9j
YWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hMb2NhbCwgT3BJbmZv
KG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVtYmVyT2ZMb2NhbHNd
KSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCksIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUp
OwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAo
bnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Q
b2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1f
c3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0g
anVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4MjYsOCArNjg4MCw4IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNh
c2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFu
dCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJs
ZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJv
emVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsK
KyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2Rl
Lm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9H
cmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBPcEluZm8oaW5pdGlh
bFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBsZXhpY2Fs
RW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2OTExLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIC8vIGxvYWRzIGZyb20gdGhl
IHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0aGF0IHdvdWxkIHByZXZlbnQgdGhlIERGRyBmcm9t
IHRyYWNraW5nIHRoZQogICAgICAgICAgICAgLy8gYnl0ZWNvZGUtbGV2ZWwgbGl2ZW5lc3Mgb2Yg
dGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAg
ICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAg
IE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNh
bGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4oKm1fdm0pKQogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9uLT5zY29wZSgpKTsKQEAgLTcy
NzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5l
U3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxv
Y2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAg
ICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVy
LT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zm
c2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZz
ZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5j
YWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzYzOCw3
ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc2NTgsMjQgKzc3MTQsMjQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJl
c2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5
cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVy
YW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0g
KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5s
aW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVu
dHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRv
QXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5v
ZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5l
Q2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFt
ZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRG
bHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAgLTc3NDAsNiArNzc5Niw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5t
X3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxz
OwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IDhlOWJiNGFjYmU1
NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNiZmQuLjNkYzc1NjhmMWVlMmM2OTc3MjI2OGNjOTZk
ZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2Uu
Y3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0
SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhh
bmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2
ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJh
bmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKTsKICAgICAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3Zl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZh
bHVlKCksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0
YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFs
dWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKaW5kZXggZDk4
ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0MjZhZjBmMjM4Mi4uNTc3MGYwOTg5NDJjODk2Yjdh
Y2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC01Niw2ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKICAgICAgICAgcHJvcGFnYXRlUGhp
czxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5k
PigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIGNvbXB1
dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFk
ZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2Fs
aXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZh
cmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdl
dExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2Nh
bCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6
ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2Nh
bCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5k
KCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9u
aWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlh
YmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxp
emVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9y
PFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+
CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAg
ICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNzAsMTUgKzI4
MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50
b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFy
aWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
c3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUt
Pm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZs
dXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgVG1wT3BlcmFuZD4obm9kZSwg
dmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2Fs
aXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFy
aWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCkKQEAgLTI4OSw2ICszMTEs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgY2xlYXJWYXJpYWJsZXM8QXJndW1lbnRP
cGVyYW5kPigpOwogICAgICAgICBjbGVhclZhcmlhYmxlczxMb2NhbE9wZXJhbmQ+KCk7CisgICAg
ICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBB
c3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVz
IHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16
ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcg
KzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+
CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFj
a0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/
IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBo
aVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7
CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBm
YWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVj
dG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlm
IChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9h
cmd1bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAg
ICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiBy
ZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDogcmV0
dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiByZXR1cm4gbV90
bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0ZsdXNoZWQoKQpAQCAtNTIxLDYg
KzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAgICAgVmVjdG9yPFBoaVN0
YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fZmx1c2hlZExv
Y2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5NDcxYjVhNjE2NjdjZS4uNGNj
ZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazogewogICAgICAgICAgICAgQVNT
RVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChoZWFwLnBh
eWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAg
ICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
OworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2Fk
KCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAg
ICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigpOwogICAgICAgICAgICAgZWxz
ZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWNsb2Ji
ZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3RhY2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWly
LmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgp
LnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0g
cGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIyNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOwog
ICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOwot
ICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBhYnN0
cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFs
dWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFj
dEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpLCBudWxscHRy
KTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3IEltcHVyZURhdGFTbG90IHts
b2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2lkZVN0YXRlOgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdGFjazog
ewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSA9
PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsK
ICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgp
CiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CkBAIC0yOTgsNyAr
Mjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBhbmQgbm93
IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAgLy8KICAgICAvLyBPYnZpb3Vz
bHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFja01hcCBzaW5jZSBpdCBkb2Vz
IG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8aW50MzJfdCwgc3RkOjp1bmlx
dWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJfdD46Okhhc2gsIFdURjo6
U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90
PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOwogICAgIE1hcCBtX2ZhbGxi
YWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGZkMGI2ZDc0ZGE2NzdiYzQ1MDhjYWM0
OWZjNGVlMWM5OGRhNGU3YWQuLjRkNWEyYTBhYWExYTc0M2JmYmU2OTRiNDM5OGNmZjdmNWJkZjEw
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAK
QEAgLTMwNiw2ICszMDYsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29k
ZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2UgbGxp
bnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxf
ZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zy
b21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0
X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBjYXNl
IG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9s
b2NhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXgg
ODliYzY0MWY1MjZiYjUzZmYwMzdmNzNjZjk1MGJhYzY0NmQ0OTk1NC4uODJmM2NhNjQxODRmOTE5
MzY1MDM5YjEzMjIxN2RkOTllYTk3MTA1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVG
dQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhpcyBkb2VzLgogICAgIGZv
ciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0g
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywg
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0K
IAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5IGFjY291bnQgd2hpY2ggbm9k
ZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEtpbGxTdGFjazoKLSAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsK
KyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CkBAIC00
OTcsNyArNDk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJh
bmQoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKQEAg
LTc2NCwxMiArNzY0LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKLSAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgU2V0Q2FsbGVlOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczog
ewpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgfQogCiAg
ICAgY2FzZSBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoKLSAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgR2V0UmVzdExl
bmd0aDoKQEAgLTc4OCwzNiArNzg4LDQzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlO
b2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJh
bmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3Rh
Y2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJz
dHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFj
azogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgcmVhZChoZWFwKTsKICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAg
ICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5vcGVyYW5kKTsKICAgICAgICAgd3JpdGUoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKKyAgICAgICAgcmV0dXJu
OyAgCisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICByZWFkKFdvcmxk
KTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRh
dGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBk
YXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+
KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODI2LDkgKzgzMyw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoU3RhY2spOwogICAgICAg
ICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0
KCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNf
Y2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRh
dGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
YmluZWRMaXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVk
TGl2ZW5lc3MuY3BwCmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBkMDljZDJhYzMw
ZjMuLjE1NzQ2YzA1NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApAQCAtMzks
NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVuZXNzKEdyYXBoJiBncmFwaCwg
QXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAgICAgZ3JhcGguZm9yQWxsTGl2
ZUluQnl0ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCiAgICAgICAg
ICAgICAgICAgcmVnLAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCA3OTg3
Yjg3MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiLi43ZmZkNGQzNWI2Y2Y1YzlkZTM4
MWU3ZGE2MTMzMmZkNTI0OTY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRh
OjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9yaWdp
bnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMu
c2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4p
OwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICBy
ZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4
IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMuYXBw
ZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgp
IC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAg
IHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4g
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZU9y
aWdpbnMuc2l6ZSgpKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNv
ZGVPcmlnaW5zLnNpemUoKSAtIDEpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5k
ZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4
IENvbW1vbkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9y
aWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAKaW5kZXggM2IxNjVmMmM0MDIxMDAzZDA0MWNjYTZkOWFlMGNmZTdhZTgy
NzEzZi4uMTg1MzY2ZDA0ZTI2M2VlOWVkOTY0Yzg2YTdlZDk1MjRhOTViYjlkOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKQEAgLTM4Myw3ICszODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEdldE15
QXJndW1lbnRCeVZhbCBpbiBzdWNoIHN0YXRpY2FsbHktb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlczsg
d2UganVzdCBsb3NlIENGQSB1bmxlc3MKICAgICAgICAgICAgICAgICAvLyBHQ1NFIHJlbW92ZXMg
dGhlIGFjY2VzcyBlbnRpcmVseS4KICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0g
bV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aW5kZXggKyAxKSwgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRTdGFjayhk
YXRhKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmlu
ZGV4IDg1NDEyMzE0NzQxZTZmMTEyNjFmMmU5N2M0OWZlNjQ0ZGFlN2JhZjcuLmYzOGM4M2ZkZDMw
YzJmNTNiM2Q1MDkzZjQwYjJjNzBlOTUzMTA0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKQEAgLTI5NCw2ICsyOTQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoK
ICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAg
ICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAppbmRleCAxN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2
MjI3MmQ0Nzk5OThiNTM5Li40NWZiYzQzOWQ1M2JhOTUwZTdhOGQ4OWFjOWVjMTk3MmJhMDkzOWI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw3ICs5MCw2
IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlh
bGl6ZWQuIFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2Vu
ZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0
Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKG9zckV4aXRU
aHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFl
ZTFmMDA3M2IwZjRiYmNjNDczNGViNjQxZTQ2NDhjMzA1NWEyNDQuLmNhMzNkYjIyN2Q0YjkyNzcz
ZmE4NmQ3MmVlM2Q0ZDFiODViZjk4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcApAQCAtMjQzMiw2ICsyNDMyLDE0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQz
MlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2Fz
ZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9y
IG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKQEAgLTI0
NjQsOCArMjQ3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZh
cmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKLSAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UHJvbWlzZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCAwYmYxYzNmYmJhYzRhNjYyOThjZjkyOWZl
ZjUwYTYwZGNmZGUyOGI5Li45MzNhMmJkZTIyZTE2NmMyYWViNmQ0YWMxYmJlOWNlMWU1Y2VkNTZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC0zMiw2
ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFj
ZSBGb3JBbGxLaWxsc0ludGVybmFsIHsKK2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
K30KKwogLy8gVXRpbGl0aWVzIGZvciBmaW5kaW5nIHRoZSBsYXN0IHBvaW50cyB3aGVyZSBhIG5v
ZGUgaXMgbGl2ZSBpbiBERkcgU1NBLiBUaGlzIGFjY291bnRzIGZvciBsaXZlbmVzcyBkdWUKIC8v
IHRvIE9TUiBleGl0LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgZW51bWVyYXRpbmcgb3ZlciBh
bGwgb2YgdGhlIHByb2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlLAogLy8gYnkgZXhw
bG9yaW5nIGFsbCBibG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMgbGl2ZSBhdCB0YWlsIGFuZCB0aGVu
IGV4cGxvcmluZyBhbGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUgdGhlCkBAIC01MywxMyArNTcsMTMg
QEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZv
cmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAKICAgICBDb2RlT3JpZ2luIGFmdGVyID0g
bm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxy
ZWFkeU5vdGVkOworICAgIE9wZXJhbmQgYWxyZWFkeU5vdGVkOwogICAgIC8vIElmIHdlIE1vdkhp
bnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxsIHRoZSBv
bGQgdmFsdWUuCiAgICAgaWYgKG5vZGVBZnRlci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAg
ICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFmdGVyKSkgewotICAgICAgICAg
ICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gcmVnOworICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlQWZ0ZXItPnVubGlua2VkT3BlcmFuZCgpOworICAgICAg
ICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBhZnRlcikpIHsKKyAgICAgICAg
ICAgIGZ1bmN0b3Iob3BlcmFuZCk7CisgICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSBvcGVyYW5k
OwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNzAsOCArNzQsMjQgQEAgdm9pZCBmb3JBbGxL
aWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVB
ZnRlciwgY29uc3QKICAgICAvLyBvdGhlciBsb29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJ
bmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9y
ZUlubGluZUNhbGxGcmFtZSA9PSBhZnRlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBp
bnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBn
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihiZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAg
QVNTRVJUKGJlZm9yZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkpOworCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUg
PSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2tw
b2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgaW50
IHRtcE9mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFt
ZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAg
ICAgICAgIGxpdmVCZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CisKKyAgICAgICAgICAgIGxpdmVC
ZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBm
dW5jdG9yKE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wICsgdG1wT2Zmc2V0KSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIC8vIE5vIGxvY2FscyBjYW4gZGllIGF0IGEgY2hlY2twb2ludC4K
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzdGFja09mZnNl
dCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgOiAwOwogICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0g
Z3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3Rv
ciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJ
bmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIGNv
bnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhh
ZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNl
KTsKQEAgLTgyLDE3ICsxMDIsMjEgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAgICAg
ICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25p
bmcgYWNyb3NzIGEgY2hlY2twb2ludCBidXQgYmVmb3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBh
biBpbmxpbmVDYWxsRnJhbWUuIik7CisKICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNv
bnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRl
YWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5
dGVjb2RlKGFmdGVyKTsKLSAgICBncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAg
ICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2Rl
KGFmdGVyKTsKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBiZWZvcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIHJlZykgewotICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAg
ICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBh
bHJlYWR5Tm90ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGxp
dmVBZnRlci5nZXQocmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5k
LnRvTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAg
ICAgZnVuY3RvcihvcGVyYW5kKTsKICAgICAgICAgfSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI5
LDggQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgc2VlbkluQ2xvc3VyZUZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FsbGVkRnVuY3RvckZsYWcgPSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVu
c2lnbmVkPiBmbGFnczsKLSAgICAKKworICAgIEFTU0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRy
ZW4oCkBAIC0xMjAsMTUgKzE0NSwxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5k
ZXgoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVs
bHB0cjsKLSAgICBpZiAobm9kZUluZGV4KQotICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9k
ZUluZGV4IC0gMSk7CisgICAgTm9kZSogYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEp
OwogCiAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5v
ZGUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRp
bmdXaXRoTG9jYWwoCi0gICAgICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgICAgIG9wZXJh
bmQsCiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZsYWdzLmdldChub2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwog
ICAgICAgICAgICAgICAgIH0sCkBAIC0xNTksNiArMTgyLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0lu
QmxvY2soCiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5j
dG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgog
ICAgIC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJ
bmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAxOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgeworICAgICAgICBkYXRhTG9nTG5JZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJi
b3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5IGF0IGluZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9j
YWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rl
c0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgZ3JhcGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZh
aWxhYmlsaXR5LCBibG9jaywgbm9kZUluZGV4LAogICAgICAgICAgICAgWyZdIChOb2RlKiBub2Rl
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGIzMjBmNzA3Yzk1
ZjEyMzkzODUxYmMzYjJiMmI0MmI5NTZkZDBiZjUuLjA3MWRlMjM5MmI5YzVjOTI4NmRlOWM3ODc4
ZmU5YWYwMGMwYjRlNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBA
IC0zMDgsOCArMzA4LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZh
cmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7Cisg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQo
KTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVy
YW5kKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NE
YXRhKSwgIikiKTsKICAgICAgICAgICAgIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1h
Y2hpbmVMb2NhbCgpOwogICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcs
MTMgKzMxNywxMyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNo
YXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIH0KICAgICBpZiAobm9k
ZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkpIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgZGF0
YS0+bG9jYWwpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAg
ICAgICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5s
aW5rZWRMb2NhbCgpKSAKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExv
Y2FsKCkpOworICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVu
Z3RoSGludCA9ICIsIG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c0xhenlKU1ZhbHVlKCkpCkBAIC01MTUsOSArNTE1LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9j
a0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxv
Y2sqCiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgQVNTRVJU
KHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2Rl
LT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQo
KSwgIj4tPigiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgp
LCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+
KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQg
R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3Rh
cnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwog
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPm9wZXJhbmQoKSkKICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdy
YXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0
SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9j
YWwpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgTm9k
ZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9k
ZSkKLSAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxv
Y2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkp
ID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNv
ZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KQogICAgIHJldHVybiBraWxsc0ZvcihiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJh
bWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRl
Y29kZShPcGVyYW5kIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAogICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDaGVja2luZyBvZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJh
bmQsICJcbiIpOwogICAgIGJvb2wgaXNDYWxsZXJPcmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVP
cmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAmY29kZU9yaWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBv
cGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0
byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Cisg
ICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lk
ZSB0byBleGl0IHRvIHRoZQorICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRo
ZSB0YWlsIGNhbGwuCisgICAgZm9yICg7IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBp
bmxpbmVDYWxsRnJhbWUgPyAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRy
KSB7CisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxG
cmFtZSgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCB0bXBPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9m
ZnNldCA6IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmQudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJl
bG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5saW5lZC4KKyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5k
ZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1DaGVja3BvaW50VG1wcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGlmICghY29kZUJs
b2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9y
Q2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsK
KyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAi
XG4iKTsKIAotICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5p
bmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3Jp
Z2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMp
IHsKKyAgICAgICAgaWYgKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2Rl
T3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMpIHsKICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMpOwogCiAKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvb2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSB0aGUgYXJndW1l
bnQgY291bnQuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc2
LDQyICsxMTk3LDQxIEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zv
cihjb2RlQmxvY2spOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bGxM
aXZlbmVzcy5vcGVyYW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9w
cmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3Jp
Z2luKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewotICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBv
ZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy52aXJ0dWFsUmVnaXN0ZXJJc0xpdmUocmVn
LCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29k
ZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFy
Z3VtZW50cyBhcmUgYWx3YXlzIGxpdmUuIFRoaXMgd291bGQgYmUgcmVkdW5kYW50IGlmIGl0IHdh
c24ndCBmb3Igb3VyCiAgICAgICAgIC8vIG9wX2NhbGxfdmFyYXJncyBpbmxpbmluZy4KLSAgICAg
ICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiBy
ZWcuaXNBcmd1bWVudCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50
b0FyZ3VtZW50KCkpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgp
KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJB
cmd1bWVudCBpcyBsaXZlLlxuIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdl
IG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKLSAgICAgICAgLy8gdGhlIHJldHVybiBieXRlY29k
ZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KLSAgICAgICAgY29kZU9yaWdpblB0ciA9ICZpbmxp
bmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICAgICAgaXNDYWxsZXJPcmlnaW4gPSB0cnVl
OwogICAgIH0KKworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNr
LCByZXR1cm5pbmcgdHJ1ZS5cbiIpOworICAgIHJldHVybiB0cnVlOyAgICAKICAgICAKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1CaXRWZWN0b3IgR3JhcGg6OmxvY2Fs
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6
bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAg
ICBCaXRWZWN0b3IgcmVzdWx0OwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0
ZWNvZGUoCisgICAgdW5zaWduZWQgbnVtTG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCkpOworICAgIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAgICAgY29kZU9yaWdpbiwKLSAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwo
KSk7Ci0gICAgICAgICAgICByZXN1bHQucXVpY2tTZXQocmVnLnRvTG9jYWwoKSk7CisgICAgICAg
IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBv
cGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRv
TG9jYWwoKTsKKyAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChvZmZzZXQpOwogICAgICAgICB9
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTYzNSw4ICsxNjU1LDggQEAgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihOb2RlKiBjdXJyZW4KIAogICAgIGZvciAoTm9kZSogbm9kZSA9IG9wZXJhbmROb2RlOyBub2Rl
OykgewogICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKLSAgICAgICAg
ICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7
CisgICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgp
LnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX3Jv
b3RUb0FyZ3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5v
ZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQpAQCAtMTY1Niw3ICsx
Njc2LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKSwgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZmFiOWNmMDJh
MjU5NzZlZjQ3ZDE3OTA1YmFkOWNlMDNlMzgyYmNlNS4uZjdhMWQ4MjE0YzMwMmQ3ZDk2YWMyYTc3
YTAxODY2YTlkMTE5ZjUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAt
ODQwLDEzICs4NDAsMTMgQEAgcHVibGljOgogICAgIC8vIFF1aWNrbHkgcXVlcnkgaWYgYSBzaW5n
bGUgbG9jYWwgaXMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgaXMgZmFzdGVyIHRoYW4g
Y2FsbGluZwogICAgIC8vIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgaWYgeW91IHdpbGwgb25seSBx
dWVyeSBvbmUgbG9jYWwuIEJ1dCwgaWYgeW91IHdhbnQgdG8ga25vdyBhbGwgb2YgdGhlCiAgICAg
Ly8gbG9jYWxzIGxpdmUsIHRoZW4gY2FsbGluZyB0aGlzIGZvciBlYWNoIGxvY2FsIGlzIG11Y2gg
c2xvd2VyIHRoYW4gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKS4KLSAgICBib29sIGlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAgICBib29sIGlzTGl2ZUluQnl0
ZWNvZGUoT3BlcmFuZCwgQ29kZU9yaWdpbik7CiAgICAgCi0gICAgLy8gUXVpY2tseSBnZXQgYWxs
IG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlz
IGRvZXNuJ3QgZ2l2ZSB5b3UKKyAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1
bWVudCBsb2NhbHMgYW5kIHRtcHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24n
dCBnaXZlIHlvdQogICAgIC8vIGFueSBhcmd1bWVudHMgYmVjYXVzZSB0aG9zZSBhcmUgYWxsIHBy
ZXN1bWVkIGxpdmUuIFlvdSBjYW4gY2FsbCBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIHRvCiAgICAg
Ly8gYWxzbyBnZXQgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNhbGxp
bmcgaXNMaXZlSW5CeXRlY29kZSgpIGZvciBlYWNoIGxvY2FsLgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxM
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3Igbm90IHJlZHVu
ZGFudGx5IHJlcG9ydGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGluIGNhc2Ugb2Yg
YSB2YXJhcmdzCiAgICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93cyB0aGF0IGFy
Z3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJhcmdzCkBAIC04
ODEsNiArODgxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5
dGVjb2RlW3JlbGF0aXZlTG9jYWxdKQogICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29k
ZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+bnVtVG1wcygpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5l
c3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0
bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLCBPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MDQsOSArOTEyLDkgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwg
b2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5
IHVzZWZ1bCBpZgorICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIGxvY2FscyBh
bmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCiAgICAgLy8g
eW91IHdhbnQgdG8gY29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxvY2FscyBmcm9tIHR3byBkaWZm
ZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENv
ZGVPcmlnaW4pOworICAgIEJpdFZlY3RvciBsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29k
ZU9yaWdpbik7CiAKICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9wcmlhdGVMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNDYWxsZXJPcmln
aW4pCiAgICAgewpAQCAtOTM4LDEyICs5NDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAgICAgfQogICAgIAotICAgIC8v
IFRlbGxzIHlvdSBhbGwgb2YgdGhlIGFyZ3VtZW50cyBhbmQgbG9jYWxzIGxpdmUgYXQgdGhlIGdp
dmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8vIGV4dGVuc2lvbiB0byBmb3JB
bGxMb2NhbHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMg
cHJlc3VtZWQgbGl2ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVyYW5kcyBsaXZl
IGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKKyAgICAvLyBleHRlbnNp
b24gdG8gZm9yQWxsTG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3Vt
ZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KICAgICB2b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdp
biwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIGZvckFsbExvY2Fsc0xp
dmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAgICAgICBmb3JBbGxMb2NhbHNB
bmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAgICAgIAogICAg
ICAgICAvLyBSZXBvcnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBsaXZlLgogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyBhcmd1bWVudC0tOykKQEAgLTExMTQsNiArMTEyMiw3IEBAIHB1YmxpYzoKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5zaWduZWQg
bV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2ln
bmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTExYzQ1YjA1
NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhiZTM4NGUz
ZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0
U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fYWJzdHJh
Y3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFyaWFibGVz
KG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMp
Ci0gICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2UsIGdyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIpCiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaAppbmRleCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcxMjk5Li4x
ODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBAIC0xNjcs
MTMgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX3Zhcmlh
Ymxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9w
ZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5kZXgob3Bl
cmFuZCkpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkp
OyB9Ci0gICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRleChpbmRleCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAz
ZDg0M2NlNThmMjBiNDExNjMzOWZjZGE5NTg4YWViYTZiN2E4YzJlLi41M2RiOWNkMTRjYWM2YjZl
NjY4MmVmZGY0YmE3OTQ4OTdjYTVkNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9z
ckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVM
b2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7
CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlv
bkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVy
ZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRz
KCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdldCA9IGp1
bXAoKTsKLSAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVs
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayh0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVt
cCgpOworICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAg
ICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9T
UkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkgIT0gdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUt
Pm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgp
LnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAgICAg
ICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAgICAg
ICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAppbmRleCA2OGNhOThkZjZmNWM0YjdiNjM3MmNjMTU4MThlYzI1NzI4
MmY4OWQ5Li41MGYxZDg5M2RhMzAyMTAyYjk1ZTc4YWM2MDQzOWQ4NjIzNmYzY2E2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyArMTM1LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0
ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxs
U2l0ZS5iaXRzKCkpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAg
IH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhj
ZXB0aW9uIGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXgg
NDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhhYzI1Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2Jh
MWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFy
dGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
Ym9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNp
Z25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2Rl
IGlzIG5vdCBtZWFudCB0byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4g
SWYgd2UgZ290IGxpdmVuZXNzIHdyb25nLAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxk
IHJldHVybiBmYWxzZSBmb3IgYSBGbHVzaCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcg
QEAgcHVibGljOgogICAgICAgICBhdXRvIGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAo
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFs
bEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07
ICkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9n
cmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgpID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5h
dChpKS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29v
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
QEAgLTExNSw4ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNh
dGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7
CiAgICAgICAgIEhhbmRsZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7
Ci0gICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRD
YXRjaEhlYWQucmVzaXplKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpKTsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1f
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhh
bmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hl
ZENvZGVPcmlnaW47CkBAIC0xMzMsMTEgKzEzMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYg
KEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0
Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5m
aWxsKGZhbHNlKTsKIAogICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNh
dGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJh
bmQudG9Mb2NhbCgpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxs
TG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4
LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVy
UmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1NiwxMiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9w
ZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhp
bmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAg
YXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRv
TG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGZs
dXNoID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGlu
ZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3OCw2ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0
bXAgPSAwOyB0bXAgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3Rt
cCkKKyAgICAgICAgICAgICAgICBmbHVzaChPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpOwogICAg
ICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zm
c2V0KCkpKTsKICAgICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChu
b2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0
ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xv
Y2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5v
ZGVJbmRleCwgb3BlcmFuZCkpOwogCiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5k
KG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAg
ICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNj
ZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikg
ewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50
KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFy
aWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUy
Yjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJi
NjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoCiAgICAgICAgICAgICBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0g
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAo
T3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1
cnJlbnRFcG9jaDsKICAgICAgICAgICAgIH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewot
ICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9z
dGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRF
cG9jaCwgIiwgbG9jYWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3
ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9
IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkgPSBFcG9jaCgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSkgPSBFcG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhp
dCkKQEAgLTExNiwxNSArMTE2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwg
YSBsb2NhbCBldmVuIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxp
dmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5k
IGF0ICIsIG5vZGUsICI6ICIsIHJlZywgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3Bl
cmFuZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3Bl
cmFuZCkgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5
MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5NmY0MDRlMzNiNDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUz
OWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBA
IC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAg
fQogICAgIAotICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNo
Rm9ybWF0IGZvcm1hdCkKLSAgICAgICAgOiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0Rh
dGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFu
ZChvcGVyYW5kKQogICAgICAgICAsIGZvcm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAg
IApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAg
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1l
bnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAg
IGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05MjMsOSArOTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAg
c3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1
cm4gY2hpbGQxKCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2Ug
Q2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBj
YXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBAIC05NzMsOSArOTc2LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9vcEluZm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAg
IH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFu
ZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7
CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0K
ICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGlu
ZUxvY2FsKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAg
Ym9vbCBoYXNVbmxpbmtlZE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7
CiAgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBAIC05OTYsMTAgKzk5OSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHVu
bGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5kKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5r
ZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8u
YXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0
YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2Fk
VmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3Mg
fHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZh
cmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7
CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCAyNGM3MzNkMzg3MDI3OWY0
YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0Li5lM2U5YzMyZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQy
ZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03
NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhH
ZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNl
dExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1c2VkIGluIFNTQSBmb3JtIHRv
IHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2ICsyMDMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlWYWxXaXRoVGhpcywgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRC
eVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQ
dXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCAzMjgwZjg3YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0
MTllNTVlOTdlLi40MjQ3ZGVhZWM3Y2JiY2U2MDgzYWE4NzMyYjljMjc3ZjVlZmQyOGRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2Ug
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShH
cmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFu
YWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGljOgogICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAg
ICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFM
b2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsKICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAgICAgIH07CkBAIC05MSw3ICs4
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAg
ICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEw
Niw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIGNoYW5naW5n
IEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxh
YmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+
c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29y
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwg
c3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmls
aXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVMaXZl
bmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazogewogICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1
c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEt
Pm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1
c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENv
bmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRT
dGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5s
b2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gQXZhaWxhYmls
aXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlVW5hdmFpbGFi
bGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApAQCAtMjQyLDE1ICsyNDAsMTggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZh
cmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+
Y291bnQpID0KLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMy
LCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChkYXRhLT5jb3VudCkgPSBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQz
MiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEt
PmxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Ci0gICAgICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkgPQorICAgICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1h
Y2hpbmVTdGFydCArIGkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0y
NzIsMjAgKzI3MywyMCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhl
Y3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50
IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1l
bnRDb3VudCA9Ci0gICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywg
bm9kZSksIGFyZ3VtZW50Q291bnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkgY2FsbGVlID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9j
LCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUsIGkp
LCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRiODQzZTg5MGRjNy4u
ZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcpIEZpeCB0aGUgY2FsbCBmcmFtZSB0byBo
YXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAotICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJs
b2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykgPSBjb2RlQmxvY2s7
CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmluZyBkYXRhIGJ1ZmZl
ciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICszODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwogICAgIEFTU0VSVChp
bnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxp
bmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFz
ZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWlu
dGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNoT1NSRW50cnlCdWZmZXItPmRh
dGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBidWZmZXItPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAg
ICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1MDY2NTUzZDBjYjRkNi4u
NjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9T
UkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxv
Y2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJh
bmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdS
b290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZI
aW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksCisgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlh
YmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAgICAgICAgICAgICAgIEVkZ2Uo
bG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2OWI0MWNhOGY5OGYzMDhiM2E0YzkzM2Jh
OTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZlMzJkNjc3NDIwMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNp
bmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFy
Z3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5o
IgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQVVN0YXRlID0gUHJvYmU6OkNQ
VVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0OwotdXNpbmcgRnJhbWUgPSBQ
cm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6
OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFz
ZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFByb2JlOjpDb250ZXh0Jiwg
Vk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7
Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVpbnQzMl90IG9zckV4aXRJbmRl
eCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRl
JiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlmIChzb3VyY2UuaXNBZGRyZXNz
KCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1
bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsgc291cmNlLm9mZnNldCgpLCBz
aXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNW
YWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChzb3VyY2UuaGFzS25vd25UYWco
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+
KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMy
X3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIo
KSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+
IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVz
Rm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAg
ICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVy
cyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNl
dDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMt
PnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxTdGFja0ZyYW1lID0gY29udGV4
dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxl
ZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gVGhlIGNhbGxlZSBz
YXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFjaywgbm90IHRoZSByZWNvdmVy
ZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkg
ZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQgb2YKLSAgICAgICAgLy8gZ29p
bmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNl
dCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAgY29udGV4dC5ncHIoZW50cnku
cmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9m
KFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJz
OjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgYXV0byYg
c3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBj
b25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxs
RlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUo
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsK
LSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAg
ICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQuZnAoKSwgZW50cnkub2Zmc2V0
KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICB9
Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJl
Z2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3Vu
dCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJl
Y29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAgVUNQVVJlZ2lzdGVy
KiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRy
eVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0KLSAgICAvLyBSZXN0b3JlIGFs
bCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291
bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2
ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJl
ZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzaXplX3QgdWludHB0ck9mZnNl
dCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rlcik7Ci0gICAgICAgIGlmIChl
bnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCku
Z3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XTsKLSAgICAgICAgZWxzZSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygp
LmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9m
ZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMg
b24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNz
ZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJn
PFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLQotICAgIFZNRW50
cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsK
LSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdp
c3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0
ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
LSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAg
ICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBz
dGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVD
UFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRy
eS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5mcHIoKSkp
OwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkz
Mjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzIt
Yml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlI
ZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZl
T3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVk
VmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0
YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBSZWdpc3Rl
clNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0
ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVT
YXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVn
KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdWludHB0cl90IHNhdmVkUmVn
aXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlhVGFpbENhbGwgJiYgYmFzZWxp
bmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgc2F2ZWRSZWdpc3Rl
clZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zmc2V0KCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBjb250ZXh0LmdwcihlbnRyeS5y
ZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRSZWdpc3RlclZhbHVlKTsKLSAg
ICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAw
Ci0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2Nr
KikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9j
ayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZv
aWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFs
UmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19S
RUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmlu
Z0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1l
bnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNT
RVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlu
bGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0g
MTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMSkpOwotICAgIERpcmVjdEFy
Z3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCi0gICAgICAgIHZtLCBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVu
Z3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxlZSh2bSwgY2FsbGVlKTsKLQot
ICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNh
bGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBm
cmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
bGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgZnJh
bWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIEpTQ2Vs
bCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpj
b250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwot
Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIENsb25lZEFyZ3VtZW50
cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKLSAgICAgICAgdm0sIGds
b2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsK
LQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGlu
ZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFt
ZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9i
amVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUsIGNvbnN0IE9wZXJhbmRzPFZh
bHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRv
IG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNp
emUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBE
aXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAgICAgICAgICYmIHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2Rl
SUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5k
KGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQo
KSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5k
KGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0KLSAgICAgICAgICAgIGRmZ0pJ
VENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0KLSAgICAgICAg
aW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAg
ICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAgICAgICAgSlNGdW5jdGlvbiog
Y2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLmFzQ2Vs
bCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rp
b24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkp
OwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFy
Z3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCogYXJndW1lbnRzT2JqZWN0OwotICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlyZWN0QXJn
dW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0g
Y3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGlu
ZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAg
ICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoY29u
dGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoYXJndW1lbnRzT2JqZWN0
KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQp
OwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgZXh0cmEgaW5pdGlh
bGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGluIG9yZGVyCi0vLyBvZiBtb3N0IGxpa2Vs
eSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxlYXN0IGxpa2VseSBuZWVkZWQgKGhpZ2hl
ciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5pdGlhbGl6YXRpb24gaW5jbHVkZXMgdGhl
IHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1c2Ugb2YgdGhlCi0vLyBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51bSBjbGFzcyBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3VsYXRpb25SZWNvdmVyeSwKLSAgICBWYWx1
ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxlVXBkYXRlLAotICAgIE90aGVyCi19Owot
Ci12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAg
Vk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8
Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxGcmFtZS0+ZGVwcmVjYXRlZFZNKCkgPT0g
JnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsKLQotICAgIGlmICh2YWxpZGF0ZURG
R0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBleGl0IG9wdGltaXplZCBjb2Rl
LiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGltaXplZAotICAgICAgICAvLyBjb2RlIHJ1
bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAgICB2bS5oZWFwLnNldEV4cGVjdERvZXNH
Qyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1lRm9yQ2F0Y2gpIHsKLSAgICAg
ICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2g7Ci0gICAgICAgIGNvbnRleHQuZnAo
KSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0KLSAgICAvLyBJdCdzIHNv
cnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMs
IGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotCi0gICAgdWludDMyX3QgZXhpdEluZGV4
ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklUQ29kZSogZGZnSklUQ29kZSA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JFeGl0JiBleGl0ID0gZGZnSklUQ29kZS0+
b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJUKCF2bS5jYWxsRnJhbWVGb3JDYXRjaCB8
fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBFWENFUFRJT05fQVNTRVJUX1VO
VVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8fCAhZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQuZXhpdFN0YXRlKSkgewotICAgICAgICBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gRXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBl
eGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBPU1JFeGl0IHJlY29yZC4gVGhlIGNvbXB1
dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBjYWNoZWQgaW4gdGhlIE9TUkV4aXRTdGF0
ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0aGUKLSAgICAgICAgLy8gZXhpdCByYW1w
IGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9j
ay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0gICAgICAgIFNwZWN1
bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKGV4aXQubV9y
ZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICByZWNvdmVyeSA9ICZkZmdK
SVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVyeUluZGV4XTsKLSAgICAg
ICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9PSBHZW5l
cmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpP
dGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBudWxscHRyOwot
ICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICAgICAgaWYgKGV4
aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX2tp
bmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3Jp
Z2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlID0g
cHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQzMl90IGFjdGl2ZVRocmVz
aG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKTsKLSAgICAgICAgZG91YmxlIGFk
anVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9J
bnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChh
ZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBhZGp1c3RlZFRocmVzaG9sZCA9IEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBib29sIGV4
aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9ja0Zv
ckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwotICAgICAgICB2
b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhpdFRvTExJbnQpIHsKLSAgICAgICAgICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0
aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0
KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBK
SVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpOwotICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0g
Y29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjb2Rl
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENv
bXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAgICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+IHVuZGVm
aW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklUQ29kZS0+dmFyaWFibGVFdmVudFN0cmVh
bS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBkZmdKSVRDb2RlLT5t
aW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5kcywgJnVuZGVmaW5lZE9wZXJh
bmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJPZmZzZXQgPSAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVp
cmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKTsKLQotICAgICAgICBl
eGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JFeGl0U3RhdGUoZXhpdCwgY29kZUJsb2Nr
LCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdURk1vdmUodW5kZWZpbmVkT3BlcmFuZFNw
YW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNldCwgYWN0aXZlVGhyZXNob2xkLCBhZGp1
c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQcm9maWxlLCBleGl0VG9MTEludCkpOwot
Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikpIHsKLSAgICAgICAgICAg
IFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVy
OwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRk
T1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFj
ayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0gICAgICAgICAgICAg
ICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxlSW52YWxpZGF0aW9uKTsK
LSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9maWxlckV4aXQgPSBwcm9maWxlckV4aXQ7
Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQo
KSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwot
Ci0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpKSkgewotICAgICAgICAg
ICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykgZnJvbSAlcywgd2l0aCBvcGVy
YW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQu
bV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhl
eGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCi0gICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRh
KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NSRXhpdFN0YXRlJiBleGl0U3RhdGUgPSAq
ZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0gICAgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0YXRlLm9wZXJhbmRzOwotICAgIFZlY3Rv
cjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5lZE9wZXJhbmRTcGFucyA9IGV4aXRTdGF0
ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBjb250ZXh0LnNwKCkgPSBjb250ZXh0LmZw
PHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9pbnRlck9mZnNldDsKLQotICAgIC8vIFRo
ZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGlsZSBsb29wIGlzIHNvIHdlIGNhbiBi
cmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCi0gICAgZG8gewotICAgICAgICBhdXRv
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19jYXN0PEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCk7Ci0KLSAgICAgICAg
aWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6
Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0
aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292ZXJ5Ci0KLSAgICAgICAgLy8gV2UgbmVl
ZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJzdCBiZWNhdXNlIGFycmF5IHByb2ZpbGlu
ZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8vIG1heSByZWx5IG9uIGEgdmFsdWUgdGhh
dCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vzbid0IG1lYW4gdGhhdCBpdCBpcyBsaWtl
bHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5IHZhbHVlLiBTbywgd2UnbGwgZGVjb3Jh
dGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5
ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBpZiAoVU5MSUtFTFkocmVjb3ZlcnkpKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVz
dCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gY3B1Lmdwcjx1aW50
MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAg
ICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNwZWN1
bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnktPmRlc3Qo
KSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAg
ICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNwZWN1
bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRl
c3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSByZWNvdmVyeS0+
aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJU
KCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNw
dS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0
aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJl
Y292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSBeIEpTVmFsdWU6OlZh
bHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFZhbHVlUHJvZmlsZVVw
ZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFsdWU7Ci0gICAgICAgIGlmICghIWV4aXQu
bV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBwcm9maWxlZFZhbHVlID0ganNWYWx1ZUZv
cihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAgIGlmIChNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAg
ICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJvZmlsZWRWYWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IEFycmF5UHJvZmlsZVVwZGF0
ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBleGl0U3RhdGUuYXJy
YXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSk7
Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tp
bmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRD
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5
dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAgICBib29sIGRvUHJvZmlsZSA9ICFpbnN0
cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCku
bWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9kZU1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJ
ZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgaWYgKGRvUHJvZmlsZSkgewotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcHJvZmlsZWRWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1
Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPm9ic2VydmVB
cnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IE90
aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSkg
ewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVj
YXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KLSAgICAgICAgICAgIC8v
IFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0g
ICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29udGV4dC5mcCgpID09IHZtLmNh
bGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChleGl0U3RhdGUucHJv
ZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRlLnByb2ZpbGVyRXhpdC0+aW5jQ291bnQo
KTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRFYWNoT1NSRXhpdCgpKSkK
LSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0LCB2bS5vc3JFeGl0SW5kZXgsIGV4aXQp
OwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQgZXh0cmEgaW5pdGlhbGl6YXRpb24uCi0K
LSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQo
IShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4NykpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcikg
PT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJ
bmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOb3RDZWxsTWFzayk7Ci0jZW5k
aWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhl
IHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8gTm90ZTogd2UgbmVlZCB0byByZWNvdmVy
IHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBzYXZlIHJlZ2lzdGVycyBiZWxvdwotICAg
IC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5IG9uIHZhbHVlcyBpbiBzb21lIG9mIGNh
bGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAgc2l6ZV90IG51bWJlck9mT3BlcmFuZHMg
PSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucyA9
IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0KLSAgICBzaXplX3QgbmV4dFVuZGVmaW5l
ZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBu
dW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAg
ICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4
dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLQotICAgIEpTVmFsdWUgdW5kZWZpbmVk
ID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVfdCBzcGFuSW5kZXggPSAwOyBzcGFuSW5k
ZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsrc3BhbkluZGV4KSB7Ci0gICAgICAgIGF1
dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbc3BhbkluZGV4XTsKLSAgICAgICAgaW50
IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0g
Zmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0ZXJzOwotCi0gICAgICAgIGZvciAoaW50
IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBsYXN0T2Zmc2V0OyArK29mZnNldCkKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0LCB1bmRlZmluZWQpOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZk9wZXJhbmRzOyArK2lu
ZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNb
aW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMudmlydHVhbFJl
Z2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShpbmRleCA9PSBu
ZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAgICAgICAgICAgaW5kZXggKz0gdW5kZWZp
bmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXgrK10ubnVtYmVyT2ZSZWdpc3Rl
cnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRlZmluZWRTcGFuSW5kZXggPCBudW1VbmRl
ZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJ
bmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJz
dEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRP
cGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwg
Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0KLSAgICAgICAgc3dpdGNo
IChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY2FzZSBJbkdQUjoK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmdwcjxKU1ZhbHVlPihy
ZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQotICAgICAgICBjYXNl
IEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigpKSwgY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAg
ICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+KHJlY292ZXJ5LmdwcigpKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRDZWxsKCkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgY2Fz
ZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0
YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2Fm
ZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2Fu
VW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkuZ3ByKCkp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNh
bGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJ
bnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkgPj4gSlNW
YWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5Lmdwcigp
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNW
YWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVV
bmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAg
ICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNw
dS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihj
YWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVk
RG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENvbnN0YW50
OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCByZWNvdmVyeS5jb25zdGFu
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHlldC4KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9u
ZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb250
ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGlu
ZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNwdS5ncHIoR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFs
dWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVy
KSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOb3RDZWxsTWFzayk7
Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwot
Ci0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0
aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhhdCBhcmd1bWVudHMKLSAgICAvLyBy
ZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2Ug
ZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQotICAgIC8vIHJlZmVyIHRvIGNlcnRh
aW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBv
bmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAvLyBOb3RlIHRoYXQgd2UgYWxzbyByb3Vn
aGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVk
IG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNhbGwgZnJhbWUgc2NvcGUgLSBidXQgZm9y
IG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0KLSAgICBERkc6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklUQ29kZSwgb3BlcmFuZHMpOwotCi0gICAg
Ly8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhp
dGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNv
ZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKLSAgICAvLyBjb3VudGVy
IG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2Fs
bCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0
IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gT1NSIGV4aXQuIFdlIHdh
bnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAgIC8vCi0gICAgLy8g
KGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRl
ciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQg
Y29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAgICB3YW50IHRvIGRvIHN1Y2gg
cmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCi0gICAgLy8KLSAgICAv
LyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1
bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2Qs
IHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8vICAgICBwZXJmb3JtIE9TUiBl
bnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgotICAgIC8vCi0gICAgLy8g
KGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkg
cmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUg
ZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2
ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2Ug
dGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8gICAgIHJ1bm5pbmcgaW4gYSBo
b3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCi0gICAg
Ly8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNv
dW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRo
aXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8vIChhKSBhbmQgKGIpLCBzaW5j
ZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKLSAg
ICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwg
aWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBo
YXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKLSAgICAvLyBiZWNvbWUg
bm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBl
bnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBv
bGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gZ29vZCBqb2Igb2YgZW5zdXJpbmcg
KGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKLSAgICAvLyBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRp
b24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vIGxhcmdlciB0aGFuIHRoZSBudW1i
ZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKLSAgICAv
LyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBz
bywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUg
Y291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4K
LQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hl
Y2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2RlQmxvY2s6Ok9wdGltaXplQWN0
aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KGJh
c2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0KTsKLQotICAgIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotICAgIGFkanVzdEFu
ZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywg
ZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ29udGV4dCYg
Y29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jaywgY29uc3QgT1NS
RXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7Ci0gICAgRnJh
bWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NS
IGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUxMQotICAgIEFTU0VS
VChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aml0
VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxvY2sqPihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIGNvbnN0IENv
ZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2Rl
T3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2Rl
T3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5n
VGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZDsKLSAgICAgICAgQ29kZU9y
aWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWls
Q2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lID0g
Y3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50ID0gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1l
LT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5QQyA9IGZyYW1lLmdldDx2b2lk
Kj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAg
ICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWlu
dDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9p
ZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIocmV0dXJuUEMsIGJpdHdp
c2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRy
eVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZy
YW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7Ci0gICAgICAgICAgICBjYWxsZXJGcmFt
ZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBC
eXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRl
eCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxlclJldHVyblBDKGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxL
aW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGlu
ZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNhbGxlckZyYW1lID0gY3B1LmZwPHVpbnQ4
X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCktPnN0YWNrT2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICB2b2lk
KiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1
cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSB0
YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsK
LSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnJl
dHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgICAgIC8vIFJlc3Rv
cmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotICAgICAg
ICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwgdGhhdCB3aWxsIHJldHVy
biBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gY29w
eSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMgYWxyZWFkeSBzYXZlZCBm
b3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAgIHNhdmVPckNvcHlDYWxs
ZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7Ci0KLSAgICAgICAgaWYg
KGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAg
ICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwg
YmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpLm9m
ZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lz
dGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8
dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1lKTsKLSAgICAgICAg
ZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCksIGNh
bGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygp
OwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2Nh
dGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhl
IDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5i
aXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZzZXQs
IGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIFRhZ09mZnNl
dCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSk7Ci0j
ZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJl
Y3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBuZWVk
IHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRh
aWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotI2VuZGlmCi0gICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNl
dCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBU
b1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0KQotewotICAgIE9TUkV4
aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0KLSAgICBXVEY6OnN0
b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0
aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8vIFdlIGJhcnJpZXIg
YWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVudCBpbmxpbmUgc3Rh
Y2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5saW5lZCBmdW5jdGlv
biBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3
ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBpZiBib3RoCi0gICAg
Ly8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBi
YWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1FOiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBDb2RlQmxvY2sgb3ducwot
ICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxGcmFtZVNldCogaW5saW5l
Q2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2Fs
bEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpCi0g
ICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0SW5saW5lQ2FsbEZyYW1l
ID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGV4aXRJbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+
KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5qdW1wVGFyZ2V0Owot
ICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5l
ZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5jYWxsRnJhbWVGb3JDYXRj
aCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAgICB2bS50b3BDYWxsRnJh
bWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAoZXhpdFN0YXRlLT5pc0p1
bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmln
aW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAgICAgIGNvbnRleHQuZ3By
KExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikgPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5v
ZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3RydWN0aW9uKTsKLSNl
bmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICAg
ICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJlbnRJbnN0cnVjdGlvbjsK
LSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4o
anVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBjb250
ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4aXQpCi17Ci0gICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIENvZGVCbG9j
ayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgRXhpdEtpbmQg
a2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBkYXRhTG9nKCJTcGVjdWxh
dGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4aXQgIyIs
IG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJp
bmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7Ci0gICAgICAgIGRh
dGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0
RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCi0gICAg
ICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+b3B0
aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRhTG9nKCJu
byBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0dGlzb25lZCkiKTsK
LSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2NrLT5vc3JFeGl0Q291
bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0g
ICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVy
KGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxuIik7Ci0g
ICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAg
IEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIg
IiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVpbnQ2NF90IGJpdHMgPSBj
b250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gY29udGV4
dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotfQotCi0v
LyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgs
IHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1f
b3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+bV9vcmlnaW4ud2Fz
SG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQpAQCAtOTU4LDE1
ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNv
ZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3Jl
QXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbHVl
UmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElE
IHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0dWFsUmVnaXN0ZXI+IGFs
cmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJ
RCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5k
cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkg
IT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAgICAgICAgICAmJiByZWNv
dmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5k
cy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5
Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRz
LmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRz
LmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFy
Z3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAog
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLAogICAgICAgICAg
ICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGpp
dC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1
bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVh
bFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLAog
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRz
PFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCi0gICAgICAgIGFscmVhZHlBbGxv
Y2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICAgICAgYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIH0K
IApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QKICAgICBpZiAo
ZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCisgICAgaWYg
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkp
IHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4ndCB1c2UgYSBwcm9iZSBidXQg
ZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0cyBpcyB0cmlja3kgb3RoZXJ3aXNlLi4u
CisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2YWx1ZXMob3BlcmFuZHMubnVtYmVyT2ZU
bXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRzLm51bWJlck9m
VG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvcGVyYW5kcy50bXAoaSk7CisK
KyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBhdXRvKiB0bXBTY3JhdGNoID0gc2Ny
YXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAgICAgICBqaXQucHJvYmUoWz0sIHZhbHVl
cyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJ
bmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtl
VW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAg
c2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVzW2kgKyB0bXBPZmZzZXRdOworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdoYXQgdGhlIEZUTCBkb2VzIGFu
ZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBz
aWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBj
YXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRl
LT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0bXBTY3JhdGNoW2kgKyB0bXBP
ZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNj
cmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0
YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3Jp
Z2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFp
bENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUlu
ZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIGlmICgh
Y2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWlu
dGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFt
ZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0
ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRl
eCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBj
b252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAKICAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7
CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMudmlydHVhbFJlZ2lzdGVy
Rm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xv
Y2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
VG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpbnQgb3BlcmFuZCA9IHJl
Zy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9M
b2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5k
ZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1NGYxYTA0ZWI4ZS4uOWU5YmNlYTQ4MWMx
ZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBP
U1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAgc3RhdGljIHZvaWQgZXhlY3V0ZU9TUkV4
aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZjNTMzMjc4NGYwYTI5MmE0OWNiZTFiODJh
NTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJjM2MxMjQzNWRiOTZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCkBAIC03MCw2ICs3MCwxMSBAQCBz
dHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1cm4gbV9raW5kID09IEdlbmVyaWNVbndp
bmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzRXhpdGluZ1RvQ2hlY2twb2lu
dEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQg
Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggMmZm
M2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRkNTExNS4uNjI3NmE1OTU4ZTgwMDc2YWFi
ZDc4MTYzN2JiMzEwY2FlZWYyMWVmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjksMTIgKzI5LDE1IEBA
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZXMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIK
ICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKKyNpbmNsdWRlICJQcm9iZUNv
bnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2LDkgQEAgdm9pZCogY2FsbGVyUmV0dXJu
UEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBj
YWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTElu
dCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpCisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVj
a3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CisKICAgICB2b2lkKiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklzTExJ
bnQpIHsKQEAgLTIzOCw3ICsyNDQsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIC8vIGluIHByZXNl
bmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKLSAgICBqaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygp
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgIGNvbnN0IENvZGVPcmln
aW4qIGNvZGVPcmlnaW47CiAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2lu
OyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENh
bGxzKCkpIHsKQEAgLTMwNSwzMyArMzExLDM0IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxl
ckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygp
OwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiYXNlbGlu
ZUNvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKSkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQotICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgp
KSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogI2Vsc2UgLy8gVVNFKEpT
VkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3Jl
UHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAgICBqaXQuc3RvcmUzMihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5
SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CisgICAgICAgIGppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVs
cGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBh
cnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAogICAgIH0KIAogICAgIC8v
IERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRp
ZCBpbmxpbmUgdGFpbCBjYWxscwogICAgIGlmIChjb2RlT3JpZ2luKSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJ
bmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKSkuYml0cygpOwogI2Vsc2UK
LSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSku
cHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsK
KyAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5
dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
IGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoYnl0ZWNvZGVJbmRleCkuYXQoKS5wdHIoKTsKKyAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGlu
c3RydWN0aW9uKSkuYml0cygpOwogI2VuZGlmCi0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFn
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Cisg
ICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9u
Qml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKTsKICAgICB9CiB9CiAKQEAgLTM4MiwxMSArMzg5LDEyIEBAIHZvaWQgYWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0
LT5qaXRUeXBlKCkpKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQ7CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNFbnRyeVB0clRhZz4gY2hlY2twb2ludFJldHVyblRhcmdldDsKICAgICBib29sIGV4
aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9ja0Zv
ckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogICAgIGlmIChl
eGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGJ5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpID8gY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lIDog
Y3VycmVudEluc3RydWN0aW9uLm9wY29kZUlEKCkpOwogCiAgICAgICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJlZ1QyKTsKQEAgLTQw
Miw3ICs0MTAsMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYKICAgICAgICAganVt
cFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCku
ZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBCeXRlY29k
ZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4gPSBjb2RlQmxvY2tG
b3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0
LT5qaXRDb2RlTWFwKCkuZmluZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4pOworICAgICAgICBp
ZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgY2hlY2twb2ludFJldHVy
blRhcmdldCA9IGNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2NhdGlvbiA9IENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJU
YWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSkpOworICAgICAgICB9CisKICAgICAg
ICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNi
NGIwM2RjMTk5Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9k
ZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43
N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAg
ICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVl
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBs
aWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBi
OTQ4OGExMDMyODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3
NzY5MmRiMTA3Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKQEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoK
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IG1hbmRhdG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dCB7IGZpcnN0RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1l
bnRzKTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
JmNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAt
IDEpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1h
bmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCAr
IGkpID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Rk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhi
ZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi4yYjEwNWIyY2FkZTdiN2Q1NTg5ZmFk
ZWFmYjAyYmMwOTY0NWUwOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00MywxMSArNDMsOCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBE
RkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJs
aWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBw
dWJsaWM6CiAgICAgUGhhbnRvbUluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAg
OiBQaGFzZShncmFwaCwgInBoYW50b20gaW5zZXJ0aW9uIikKQEAgLTYyLDcgKzU5LDcgQEAgcHVi
bGljOgogICAgICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4g
VGhhdCBjYXVzZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RS
ZWZDb3VudCk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
IGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTcyLDcgKzY5LDcgQEAgcHVibGljOgog
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKQogICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAg
ICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFu
dG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAg
IH0KQEAgLTEwMywyMiArMTAwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxhc3RF
eGl0aW5nSW5kZXggPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5v
ZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAoREZHUGhhbnRv
bUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAg
bV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBudWxscHRyOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50TWF5YmU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5v
cGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQsMzggKzEzMSw0MiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9k
ZSwKICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2UsICIgdG8g
IiwgY3VycmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3Vy
cmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFscmVhZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7
CiAKLSAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBL
aWxsZWQgb3BlcmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tp
bGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQpOwogCiAg
ICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAg
ICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChv
cGVyYW5kID09IGFscmVhZHlLaWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxsZWQgYnkg
c2V0IGxvY2FsIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9
IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUp
CisgICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQob3Bl
cmFuZCk7IAorICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiB3
YXMgbm90IGRlZmluZWQgaW4gdGhpcyBibG9jay4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJh
bmQocmVnKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVy
YW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ug
b25seSBuZWVkIHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNl
ZCBzaW5jZSB0aGUgbGFzdAogICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBi
ZWZvcmUgdGhlIGxhc3QgZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBv
Y2goKSA9PSBjdXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVw
b2NoKCkgPT0gY3VycmVudEVwb2NoKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVwb2NoICIs
IGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBh
ZnRlciAiLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5k
ZXgpLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgIiAgICBJ
bnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7CisgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGlu
ZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgLy8gaW5j
cmVtZW50IHRoZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZp
eFJlZigpOwpAQCAtMTc5LDE0ICsxODAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGVNYXlFeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBk
b2VzIGV4aXQsIHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAg
ICAgICAgIC8vIHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAg
ICAgICAgYWxyZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
S2lsbGVkT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxl
ZCA9IG9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQobG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCAr
IDEpLCBwcm9jZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IGE1OGUxNzk2NTYwZmM2
ZDk0YmI0NjNkMTQyOTg4NmUwNzhmMGFmY2MuLmY1ZjA5NmM4ZWI1NmQ0NWZhOTg5YmI0OTM2Zjcy
ZDQ0ODE5NWExNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBo
ZWFwLm9wZXJhbmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdy
aXRlcyB0byBhbHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJl
cml6ZSgpLgogICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNh
bGxJZkFwcHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVh
cC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZSht
X3VuY29uZGl0aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3Rh
Y2spOwogICAgICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhl
YXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9u
LmhlYXAoKS5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2Fs
bElmQXBwcm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvcGVyYW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAKaW5kZXggNDQ3ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4uNWI0Zjk5
MjkzNDExNzljMjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcApA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1
ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZh
bHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXgg
ODA1MDUxNmNiZmVjYzg0ZmUxOTU4NDI4YTBjZjg3Y2Q1NGVlMTE3Yi4uMjIxYzUwMWRiZDE0YzA0
NTcyYTdmZTFkMTliZTZkMzE5N2MxM2YzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEz
NjUsNiArMTM2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAg
Y2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4IDg3
Mjc3NjBjNmVjYmRiMzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcuLmZkNjEyM2ZhOWYxZDUyOWU0
YzJlZTJjMGU3ZWRmNjNmMDdmNzhkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFj
ZSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
cHVibGljOgogICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAg
OiBQaGFzZShncmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhpcyBp
cyBpbXBvcnRhbnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewog
ICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsK
ICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCwxMSArODUsOCBA
QCBwdWJsaWM6CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1f
Z3JhcGgpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9j
a10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQp
OwotICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5k
c0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxb
YmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVy
YW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNlKTsK
KyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGJvb2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAxLDM0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIs
IGxpdmUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7CisgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxPcGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Npbmtp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJh
bmQsICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWRzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNI
ZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5v
ZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8
fCBub2RlLT5vcCgpID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG9wID09IFB1dFN0YWNrIHx8IG9wID09IFZhcmFyZ3NMZW5ndGggfHwgb3AgPT0gTG9hZFZhcmFy
Z3MgfHwgb3AgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AgPT0gS2lsbFN0YWNrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRl
SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBM
YXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6
eU5vZGUpIHsgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA6IHdyaXRlcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJh
bmQgOiB3cml0ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFu
ZCkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA6IHJlYWRzKQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6
IHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMzQsNyArMjI5
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBkZWZl
cnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
RGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFjaykg
ewpAQCAtMjYxLDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzOTgKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBpc0NvbmZsaWN0aW5nID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9PSBDb25mbGlj
dGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFpc0NvbmZsaWN0aW5nKTsKQEAgLTI3NSwxNyAr
MjcwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChub2RlLT5vcCgpID09IFB1dFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlNldHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQg
Iiwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9w
ZXJhbmQpID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUt
Pm9wKCkgPT0gS2lsbFN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHNpbmsgYSBQdXRTdGFjayBwYXN0IGEgS2lsbFN0YWNrLgotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29u
ZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBmb3IgIiwg
bm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFu
ZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFu
ZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MywxNiArMjkxLDE4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3Bl
cmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5k
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1Rt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwgbm9k
ZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2Nh
bENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2Nh
cGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRhaWxb
YmxvY2tdKQpAQCAtMzEzLDEzICszMTMsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFu
ZEZvckluZGV4KGkpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJE
dW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVh
ZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNp
ZGVyaW5nICIsIGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBhdCAiLCBwb2ludGVyRHVt
cChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ld
LCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgZGVmZXJyZWRbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zNTIsMTAg
KzM1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFuZHNM
aWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0b3I8
VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmQ+
IGluZGV4VG9PcGVyYW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRG
b3JJbmRleChpKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisK
ICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1
bGF0b3IubmV3VmFyaWFibGUoKTsKICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJh
bmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3BlcmFu
ZC5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOwpAQCAtMzcwLDEyICszNzAsMTIgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAg
IHB1dFN0YWNrc1RvU2luay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1
bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUu
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRTdGFjazoKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTM4Niw3ICszODYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAogICAg
ICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxv
Y2sqIGJsb2NrKSAtPiBOb2RlKiB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10u
b3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0zOTcsNyArMzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0
ZShmb3JtYXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJBZGRpbmcgUGhpIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBibG9jay0+YXQoMCktPm9yaWdpbi53
aXRoSW52YWxpZEV4aXQoKSk7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWFwcGluZy5maWxsKG51bGxwdHIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0Rl
ZkF0SGVhZChibG9jaywgdmFyaWFibGUpOwpAQCAtNDIxLDE1ICs0MjEsMTUgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVyRHVt
cChibG9jayksICI6ICIsIG1hcHBpbmcsICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9y
QmxvY2soYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUo
KS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgcGhpRGVmLT52YWx1ZSgpLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZhbHVl
KCk7CiAgICAgICAgICAgICB9CkBAIC00MzcsMTUgKzQzNywxNSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2Rl
SW5kZXgpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gZGF0YS0+bG9jYWw7CisgICAgICAg
ICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGRhdGEtPm9wZXJhbmQ7CiAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5jaGls
ZDEoKS5ub2RlKCksICIgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIG1h
cHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC00NTMsMTYgKzQ1MywxNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3Jt
YXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpICE9
IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpICE9
IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoZXJlIGlzIG5vIGRlZmVycmFsLiBObyBkZWZlcnJhbCBtZWFucyB0aGF0IHRoZSBtb3N0
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlIHZhbHVlIGZvciB0aGlz
IHN0YWNrIHNsb3QgaXMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHN0YWNrLiBTbywKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlIEdldFN0YWNrLgotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC00NzIsMjAgKzQ3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIGhhdmUgc3RvcmVkIGFuZCBnZXQgcmlkIG9mIHRoZSBHZXRTdGFjay4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBmb3JtYXQgPT0gZGF0YS0+
Zm9ybWF0LCBmb3JtYXQsIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5s
b2NhbCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVy
YW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9
IGluY29taW5nLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9JZGVudGl0eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGlj
dGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxu
Iik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCkBA
IC00OTksNyArNDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2Vy
dCBhIFB1dFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcg
YSBQdXRTdGFjayBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFu
ZCk7CkBAIC01MTMsNyArNTEzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAg
ICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZh
cmFyZ3MgYXJlIHVuY29uZGl0aW9uYWwgd3JpdGVzIHRvIHRoZSBzdGFjawpAQCAtNTIxLDEzICs1
MjEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25zIHRo
ZXkgd3JpdGUgdG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9jYXRpb25zIGRlYWQgcmlnaHQg
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBMb2FkVmFyYXJncy9Gb3J3YXJk
VmFyYXJncy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2luawogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1
YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgIH0KQEAgLTUzOSw4ICs1MzksOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNz
YUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkNyZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRl
ckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVhZFtz
dWNjZXNzb3JCbG9ja10ub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBpc0NvbmNyZXRlKGZvcm1hdCksIGZvcm1hdCk7CkBA
IC01ODUsNyArNTg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGgg
YWZ0ZXIgUHV0U3RhY2sgc2lua2luZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAppbmRleCA0MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMxMWQ2
NzY4NjUwLi4wNGYyYzBjZDM5OThiMTgxYjllOThiYmE0MjcwNDg4M2I0MGQyZDhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjaGlsZE5v
ZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJs
ZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPm9w
ZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVu
dEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRN
YXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJs
ZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBt
dWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAgICAgICAgICBOb2RlKiBoZWFk
Tm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWFk
Tm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMwMCw3ICsz
MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJl
cGxhY2VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzog
IiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAi
IC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFw
cGluZzogIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBub2Rl
LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9kZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1f
dmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNl
cnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkg
PSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9u
UG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxp
ZEV4aXQoKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9m
ZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1
bHRFZGdlKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KDAp
LT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQu
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSwx
OSArMzQ5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y29udmVydFRvUHV0U3RhY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hG
b3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIgLT4gIiwgY2hpbGQsICJcbiIp
OwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBp
bmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOworICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5v
ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9
IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5v
ZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1l
bnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFBo
YW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkp
LT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFw
aCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQy
NSwxMiArNDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGV4
aXRPSy4KICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2VkVXNl
S2luZEZvcihmb3JtYXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPmxvY2FsKCksICIgcHJvcGFn
YXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiIHRv
ICIsIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
SW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgcHJvcGFnYXRp
bmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICIgdG8g
IiwgcGhpTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxv
bkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2luZCkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMTViZTQyYWMzYjY5YWY0ZGM1ODM4YTE4
ZGYzOWQwNzhjYTMxNjkxOS4uOWEzMmQ2N2E1ODc0Mjk1ODViMzdkOWFlMWE2Y2ViYzVmYzk2MmNm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAg
LTMyMiw2ICszMjIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgVGFpbENh
bGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBiNWExMWM1MWVmMTBj
ZjdhNmIyMzE3MmQyZDhiZjhmNjc1ZTA1MmJkLi5iZTU4NWQ1ZDQzYzkyNzc4NzkyOTgzYjA5MzNm
NWEyNjI4NTAzMmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcApAQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJl
YW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQp
LCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoQWJvcnRSZWFzb24gcmVh
c29uKQpAQCAtMTgyNSw3ICsxODI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1
cnJlbnRCbG9jaygpCiAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7CiAgICAg
CiAgICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICBOb2RlKiBub2RlID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgpAQCAtMTgz
NSwxMSArMTgzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2so
KQogICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsg
Ly8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgogICAgICAgICBmb3JtYXQgPSBk
YXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsKLSAgICAgICAgbV9zdHJlYW0t
PmFwcGVuZEFuZExvZygKLSAgICAgICAgICAgIFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKAotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwKLSAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCi0gICAgICAgICAgICAgICAgZm9ybWF0KSk7CisgICAg
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW9wZXJhbmQuaXNBcmd1bWVudCgp
IHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOworICAgICAg
ICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKG9wZXJhbmQs
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAgICAgfQogCiAgICAgbV9vcmln
aW4gPSBOb2RlT3JpZ2luKCk7CkBAIC0xOTE5LDcgKzE5MTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAoZm9ybWF0ID09IEZsdXNoZWRK
U1ZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFs
UmVnaXN0ZXIuaXNBcmd1bWVudCgpKTsKIAogICAgICAgICBKU1ZhbHVlU291cmNlIHZhbHVlU291
cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpKTsKICAgICAgICAgCkBAIC03MzQxLDU0ICs3MzM5LDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5v
ZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKiBub2Rl
KQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgp
OwogCiAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAgICB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFyZ3Vt
ZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICB9CisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgSlNW
YWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAg
IGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKKyAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0
KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbG9jayhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpz
VmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIEdQUlRl
bXBvcmFyeSBhcmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7CisgICAgR1BSUmVnIGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhpcy5ncHIoKTsKICAgICB1bmxv
Y2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIGEg
Y2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdp
Y2UuIFRoaXMgaXMgc2FmZQotICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3Mg
aW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQot
ICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3
ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgIC8vIHBhc3Qg
dGhlIHNpemluZy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxNDQ4CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKIAotICAgIEdQUlJlZyBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIgPQotICAgICAgICBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRj
aEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncyk7CisgICAgaW50MzJS
ZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2RlKTsgIAorfQogCi0gICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJ
bmNsdWRpbmdUaGlzR1BSKTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJn
cyhOb2RlKiBub2RlKQoreworICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50
Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1
bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgR1BSUmVnIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVn
cyBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CiAKICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRn
ZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwK
LSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAgYXJnQ291
bnRJbmNsdWRpbmdUaGlzR1BSKSk7CisgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNv
dXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
IAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1
ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAorICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCiAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoZGF0YS0+bGltaXQpKSk7CiAKLSAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIG1faml0LnN0b3JlMzIoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3Vu
dCkpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRz
UmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJn
dW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZGF0
YS0+bWFuZGF0b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAg
IG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM5OCwxNyArNzM5NywxOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgIGlu
bGluZUNhbGxGcmFtZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CisgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUoKTsKICAgICBlbHNlCiAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAorICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBH
UFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKyAgICBHUFJSZWcg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEdQ
UlJlZyBsZW5ndGhHUFIgPSBhcmd1bWVudENvdW50LmdwcigpOwogICAgIEpTVmFsdWVSZWdzIHRl
bXBSZWdzID0gdGVtcC5yZWdzKCk7Ci0gICAgICAgIAotICAgIGVtaXRHZXRMZW5ndGgoaW5saW5l
Q2FsbEZyYW1lLCBsZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0gKi8gdHJ1ZSk7CisgICAgCisg
ICAgbV9qaXQubW92ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbGVuZ3RoR1BSKTsKICAg
ICBpZiAoZGF0YS0+b2Zmc2V0KQogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoZGF0
YS0+b2Zmc2V0KSwgbGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC03NTY3LDcgKzc1NjgsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5v
ZGUpCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKICAgICAgICAgJiYgIWlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAga25vd25MZW5ndGggPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAga25v
d25MZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICBsZW5ndGhJc0tub3duID0gdHJ1ZTsK
ICAgICB9IGVsc2UgewogICAgICAgICBrbm93bkxlbmd0aCA9IFVJTlRfTUFYOwpAQCAtMTI0NDcs
NyArMTI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVDYWxsRnJhbWUoKSkKICAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXI7CiAgICAgZWxzZQotICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7CiAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJl
c3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBjNjRm
OTc4YWRmODVmYmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5Li4wM2Q0ODM1YmY0YjdhOGRlMDkz
OWVmY2ZhMzcwMjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdSZWdl
eHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFy
YXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsKQEAgLTE2NjksMTUg
KzE2NzAsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJl
ZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRh
Rm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lz
dGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKKyAgICAgICAgQVNTRVJU
KCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcudmlydHVhbFJlZ2lzdGVy
KCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5lUmVnLCBmb3JtYXQpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0IGZvcm1hdCkK
ICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX2N1cnJlbnRO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFi
bGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKKyAgICAgICAg
cmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZvJiBnZW5lcmF0aW9uSW5m
b0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCmluZGV4IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2ZGJkMGQyYTA1NmRiODEuLjBhZjNm
MTcxODE1NDEwZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgyOCw3
ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSk7CiAKICAg
ICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3Vu
ZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVk
LCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnRO
b2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7
CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkT3BlcmFuZCgp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgyNCw2ICszODI0LDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1pdENhbGwobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAg
IGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAg
ICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhub2RlKTsK
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWViNWVhMjZhMzEwNWRkYjhhZmU3NjYy
MTYzMzQ0Li43YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZkYzkzYWM4NmM3YzUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAg
LTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
OwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQg
aXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBh
c3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0yMDA3LDcgKzIwMDcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9j
dXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1h
dERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQsNiArNDQ2NCwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRD
YWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewor
ICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2YWM3YTdkMzMzZTM5Njc5ZTI2NzU1
OTA3NGU0NjRjOWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2MTVmNjA0Mjc1MjIwNDc3YTIyYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdHJlYXQgYSB2YXJpYWJs
ZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2VzcyB0byBpdCAoU2V0TG9j
YWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxvY2FsKS4KICAgICAgICAg
Ci0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAgICBPcGVyYW5kczxib29sPiB1
c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3JhcGgoKS5tX3RtcHMsIGZhbHNl
KTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJl
IHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxz
ZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVz
aDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgog
ICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRhLT5jb3VudCwgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250
aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdu
bWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEt
PnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICB9IC8vIHRo
ZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAgICAgICAgICAgaGFzTm9k
ZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05
Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChzdGFjay0+bG9j
YWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJh
bmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA4LDIxICsxMDcsMjEg
QEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVn
aXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAg
ICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
V2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNl
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwotICAgICAgICAgICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2Nh
dGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2Nh
dGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9ncmFwaC5tX25leHRNYWNoaW5l
TG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRleChpKSkgewogICAgICAgICAg
ICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFi
bGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbG9j
YWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAgICAgICAgICBpZiAobG9jYWwg
Pj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gdXNlZE9wZXJhbmRz
Lm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBhbGxvY2F0
aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQorICAgICAgICAgICAg
aWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkg
PSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwg
dmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAo
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YSkgewotICAg
ICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgICAgICBk
YXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgIGlmIChkYXRhLT5v
cGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2Nh
bCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlv
bltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2NhbCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3BlcmFuZC50b0xvY2Fs
KCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5kLnRvTG9jYWwoKV0g
PT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24o
YWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2Fs
ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+b3BlcmFuZCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIo
KSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3Bl
UmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkp
KTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbih1c2Vk
T3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNp
emUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFibGVEYXRhIGRhdGEgPSBtX2dy
YXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbigK
LSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7
CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24gPSBtX2dyYXBoLm1f
YXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXJndW1lbnRQb3Np
dGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIxNSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFs
bG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPmNvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbih1
c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29u
c3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
YWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwo
KV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlv
bik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVy
YW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9j
YXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01B
WCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CiAgICAgfQogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAKaW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMyY2U5NjFmZjlhMDcxMmExYTA1MS4u
YjQ4YzZmN2YxOTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4YTcyNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGktLTspIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+b3BlcmFuZCgpID09
IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWwgPSBub2RlOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywg
bG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5v
ZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIwNzBiNmVlNmY0ZjhiZjkuLmYxYjFm
ZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQo
bnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCAmdm0pOwot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1Ig
ZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAppbmRl
eCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4MjA1ZDllLi44YjVjM2YwMWE0ODUy
MGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVy
YXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAK
aW5kZXggNjBmYmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1ZjU3MTNmMWQ3ZS4uNzk2NjVmOGFi
ODVmYzExMTZkNjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0xNDYs
NyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUu
bV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY2hlY2tPcCA9IENo
ZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNwZWNDZWxsQ2hlY2sg
JiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0aGUgVERaIHZhbHVlLiBUaGUgY2Fs
bCBlbnRyeXBvaW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFREWiwKQEAgLTE2OCw4ICsxNjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOworICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkp
ID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpi
bG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAg
ICAgICAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0
SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDllZTVlMDA3NDA5ZGY1Mjk0YmZj
ZjUxYjc3NmViOGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUzZGMzYzQ2YzBlMjRkNGRhMWNlMWIw
Y2Y1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC00
ODMsNyArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnBoaXNbaV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250
YWlucyhub2RlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgp
ID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+
bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5k
KCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVt
Q2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRy
ZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCkBA
IC01MTksMTAgKzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRl
Y2Vzc29yc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJl
ZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhl
biBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUg
dGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChw
cmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMsMTEgKzUzMywxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9j
YWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJl
dk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2Nh
bCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dERlZmluaXRlbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBTZXRBcmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0NywxNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVm
ZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxv
Y2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5C
bG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9w
ZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJ
bkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91
bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAg
ICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAg
ICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAg
ICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExv
Y2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBW
QUxJREFURSgodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2NrKSwgIWJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1
bWVudChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBAIC02NjgsMjQgKzY2NCwyNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3VudHMuZ2V0KG5vZGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxv
Y2spLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBibG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5p
dGVseSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5
IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBTZXRMb2Nh
bHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBmbHVzaGluZy4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
IT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sgdG8gaGF2ZSBhIHNl
Y29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAgICAgICAgICAgICAg
ICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERlZmluaXRlbHkgZm9yIHRoYXQgbG9j
YWwuCi0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm90U2V0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBj
YXNlIFNldEFyZ3VtZW50TWF5YmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTY4
LDI2ICs5NjQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVk
Z2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCisgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsK
ICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBu
dWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIG51bGwgQmxv
Y2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhTG9n
KGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwg
IiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sq
IHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQorICAgICAgICBPcGVy
YW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5h
dGlvbkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAq
c291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOworICAgICAgICBkYXRhTG9n
KG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlv
bkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywg
Tm9kZSogcHJldk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291
cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhwcmV2Tm9k
ZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKKyAgICAgICAg
ZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNl
QmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5v
ZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggMjZmMDMyOWQ1
NDMwNDE1NzIwNWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVjZGM5MmUyYzI0MTBhMzVjMDEzMTMx
ZmRjM2I3Y2NjMjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC00MSwxMSArNDEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IHB1YmxpYzoKICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAg
ICAgOiBQaGFzZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGluZyIpCkBAIC01Niw3ICs1NCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9n
cmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsK
ICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2YXJhcmdzIGZvcndhcmRpbmc6XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCw3ICs4Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBjYWxscyBpbnRvIHRoaXMgZnVuY3Rp
b24gdG8gYmUgcmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBpbiBhIHNpbXBsZSBPKG4pIG1hbm5l
ci4KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGJsb2NrLT5hdChjYW5kaWRh
dGVOb2RlSW5kZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2co
IkhhbmRsaW5nIGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJcbiIpOwogICAgICAgICAKICAgICAg
ICAgLy8gV2UgZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVyIENyZWF0ZUNsb25lZEFyZ3VtZW50
cyBpZiB0aGUgYnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3ICsxMDMsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBbJl0gewogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNyw5ICsxMTUsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2RlLT51bmxpbmtlZE9wZXJhbmQoKS5p
c1RtcCgpLCAiV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYSB0bXAgcmVmZXJyaW5nIHRvIGFu
IGFyZ3VtZW50cyBvYmplY3QuIik7CiAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5v
ZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxz
LmFwcGVuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICghcmVs
ZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lz
dGVyKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja1ZhcmFyZ3M6CkBA
IC0xNDAsMTMgKzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgc2F3
RXNjYXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
aWYgKHNhd0VzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwg
bm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlk
YXRlKSkKICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSB8fCBub2RlLT5jaGls
ZDIoKSA9PSBjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSA9PSBjYW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzTG9hZGVk
RnJvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAg
LTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2YWxpZEdldEJ5T2Zm
c2V0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBidXR0ZXJmbHkgOiBjYW5kaWRhdGVC
dXR0ZXJmbGllcykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUs
IGJ1dHRlcmZseSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQnV0
dGVyZmx5IGVzY2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNSwxMSArMjM1LDExIEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwKLSAgICAgICAg
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIHJlZywgIiB3aGlsZSB3ZSBh
cmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOworICAg
ICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxp
bmcgIiwgb3BlcmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChy
ZWxldmFudExvY2FscyksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9jYWxzW2ldKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0tXSA9IHJlbGV2YW50TG9jYWxzLmxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5yZW1vdmVM
YXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJ
bmRleDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNlckluZGV4ID0gIiwgbGFzdFVzZXJJ
bmRleCwgIiwgIiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgpLCAiXG4iKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBEZXRlcm1pbmUgaWYgYmV0d2VlbiB0
aGUgY2FuZGlkYXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJlIGlzIGFueQpAQCAtMjYzLDE2ICsy
NjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAg
IGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPmxv
Y2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5kKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxMyArMjk3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1Rv
cCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgaGVhcC5vcGVyYW5k
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNJbnRlcmZlcmUgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6
ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9lc0ludGVyZmVyZSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTEsNyArMzEwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2UgY2FuIG1ha2UgdGhp
cyB3b3JrLgotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBX
aWxsIGRvIGZvcndhcmRpbmchXG4iKTsKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgCkBAIC0zNDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0aGVzZS4KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNhbmRp
ZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChp
bnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIC8qIGFkZFRo
aXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndhcmRWYXJhcmdzKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4ZWJmZmI0MzVlZDRkYmY2MDJiZDYy
YWVkNGMzNDMyZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMwODEyNWI0ZTZlY2M4OGE4N2M3ZDE3
OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKLSAgICA6
IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICA6IG1fcHJl
ZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2UpCkBA
IC00NSwxMCArNDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEo
KQogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFj
Y2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgIDogbV9sb2NhbChsb2NhbCkKLSAg
ICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
ICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChm
YWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChmYWxzZSkKQEAgLTg3
LDcgKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZhY2ls
aXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgZm9y
IGFyZ3VtZW50cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJh
bmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
Ly8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVkaWN0aW9uLCB0aGVuIHRoaXMg
ZG9lc24ndApAQCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxs
eVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsKICAgICBBU1NFUlQoaXNSb290KCkp
OwogICAgICAgICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJV
bmJveCgpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJv
eCgpCiAgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzQXJyYXlJbmRleCkp
CiAgICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUobV9kb3VibGVGb3Jt
YXRTdGF0ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgIApAQCAtMTc2LDcgKzE3NSw3IEBA
IGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUySW1wbCgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXZSBwdW50IGZvciBtYWNoaW5lIGFyZ3Vt
ZW50cy4KLSAgICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJhbmQoKS5p
c0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgYXJn
dW1lbnQtYXdhcmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJnZXMgYWxsIG9mIGFuIChpbmxpbmVk
IG9yIG1hY2hpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEyMDQzZmEyNTRlNjA5NDIzMjAxNGEy
ODRlLi5iZTJmYjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1NTczZmNlZmY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKQEAgLTQ4
LDEyICs0OCwxMiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJsaWMgVW5pb25GaW5k
PFZhcmlhYmxlQWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhcmlhYmxl
QWNjZXNzRGF0YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgVmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCk7CisgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKE9wZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAg
T3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQo
KS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOworICAgICAgICBBU1NFUlQobV9v
cGVyYW5kID09IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsK
ICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBtYWNoaW5lTG9jYWwoKQpAQCAtMjA4
LDEwICsyMDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlm
aWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQogICAgIC8vIHVzYWdl
IGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCiAKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7
CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1f
YXJndW1lbnRBd2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFuZCBtX29wZXJhbmQ7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5vZGVGbGFncyBtX2ZsYWdzOwogCiAg
ICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50LmNwcAppbmRleCAyOGU0MzdmZDUxZmVhNDk2OWViNDhlY2YwYzA1
MDhmMGEzN2RmODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBjNDNiZDM2ZWQ3MmUzZjljZmJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKQEAg
LTU5LDExICs1OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgiLCBpZCgpLCAiKSIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgb3V0LnByaW50KCJNb3ZI
aW50KCIsIGlkKCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwgIikiKTsKKyAgICAgICAgb3V0
LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJhbmQoKSwgIikiKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAgICAgICBvdXQucHJpbnQoCi0gICAg
ICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRl
Y29kZToiLCBieXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAgICAgICAiU2V0TG9jYWwobWFjaGlu
ZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBvcGVyYW5kKCksCiAgICAg
ICAgICAgICAiLCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgpKSwgIikiKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3MjIzZGQ2ZjY5OWM2ZGJhZDZkMjI0
NjdjOTgzNC4uYzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFhYzQ4MTM4ZDM0ZTNmZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKQEAgLTY4LDYgKzY4
LDEwIEBAIGVudW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50OF90IHsKIH07CiAKIHVuaW9uIFZh
cmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24oKSAKKyAg
ICAgICAgOiBvcGVyYW5kKCkgCisgICAgeyB9CisKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBncHI7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5pb24gVmFyaWFibGVSZXByZXNlbnRh
dGlvbiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CiAg
ICAgfSBwYWlyOwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0dWFsUmVnOworICAgIE9wZXJhbmQg
b3BlcmFuZDsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQgewpAQCAtMTYyLDcgKzE2Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC5pZCA9IGlk
LmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsK
LSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3Rlci5vZmZz
ZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlcjsK
ICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0
ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7CkBAIC0x
ODEsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBWYXJpYWJs
ZUV2ZW50IHNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3Bl
cmFuZCBieXRlY29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9y
bWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAg
IFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2gudmlydHVhbFJlZyA9IG1hY2hpbmVSZWcu
b2Zmc2V0KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247
Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQo
KTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlT3BlcmFuZDsKICAg
ICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAgICAgICAgZXZlbnQubV9kYXRh
Rm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7
CkBAIC0xOTUsMTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBldmVudDsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlk
LCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQg
bW92SGludChNaW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVjb2RlUmVnKQogICAgIHsKICAgICAg
ICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAg
ICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiBy
ZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVj
b2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNv
ZGVSZWc7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnRFdmVudDsKICAgICAgICAgZXZl
bnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwogICAgICAgICBldmVudC5tX3JlcHJlc2VudGF0
aW9uID0gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0yNjUsMTMgKzI2OSwxMyBAQCBwdWJs
aWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsKTsK
LSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZp
cnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0
ZWNvZGVSZWdpc3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8IG1fa2luZCA9PSBN
b3ZIaW50RXZlbnQpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVzZW50
YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9u
LmdldCgpLm9wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5l
UmVnaXN0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQzOWJiMDk0YzRiODY2ZTY3ZWQzZTJl
ZTFiNDg5NmFiYjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIxYTM1YWY4ZDIxZGUzMmI1ZGRhMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6bG9n
RXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7CiAgICAgZGF0YUxvZ0YoInNlcSMl
dToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CiAgICAgZXZlbnQuZHVtcChXVEY6
OmRhdGFGaWxlKCkpOwotICAgIGRhdGFMb2dGKCIgIik7CisgICAgZGF0YUxvZ0xuKCIgIik7CiB9
CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFwaCwKICAgICB1bnNpZ25lZCBpbmRl
eCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVjb3ZlcmllcywgVmVjdG9yPFVuZGVm
aW5lZE9wZXJhbmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNwYW5zKSBjb25zdAogeworICAgIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZh
cmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIGJvb2wg
Zmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBAIC0xMzAsMzcgKzEzMiw0MiBAQCB1
bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBhdXRvIGZsdXNo
VW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgaWYgKGZp
cnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvcklu
ZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2
YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSAtIDEpLm9mZnNldCgpOwor
ICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKKyAgICAgICAgaW50
IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkgLSAxKS52aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50IG1pbk9mZnNldCA9IHN0ZDo6bWlu
KGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAgdW5kZWZpbmVkT3BlcmFuZFNwYW5z
LT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0LCBpIC0gZmlyc3RVbmRlZmluZWQg
fSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIH07CiAgICAg
YXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAg
IC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2YgYXJndW1lbnRzIGZyb20gdGhlIHNw
YW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFjZW50IG9wZXJhbmRzIGluZGV4ZXMu
Ci0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRl
ZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpKQorICAgICAg
ICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNB
cmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4oaSk7CiAKICAgICAgICAg
aWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkgewogICAgICAgICAgICAgZmlyc3RV
bmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFs
dWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZElz
QXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQo
KTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlu
bGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7Ci0gICAgZWxzZQorICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7CisgICAg
ICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAgIC8vIENyYXp5IHNwZWNpYWwgY2Fz
ZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMgbXVzdCBiZSBhbiBhcmd1bWVudCBj
aGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxy
ZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAogICAgIC8vIHJlZmxlY3QgdGhpcy4K
ICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZh
bHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOwor
ICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3Qg
YmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMsIDApOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292
ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBE
YXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudW1WYXJpYWJsZXM7CiAg
ICAgfQpAQCAtMTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6
cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAgICAKICAgICAvLyBTdGVwIDI6
IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVu
dHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9wZXJhbmRzPFZhbHVlU291cmNl
PiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVz
LCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVyYW5kU291cmNlcy5zaXplKCk7
IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNE
ZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+IGdl
bmVyYXRpb25JbmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgaW5k
ZXg7ICsraSkgewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCA9IGF0KGkpOwor
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBldmVudCAiLCBldmVudCk7
CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVzZXQ6CiAg
ICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4LDIxICsyMDYsMjMgQEAgdW5zaWdu
ZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgICAgIGlmIChv
cGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAg
ICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lz
dGVyKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5k
U291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3Bl
cmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlKGV2ZW50
LmlkKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldExvY2FsRXZlbnQ6
Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29k
ZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQo
ZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVu
dC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNv
dXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZv
cm1hdCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kIHNvdXJj
ZXM6ICIsIG9wZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAvLyBTdGVwIDM6IENvbXB1dGUgdmFs
dWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICB2YWx1
ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PihPcGVyYW5kc0xpa2UsIG9wZXJh
bmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3Vy
Y2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoKSkgewpA
QCAtMjMwLDYgKzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWN0KAogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChzb3VyY2UuaWQoKSk7
CiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5n
ZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAoIWluZm8uYWxpdmUpIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5k
Rm9ySW5kZXgoaSksICIgaXMgZGVhZC4iKTsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tp
XSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAg
aWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgICAg
ICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjM3LDYgKzI0OCw3IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIG5vZGUp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJl
Y292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNvbnN0YW50LiIpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkgewogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIG5vZGUtPmNvbnN0YW50KCkgPT0g
anNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFu
ZChpKTsKQEAgLTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFsdWVSZWNvdmVyaWVz
W2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQp
OworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKGluZm8udS5v
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7CiAgICAgfQogICAgIGlmIChz
dHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgIGZsdXNoVW5k
ZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKaW5kZXggMDE1NzMw
MDdlZGRkZDcwZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4uZTllNDNhYmZlYzQ4NWZlYzdlNjYz
MTUxYzFjMjJlYzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkgKzQyLDEyIEBAIHN0cnVjdCBVbmRl
ZmluZWRPcGVyYW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50U3RyZWFtIDogcHVi
bGljIFZlY3RvcjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEFuZExvZyhjb25zdCBWYXJp
YWJsZUV2ZW50JiBldmVudCkKICAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgbG9nRXZlbnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQoZXZlbnQpOwogICAgIH0KICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA3
ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEwNzZkZTU5ZGFh
NGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNl
IEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1NGYwOGVkYWYx
M2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCkBA
IC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIEZvck9T
UkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0ZWNvZGVJbmRl
eChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6IG1fZW50cnlG
YWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNiNzgxY2ZiODliMTFjMzlmOThmN2E5
YWJhM2QuLjQ1ZTgxYmNkZGEyODgxNzNmZTE5OWU4NGM2N2I5Zjg4YzgwMjZkNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTIwOCw3ICsy
MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY2xlYXJTdGFja0Zy
YW1lKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFtZVNpemUoKSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRM
aXN0KCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KGNvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9l
bnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsKQEAgLTI3NCw3ICsy
NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBD
b2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVzZQogICAgICAg
ICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVkLgotICAgICAg
ICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENoZWNrLgog
ICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVy
Q291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7
IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1
bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBAIC0xMjgxLDYg
KzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAgICAgICAgICAg
Y29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgY29tcGls
ZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyArMTk1Niw3IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51
bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZp
cnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVF
eHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIAogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQp
LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYsMTMgKzc5MjksMTMgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkp
OworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBp
bGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwg
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
CkBAIC03OTQ3LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlU2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmUzMiht
X291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBtX291dC5z
dG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQpAQCAtOTU0
Miw1MSArOTU0NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgdm9pZCBj
b21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNW
YWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1ZSBsZW5ndGgg
PSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRo
ZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJv
cGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50
IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVj
IGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291
bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJp
Z2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwogICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMy
T25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aCwgbGVu
Z3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNsdWRpbmdUaGlz
KTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAgIExWYWx1ZSBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFs
dWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAorICAgICAgICAg
ICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhpcyksIG1fb3V0
LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQp
KSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxv
YWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdz
IGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21w
dXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdzIGp1c3QgdG9v
ayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ug
d291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQg
PSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFj
aGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBt
X291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCksIG1fY2FsbEZy
YW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAgICAgCiAgICAg
ICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJhcmdzLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFj
aGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwK
LSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5p
bXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMy
KGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Rm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpIHsK
LSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAgICAgICBOb2Rl
KiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFy
Z3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU5NSw1MCArOTU5
OCwyNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
IAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExWYWx1ZSBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3Vt
ZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAg
ICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtu
b3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAgaWYgKGtub3du
TGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtu
b3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50
MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0
aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgotICAgICAgICAg
ICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRz
TGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihh
cmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOwot
ICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQs
IGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxKSk7Ci0g
ICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRh
dGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXMgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGlu
Z1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKKyAgICAgICAg
ICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1YihjYWxsZXJMZW5ndGhJbmNsdWRpbmdU
aGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CisgICAgICAg
ICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFu
T3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0
LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKKyAgICAgICAg
fSBlbHNlIAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNhbGxlckxlbmd0aElu
Y2x1ZGluZ1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJ
bmNsdWRpbmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAg
ICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAg
bV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5s
aW1pdCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5n
VGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAg
ICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUs
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0g
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk2OTcsNjUgKzk2
NzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1l
IGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWlj
IG9wZXJhdGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAgICAKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSU5UMzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGggPSBtX291dC5zdWIoYXJndW1l
bnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KSk7CiAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5j
aCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1
bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRz
TGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkp
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGko
SW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOwor
ICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhl
ZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybywg
U2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKICAgICB9CiAKICAgICB2b2lkIGNv
bXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxJ
bmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1l
Kj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNo
ZWRTcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKIAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7Ci0gICAgICAgIFZl
Y3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgYXV0byBjb2xsZWN0QXJn
dW1lbnRDb3VudCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0
KSAtPiB2b2lkIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkgewotICAgICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRh
cmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgICAgICAg
ICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3RvcigpOwotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNoaWxkcmVuKCk7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFyZ2V0LCBpKS5ub2Rl
KCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAr
K251bWJlck9mU3RhdGljQXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZT
dGF0aWNBcmd1bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSo+KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCk7Ci0gICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRTcHJlYWRMZW5ndGhz
LmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMtPmdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1l
LCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0QXJndW1lbnRDb3VudChhcmd1bWVu
dHMpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50
MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAgICAgICAgZm9yIChMVmFsdWUgbGVu
Z3RoIDogc3ByZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBt
X291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGxl
bmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAg
ICAgICBzcGVjdWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1
ZSgpOwogCi0gICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3Ro
aXMsICZjYWNoZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSog
dGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAgICAgYXV0byBmb3J3
YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJnRhcmdldFN0YXJ0XShhdXRvIHNl
bGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CiAgICAgICAg
ICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0b3JlSW5kZXgpOwogCkBAIC05
Nzk4LDggKzk3MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFy
Z2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0
UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOworICAgICAgICAg
ICAgYXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwor
ICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoZ2V0U3By
ZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQu
bmV3QmxvY2soKTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgTFZh
bHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX291dC5z
dG9yZVB0cihtX2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0
X2ZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KDApKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsK
LSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2Fs
bGVlKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRf
Y2FsbGVyRnJhbWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgcGFja2V0LCBt
X2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CiAgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKHNjb3BlLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfc2NvcGUpOwog
ICAgIH0KICAgICAKQEAgLTEyMzE2LDcgKzEyMjUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQXJn
dW1lbnRzTGVuZ3RoIGxlbmd0aDsKIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICBsZW5ndGgua25vd24g
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAg
ICAgICAgIGxlbmd0aC5rbm93biA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICBsZW5ndGgu
aXNLbm93biA9IHRydWU7CiAgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5jb25zdElu
dDMyKGxlbmd0aC5rbm93bik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjM0Niw3ICsxMjI4Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVz
c0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAg
ICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5h
c0NlbGwoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwog
ICAgIH0KICAgICAKICAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzYxMSw3ICsxNzU0
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1f
ZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAg
ICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CisgICAgICAgICAgICB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1f
b3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0xNzcxOSw3ICsx
NzY1NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwg
cHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9m
QXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51
bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5u
dW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMTc4
MjQsMTUgKzE3NzYxLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdERlc2NyaXB0b3It
Pm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxp
dHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAgJiYgbV9ncmFw
aC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkKLSAgICAgICAgICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxv
Y2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCks
ICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9y
aWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5LmlzRGVhZCgp
ICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBleGl0T3JpZ2luKSkKKyAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZl
IGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBvcGVyYW5kLCAiLCBh
dmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4p
LmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVl
ID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkp
OwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMo
KSkKQEAgLTE4MTMyLDM5ICsxODA2OSwzOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9v
dXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwg
aW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRy
ZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJp
YWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJh
c2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCld
LCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFz
ZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2Us
IE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2Us
IG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9y
KExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1
ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYWRk
cmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2lu
dGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAg
aWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9j
YXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLCBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCwgb2Zmc2V0KTsKICAgICB9
Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2lu
dGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBh
eWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRl
ciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVk
UG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApp
bmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5Li4wOTFlN2YzYzli
NDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxu
Iik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxs
RnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5h
c2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLmFzYW5VbnNhZmVK
U1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZh
bHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFy
Z3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYx
OGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3Io
CiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9w
cm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxl
KHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJP
ZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2Fs
cywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9u
SnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXgg
ZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMx
ZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3Qg
T1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRh
Rm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJn
dW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUu
CiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFs
aWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4
ODE3NmVlNzIuLmEzNzg0MTBkYTliODAxNTcyNGE5ZGMxNmMzZmUxYWVjMDgwNTVkNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwx
MSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgog
I2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhp
dAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0g
YmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwog
CisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBleGl0Lm1f
ZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7CisgICAgICAgIFZNKiB2bVB0ciA9ICZ2
bTsKKyAgICAgICAgaml0LnByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAg
ICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRl
Y29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6
Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAg
ICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNl
dF07CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShm
cmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsg
Y29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxs
cygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9
IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxC
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnBy
ZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsg
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSks
IGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDAp
OworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBOb3cgZ2V0IHN0YXRlIG91dCBvZiB0aGUg
c2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2suIFRoZSB2YWx1
ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1c3QgbW92ZSB0aGVtLgogICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgp
OyBpbmRleC0tOykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2Ny
aXB0b3ItPm1fdmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkg
PCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVz
KSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwg
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBp
bmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdU
MCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlZykpOworICAgICAgICBqaXQuc3RvcmU2
NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyh2bSwg
aml0LCBleGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
CmluZGV4IDdmN2NkMzgzMjQ5NjFhOGZmNGU0NzI1OWE4ODRkZTg2ZDU2NGIxMTcuLjEwMmMxZTZh
MWJkOWViM2I0NzEzMzc0NGY4NDNlYzY0ZDYzYTE4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApAQCAtNTA1LDcgKzUwNSw3IEBAIGV4dGVybiAiQyIg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5l
dyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0
byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVh
ZC4KICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJm
bHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAg
ICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1t
dXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsK
ICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IDc0OTMzZGM2MDUxNWM1ZGEwMGVh
MThmYzdkNWRiM2FkOWNlNWU5Y2YuLmQ1N2ZiMWVlYTgwNDRhMzRiNzkxNzY4YTkwOTc2OTg5OThh
YzMzOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUs
MTUgKzY1NSwzNyBAQCBMVmFsdWUgT3V0cHV0Ojpub3RaZXJvNjQoTFZhbHVlIHZhbHVlKQogICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVh
bCwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8pOwogfQogCi1MVmFsdWUgT3V0cHV0OjpzZWxl
Y3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikKK0xWYWx1ZSBP
dXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFNl
bGVjdFByZWRpY3RhYmlsaXR5IHByZWRpY3RhYmlsaXR5KQogewogICAgIGlmICh2YWx1ZS0+aGFz
SW50MzIoKSkgewogICAgICAgICBpZiAodmFsdWUtPmFzSW50MzIoKSkKLSAgICAgICAgICAgIHJl
dHVybiB0YWtlbjsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0OwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gbm90VGFrZW47CisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAg
fQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpT
ZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsKKworICAgIGlmIChwcmVk
aWN0YWJpbGl0eSA9PSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpCisgICAg
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxl
Y3QsIG9yaWdpbigpLCB2YWx1ZSwgbGVmdCwgcmlnaHQpOworCisgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbmV3QmxvY2soKTsKKyAgICBMQmFzaWNCbG9jayBsZWZ0VGFrZW5CbG9jayA9
IG5ld0Jsb2NrKCk7CisgICAgTEJhc2ljQmxvY2sgcmlnaHRUYWtlbkJsb2NrID0gbmV3QmxvY2so
KTsKKworICAgIG1fYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgbV9wcm9j
LCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhs
ZWZ0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OlJp
Z2h0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpSYXJl
KSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHJpZ2h0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxp
dHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OkxlZnRMaWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6
Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAgIExWYWx1ZSBwaGkgPSBjb250
aW51YXRpb24tPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlBoaSwgbGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSk7CisKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNp
bG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGxlZnQsIHBoaSk7CisgICAgbGVmdFRha2VuQmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6
OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIHJpZ2h0VGFrZW5CbG9jay0+
YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHJpZ2h0LCBwaGkp
OworICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6
Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOworCisg
ICAgbV9ibG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICByZXR1cm4gcGhpOwogfQogCiBMVmFsdWUg
T3V0cHV0OjphdG9taWNYY2hnQWRkKExWYWx1ZSBvcGVyYW5kLCBUeXBlZFBvaW50ZXIgcG9pbnRl
ciwgV2lkdGggd2lkdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAppbmRleCBj
NTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1NzBjYTJlLi40YzAyYjM0MDg1MTQ2Zjdk
ZjAyNTYyN2Q1ZmYzMWM3ODEwZDhmYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgi
CiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIkZUTENv
bW1vblZhbHVlcy5oIgorI2luY2x1ZGUgIkZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmgiCiAjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExTd2l0Y2hDYXNlLmgiCiAjaW5jbHVkZSAi
RlRMVHlwZWRQb2ludGVyLmgiCkBAIC0zNjUsNyArMzY2LDcgQEAgcHVibGljOgogICAgIExWYWx1
ZSB0ZXN0SXNaZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzTnVs
bChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0ZXN0Tm9uWmVyb1B0cihMVmFs
dWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3ROdWxsKGJpdEFuZCh2YWx1ZSwgbWFz
aykpOyB9CiAKLSAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBM
VmFsdWUgbm90VGFrZW4pOworICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
dGFrZW4sIExWYWx1ZSBub3RUYWtlbiwgU2VsZWN0UHJlZGljdGFiaWxpdHkgPSBTZWxlY3RQcmVk
aWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpOwogICAgIAogICAgIC8vIFRoZXNlIGFyZSByZWxh
eGVkIGF0b21pY3MgYnkgZGVmYXVsdC4gVXNlIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29y
YXRlRmVuY2VkQWNjZXNzKCkgd2l0aCBhCiAgICAgLy8gbm9uLW51bGwgaGVhcCB0byBtYWtlIHRo
ZW0gc2VxX2NzdCBmZW5jZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNlbGVjdFByZWRpY3RhYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE4NTNiYTk4NTIyYWFhYzYxYjg0
OTk1NTI3OTRhNTA5MzBjN2Q2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaApAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0M6OkZUTCB7CisKK2VudW0gY2xh
c3MgU2VsZWN0UHJlZGljdGFiaWxpdHkgOiB1aW50OF90IHsKKyAgICBOb3RQcmVkaWN0YWJsZSwK
KyAgICBQcmVkaWN0YWJsZSwKKyAgICBMZWZ0TGlrZWx5LAorICAgIFJpZ2h0TGlrZWx5LAorfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKaW5kZXggNjkzNGMz
ZjBkMzc5MWY2NGJhNDI5NjNlMDU1NjNkYmJjN2RkYTVhNC4uYzcyNmFkMjdjODE1YWM2N2E2NzBk
MjU4MDRhYThjYWUyMmIzYTBkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5oCkBAIC0xMDAsNyArMTAwLDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRp
b24oCiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGNh
bGxPcGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5j
dGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhNWY1Mjc3ZGQ2MzFh
Y2Q0Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAgLTAsMCArMSw2NCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgQ2hlY2twb2ludAorICAg
IGF0dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRlZnMKKyAgICBhdHRyX3JlYWRl
ciA6bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAgZGVmIGluaXRpYWxpemUobmFt
ZSwgaW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAaW5kZXggPSBp
bmRleAorICAgICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURl
ZiA9PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYp
fCB1c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MobmFtZXNw
YWNlKQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNwYWNlfTo6I3tuYW1lfToKK0VP
RgorICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisgICAgZGVmIGluaXRpYWxpemUo
b3Bjb2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAg
ICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFw
X3dpdGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hlY2twb2ludC5uZXcobmFtZSwg
aW5kZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcworICAgICAgICBAY2hl
Y2twb2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAgICBlbmQKKyAgICAgICAgRU9G
PC0tCitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ije0BvcGNvZGUuY2FwaXRhbGl6
ZWRfbmFtZX0odWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3aXRjaCAoY2hlY2twb2ludCkg
eworCisgICAgfQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9PcGNvZGUucmIKaW5kZXggZGFiODY4NmNhMzNhMTAyYzliZmExZGYxODAzZWJiNGYw
YWIyNDQ4NS4uY2ZkOWRmMTUxMTQ3YTg2ZGE0YmM3NWJlNDZhNjc4MjVlMjUzNzVmMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAgLTMwLDYgKzMwLDcgQEAg
Y2xhc3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAgICBhdHRyX3JlYWRlciA6bWV0
YWRhdGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0cl9yZWFkZXIgOmNoZWNrcG9p
bnRzCiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cgPSAiT3Bjb2RlU2l6ZTo6TmFy
cm93IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQogICAgICAgICB0aWQKICAgICBl
bmQKIAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0
YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9u
LCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMsIHRt
cHMsIGNoZWNrcG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNlY3Rpb24KICAgICAgICAgQG5h
bWUgPSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwge30KICAgICAgICAgQG1ldGFk
YXRhID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMKICAgICAg
ICAgQGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdfbmFtZSwgdHlwZSksIGluZGV4
fCBBcmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4ICsgMSB9IHVubGVzcyBhcmdzLm5p
bD8KKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9p
bnRzLm1hcCB7IHwoY2hlY2twb2ludCwgXyl8IGNoZWNrcG9pbnQgfSB1bmxlc3MgY2hlY2twb2lu
dHMubmlsPwogICAgIGVuZAogCiAgICAgZGVmIGNyZWF0ZV9pZCEKQEAgLTExOCw2ICsxMjEsOCBA
QCBjbGFzcyBPcGNvZGUKICAgICAgICAgPDwtRU9GCiBzdHJ1Y3QgI3tjYXBpdGFsaXplZF9uYW1l
fSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7CiAgICAgI3tvcGNvZGVJRH0KKyAgICAje3RlbXBzfQor
ICAgICN7Y2hlY2twb2ludFZhbHVlc30KIAogI3tlbWl0dGVyfQogI3tkdW1wZXJ9CkBAIC0xMzIs
NiArMTM3LDE4IEBAIEVPRgogICAgICAgICAic3RhdGljIGNvbnN0ZXhwciAje29wY29kZUlEVHlw
ZX0gb3Bjb2RlSUQgPSAje25hbWV9OyIKICAgICBlbmQKIAorICAgIGRlZiBjaGVja3BvaW50VmFs
dWVzCisgICAgICAgIHJldHVybiBpZiBAY2hlY2twb2ludHMubmlsPworCisgICAgICAgIFsiZW51
bSBDaGVja3BvaW50cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChjaGVja3BvaW50cy5tYXB7IHxjaGVj
a3BvaW50fCAiICAgICAgICAje2NoZWNrcG9pbnR9LCIgfSkuY29uY2F0KFsiICAgICAgICBudW1i
ZXJPZkNoZWNrcG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4iKQorICAgIGVuZAorCisgICAg
ZGVmIHRlbXBzCisgICAgICAgIHJldHVybiBpZiBAdG1wcy5uaWw/CisKKyAgICAgICAgWyJlbnVt
IFRtcHMgOiB1aW50OF90IHsiXS5jb25jYXQoQHRtcHMubWFwIHt8KHRtcCwgdHlwZSl8ICIgICAg
ICAgICN7dG1wfSwifSkucHVzaCgiICAgIH07Iikuam9pbigiXG4iKQorICAgIGVuZAorCiAgICAg
ZGVmIGVtaXR0ZXIKICAgICAgICAgb3Bfd2lkZTE2ID0gQXJndW1lbnQubmV3KHdpZGUxNiwgb3Bj
b2RlSURUeXBlLCAwKQogICAgICAgICBvcF93aWRlMzIgPSBBcmd1bWVudC5uZXcod2lkZTMyLCBv
cGNvZGVJRFR5cGUsIDApCkBAIC0yMDAsNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZTxPcGNvZGVTaXplIF9fc2l6ZSwgYm9vbCByZWNvcmRPcGNvZGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
R2VuZXJhdG9yPgogICAgIHN0YXRpYyBib29sIGVtaXRJbXBsKEJ5dGVjb2RlR2VuZXJhdG9yKiBn
ZW4je3R5cGVkX2FyZ3N9I3ttZXRhZGF0YV9wYXJhbX0pCiAgICAgeworICAgICAgICAjeyFAY2hl
Y2twb2ludHMubmlsPyA/ICJnZW4tPnNldFVzZXNDaGVja3BvaW50cygpOyIgOiAiIn0KICAgICAg
ICAgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMTYpCiAgICAgICAgICAgICBnZW4tPmFs
aWduV2lkZU9wY29kZTE2KCk7CiAgICAgICAgIGVsc2UgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXpl
OjpXaWRlMzIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1Nl
Y3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKaW5k
ZXggMjA0YWM3NTllMTNlZmYxNTFmOGNkMTc3ZjNiZjFiNzBlMDc3OWNhYS4uNjY4NTViYTY1MDA4
MGU0YzIzY2MwZWJlYzEwZTc5NDljZGU3NjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBTZWN0aW9uCiAgIGVu
ZAogCiAgIGRlZiBjcmVhdGVfb3Bjb2RlKG5hbWUsIGNvbmZpZykKLSAgICAgIE9wY29kZS5uZXco
c2VsZiwgbmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFk
YXRhXSwgY29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdKQorICAgICAgT3Bjb2RlLm5ldyhz
ZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRh
dGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10sIGNvbmZpZ1s6dG1wc10sIGNvbmZp
Z1s6Y2hlY2twb2ludHNdKQogICBlbmQKIAogICBkZWYgYWRkX29wY29kZV9ncm91cChuYW1lLCBv
cGNvZGVzLCBjb25maWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IGY2Mzk0YWM3MTA3MTI1YjdjYWIyMWFkMmI5MTEzYzA3OTUzNmE2
MDAuLmVmN2Y2Yzk0ZjQxNjhiNGEyODQ2MDUzYTVkMDEzYmUxMTIyMGRlZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC01MCw3ICs1
MCw3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2Vy
KENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsCiAgICAgQVNTRVJUKGdsb2JhbEV4ZWMtPmlz
RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkpOwogfQogCi1ib29sIENhbGxGcmFtZTo6
Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAorYm9vbCBDYWxsRnJhbWU6OmNh
bGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxv
Y2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CkBAIC05MCwxMiAr
OTAsMTIgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgp
IGNvbnN0CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAog
ewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpOwor
ICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCldLnRhZygpOwogfQogCiBTVVBQUkVTU19BU0FOIHVuc2lnbmVkIENhbGxGcmFtZTo6dW5z
YWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnVuc2FmZVRhZygpOworICAgIHJldHVybiB0aGlzW3N0YXRp
Y19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnVuc2FmZVRhZygpOwog
fQogCiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CkBAIC0x
MDUsNyArMTA1LDcgQEAgQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBj
b25zdAogCiBTVVBQUkVTU19BU0FOIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjp1bnNhZmVDYWxs
U2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkgJiAoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpID4+IEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlm
dCkpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xMTcsMzMgKzExNywzNCBAQCBj
b25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIHZvaWQgQ2Fs
bEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZShCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
dnBjKSkpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBj
YWxsU2l0ZS5iaXRzKCk7CisgICAgdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpXS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKIH0KIAogdW5zaWduZWQg
Q2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBB
U1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9m
ZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAg
ICByZXR1cm4gY29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGN1cnJlbnRWUEMoKSk7ICAgICAK
IH0KIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxs
RnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogewotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVC
eXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRl
eCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxTaXRl
Qml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkucHRyKCk7CiB9CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRD
dXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZShjb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2Fs
bFNpdGUuYml0cygpKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCldLnRhZygpID0gY2FsbFNpdGUuYml0cygpOworICAgIEFTU0VSVChjdXJy
ZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNB
c0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAg
IEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgp
LmJpdHMoKTsKIH0KIApAQCAtMTY1LDggKzE2Niw4IEBAIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1l
OjpieXRlY29kZUluZGV4KCkKICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOwogICAgIH0KICNlbmRpZgotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9m
ZnNldCgpKTsKLSAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2Rl
T2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwor
ICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpOwogfQogCiBDb2RlT3Jp
Z2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCkBAIC0xODAsNyArMTgxLDcgQEAgQ29kZU9yaWdp
biBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNv
ZGVPcmlnaW4oaW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBDb2RlT3JpZ2luKEJ5
dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKSk7CisgICAgcmV0dXJu
IENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKSk7CiB9CiAKIFJlZ2lz
dGVyKiBDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggY2ZiNzcxODU2MDM5OTMzOTEwMDRm
YzEzMjExODM4NDIzYzVkYzZhOS4uZjQxOThlZWIxYjY3ZDIyY2VhYTdlYTM4OGU5YjI1NDYxY2M0
YjI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
aApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtQ2xh
c3NPcGVyYXRvck92ZXJsb2Fkcy5oPgogCiBuYW1lc3BhY2UgSlNDICB7CiAKQEAgLTQ1LDE5ICs0
NiwzMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgcHVibGljOgogICAgICAgICBDYWxsU2l0ZUlu
ZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBl
eHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IG1f
Yml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQorICAgICAgICB7IAorICAgICAgICAgICAgQVNT
RVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisgICAgICAgIH0KKyNlbHNlCisgICAg
ICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoY29uc3QgSW5zdHJ1Y3Rpb24mIGluc3RydWN0aW9u
KQorICAgICAgICAgICAgOiBtX2JpdHMocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oJmluc3Ry
dWN0aW9uKSkKICAgICAgICAgeyB9CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQorICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVj
b2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4OyB9Ci0KLSAgICAgICAgdWludDMyX3Qg
Yml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQorICAgICAg
ICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4
OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IEJ5dGVjb2RlSW5kZXgoYml0cygpKTsgfQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYWxs
U2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCisgICAgICAgICAgICA6IG1fYml0cyhiaXRzKQorICAg
ICAgICB7IH0KICAgICBwcml2YXRlOgotICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0ZWNvZGVJbmRleCgpLm9mZnNldCgp
IH07CiAgICAgfTsKIAogICAgIGNsYXNzIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IDogcHVibGlj
IENhbGxTaXRlSW5kZXggewpAQCAtNjUsNyArNzgsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIGV4cGxp
Y2l0IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAgICAgICA6
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cykpCisgICAgICAgICAg
ICA6IENhbGxTaXRlSW5kZXgoYml0cykKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTc4LDI0
ICs5MSwyNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgLy8gYXJtNjRfMzIgZXhwZWN0cyBjYWxs
ZXIgZnJhbWUgYW5kIHJldHVybiBwYyB0byB1c2UgOCBieXRlcyAKICAgICBzdHJ1Y3QgQ2FsbGVy
RnJhbWVBbmRQQyB7CiAgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIENhbGxGcmFtZSogY2Fs
bGVyRnJhbWU7Ci0gICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIGNvbnN0IEluc3RydWN0aW9u
KiByZXR1cm5QQzsKKyAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikgdm9pZCogcmV0dXJuUEM7
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNpemVJblJlZ2lzdGVycyA9IDIgKiBzaXpl
b2YoQ1BVUmVnaXN0ZXIpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9OwogICAgIHN0YXRpY19h
c3NlcnQoQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzID09IHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3RlciksICJDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMgaXMgaW5jb3JyZWN0LiIpOwogCi0gICAgc3RydWN0IENhbGxGcmFtZVNsb3Qgewot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNhbGxlZSA9
IGNvZGVCbG9jayArIDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGFyZ3VtZW50Q291
bnQgPSBjYWxsZWUgKyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCB0aGlzQXJndW1l
bnQgPSBhcmd1bWVudENvdW50ICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmly
c3RBcmd1bWVudCA9IHRoaXNBcmd1bWVudCArIDE7CisgICAgZW51bSBjbGFzcyBDYWxsRnJhbWVT
bG90IDogaW50IHsKKyAgICAgICAgY29kZUJsb2NrID0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzLAorICAgICAgICBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxLAorICAgICAgICBhcmd1
bWVudENvdW50ID0gY2FsbGVlICsgMSwKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRD
b3VudCArIDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxLAogICAg
IH07CiAKKyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lO
VEVHUkFMUyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JT
X0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisKICAgICAvLyBS
ZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRpb24uCiAgICAgLy8g
UGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAgICBjbGFz
cyBDYWxsRnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQgKyAxOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBoZWFkZXJT
aXplSW5SZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpICsgMTsKIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBpbiB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMKICAgICAgICAgLy8gd2hlbiB5b3Un
dmUgZ3VhcmFudGVlZCB0aGUgY2FsbGVlIGNhbid0IGJlIGEgV2FzbSBjYWxsZWUsIGFuZCBjYW4K
QEAgLTEwNiwxMCArMTIyLDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gdG8gc2Vl
IGlmIGl0J3MgYSBjZWxsLCBhbmQgaWYgaXQncyBub3QsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi4K
ICAgICAgICAgaW5saW5lIEpTVmFsdWUgZ3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdDsK
ICAgICAgICAgaW5saW5lIEpTT2JqZWN0KiBqc0NhbGxlZSgpIGNvbnN0OwotICAgICAgICBDYWxs
ZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJhbWVT
bG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KLSAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxsZWVC
aXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJh
bWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CisgICAgICAgIENhbGxlZUJp
dHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGlu
dD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ucG9pbnRlcigpKTsgfQorICAgICAgICBTVVBQUkVT
U19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0
cyh0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0uYXNhblVuc2Fm
ZVBvaW50ZXIoKSk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdDsKLSAg
ICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gYml0
d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsg
fQorICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaykpOyB9CiAgICAgICAgIGlubGluZSBTVVBQUkVTU19BU0FOIENv
ZGVCbG9jayogdW5zYWZlQ29kZUJsb2NrKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU1Njb3Bl
KiBzY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCkgY29uc3Q7CiAKQEAgLTE0Niw3ICsxNjIs
NyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJuUENP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0dXJu
UEMpOyB9CiAgICAgICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0
dXJuIEFic3RyYWN0UEModm0sIHRoaXMpOyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpIGNvbnN0OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5
dGVjb2RlSW5kZXgoKSBjb25zdDsKICAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2RlT3Jp
Z2luSW5kZXgoKSBjb25zdDsKIAogICAgICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygp
IGNvbnN0OwpAQCAtMTgyLDE1ICsxOTgsMTMgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBz
dGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSog
Z2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBh
IHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJs
b2NrKS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmly
dHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25z
dGFudAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFk
IGEgcmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1
bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3Vt
ZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBk
aWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9Ci0gICAgICAgIHNp
emVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpOyB9CisgICAgICAgIHNpemVfdCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5bG9hZCgpOyB9CiAgICAg
ICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoaW50IGFyZ3VtZW50KSB7IHJldHVybiAoQ2Fs
bEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCArIGFyZ3VtZW50KTsgfQogICAgICAgICBzdGF0aWMg
aW50IGFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudCk7IH0KIApAQCAtMjM5LDcgKzI1
Myw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50QWZ0ZXJD
YXB0dXJlKHNpemVfdCBhcmd1bWVudCk7CiAKLSAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Io
c2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7IH0KKyAgICAg
ICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSB7IHJldHVybiBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDE7IH0KIAogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBub0NhbGxlcigp
IHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAgICAgYm9vbCBpc0RlcHJlY2F0ZWRDYWxsRnJhbWVG
b3JEZWJ1Z2dlcigpIGNvbnN0CkBAIC0yNTEsMTAgKzI2NSwxMCBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIGJvb2wgaXNTdGFja092ZXJmbG93RnJhbWUoKSBjb25zdDsKICAgICAgICAgYm9v
bCBpc1dhc21GcmFtZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAgICAgICAg
dm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nh
c3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpXS5wYXlsb2FkKCkgPSBjb3VudDsgfQogICAgICAgICBpbmxpbmUgdm9pZCBzZXRD
YWxsZWUoSlNPYmplY3QqKTsKICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVC
bG9jayopOwotICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZy
YW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24q
Pih2YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxs
ZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSB2YWx1ZTsgfQogCiAgICAgICAgIFN0cmluZyBmcmll
bmRseUZ1bmN0aW9uTmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAppbmRleCBhOTdkZWNhNTNiY2UxNzkyODliMGMz
ODBkMDRlOGYyYTg2MDQ3N2QxLi5lZTdlYzJhYjEwNGE3YTM0ZDk4YjBmNDM4ZjY0NGMyZGNhMWM1
MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWVJbmxpbmVzLmgKQEAgLTMyLDUwICszMiwzOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0g
ICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6
cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19
Ci0KLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
LSAgICByZXR1cm4gdGhpc1tpbmRleF07CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZ0aGlzLT5jb2RlQmxvY2so
KS0+Y29uc3RhbnRSZWdpc3RlcihyZWcpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCld
OwogfQogCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CisgICAg
QVNTRVJUKCFyZWcuaXNDb25zdGFudCgpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCld
OwogfQogCiBpbmxpbmUgSlNWYWx1ZSBDYWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4g
dGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsKKyAgICByZXR1cm4gdGhpc1tz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLmpzVmFsdWUoKTsKIH0KIAog
aW5saW5lIEpTT2JqZWN0KiBDYWxsRnJhbWU6OmpzQ2FsbGVlKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpj
YWxsZWVdLm9iamVjdCgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKV0ub2JqZWN0KCk7CiB9CiAKIGlubGluZSBDb2RlQmxvY2sqIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjpjb2RlQmxv
Y2soKTsKIH0KIAogaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiBDYWxsRnJhbWU6OnVu
c2FmZUNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOworICAgIHJldHVybiB0
aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVnaXN0ZXI6
OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBDYWxs
RnJhbWU6OmxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKSBjb25zdApAQCAtMTAyLDEyICs5MSwx
MiBAQCBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OmlzV2FzbUZyYW1lKCkgY29uc3QKIAogaW5saW5l
IHZvaWQgQ2FsbEZyYW1lOjpzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSkKIHsKLSAgICBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBjYWxsZWU7
CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSldID0gY2FsbGVlOwogfQogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6
OnNldENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBzdGF0aWNfY2FzdDxS
ZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10gPSBjb2RlQmxvY2s7Cisg
ICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayldID0gY29kZUJsb2NrOwogfQogCiBpbmxpbmUgdm9pZCBDYWxsRnJh
bWU6OnNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29wZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMzYTFiZTRmNThkYWVhODA3
ZTNiYWZlZjBkNGJhMDJmZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBU
IGdldFRtcChzaXplX3Qgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6
ZW9mKFQpID09IHNpemVvZih1aW50NjRfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFQ+KHRtcHNbb2Zmc2V0XSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2Yo
VCkgPT0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIGlm
IGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih0bXBzW29mZnNldF0p
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9
PSBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihz
dGF0aWNfY2FzdDx1aW50OF90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICB2b2lkKiBuZXh0SW5zdHJ1Y3Rp
b25KdW1wVGFyZ2V0OworICAgIHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdOwor
fTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKaW5kZXggZGFhOTRjODlmOTAwNWE5OTcyZmMwZTNiMDJlYjg5M2QyMTFjZGQ5Ny4u
OGVmMWMzZDg1MGMyYzhhMDE1NDZmMmM4YTlkZWIzZDg1NDdhNWIzNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3Vy
ZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNo
ZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpT
VmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1l
LT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxs
ZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNh
bGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9m
ZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWlu
ID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVy
KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxp
bmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAog
ICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2Nr
LT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1
bmN0aW9uQ29udGV4dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQz
Ml90CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAg
IGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFy
Z09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UK
QEAgLTI0OSw3ICsyNTMsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBs
ZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0
LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2
b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQz
Ml90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwg
IWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUsMzEgQEAgdm9pZCBsb2Fk
VmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGly
ZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nh
c3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBq
c0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmpl
Y3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgp
OworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50
cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNl
bGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVy
Zmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAg
ICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShv
YmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nh
c3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganND
YXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0
aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9
IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQo
Z2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFs
dWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk3LDggKzMwMSw3
IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAg
ICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFt
ZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0
aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhsZW5ndGggKyAxKTsKQEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGljOgogICAgICAgICBtX2Nv
ZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51
bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAo
bV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9p
bnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMgPT0g
TExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT52bSgpLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1fY2Fs
bEZyYW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKICAg
ICAgICAgICAgICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBt
X2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAgICAg
ICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3VsZFN0
b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCisg
ICAgICAgIG1fcmV0dXJuUEMgPSBtX2NhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAg
ICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2ICs2
MDYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9j
ayomIG1fY29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11dGFi
bGUgY29uc3Qgdm9pZCogbV9yZXR1cm5QQyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lOTElO
RSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNh
bGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTT2JqZWN0KgogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZt
LCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29m
dCgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdz
LnNpemUoKSA+IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAg
aWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1h
eEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMz
MjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3
OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsK
ICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMs
IHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JG
b3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25l
ZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7Cisg
ICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7
CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSog
ZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1
cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsK
ICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjgx
OGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyAr
MjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxG
cmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlu
bGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1l
Lm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1l
Lm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsK
QEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBpZiAo
Y29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0gICAg
ICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7
CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4
KCkpIHsKICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjYWxs
RnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50
LCBieXRlY29kZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
LCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1MmRl
ZjJkNzFiYzIuLmUwNmNiNDliMjk1ZGU1ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2
NDcsMjggQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAg
ICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwgR1BS
UmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQ
UlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHRvKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVn
IGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyNjQoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJl
ZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2Fk
NjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAg
IGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHRvKTsKICAgICB9CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAg
ICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJv
bSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgdm9p
ZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8p
CkBAIC02OTYsMTkgKzY5NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9p
bnRlci4gT24gc29tZSBwbGF0Zm9ybXMsIHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1
c2hpbmcgdGhlCiAgICAgLy8gImxpbmsgcmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVybiBh
ZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20s
IGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xv
Z3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBz
dG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRl
ckRlbHRhKCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UK
LSAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShH
UFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFt
ZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkp
CiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBw
cm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEo
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRU
YWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0b3Jl
UHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1Bv
aW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAg
ICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNz
Rm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSArMTE2
NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgp
KTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZp
cnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpOwog
ICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGlj
IEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3
OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIu
aXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXls
b2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3Bl
cmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAg
IHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNTRVJU
KHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0
dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xv
dCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NFUlQo
c2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOworICAg
ICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVy
KSAqIChzbG90IC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7
CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgog
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAg
ewotICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlRnJhbWVUYWdTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xv
dCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxSZWdp
c3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
VmlydHVhbFJlZ2lzdGVyKDApKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lz
dGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAg
ICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0dXJu
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5Njkw
ZTA5YzhiNTcyNzBkZWY3Zjg3YTQ2Y2MyYjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1M2Y4
ODgwYjk4MzdiNWM2NGQ0YzU2NDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxl
cjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNo
dWZmbGVEYQogI2VuZGlmCiAKICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkg
fHwgZGF0YS5jYWxsZWUudmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXco
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAg
ICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NF
UlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVn
aXN0ZXIoKS5pc0xvY2FsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCmluZGV4IDYyNDM5YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5
ZjUuLjRjNmFhMzJmNGY1ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAg
ICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5
KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0
TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292
ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3Zl
cnkoKSk7CiAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3Vt
ZUNhbGxlZUlzQ2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENh
Y2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2Fs
bGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAg
ICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkg
ewogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKaW5kZXggMjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUz
ZTI3YTgwYS4uODczMTVlZjg0NzdhYzEyYTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBD
b21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlw
ZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0
KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBS
ZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRv
RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBl
bnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRG
aWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07
CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZv
cmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhl
IHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1
bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2
b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVn
VDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZp
bmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpT
VmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQg
ZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNy
Yyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0g
ICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAg
IGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAg
ICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMp
OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAg
ICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAg
dm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAg
ICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAg
ICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5
bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3Rl
cklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQg
aW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFz
ZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4
MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdp
c3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
MihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwg
VmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwog
Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAg
ICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJl
Z2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVk
SW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElz
Q2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lk
IGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAg
IHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJl
Z2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3Rv
cmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNC
b29sID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3Rl
cklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdl
dEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IElu
c3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlz
dCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJ
blJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwog
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
UmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGlu
dCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAg
ICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBS
ZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwot
ICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBm
cm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVt
aXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNl
ZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQp
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNl
KQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5
bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklE
LCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVn
aXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lz
dGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklELCBpbnQgVlJlZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5v
dEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAg
ICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAg
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVn
aXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChp
bnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0
QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsK
IAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlv
biosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50
IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BF
UkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVD
bG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
dW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1p
dFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAg
ICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
dm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAg
ICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFu
ZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCArNjg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBH
UFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Q
b2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNl
bmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFy
KGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1p
dEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAg
ICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVu
Y3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRG
dW5jdGlvbik7CkBAIC03MzQsNyArNzI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAg
ICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAg
ICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEzICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRT
bG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAj
ZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4p
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBp
bnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVy
OjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBp
bnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1i
bGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdz
KQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBP
cGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBl
PihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3Vs
dCk7CkBAIC04NjQsNyArODU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMx
LCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNm
Li4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
LSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlu
bGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAg
Ly8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyAr
MjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGlu
dCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
b3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
ICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3Ax
LCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBp
bnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6
ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6
ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAK
ICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBp
biB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5j
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3Jj
RHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
Y0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAt
NDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBp
bnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVj
dGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5
ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRv
cj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lk
IEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAt
NTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdo
dFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklU
UmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0
aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24g
bm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVy
IGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVk
RnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcg
Kzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9w
MiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZm
MTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVhYzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVj
NmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEs
NyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2
LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNv
ZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdU
MCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCBy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1f
YXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4
NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlz
VmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lz
dGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0
ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlz
IGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50
IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlz
OgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFt
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3
ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3
YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93
KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0
b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJj
YmUwYjg1NDFiZWU5M2IxMGFiMzQuLmM2NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzllMzEx
NzY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSAr
NDgsMjAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0
TG9hZEZvckFycmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0RvdWJsZSgpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBK
SVQ6OmdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJ
VDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQo
c3JjLmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVn
aXN0ZXIgZW50cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IoZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsK
QEAgLTE0Myw3ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBj
YWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtMTU1LDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIs
IFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5v
dEltbWVkaWF0ZSh2UmVnKSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4
NSw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUp
CkBAIC0zNjMsMjYgKzM2NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJy
YXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsK
IH0KIAotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGlu
dCBzcmMpCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuYXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3Rl
ZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVn
aXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRh
Z0ZvcihpbmRleCksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2Fk
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAg
IGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDA2LDEzNiArNDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0
IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92
ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRz
dCkKIHsKICAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50
IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsK
ICAgICBlbWl0U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5
bG9hZCk7CiAKICAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQo
aW5kZXgsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAg
ICAgZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJl
ZywgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0
YXJnZXQgeyBpbmRleCB9OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3Rv
bXBpbmcgYmFzZQotICAgICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0g
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAg
ICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRh
Z0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFz
ZSksIHBheWxvYWQpOworICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBS
ZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVy
SUQgcGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIg
cmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVt
aXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFn
MSwgcGF5bG9hZDEpOworICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBl
bWl0TG9hZChyZWcxLCB0YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4
KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRy
dXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdp
c3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFu
dFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJl
Zy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0
YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNo
YXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29s
KTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2lu
dGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUp
OwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGlu
ZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJl
ZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBS
ZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRh
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7
CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3Jl
MzIodGFnLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0
b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMy
KQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMy
KFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJ
bnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIp
Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50
IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBp
ZiAoIWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9v
bCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXls
b2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KHJlZykpOwogICAgIGlmICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQg
dmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJl
c3NGb3IoaW5kZXgpKTsKKyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsK
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVl
IGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJh
c2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUz
MihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwot
ICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7
CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywg
YmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBi
YXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0
ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
ZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBv
cDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6
Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDEpKSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMSkuYXNJbnQzMigpOwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29s
IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGlu
dDMyX3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBh
cmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsK
KyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkp
LCBkc3QpOwpAQCAtNTcxLDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQo
YWRkcmVzc0ZvcihzcmMpLCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
SlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3Qu
cGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVy
SUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3Rl
cklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3Jj
KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnQgZHN0LCBSZWdpc3RlcklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsK
ICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJv
bSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSkKLXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJv
bSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0Nl
bGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
IHJlZykKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
IHJlZywgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFs
dWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRl
eCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0g
bV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91
YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5k
ZXgpKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKGluZGV4KS5hc0ludDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMy
KCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFk
ZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFk
ZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxl
SnVtcCBKSVQ6OmVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0
MTFiZTljZmI4MGY4MDgwNmY3ODhmNmMxLi42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQyMTlh
MWU5YTdlNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAg
LTU2LDEwICs1NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBA
IC03Nyw3ICs3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsK
QEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CiAgICAgfQogfQogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
ZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0
dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkg
KzEyOSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlk
ZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsK
LSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFu
Y2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwg
cmVnVDApOwogCkBAIC0xNTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8g
PSBieXRlY29kZS5tX3Byb3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlw
ZTsKIAogICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVl
IHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBi
YXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4g
dGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsK
ICAgICAKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpA
QCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVj
b2RlLm1fdHlwZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
QEAgLTMwNyw4ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BS
KTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9
IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1
ICszNjAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25f
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9v
cGVyYW5kLCByZWdUMCk7CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsg
aWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwg
YmUKICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAg
b3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3ICsz
NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5MCwx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51
bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3ICs0
MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
dW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwpAQCAtNDcwLDggKzQ3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBn
ZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBz
cGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyKTsKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKQEAgLTQ4NSwxOCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCks
IHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zm
c2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVy
blZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpA
QCAtNTQ4LDkgKzU0OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMy
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01
OTIsOCArNTkyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBA
IC02NTAsOCArNjUwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7
Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CkBAIC02NjQsOCArNjY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1l
cmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50
IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwog
CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0LDIw
ICs2ODQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBp
bnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwxMCAr
NzI4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAg
ICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFk
ZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
cmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nl
c3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0g
bWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcgKzc0
OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAg
LTc2NiwxMCArNzY2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBp
bnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2Vs
bChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0
ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN3aXRjaEltbT4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJ
bmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigp
OwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBs
ZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRl
ZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9k
ZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CkBAIC04MzQsOCArODM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAt
OTAzLDcgKzkwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9u
KikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAg
ICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVf
dCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKIApAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CkBAIC05MjQsNyArOTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1
Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rk
ej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtOTk2LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihU
cnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAyNCwx
MCArMTAyNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29u
c3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBo
YXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhw
KSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTE1
LDEyICsxMTE1LDEyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKIApAQCAtMTE2MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIwNywx
MCArMTIwNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5
dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCiAgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1Qw
LCBzaXplKTsKIH0KQEAgLTEyMTksOCArMTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNpemU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBz
aXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9
IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKQEAgLTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
ci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjplbWl0
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5m
bygpOwogICAgIApAQCAtMTMzMCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbElu
Zm87CiAKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5LDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhIGNlbGwKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEz
OTAsOSArMTM5MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNl
dCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
MSk7CkBAIC0xNDE0LDkgKzE0MTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwotICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdAogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVn
VDMpOwogfQogCkBAIC0xNTIzLDggKzE1MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5v
bi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAg
ICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1NDUs
NyArMTU0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1
bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhU
d29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJh
bWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBA
IC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
MCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVtcCBh
cmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1
c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5k
ZXgpKSwgcmVzdWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJndW1l
bnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3MzQz
MGU1YzFmN2EuLmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkzMyw3
ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hv
dWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxz
ZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
Tm9QdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmls
ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXgg
M2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2VmODVm
MGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0dXJu
VHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQz
Ml90IGJ5dGVjCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKQog
ICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2Yg
IiwgKmNvZGVCbG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1
ZXM7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAgaWYg
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZhcnNX
aXRoVmFsdWVzID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RI
YW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVz
KTsKKworICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVl
cyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwogICAg
ICAgICBpbnQgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAm
JiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxl
ZVNhdmVzKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAm
JiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVzdEhh
bmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4Myw3
ICsxNzgzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0
Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
ICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBA
IC0xOTA3LDggKzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNj
b3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5uZXh0
KCk7CisgICAgYXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihzY29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6
c2NvcGUoKS0+bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEhhc0luc3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxG
cmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwor
ICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdldFB1
dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAogICAg
IC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9m
cm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHIK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
KS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAg
ICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAg
IC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2
ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCmluZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUuLmU3
MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyArOTMs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKQEAg
LTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3Nyw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmlj
Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKICAg
ICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkp
OwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29k
ZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcgKzI0
OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhp
cyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3Jl
NjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1w
IGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDggKzI3
NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQo
QnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAg
ICAgLy8gc2NyYXRjaDogcmVnVDIKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFs
SW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQsMTQg
KzMwNCwxNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hl
ZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0ID0g
Y3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owot
ICAgIGludCBiYXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2Rl
KSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtMzM3
LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
ckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
clNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zm
c2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0
dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRy
aWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZz
ZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1w
bCgpKTsKQEAgLTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNS
ZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3ICs0
MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAg
LTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
LSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5
SWRXaXRoVGhpc0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRp
cmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgLy8g
SW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUg
b2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyArNjU3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+
YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJlc29s
dmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVz
b2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURl
cHRoOwogCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBsb2Fk
UHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5LDE3
ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQor
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAg
c3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihpbmRp
cmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJVDo6
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IGludCB2YWx1ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpA
QCAtOTUwLDggKzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1
dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBAIC0x
MDg2LDggKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMCk7CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1p
dFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAt
MTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3du
ZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVO
b3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsK
QEAgLTExNjQsOCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVs
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJ
bnRlcm5hbEZpZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEx
NzYsNyArMTE3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWdu
ZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
IHsKQEAgLTExOTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2ln
bmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAg
IHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQor
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQyNSw3
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAg
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVy
ZmFjZUpJVC5oCmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1YzEu
LjU4MjcxM2U2NDA4N2E1MWY1OTM5YjkwYjk4NTQ1ZGYxMzNkMGM2YWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
cGF5bG9hZCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQgdmly
dHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJ
RCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2Fk
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgaW5s
aW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsK
KyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJl
Z2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZy
b20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7
CisgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lz
dGVyIGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAg
IHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSk7CiAKICAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92
bTsgfQogCkBAIC02NCwzNiArNjQsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVt
cElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1
bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZp
cnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVh
bFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VK
SVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6
SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4KTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
ZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nh
c3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGRzdCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRE
b3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIs
IEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJl
Z2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxv
dywgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBK
dW1wIG5vdEludCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdp
c3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRj
aCwgZHN0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5s
aW5rKHRoaXMpOwotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgZHN0KTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90
SW50OwogICAgIH0KQEAgLTEwMSwyMyArMTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsK
ICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3Rl
cklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGRzdCk7CiAgICAgICAgIEp1bXAgbm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAg
ICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdElu
dDMyOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVn
aXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VK
SVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAg
ICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2Ny
YXRjaCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0
Y2gpOwogICAgICAgICBKdW1wIG5vdE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gp
OwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMTIgKzEyOSwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVu
dHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFs
UmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0
byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50
ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQg
ZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAg
ICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxv
YWRGb3IoZW50cnkpKTsKQEAgLTE0MywxMiArMTQzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmCiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lk
KiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICAgICAgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9y
KGVudHJ5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwCmluZGV4IDM4ODczMDUyZDEyODUyZmM2YmI5MTQyZDQ1NjA3YWU4ZTE5YTY3MGEuLjBi
YTczZWY4YzEzNGViYmJkMWQwNGE0YjE3MjE0ZjRmYTczNTE4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCkBAIC0xMjgsNyArMTI4LDcg
QEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShWTSYgdm0sIENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3QKICAgICAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcg
PSBWaXJ0dWFsUmVnaXN0ZXIoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBEYXRhRm9y
bWF0SW50MzIpOworICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgRGF0
YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJn
dW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0
YWIyNjcxNTVjMTNkZjM2YTcyNDliNmMzNDMuLjkzM2NhOWJlMTAyZTBlZGY5NGJiNGVhZTgyODIx
NDgyMjljODI2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lh
bGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1lbnQsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUoc3Jj
LCBkc3QsIHNjcmF0Y2gpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBsb2Fk
Q2VsbEFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1l
bnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRM
b2FkSlNDZWxsKHNyYywgZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03Myw3ICs3Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkSW50MzJBcmd1
bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1wJiBmYWlsVGFyZ2V0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBmYWlsVGFyZ2V0ID0g
ZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggNTI0MWU1ZjdjYzMz
MmE2NGUwZGU2ZGI0NGJkYWY5ZThlODBmMjJhYS4uYzM3NmRiZTJjZDdkNmRkM2ZhNTQ4N2I1N2I1
ODk0N2Y2ZGZiYTMzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcApAQCAtMTAzMiw4ICsxMDMyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgdW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKTsKKyAg
ICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgYXV0byBub3RJbnRlZ2VyID0gaml0LmJyYW5jaElmTm90
SW50MzIoR1BSSW5mbzo6cmVnVDApOwogCiAgICAgLy8gQWJzIEludDMyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3YTQ2ZThlNTc4
OTdmMjc4NWNkMzM5ZmNiZTJiYzBjOTBjZWRiMi4uMjcwMGVjYzhlMTNkYTFiOTFlYzFhN2IxMGQx
ZTdmZmViNDY0OThiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJD
b21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFu
ZGxpbmdTY29wZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAg
IFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9u
Q29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0
ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNl
dCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZy
YW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0
Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUo
KTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1Zh
bHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsg
ICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAg
ICAgXApAQCAtMTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5l
cmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAg
IAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29k
ZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAg
Y2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkw
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVu
dHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBn
ZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVu
Z3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVB
c1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRD
dXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRV
cENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcy
Niw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVl
RnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hl
Y2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVl
RnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
ID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9p
bnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhu
dWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkzMCw3ICsx
OTMxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1l
dGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgp
KTsKICAgICB9KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjMgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9JTVBM
KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRsZVZh
cmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
c2lkZVN0YXRlLmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJbnQzMigpOwor
CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgeworICAgICAgICBs
b2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1f
YXJndW1lbnRzKS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7
CisgICAgfSk7CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisK
KyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAhPSBvcF9jb25z
dHJ1Y3RfdmFyYXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdldE9w
ZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1l
LCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisgICAgICAgIHJl
c3VsdCA9IGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRl
Y29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1
ZSksIGFyZ3MsICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CisgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJlc3VsdDsKK30K
KworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghY29kZUJsb2NrLT52bSgpLmV4Y2VwdGlvbkZvckluc3BlY3Rpb24oKSk7Cisg
ICAgaWYgKE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCkucHRyKCk7CisgICAgICAgIGF1dG8gbmV4dEJ5dGVj
b2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKnBjLm5leHQoKS5wdHIoKSk7
CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEJ5dGVjb2Rl
SW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAgICBhdXRvIG5l
eHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5dGVjb2RlSW5k
ZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbmV4dEJ5dGVjb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQq
LCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQpCit7CisgICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5n
IGNoZWNrcG9pbnRzIGRvIHJpZ2h0IG5vdyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdl
IGNhbiBqdXN0IGRvIHRoYXQgaGVyZSBhbmQgcmV0dXJuLgorICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZt
KCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9
IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIGF1dG8g
cGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAg
YXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihw
Yy0+YXM8T3BDYWxsVmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsK
KyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+
KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAvLyBvcF90YWlsX2NhbGxfdmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRo
ZSB0aGluZyBpdCB3YXMgY2FsbGluZyB3YXMgaW5saW5lZC4KKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisK
K2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9l
eGl0KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Cisg
ICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIEFTU0VSVChieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSk7CisKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlE
KCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAg
ICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0
LCBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFy
Z3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ29uc3Ry
dWN0VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGMu
bmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX3JldCwgIldlIHN0cm9uZ2x5IGFzc3VtZSBhbGwgdGFp
bCBjYWxscyBhcmUgZm9sbG93ZWQgYnkgYW4gb3BfcmV0LiIpOworICAgICAgICBoYW5kbGVWYXJh
cmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcFRhaWxD
YWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQocmV0dXJuVG9UaHJvdyh2bSksIDApOworCisgICAgcmV0
dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCiBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihW
TSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0ZyYW1lKQogewogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gdm0tPnRvcENhbGxGcmFtZTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwotCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxw
dHI7CiAgICAgaWYgKGNhbGxGcmFtZSkKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCp2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5oCmluZGV4IDJmZjI4YjAwNmJjMjIzMzMwY2M2Nzg2NWExNjc5NGE5
MGU3ZTdhYWUuLmIwMDUwNzg4YTk0ZWI0MTJkNzZhYTc3ZWIzMTNlZjc1OTEwMmZkZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xMzYsNiAr
MTM2LDggQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdXBlcl9zYW1w
bGVyX2JlZ2luKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJf
c2FtcGxlcl9lbmQpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9vdXRf
b2ZfbGluZV9qdW1wX3RhcmdldCk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGlu
dF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lO
VEVSTkFMOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOworZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSk7CiAjaWYgRU5BQkxF
KENfTE9PUCkKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3N0YWNrX2NoZWNr
X2F0X3ZtX2VudHJ5KFZNKiwgUmVnaXN0ZXIqKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpp
bmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0Li44OGRjZjdhMDFk
MDE3Y2MwODk4MmM4MjY0MGIzYzE2OTgwMzkxMDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDkxLDcgKzEwOTEs
NyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQog
ICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0b3Jl
U3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zm
c2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1h
Y3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBz
Y3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0LCBP
cENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEp
IGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAg
ICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4
Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwgLm5v
RXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
Ci0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9uOiAg
ICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAg
ICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGlu
IHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0yMDAwLDYgKzIw
MDQsMjEgQEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUs
IG1hY3JvICgpCiBlbmQpCiAKIAorb3AoY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRf
Y2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIG1vdmUgcjAsIGEyCisgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCkKKyAg
ICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGlu
ZSkKKyAgICBqbXAgcjEKK2VuZCkKKworb3AoY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5l
LCBtYWNybyAoKQorICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSBkaXNwYXRjaCB0byB0aGUg
Y2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdhcyBlYXNpZXIgCisgICAgIyBh
bmQgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgIGNhbGxTbG93
UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCisgICAgYnJhbmNoSWZFeGNlcHRp
b24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgam1wIHIxCitl
bmQpCisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3
ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZl
ciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydAogIyBhcyBt
dWNoLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQppbmRleCAzZGQyZWI0OGNiYmE2ZWY1Y2Q5ODg2MzljNzkxMWUyMmE3MTMz
MTQ4Li40MTFkZjJjNjc1MjMzMGIzN2I5NmFiY2VkODdhODQ0NmE4NzU2OTk4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQpAQCAtNDIsNiArNDIsMTQgQEAgbWFjcm8gbmV4dEluc3RydWN0aW9uV2lkZTMyKCkKICAgICBq
bXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAorbWFjcm8gc3RvcmVQ
QygpCisgICAgc3RvcmVpIFBDLCBMTEludFJldHVyblBDW2Nmcl0KK2VuZAorCittYWNybyBsb2Fk
UEMoKQorICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKK2VuZAorCiBtYWNybyBnZXR1
T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAgIGxvYWRiIGNv
bnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QK
IGVuZApAQCAtOTIsNyArMTAwLDcgQEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBi
eXRlY29kZSBpcyBjbGFpbWluZyBpbnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8g
ZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2Fk
aSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZFBDKCkKICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVjdCwgbV9kc3Qs
IHQxKQpAQCAtMzkwLDcgKzM5OCw3IEBAIGVuZAogCiAjIENhbGwgYSBzbG93IHBhdGggZm9yIGNh
bGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKLSAg
ICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMo
KQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3Zl
IFBDLCBhMQpAQCAtMzk5LDIwICs0MDcsMjAgQEAgbWFjcm8gY2FsbENhbGxTbG93UGF0aChzbG93
UGF0aCwgYWN0aW9uKQogZW5kCiAKIG1hY3JvIGNhbGxUcmFwSGFuZGxlcih0aHJvd0hhbmRsZXIp
Ci0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9y
ZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAg
bW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Nsb3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAg
ICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdP
ZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAg
ICAgICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgICAgICBzdG9yZVBDKCkKICAgICAgICAg
ICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAg
ICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTQyMSw3ICs0MjksNyBAQCBtYWNybyBjaGVja1N3aXRj
aFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAogICAgICAgICAgICAgam1w
IHIwLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIC5yZWNvdmVyOgotICAgICAgICAgICAgbG9hZGkg
QXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAgICAgbG9hZFBDKCkK
ICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTE3NjgsNiArMTc3Niw4IEBAIG1hY3JvIHB1dEJ5VmFs
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBvc3JFeGl0UG9pbnQpCiAgICAgZW5kKQogZW5k
CiAKKworCiBwdXRCeVZhbE9wKHB1dF9ieV92YWwsIE9wUHV0QnlWYWwsIG1hY3JvIChzaXplLCBk
aXNwYXRjaCkKIC5vc3JSZXR1cm5Qb2ludDoKICAgICBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJu
UG9pbnQob3BfcHV0X2J5X3ZhbCwgc2l6ZSkKQEAgLTIwNTcsNyArMjA2Nyw3IEBAIG1hY3JvIGNv
bW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2Fs
bCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9yZXEgdDIsIENh
bGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgdDIpCi0g
ICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAg
IHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zm
c2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVd
LCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCmluZGV4IDg0MGY4OWI4OGQ0MjBjYzNiNzVjODNkNmM1NzgyNDE1NDAyZjMzNjYu
LjhmNTA1Y2M2OTljZDRhZTM3ZWYzNDUwMGZkZmJlNjk5OTgwN2NkYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKQEAgLTEzMyw2ICsxMzMsMTcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBvdmVyZmxvd0NoZWNrTm90TmVlZGVkKCkgeyBjbGVhck5lZWRzT3ZlcmZsb3dD
aGVjaygpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZmls
bChzaXplX3QgY291bnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBBU1NF
UlQoIW1fc2l6ZSk7CisgICAgICAgIGVuc3VyZUNhcGFjaXR5KGNvdW50KTsKKyAgICAgICAgaWYg
KEJhc2U6Omhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9z
aXplID0gY291bnQ7CisgICAgICAgIGZ1bmMocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJnNs
b3RGb3IoMCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eSgp
OwogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCBmOGQ5Nzk5NTg3NDUy
MjZhNDdlNmY4YjZjNTU4NjBjMThmY2U4N2ExLi5mZmI3NDU5YTZhZGNjYmFiMTZkYThhNGVmOGIx
NzExZDg3MmExYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCkBAIC0xNzg4LDYgKzE3ODgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZGVy
aXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5cGU7IH0K
ICAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb250
ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWduZWQgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7
IHJldHVybiBtX2VuZENvbHVtbjsgfQogCkBAIC0xODIwLDYgKzE4MjEsNyBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKICAgICB1bnNpZ25lZCBtX2hhc1Rh
aWxDYWxscyA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6IDI7CisgICAgdW5zaWduZWQg
bV9oYXNDaGVja3BvaW50cyA6IDE7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAg
ICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC0yMDE4LDYgKzIwMjAsNyBAQCBBTFdB
WVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBk
ZWNvZGVyLCBTdHJ1Y3R1cmUqCiAKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2tw
b2ludHMoY2FjaGVkQ29kZUJsb2NrLmhhc0NoZWNrcG9pbnRzKCkpCiAKICAgICAsIG1fZmVhdHVy
ZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKCkpCiAgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRD
b2RlQmxvY2sucGFyc2VNb2RlKCkpCkBAIC0yMjA2LDYgKzIyMDksNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29ucwogICAgIG1fcGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwogICAg
IG1fY29kZUdlbmVyYXRpb25Nb2RlID0gY29kZUJsb2NrLm1fY29kZUdlbmVyYXRpb25Nb2RlOwog
ICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsKKyAgICBtX2hhc0NoZWNrcG9p
bnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAKICAgICBtX21ldGFkYXRhLmVuY29k
ZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5l
bmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggZjM1OGQ0
OGE1MGRlNzNlYWIzODU2OTliM2E2ZjUxMTNiYmJlOWJiYS4uZTI3ZmUzY2E5NzhiMzk0NDgyNjE2
N2Q0YTA2MWEyZWFkNGY5MjYxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05OCw4ICs5OCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIEJFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAgICAgICAgXAogICAgIFNFVF9Q
Q19GT1JfU1RVQlMoKQogCi0jZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1l
LT5yKG9wZXJhbmQub2Zmc2V0KCkpKQorI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+
dW5jaGVja2VkUihvcGVyYW5kKSkKKyNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+
cihvcGVyYW5kKSkKIAogI2RlZmluZSBSRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAg
ICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAg
XApAQCAtMTEzOSw4ICsxMTM5LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKLSAgICBpbnQgc2NvcGVSZWcg
PSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAg
SlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1f
c2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFs
dWUoKSk7CiAgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRp
YWxWYWx1ZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmlu
ZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsKQEAgLTExNTUsOCArMTE1NCw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgSlNPYmpl
Y3QqIG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNvZGUubV9uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBpbnQgc2Nv
cGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBj
dXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX2N1cnJlbnRTY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgUkVUVVJO
KEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBuZXdT
Y29wZSkpOwogfQogCkBAIC0xMTY1LDcgKzExNjMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiAgICAgQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29w
ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29s
dmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFs
KGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpA
QCAtMTE3OSw3ICsxMTc3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2Nv
cGUpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIp
OwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgp
OwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxP
YmplY3QsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8gUHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhl
cmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CkBAIC0xNDI0LDcgKzE0MjIsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZz
ZXQoKSkpOworICAgIEFTU0VSVChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5pc0NvbnN0
YW50KCkpOwogICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBi
aXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29kZS5tX2ltbXV0
YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAgICBhdXRvJiBwcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAK
QEAgLTE0NDMsNyArMTQ0MSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlf
YnVmZmVyKQogICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJm
bHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0
ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJs
b2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBp
bW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAg
IH0KIApAQCAtMTQ4OCw0ICsxNDg2LDE2IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zcHJl
YWQpCiAgICAgUkVUVVJOKEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGVGcm9tQXJyYXkoZ2xv
YmFsT2JqZWN0LCB2bSwgYXJyYXkpKTsKIH0KIAorZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3Rl
cihVQ1BVUmVnaXN0ZXIgdmFsdWUpOworZXh0ZXJuICJDIiB2b2lkIGR1bXBSZWdpc3RlcihVQ1BV
UmVnaXN0ZXIgdmFsdWUpCit7CisgICAgZGF0YUxvZ0xuKFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPih2YWx1ZSkpKTsKK30KKworLy8gZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
U0xPV19QQVRIIGNoZWNrUEMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9u
KiBwYyk7CisvLyBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBTTE9XX1BBVEggY2hlY2tQ
QyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCApCisvLyB7CisK
Ky8vIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRiZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3
YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQxYjc4ZTYzMTFiNjc1ZDFlZmE1YTVmZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3Bw
CkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0KiBjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVj
dCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAg
IHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3Ry
dWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVj
dCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVy
cm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDYsMTAgKzUxLDkgQEAgSlNP
YmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNv
bnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25z
dHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgY29uc3Ry
dWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChn
bG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0KIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29u
c3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3RE
YXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmExMWQ3Y2VlMjRkZmZhZTkxOTExOTY3ZTAy
YWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2JhZWI2Y2FjMTI2MjFmM2JhMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaApAQCAtNjAsNiAr
NjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXIg
c28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENhbGxEYXRhIGFuZCBDYWxsVHlwZSB1bmxl
c3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25z
dCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRF
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9y
TWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25z
dHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsKIAogQUxXQVlT
X0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwg
Y29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFlZmFmZDQzYTAxYTVjODUuLjRiMzQ2MWRl
MjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApAQCAtMTM3LDIwICsxMzcsMTkg
QEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBp
bmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChpbmRleCwgaW50ZXJuYWxMZW5ndGgoKSkg
PSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVn
aXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYXBwZWRBcmd1bWVudHMpIHsKICAgICAg
ICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsK
ICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmly
c3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbGlt
aXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gc3RvcmFnZSgp
W2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHN0
b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7Cisg
ICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVj
dCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHZW5lcmljQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3Qs
IG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMo
Z2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHVu
c2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1lbnRzU2l6ZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCmluZGV4IDBhNmIxYTA2
NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEuLjhkOTY0MmEyYzk0MDQwODBiOTEzYWMy
NzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1l
bnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9B
cmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZv
aWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9J
TkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEu
LjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVlYjI3MmNiYmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKQEAgLTU5LDcgKzU5
LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3Io
Vk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29sIGlzTW9kaWZp
ZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAK
LSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9IENhZ2VkQmFycmllclB0cjxHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2RpZmllZEFyZ3VtZW50c1B0ciBtX21vZGlm
aWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDIxODJhNjJiMTMwMzQz
YWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFiZjVmMmVlMTg1YjdkMTMzMTYwMzdkOGMx
ZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25l
ZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMwNSw5ICszMDUsOSBAQCB2b2lkIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBl
Kj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkgKyBvZmZzZXQpKQotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERl
c3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50
RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNDRjN2U1MjBmMWMwYTI0
MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5ODIy
YWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
QEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyCiAgICAgICAgIGFy
Z3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0KIAotdm9pZCBKU0FycmF5Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjY5
LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICAgICAgZG91Ymxl
IHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKTsKICAgICAgICAg
ICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVl
OjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBv
ZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwxMSArMTI5NCwxMSBAQCB2b2lkIEpTQXJy
YXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3Jb
aV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJh
bWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQoKTsKKyAgICAgICAg
Zmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYuZ2V0KCk7CiAgICAgfQogICAgIAogICAg
IGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxl
bWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmluZGV4IDMxNzk0OWM1NzJhMTFiNzVhZGMx
ODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5MjU0Y2MxYTZjNDc5MDJiNzkxMGFjNGE3
ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTE2Myw3
ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5j
cHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDljMC4uZTQ5MDk3
NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcApAQCAtNDYs
MTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9p
ZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAgICAg
ICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggYWNiNjg0ODE5MWExOTAzNTIyYjliM2U0ZDAwZjk2
OWU0MGI3ODE1YS4uMDdlMWE4YTEwYzNjZGM3MTE3YWNhM2RjNTQzZWQ3ZGRiMGQ0MWYzZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRl
cmZseS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQg
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVz
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApp
bmRleCBhNmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2ODM0OTdlLi4xNmFhMzY5ZjQ4
NTA3MDYxYzA2MzYxNTE4YWUxNWQyYmM2OGZiNmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5jcHAKQEAgLTIwNCw2ICsyMDQsNyBAQCB2b2lkIEpTTG9jazo6d2lsbFJl
bGVhc2VMb2NrKCkKIHsgICAKICAgICBSZWZQdHI8Vk0+IHZtID0gbV92bTsKICAgICBpZiAodm0p
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCF2bS0+aGFzQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSgpLCAiUmVsZWFzaW5nIEpTTG9jayBidXQgcGVuZGluZyBjaGVja3BvaW50
IHNpZGUgc3RhdGUgc3RpbGwgYXZhaWxhYmxlIik7CiAgICAgICAgIHZtLT5kcmFpbk1pY3JvdGFz
a3MoKTsKIAogICAgICAgICBpZiAoIXZtLT50b3BDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAK
aW5kZXggZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2ZGUzN2JhMC4uNTk2ODA4Y2Fm
YzBiMGY0Yzg0NzBiZDc1OWVkOWY0OTE2YzY2NDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcApAQCAt
NzQsNyArNzQsNyBAQCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgZXhlY3V0YWJsZS0+
bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwg
ZXhlY3V0YWJsZSwgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZSk7CiAKLSAgICBleGVjdXRhYmxl
LT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwg
ZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZp
cm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKS5nZXQoKSktPmNsb25l
U2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOworICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxl
LCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFu
dFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkp
LT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKIAogICAgIHJldHVybiBleGVj
dXRhYmxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRl
eCA0MTM4N2M4NTBhOTk1YWQ1NzQyMTA1MGNkZTg2Y2IyNTIxZTU0MTE2Li45MWVkNzM5ZTI1ZjQ5
MzhlZjUwMjcyN2RmNTE2ODBkODZjYTIwODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcApAQCAtNTA5LDExICs1MDksOSBAQCBzdGF0aWMgdm9pZCByZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBpZiAoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNp
emUoKSA8IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVT
aXplKQogICAgICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpID0gT3B0aW9uczo6
cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNpemU7CiAKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgIC8vIEZJWE1FOiBNYWtlIHByb2JlIE9TUiBleGl0IHdvcmsgb24g
MzItYml0OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwotI2VuZGlmCiAK
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBPcHRpb25zOjpkaXNr
Q2FjaGVQYXRoKCkgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKaW5kZXggMDgxZDk3OGE3YjJhNjI2NmFjNTUyYzM3OWQz
ODQ1MDA1ZGMxMWYxMC4uM2M3NDBkNDhmNjI0MWIwMjYwNWZiZjUyNWJkZGYyMzE5MmQwOWRiMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
Y3BwCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnVubWFwQXJndW1l
bnQoVk0mIHZtLCB1aW50MzJfdCBpKQogICAgICAgICBzdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3Ro
XS5jbGVhcigpOwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFs
UmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmpl
Y3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5oCmluZGV4IGY4NWU0N2RmYmVlOGNhN2MzNzA0ZjI5ZWQ0Y2IxYjRlOTcyMDQ0NTcuLmU1OGNi
MjJlZmQ0OGM2NzRiZjViMWIxMTI4MGI1MWFiYzBkZTA4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCkBAIC0xNDIsNyArMTQyLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+
Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX3RhYmxlLT5sZW5ndGgoKSk7
CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCmluZGV4IDY0ZGRmY2IxYTI1NjBlNmZlMWI0NTRlNGZlZTE0ODkyYWRjMDhh
OWYuLjhmNmU1NjVlMjQ3ZTVhMjMxOTMzMTk4ODI4NjcyZTIxMDQ4ODE2NTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCb29s
ZWFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFibGVzLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0xMDI3LDYgKzEwMjgsMjAgQEAg
dm9pZCBWTTo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cykKIH0KICNlbmRpZgogCit2b2lkIFZNOjphZGRDaGVja3BvaW50T1NSU2lk
ZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9hZCkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NoZWNrcG9pbnRTaWRl
U3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gc2lkZVN0YXRlID0gbV9jaGVja3BvaW50U2lkZVN0
YXRlLnRha2UoY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gc2lkZVN0YXRlOworfQorCiB2b2lkIGxv
Z1Nhbml0aXplU3RhY2soVk0mIHZtKQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlU2FuaXRp
emVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKaW5kZXggMjgwODZjNGVkOTE2MDZjMjgxYjFhMWQ1YjdhMWRhYjA2MDg4MDcwYS4uMjVjNGE1
MTRhMThjNjcwZTY1NDMxYWI5Njg3ODgzMzgxZDcxZWMyZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCkBAIC0xMDMsNiArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCdWls
dGluRXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3Mg
Q2FsbEZyYW1lOworc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29k
ZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CkBAIC05
NDksNiArOTUwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJv
b3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAKKyAgICB2b2lkIGFkZENoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoQ2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
IGZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSopOworICAgIGJvb2wgaGFzQ2hl
Y2twb2ludE9TUlNpZGVTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2twb2ludFNpZGVTdGF0
ZS5zaXplKCk7IH0KKwogICAgIFZNRW50cnlTY29wZSogZW50cnlTY29wZTsKIAogICAgIEpTT2Jq
ZWN0KiBzdHJpbmdSZWN1cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsgbnVsbHB0ciB9OwpAQCAtMTIw
MCw2ICsxMjA1LDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fc2NyYXRjaEJ1ZmZlckxvY2s7CiAg
ICAgVmVjdG9yPFNjcmF0Y2hCdWZmZXIqPiBtX3NjcmF0Y2hCdWZmZXJzOwogICAgIHNpemVfdCBt
X3NpemVPZkxhc3RTY3JhdGNoQnVmZmVyIHsgMCB9OworICAgIEhhc2hNYXA8Q2FsbEZyYW1lKiwg
c3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPj4gbV9jaGVja3BvaW50
U2lkZVN0YXRlOwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9wcmltaXRpdmVHaWdhY2FnZUVu
YWJsZWQ7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxvd1Byb2ZpbGVyPiBtX2NvbnRy
b2xGbG93UHJvZmlsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Vk1JbnNwZWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9y
LmNwcAppbmRleCA4MWM5ZjFmNjc0NzA3OWVkODMxMjY2MmMwODMwMGM2Y2MzNjI4ZTM3Li5lMTQ4
NDAwZDQ4N2RmYzY0ZTQ0MDU0ZGRhZGIwODU4OTcyZTM5YTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKQEAgLTM5Nyw4ICszOTcsOCBAQCB2b2lkIFZN
SW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGNvbnN0
IFJlZ2lzdGVyKiBpdDsKICAgICBjb25zdCBSZWdpc3RlciogZW5kOwogCi0gICAgaXQgPSBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCk7Ci0gICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAr
IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7CisgICAgaXQgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpKTsKKyAgICBlbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgKENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDEpOwogICAgIHdoaWxlIChpdCA+IGVuZCkgewogICAg
ICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVnaXN0ZXJOdW1i
ZXIgPSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGY2ODhhN2M5ZTk0MjZk
OWUwYmVhM2FmMGNmZmFmMmMyN2RkNWE1NjcuLjJmNGIxYzdkZTZhODdjNzQxMWU4NmU4N2U3ZjE5
MjQ3MzUyYzBmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oCkBAIC03MiwxMSArNzIsMTEgQEAgcHVibGljOgogICAgIGNvbnN0
IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRz
OyB9CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsg
cmV0dXJuICptX2luc3RydWN0aW9uczsgfQogCi0gICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBn
ZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2luZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBUeXBlIGdl
dENvbnN0YW50VHlwZShpbnQgaW5kZXgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSB1aW50NjRf
dCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBUeXBlIGdl
dENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOwotICAgICAgICBy
ZXR1cm4gbV9jb25zdGFudFR5cGVzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
OworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
CiAgICAgfQogCiAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3Ry
dWN0aW9uU3RyZWFtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmNwcAppbmRleCBhYjE3NDA2YWZiNzM0YTcwOGRmMTFkYmI2ODAxNTE4Yjc2
NjVmYjQyLi5lZTJiMzI3ZDJhZjU0NzE5Njg3OTY5YWMyNTJhODRjNzg4ZWY2ZTk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAg
LTI0Miw2ICsyNDIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBh
cnNlcjxMTEludEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKIAor
ICAgIC8vIFdlIG5lZWQgdGhpcyBmb3IgYXV0b2dlbmVyYXRlZCB0ZW1wbGF0ZXMgdXNlZCBieSBK
UyBieXRlY29kZXMuCisgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2ludHMoKSBjb25zdCB7IFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9CisKICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0
YWNrJiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCBlMmE0YzQyNTMzYTJmNDQ3ZGQzMjAy
MDViNzc3Yjc4YjAzOWMwYjY4Li4yMDY5YWQ4YjI0YjczNjlkY2Q5ZDVmMGM3ZjU4ZWVjOTJiMzVj
NzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3Bw
CkBAIC03NDMsNyArNzQzLDcgQEAgdm9pZCogSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtVG9K
U0V4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6RXhjZXAKICAgICAvLyBmb3Ig
ZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSBy
ZWdpc3RlciBiZWZvcmUganVtcGluZwogICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4g
SWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAotICAgIGJp
dHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICBiaXR3aXNl
X2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7
CiAgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDkyN2E2OTg0YTNiZTAx
NGNmM2VhN2Q2N2YwMzQ1ODRlZWJlYjYwY2UuLjU0ZjYzNmFjMWI1MDc1ZDFjNjY3YjM4YTkwMzEz
MjkwZDVmMzMzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
bG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0
aHMuY3BwCkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQg
ewogCiAjZGVmaW5lIFJFQUQodmlydHVhbFJlZ2lzdGVyKSBcCiAgICAgKHZpcnR1YWxSZWdpc3Rl
ci5pc0NvbnN0YW50KCkgXAotICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NLKCkt
PmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkpIFwKKyAgICAgICAgPyBKU1Zh
bHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIpKSBc
CiAgICAgICAgIDogY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcikpCiAKIGlubGluZSBib29s
IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUsIFdh
c206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206Okluc3RhbmNlKiBpbnN0YW5j
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDViZDdhYjQz
ZGUwNmY4OTNjMTY0ZDU5OWM2Y2M0ZjVmYjE3YjA1YmIuLjRlZTdmNTFlODI1ZWE2NmZiNzMxYmI3
MWVjODc3MGE3NDM2ZDJmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMzcyLDYgKzM3Miw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBT
aWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVz
c2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1
MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTMzOEVCQTQyM0FCMDREMTAwMzgyNjYyIC8qIEVudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudW1DbGFzc09wZXJhdG9yT3Zlcmxv
YWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNTM0RjI5MUVDMEUxMEUwMDE0
MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBh
dGggPSBNYWNoRXhjZXB0aW9ucy5kZWZzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW9yaXR5UXVldWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk1NCw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3Mjk4MTUxQTgyNUEwMDQx
MjNGRiAvKiBkdG9hLmggKi8sCiAJCQkJRkUwNUZBRTYxRkRCMjE0MzAwMDkzMjMwIC8qIER1bWJQ
dHJUcmFpdHMuaCAqLywKIAkJCQlBRDY1M0RBODIwMDZCNkMyMDBEODIwRDcgLyogRHVtYlZhbHVl
VHJhaXRzLmggKi8sCisJCQkJNTMzOEVCQTQyM0FCMDREMTAwMzgyNjYyIC8qIEVudW1DbGFzc09w
ZXJhdG9yT3ZlcmxvYWRzLmggKi8sCiAJCQkJMUFFQTg4RTExRDZCQkNGNDAwRTVBRDY0IC8qIEVu
dW1UcmFpdHMuaCAqLywKIAkJCQlBRDdDNDM0QTFERDJBNEE3MDAyNjg4OEIgLyogRXhwZWN0ZWQu
aCAqLywKIAkJCQlBOEE0NzI5RjE1MUE4MjVBMDA0MTIzRkYgLyogRXhwb3J0TWFjcm9zLmggKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0Jp
dG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYzMmMzZWZjMDAwYmQxOGU5ZTM2OTQ1MmZhZjFjMTAuLmI0
NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUzNjZhNzUwNTRkY2M2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCkBAIC01MSw2
ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90KSBj
b25zdDsKICAgICB2b2lkIGNsZWFyKHNpemVfdCk7CiAgICAgdm9pZCBjbGVhckFsbCgpOworICAg
IHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50NjRfdCBmaW5kUnVuT2ZaZXJvcyhzaXplX3QgcnVuTGVu
Z3RoKSBjb25zdDsKICAgICBzaXplX3QgY291bnQoc2l6ZV90IHN0YXJ0ID0gMCkgY29uc3Q7CiAg
ICAgc2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKQEAgLTEwMiw2ICsxMDMsMTIgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgICAgICB9CiAKKyAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yPShib29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2JpdG1hcC0+c2V0KG1faW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgQml0bWFwKiBtX2Jp
dG1hcDsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CkBAIC0xMTEsNiArMTE4LDkgQEAgcHVibGlj
OgogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGZp
bmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIGJpdG1hcFNpemUpOyB9CiAgICAgCisgICAgaXRlcmF0b3Igb3BlcmF0b3Jb
XShzaXplX3QpOworICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsK
KwogICAgIHZvaWQgbWVyZ2VBbmRDbGVhcihCaXRtYXAmKTsKICAgICB2b2lkIHNldEFuZENsZWFy
KEJpdG1hcCYpOwogICAgIApAQCAtMjI0LDYgKzIzNCwxMyBAQCBpbmxpbmUgdm9pZCBCaXRtYXA8
Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpjbGVhckFsbCgpCiAgICAgbWVtc2V0KGJpdHMuZGF0YSgp
LCAwLCBzaXplb2YoYml0cykpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjppbnZlcnQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAg
ICAgICAgYml0c1tpXSA9IH5iaXRzW2ldOworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6
ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBX
b3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0KHNpemVfdCBzdGFydCkgY29uc3QKIHsKQEAgLTQw
OSw2ICs0MjYsMTkgQEAgaW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
b3BlcmF0b3IhPShjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAogICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0ZXJhdG9yCit7CisgICAgQVNTRVJUKGluZGV4IDwgc2l6
ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGluZGV4KTsKK30KKwordGVtcGxhdGU8
c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IC0+
IGNvbnN0IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuICgqY29uc3RfY2FzdDxCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+Kj4odGhpcykpW2luZGV4XTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJp
dG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHVuc2lnbmVkIEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT46Omhhc2goKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRl
eCBkYWU0YTcxYjI4ZDEzMDQyNGMwYmQ3MzFiZTQxNjQzZjA1MmIzZWE5Li4yYTMyNjJjOWI4YjZk
NTZkZTNjYTRkYTAxNTY5NmQ3NTI3YWE0YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtNTYs
NiArNTYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgRHVtYlB0clRyYWl0cy5oCiAg
ICAgRHVtYlZhbHVlVHJhaXRzLmgKICAgICBFbnVtVHJhaXRzLmgKKyAgICBFbnVtQ2xhc3NPcGVy
YXRvck92ZXJsb2Fkcy5oCiAgICAgRXhwZWN0ZWQuaAogICAgIEV4cG9ydE1hY3Jvcy5oCiAgICAg
RmFzdEJpdFZlY3Rvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVy
YXRvck92ZXJsb2Fkcy5oIGIvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9h
ZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44ZmRlNzNmNWIyZDdkNTc0NGEzZDA4NTc3Y2M3MjQ4NzFlOTNlNjE5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVy
bG9hZHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisK
KyNkZWZpbmUgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwg
b3AsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBcCisgICAg
Y29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoZW51bU5hbWUgZW51bUVudHJ5LCBUIHZhbHVlKSAt
PiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9uKSwgVD4gXAorICAgIHsgXAorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KSBvcCB2YWx1ZTsgXAorICAgIH0g
XAorICAgICAgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBjb25zdGV4cHIgYXV0
byBvcGVyYXRvciBvcChUIHZhbHVlLCBlbnVtTmFtZSBlbnVtRW50cnkpIC0+IHN0ZDo6ZW5hYmxl
X2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisgICAgICAgIHJldHVybiB2
YWx1ZSBvcCBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpOyBcCisgICAgfSBcCisKKyNkZWZpbmUg
T1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5h
YmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dI
RU4oZW51bU5hbWUsICssIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRP
Ul9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAtLCBlbmFibGVFeHByZXNzaW9uKSBcCisg
ICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgKiwgZW5h
YmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dI
RU4oZW51bU5hbWUsIC8sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRP
Ul9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAlLCBlbmFibGVFeHByZXNzaW9uKSBcCisK
KyNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRF
R1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dI
RU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikKKworI2RlZmluZSBPVkVSTE9BRF9S
RUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFibGVF
eHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihl
bnVtTmFtZSwgPT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9G
T1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAhPSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIDwsIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCA8PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9S
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID4sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAg
ICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA+PSwgZW5h
YmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JT
X0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9BRF9SRUxBVElP
TkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2ludGVn
cmFsX3Y8VD4pCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaCBi
L1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAppbmRleCA4ODViN2IxNzNiMTFhNjAxYmUy
OWEzMzJhYjlkMmE0MTRkNTYyMTIyLi45MjA4OTVmYzQ5ZTcxYmY5NjY5MjIxYzEzMWExNzQyZmI3
NThmZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKKysrIGIv
U291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCkBAIC00NTAsNyArNDUwLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAg
ICBvcGVyYXRvciBib29sKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISgqbV93b3Jk
ICYgbV9tYXNrKTsKICAgICB9CkBAIC00NjQsNiArNDY0LDkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3J8PShi
b29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzID0gdmFsdWUgOiAqdGhpczsgfQorICAg
IEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yJj0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PyAqdGhpcyA6ICp0aGlzID0gdmFsdWU7IH0KKwogcHJpdmF0ZToKICAgICB1aW50MzJfdCogbV93
b3JkIHsgbnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fbWFzayB7IDAgfTsKQEAgLTUwOSw3ICs1
MTIsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAg
IH0KLSAgICAKKworICAgIC8vIEZvciB0ZW1wbGF0aW5nIGFzIFZlY3Rvcjxib29sPgorICAgIHZv
aWQgZmlsbChib29sIHZhbHVlKSB7IHZhbHVlID8gc2V0QWxsKCkgOiBjbGVhckFsbCgpOyB9Cisg
ICAgdm9pZCBncm93KHNpemVfdCBuZXdTaXplKSB7IHJlc2l6ZShuZXdTaXplKTsgfQorCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBl
bmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZl
Y3RvciBjaGFuZ2VkLgpAQCAtNTg5LDQgKzU5Niw1IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKK3VzaW5nIFdURjo6RmFzdEJpdFJlZmVyZW5jZTsKIHVzaW5nIFdURjo6RmFzdEJp
dFZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oIGIv
U291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKaW5kZXggNWE0ZTllZjQ0OTRlZjQ2Y2E5
ZTRlZWY3N2ZkY2MwZDYwZmFhNGExMS4uM2EzNWIzOGY0YzAyMzY3OWFjN2NmYzljNDY1NjA4NGEz
OTE0ODNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKKysr
IGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIFR5cGUgdW5hbGln
bmVkTG9hZChjb25zdCB2b2lkKiBwb2ludGVyKQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgVHlwZSByZXN1bHQgeyB9
OwogICAgIG1lbWNweSgmcmVzdWx0LCBwb2ludGVyLCBzaXplb2YoVHlwZSkpOwogICAgIHJldHVy
biByZXN1bHQ7CkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29u
c3Qgdm9pZCogcG9pbnRlcikKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgdm9pZCB1
bmFsaWduZWRTdG9yZSh2b2lkKiBwb2ludGVyLCBUeXBlIHZhbHVlKQogewotICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgbWVt
Y3B5KHBvaW50ZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEwZDhlNzVkN2VlZTJkNmFjNThl
MDY4ZWUxODI2NGQ0OGRhZjZkMTMuLmM5ODlkMDRiOTI4NTVkNTk2ZjljNzA0MTkwMTU0OTVjMjYx
YmVjYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMi0xOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8g
dGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZW1vdmUgcHJvYmUgT1NSIGV4aXQg
b3B0aW9uIHNpbmNlIHdlIGFyZSBub3QgdXNpbmcgdGhhdCBhbnltb3JlLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0czoKKwogMjAxOS0xMi0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBHVEsgZ2FyZGVuaW5nLiBNYXJrIFdl
YktpdC5Gb2N1c2VkRnJhbWVBZnRlckNyYXNoIGFzIHRpbWVvdXQKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCmluZGV4IGNkYmY5YzBkYmY5MzJlMjhjNmQ1YTgyMDhhMGE5OGNjZWU2YWVkOWYu
LjVmYmMyMDllZGU0ZDM0NWE0NjA1YjAwZDI3MTcyMDQ1ZDA0OTJjZTYgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4t
anNjLXN0cmVzcy10ZXN0cwpAQCAtNDk4LDcgKzQ5OCw2IEBAIE5PX0NKSVRfT1BUSU9OUyA9IFsi
LS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9
MTAwCiBCM08xX09QVElPTlMgPSBbIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MSJdCiBCM08wX09QVElP
TlMgPSBbIi0tbWF4REZHTm9kZXNJbkJhc2ljQmxvY2tGb3JQcmVjaXNlQW5hbHlzaXM9MTAwIiwg
Ii0tZGVmYXVsdEIzT3B0TGV2ZWw9MCJdCiBGVExfT1BUSU9OUyA9IFsiLS11c2VGVExKSVQ9dHJ1
ZSJdCi1QUk9CRV9PU1JfRVhJVF9PUFRJT04gPSBbIi0tdXNlUHJvYmVPU1JFeGl0PXRydWUiXQog
Rk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyItLWZvcmNlT1NSRXhpdFRvTExJbnQ9dHJ1ZSJd
CiAKIHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1YnkvanNjLXN0cmVzcy10ZXN0LXdyaXRlci0j
eyR0ZXN0V3JpdGVyfSIKQEAgLTcxMyw3ICs3MTIsNyBAQCBkZWYgcnVuRlRMTm9DSklUQjNPMCgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVRWYWxp
ZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZnRsLW5vLWNqaXQt
dmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11
c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwg
KihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09QVElPTiAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC12YWxp
ZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLXVzZVNh
bXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAqKEZU
TF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUTm9QdXRTdGFja1ZhbGlkYXRlKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MjksNyArNzI4LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVE9T
UlZhbGlkYXRpb24oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVu
REZHRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImRmZy1lYWdl
ciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBQUk9C
RV9PU1JfRVhJVF9PUFRJT04gKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05T
ICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2Vy
Tm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2M1YWY0NGJiM2M0
ZmNjMzc5OGZhZDQzNmNjYjFkODgzYjUxOWZhMS4uMWMxMDAwYjI5NjM4Yzk1NGM5ODJhMDU4YTNj
ZDgzMjMyZjNiNmMxMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxOS0xMi0xOCAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxl
IHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91
bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAgICAgICAgKHRl
c3QpOgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAgICAqIHN0cmVzcy9h
cHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzOiBBZGRlZC4KKyAgICAgICAg
KGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAgICAgICAgKHRlc3QpOgor
ICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAgICAqIHN0cmVzcy9sb2FkLXZh
cmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzOgorICAgICAgICAoY2hl
Y2tFcXVhbCk6CisgICAgICAgICogc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZm
ZXJlbnQtYXJndW1lbnQtY291bnQuanM6CisKIDIwMTktMTItMTMgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgSlNGaXhlZEFycmF5LCBh
bmQgdXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5IGluc3RlYWQKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1v
Y2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0
LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZjE1
YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJjNTBhYzBhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2Vw
dGlvbnMtb2NjYXNpb25hbGx5LmpzCkBAIC0wLDAgKzEsMzYgQEAKKworbGV0IGN1cnJlbnRBcmdD
b3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRB
cmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxs
ZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgewor
ICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOwor
CitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9
IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsKKyAgICBpZiAobGVuZ3RoQ2FsbHMrKyAlIDEw
ID09IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigidGhyb3dpbmcgYW4gZXhjZXB0aW9uIGlu
IGxlbmd0aCIpOworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQKK30gfQorZm9yIChsZXQgaSA9
IDA7IGkgPCAxZTY7IGkrKykgeworICAgIHRyeSB7CisgICAgICAgIHRlc3QoYXJyYXkpOworICAg
IH0gY2F0Y2ggeyB9Cit9CisKK2N1cnJlbnRBcmdDb3VudCA9IDEwMDsKK2xlbmd0aENhbGxzID0g
MDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVuZ3RoQ2FsbHMgIT09IDEpCisgICAgdGhyb3cgbmV3
IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9z
ci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1v
c3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiZWU0NWNlMWM3
MjgzNjUzODI3MDVkOTlkMzAxYWU2YmNiOGQ4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCkBAIC0wLDAg
KzEsMzEgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291
bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVk
QXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30K
KworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFy
cmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVu
dEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsg
bGVuZ3RoQ2FsbHMrKzsgcmV0dXJuIGN1cnJlbnRBcmdDb3VudCB9IH0KK2ZvciAobGV0IGkgPSAw
OyBpIDwgMWU1OyBpKyspCisgICAgdGVzdChhcnJheSk7CisKKwordGVzdChhcnJheSk7CitjdXJy
ZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYg
KGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwt
YW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5s
aW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwppbmRleCAzNjE4ZjhjYmIzZDMyMTEzNDBlNmEw
NzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBjZjQ5ZDg4ZTNmZmU5MTJiMWUxNmFhNDdkNTBm
OTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVk
LWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJn
cy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKQEAgLTE4LDggKzE4LDggQEAg
ZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOwogICAgIGlmIChhLmIgIT0gYi5i
KQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJz
dXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQotICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAi
IHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMubGVuZ3RoICE9PSBiLmMubGVuZ3RoKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBh
LmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5sZW5ndGg7CiAgICAgZm9yICh2YXIgaSA9IGEu
Yy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCiAgICAgICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkg
KyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3Ry
ZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMg
Yi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3Vt
ZW50LWNvdW50LmpzCmluZGV4IDA0N2ZiMDFmODgzMTQ1Y2M3NTU0ZjVjZjcwMWE3MDc0ZjI2N2Rl
ZWUuLjUzZDc1MmRlY2Q3ZDBmMzFiYzJmMWQ3ODk5MWM2OTEwMWYwOGJmZjMgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1l
bnQtY291bnQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRo
LWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwpAQCAtMTgsOCArMTgsOCBAQCBub0lubGluZShi
YXIpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9
IGZvbyg0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0gICAgICAgIHRocm93ICJXcm9u
ZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0OworICAgICAgICB0
aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJl
c3VsdCk7CiAgICAgcmVzdWx0ID0gYmFyKDQwLCAyKTsKICAgICBpZiAocmVzdWx0ICE9PSA0MikK
LSAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBmb3IgYmFyLCBleHBlY3RlZCA0MiwgZ290ICIg
KyByZXN1bHQ7CisgICAgICAgIHRocm93IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIGJhciwgZXhw
ZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386057</attachid>
            <date>2019-12-18 20:29:44 -0800</date>
            <delta_ts>2019-12-18 21:47:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218202927.patch</filename>
            <type>text/plain</type>
            <size>668560</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi43ZDIwZTg0NjNhMWZkZWQ4
NGE2NDE1MTk4ODNhNjY1YWY0ZjEwM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MTYgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAg
IChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFt
ZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0
ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6CisgICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMp
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlw
cGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFy
Z3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3Qp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAg
Y29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNr
cG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0
cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1
ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmly
dHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZp
cnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhG
b3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVu
ZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bVRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1l
ZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpp
c1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3Rlcklz
TGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5k
SXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgor
ICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAg
KEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxl
S2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5j
cHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5
T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVt
aXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fs
cyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjps
b2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdEZvcik6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBj
b25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRG
b3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBj
b25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9y
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9jYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJh
bmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4
dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0No
ZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhh
c0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50
UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29u
c3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9j
YWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVn
aXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6Omlz
QXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3Rh
bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRl
eCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVj
a3BvaW50cyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAg
KEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhl
YXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFz
T3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RI
ZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9H
ZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxp
dGllcy5oOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5
TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRo
TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAg
ICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qmxv
Y2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJn
dW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpmbHVzaEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZs
dXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0
TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAg
ICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQ
U1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRp
bmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1Jl
dGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQ
aGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNh
bm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6
Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVu
ZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAg
ICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0
YTo6YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5p
cXVlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENh
bGxTaXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2Vz
R0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxs
S2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5kcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3Vic3Rp
dHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFj
ZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjplbWl0U3RvcmVD
YWxsU2l0ZUluZGV4KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRsZUJsb2NrRm9yVHJ5Q2F0
Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjphcmd1
bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0xv
YWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bG9jYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9jYWwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZH
OjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpqc1ZhbHVlRm9y
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGb3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnNhdmVDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OmNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OmNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OmVtaXRSZXN0b3JlQXJndW1lbnRzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpwcmludE9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Lmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmlzRXhpdGluZ1RvQ2hlY2twb2ludEhhbmRsZXIgY29uc3QpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJh
bWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAg
ICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHT3BJbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbUlu
c2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpy
ZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6
d3JpdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
OjpkZWYpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
OjpjYWxsSWZBcHByb3ByaWF0ZSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252
ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJy
ZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3Vt
ZW50VHlwZXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFy
YXJnc0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVG
b3J3YXJkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6CisgICAgICAgICogZGZnL0RG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmRpc2Fi
bGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9y
U2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmxvY2FsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxl
RXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0
cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6YXBwZW5k
QW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5
SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2spOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxlZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVW
YXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTG9nU2hhZG93
Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Z2V0QXJndW1lbnRzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcik6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICog
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVy
aWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6
CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgICogZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAg
ICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9y
L09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBp
bnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmNhbGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNh
ZmVDYWxsU2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5z
YWZlQ2FsbFNpdGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3Vy
cmVudFZQQyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29k
ZU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3VycmVudFZQQyBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGlu
dGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpDYWxs
U2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3BlcmF0b3IgYm9vbCBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRpc3Bv
c2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1
bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmFkZHJlc3NPZkNv
ZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6Om9mZnNldEZvcik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBDKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6cik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjb2Rl
QmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNvZGVCbG9jayBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAqIGludGVycHJldGVyL0NoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFyZ3MpOgorICAgICAg
ICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFyYXJnc0ZyYW1lKToK
KyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAgIChK
U0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNr
VmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVBy
b2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0VGFnVG9DYWxs
RnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dGFnRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgor
ICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5oOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rl
Yyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Jp
dG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRN
YXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICog
aml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpT
Qzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJ
bnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91
YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5pdFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRQYXlsb2Fk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZERv
dWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUlu
dDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVEb3VibGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVs
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
dGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRj
aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRO
ZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAq
IGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldENs
b3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0
Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVs
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBq
aXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RK
U0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMik6Cisg
ICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChK
U0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAg
ICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcik6
CisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRo
dW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWREb3VibGVB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRDZWxsQXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpsb2FkSW50MzJBcmd1
bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6
OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2Fs
bCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpM
TEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQp
OgorICAgICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVk
X2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4
aXQpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJy
b3IpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3QuaDoKKyAgICAgICAgKEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXI6OmZpbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpkdW1wUmVnaXN0ZXIpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6Cisg
ICAgICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmg6CisgICAgICAgICogcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAg
ICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxsUmVsZWFzZUxvY2spOgorICAg
ICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3Bl
ZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlND
OjpWTTo6aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogdG9vbHMv
Vk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVy
cyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6OmdldENvbnN0YW50VHlwZSBjb25zdCk6Cisg
ICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6c2V0VXNlc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uV2Fz
bVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisKIDIw
MTktMTItMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHTElCXSBqc2NfY29udGV4dF9ldmFsdWF0ZV9pbl9vYmplY3Qgc2hvdWxkIHRha2Ug
dGhlIEFQSSBsb2NrIGJlZm9yZSBjYWxsaW5nIHNldEdsb2JhbFNjb3BlRXh0ZW5zaW9uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4
IDIxNGJkMDU0YWE0N2IwYjVmZjQzNGUzODBmMmEzNGUxOWU3MzVkYmUuLjdiY2RlOTQ5MWFhN2E1
NWI5ZjBlMjg5MmQwN2NiMDU1YWQ2NDU2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMTIt
MTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZH
L0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAg
IChXVEY6OldvcmRUeXBlPjo6aW52ZXJ0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVy
YXRvcik6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IgY29uc3QgY29uc3QpOgor
ICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRW51bUNsYXNzT3Bl
cmF0b3JPdmVybG9hZHMuaDogQWRkZWQuCisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoK
KyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV1RG
OjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvciY9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZl
Y3Rvcjo6ZmlsbCk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6Omdyb3cpOgorICAgICAg
ICAqIHd0Zi9VbmFsaWduZWRBY2Nlc3MuaDoKKyAgICAgICAgKFdURjo6dW5hbGlnbmVkTG9hZCk6
CisgICAgICAgIChXVEY6OnVuYWxpZ25lZFN0b3JlKToKKwogMjAxOS0xMi0xNiAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAzZGNjZTBmODFlZDQ0Yzc0ZDYwZWE1YTBjNjI4ZDhiZmFkOTMzMDhmLi5jY2VmMWFm
ZDQ1ZGExOTMwMWM4NmE5Zjc1NzIyYmFkYTM3YzgzMTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC01MjUsNiArNTI1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmgKICAgICBieXRlY29kZS9PcGNvZGVTaXplLmgKKyAg
ICBieXRlY29kZS9PcGVyYW5kcy5oCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAog
ICAgIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5oCiAgICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQu
eGNmaWxlbGlzdAppbmRleCBmOGMxYjRhZTU1NmI1MzRjMmFiMTAxYWMzOTBiYTcxMWI0NWNiYWVh
Li45ZWFkNjUzZmFhYWIxODkzZWI5MmRkMDJlOTc1Nzk2NmRmYTk5YWM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApA
QCAtNjQsNiArNjQsNyBAQCAkKFBST0pFQ1RfRElSKS9kaXNhc3NlbWJsZXIvdWRpczg2L29wdGFi
bGUueG1sCiAkKFBST0pFQ1RfRElSKS9kaXNhc3NlbWJsZXIvdWRpczg2L3VkX2l0YWIucHkKICQo
UFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bcmd1bWVudC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJh
dG9yL0Fzc2VydGlvbi5yYgorJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJi
CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvRFNMLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0
b3IvRml0cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0dlbmVyYXRlZEZpbGUucmIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGJjZTViYWNlZGMwNWMzZGMwZWE4YjA0MzM0
NmQxNTFkMGRlZjQ0MS4uYjI2NGY0ZWRkMzk2MjY5MDVlMWIyMmE4MmUxZTQxNTIzNTU2NzRkYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkzMSw2ICs5MzEsOCBAQAogCQk1MzMz
QkJEQjIxMTBGN0QyMDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxQjE0MzI4QkI5
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi87IH07CiAJCTUzMzNCQkRD
MjExMEY3RDkwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcg
LyogREZHU3BlY3VsYXRpdmVKSVQuY3BwICovOyB9OwogCQk1MzMzQkJERDIxMTBGN0UxMDA3NjE4
RUMgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEY0QzE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAgKi87IH07CisJCTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTMzOEVCQTMyM0FCMDRCODAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmls
aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzM4
RUJBMjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLzsgfTsK
IAkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzcxMURB
QzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi87IH07CiAJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8q
IEpTUnVuTG9vcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VUaW1lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzQxRTcw
RERFQzAwRjEyQUMxIC8qIFByb21pc2VUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTk3LDYgKzM1OTksOCBAQAogCQk1MzE4MDQ1RDIy
RUFBRjBGMDA0QTczNDIgLyogQjNFeHRyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNFeHRyYWN0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNFeHRyYWN0VmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFw
aS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0YXBpLmNwcDsgcGF0aCA9IEFQSS90ZXN0cy90
ZXN0YXBpLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNjMxQjMyMTg3NzdB
NTAwN0I4MTkxIC8qIEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9ICJzb3VyY2Vj
b2RlLm1vZHVsZS1tYXAiOyBwYXRoID0gSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5
Lmg7IHBhdGggPSBmdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hl
Y2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21C
b3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcg
LyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVj
a1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjExLDYgKzM2MTUsOSBA
QAogCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2QTcgLyogVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gVHlwZWRBcnJheUNvbnN0
cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRDNDU3QjFCQzcyNDEx
MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzNEQ5QkY4MjM2M0M1NUQwMDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3Rv
dHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFNldEl0ZXJh
dG9yUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGOTIz
NjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gSXRlcmF0b3JIZWxwZXJzLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzREOUJGQTIzNjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90
b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBNYXBJdGVy
YXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEQx
RTRENEIxNjAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRF
MDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0RTAzNTMxRTUzQkQyOTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUyMSw2ICs1NTI4
LDcgQEAKIAkJCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUu
aCAqLywKIAkJCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3Bw
ICovLAogCQkJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICov
LAorCQkJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0
eS5oICovLAogCQkJCTBGMjVGMUFBMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
Y3BwICovLAogCQkJCTBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
aCAqLywKIAkJCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5
LmNwcCAqLywKQEAgLTU5NDcsNiArNTk1NSw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBD
YWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENh
bGxGcmFtZUlubGluZXMuaCAqLywKKwkJCQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IENMb29wU3RhY2suaCAqLywKIAkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BT
dGFja0lubGluZXMuaCAqLywKQEAgLTg1NzYsNyArODU4NSw5IEBACiAJCQkJQTUyNzA0ODUxRDAy
N0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9wZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJ
CQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8sCisJCQkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAq
LywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMg
Ki8sCkBAIC04NTg3LDYgKzg1OTgsNyBAQAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAv
KiBSZWZsZWN0T2JqZWN0LmpzICovLAogCQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBS
ZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJCQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJl
Z0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQw
MDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4
NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEw
MDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIx
MDA5REIxRUYgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MDg3LDYgKzkw
OTksNyBAQAogCQkJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYwMzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQy
NjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFB
OTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTk0MzIsNiArOTQ0NSw3IEBACiAJCQkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzJBMTg3
REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzM4RUJBMzIzQUIwNEI4MDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExT
bG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjJFNUE3MURB
NjQ0QTgwMDZFNzcwOSAvKiBGVExTbmlwcGV0UGFyYW1zLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZjZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMuLjY4
ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApA
QCAtMjM5LDEzICsyMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BP
SU5URVIobV92YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBl
eHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0gICAg
ICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQdHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7
Ci0gICAgfQotCiAgICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1Byb2JlRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVG
cmFtZS5oCmluZGV4IGNhYjM2OGRjN2NkMGYzYjRmODViNzY5Yjc4OGQ0MGQ2M2VhNTYzNzcuLjQy
MjlhMGQwOTk3YTRiMGY1ODNhY2FlYTNhMGYxNjU3MjlmNDZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5oCkBAIC00NiwxNCArNDYsMTQgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZ2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJn
dW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQgPSBKU1ZhbHVlPgotICAgIFQgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBUIG9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIGdldDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgot
ICAgIFQgb3BlcmFuZChpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCkKKyAgICBUIG9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCiAgICAgewotICAg
ICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGdl
dDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBzZXQ8VD4oQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBUIHZhbHVlKQorICAgIHZv
aWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgVCB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKICAgICB9CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQsIFQgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0PFQ+KHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpICsgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldDxUPihvcGVyYW5kLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4
IDM1ZDAxNzU2ZDUzMmE3MWVjMDdmZTQwM2VmN2E1MjUwYjVmYzZmNjEuLjQxYmM5NjFhMTUzMDg1
ZmJhODU1MDY1YzM5YjZjNmRhNmZiMmE4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgK
QEAgLTI2MywyMCArMjYzLDIwIEBAIGlubGluZSB2b2lkIGNoZWNrRG9lc05vdFVzZUluc3RydWN0
aW9uKENvbXBpbGF0aW9uJiBjb21waWxhdGlvbiwgY29uc3QgY2hhciogdGV4CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Ci1zdHJ1Y3QgT3BlcmFuZCB7CitzdHJ1Y3QgQjNPcGVyYW5kIHsK
ICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgIFR5cGUgdmFsdWU7CiB9OwogCi10eXBlZGVmIE9w
ZXJhbmQ8aW50NjRfdD4gSW50NjRPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDMyX3Q+IElu
dDMyT3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Ci10eXBl
ZGVmIE9wZXJhbmQ8aW50OF90PiBJbnQ4T3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDY0
X3Q+IEludDY0T3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFu
ZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKK3R5cGVkZWYgQjNP
cGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7CiAKLSNkZWZpbmUgTUFLRV9PUEVSQU5EKHZhbHVl
KSBPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KKyNkZWZpbmUgTUFL
RV9PUEVSQU5EKHZhbHVlKSBCM09wZXJhbmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFs
dWUgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci12b2lkIHBvcHVsYXRlV2l0aElu
dGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKK3Zv
aWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5
cGU+PiYgb3BlcmFuZHMpCiB7CiAgICAgb3BlcmFuZHMuYXBwZW5kKHsgIjAuIiwgc3RhdGljX2Nh
c3Q8RmxvYXRUeXBlPigwLikgfSk7CiAgICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0wLiIsIHN0YXRp
Y19jYXN0PEZsb2F0VHlwZT4oLTAuKSB9KTsKQEAgLTMwMiw5ICszMDIsOSBAQCB2b2lkIHBvcHVs
YXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVy
YW5kcykKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotVmVjdG9yPE9wZXJhbmQ8
RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2ludE9wZXJhbmRzKCkKK1ZlY3RvcjxCM09wZXJhbmQ8Rmxv
YXRUeXBlPj4gZmxvYXRpbmdQb2ludE9wZXJhbmRzKCkKIHsKLSAgICBWZWN0b3I8T3BlcmFuZDxG
bG9hdFR5cGU+PiBvcGVyYW5kczsKKyAgICBWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IG9w
ZXJhbmRzOwogICAgIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKG9wZXJhbmRzKTsKICAg
ICByZXR1cm4gb3BlcmFuZHM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCmluZGV4IDYwMDYyZjlkNDgwNmY3OTIzYmQzOTNkM2E3NTkyZWI4YjUw
NTg4MzguLmVhYmRjODEwYWI0ZGJkMjYzZjQ4YjVhZmZiMDQ3NGIyNDU4MDc1NWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTE1MDgsNyAr
MTUwOCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSYgc3RhdGUpCiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxp
bmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKIAogICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUg
PT0gU2V0dGVyKSB7CiAgICAgICAgICAgICBhdXRvJiBhY2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlPigpOwpAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAg
ICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9y
RXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwog
ICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKaW5kZXggYTE3NGUyNDczZjc1MzBj
Yzc3NzE1M2M2M2IxMzEzMzBlZTU4ZjU4OC4uNDUyYzBlZjFiZTMwYjIxZTYzNDgxZGI3NTAyODhj
ZDMyYTIwMDg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2lu
YWwoKS5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOwogCiAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5kZXgg
NjA1OGZiMDYyMDM5NDZjNGNkNTZlZjZhOTgzODc5ZDJkNmM4MWZiNi4uODM2NTExNWY0MjE3OTFh
NWM2NjQ4M2E1YTc5MDVjYWU1YzBlZTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBsb2NhdGlvbiwKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUo
cmVnLm9mZnNldCgpKS5kYXRhKCkpOworICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5h
bWUocmVnKS5kYXRhKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04Mywx
MiArODMsMTIgQEAgdGVtcGxhdGUgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShH
ZW5lcmljQm91bmRMYWJlbDxXYXNtOjpHZW5lcmF0b3JUcmEKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBl
cjxCbG9jaz46OnJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyIHIpIGNvbnN0CiB7Ci0gICAg
aWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQorICAgIGlmIChyLmlzQ29uc3RhbnQoKSkK
ICAgICAgICAgcmV0dXJuIGNvbnN0YW50TmFtZShyKTsKIAotICAgIHJldHVybiB0b0NTdHJpbmco
VmlydHVhbFJlZ2lzdGVyKHIpKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHIpOwogfQogCiB0ZW1w
bGF0ZSA8Y2xhc3MgQmxvY2s+CkBAIC05OCwxMCArOTgsMTAgQEAgaW50IEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPjo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9m
ZnNldCkKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKIHsK
LSAgICBhdXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQoaW5kZXgpOwotICAgIHJldHVy
biB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKKyAg
ICBhdXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICByZXR1cm4gdG9D
U3RyaW5nKHZhbHVlLCAiKCIsIHJlZywgIikiKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygp
CiAgICAgfQogfQogCi1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUoaW50IGlu
ZGV4KSBjb25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKFZpcnR1YWxS
ZWdpc3RlciBpbmRleCkgY29uc3QKIHsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0
aGlzLT5ibG9jaygpOwogICAgIGF1dG8gdmFsdWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0
Q29uc3RhbnRUeXBlKGluZGV4KSwgYmxvY2stPmdldENvbnN0YW50KGluZGV4KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCmluZGV4IDBkNzE2
NzUwMzk0YjE1ZDRlYjVlODdjNWE4ODI1MTA3NWVmZTAzZWUuLmVkYjExMjkyMWFmNzUzZTYzZDg2
MTM3MmZiZGUwZWVmODlmY2ExNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGR1bXBWYWx1ZShUIHYpIHsgbV9vdXQucHJpbnQodik7IH0KIAogcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBD
U3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpIGNv
bnN0ID0gMDsKIAogICAgIEJ5dGVjb2RlRHVtcGVyQmFzZShQcmludFN0cmVhbSYgb3V0KQpAQCAt
OTEsMTEgKzkxLDExIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZHVtcEJ5dGVjb2RlKGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCi0gICAg
Q1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJpbmcg
cmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IG91
dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpIGNvbnN0
IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1
YWxSZWdpc3RlcikgY29uc3Q7CiAKICAgICBCbG9jayogbV9ibG9jazsKIH07CkBAIC0xMzUsNyAr
MTM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9u
Q29kZUJsb2NrPjo6Qnl0ZWNvZGVEdW1wZXI7CiAKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsK
LSAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAg
IENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgQ1N0cmluZyBmb3JtYXRDb25zdGFudChUeXBlLCB1aW50NjRfdCkgY29uc3Q7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5j
cHAKaW5kZXggMTVkNjFiYTkwNDAxYTcxMTdkYzBmOWYyNmUxOTEzN2ViMmMzMTU5Yi4uYTJjMWY0
MTViMTk3ZDQ2YmQ2ODE0YTIwMTExYzg3YzUwODcyMjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcApAQCAtMjUsNiArMjUsNyBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorCiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzIsNiArMzMs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgQnl0ZWNvZGVJbmRleDo6ZHVtcChXVEY6OlByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCJiYyMiLCBvZmZzZXQoKSk7Cisg
ICAgaWYgKGNoZWNrcG9pbnQoKSkKKyAgICAgICAgb3V0LnByaW50KCJjcCMiLCBjaGVja3BvaW50
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmluZGV4IDUyOTVjMjliMTIyODEzMWY3MmFjMjA3MzFj
MWQzYmNlOTM1MTU4ZGYuLjEwZmJhNDQwNThlYzlkZmVkMjU0ODA5YTZkNzgzMzdkMDExYTRiNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0
cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogY2xh
c3MgUHJpbnRTdHJlYW07CkBAIC0zNywyNCArMzgsMzMgQEAgY2xhc3MgQnl0ZWNvZGVJbmRleCB7
CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUlu
ZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChk
ZWxldGVkVmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZh
bHVlKCkuYXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4
KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KQotICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXQ7IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVp
bnQ4X3QgY2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNv
ZGVPZmZzZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMg
PSA0OworICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMp
LCAibnVtYmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2lu
dHMgLSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0g
V1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50
MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNo
aWZ0OyB9CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRC
aXRzICYgY2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJl
dHVybiBtX3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBXVEY6OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsg
cmV0dXJuIFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2Rl
SW5kZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEp
OyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0
aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9t
Qml0cyh1aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBp
bnZhbGlkT2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsg
fQogICAgIGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRv
ciAhPShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KIApAQCAtNjksMTMgKzc5LDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlk
T2Zmc2V0IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRl
eCwgdWludDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGlu
dmFsaWRPZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNr
KHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NF
UlQoY2hlY2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNv
ZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29k
ZUluZGV4KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBj
aGVja3BvaW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9t
Qml0cyh1aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJl
c3VsdC5tX29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QucmIKaW5kZXggNzFiZjZiMDZjYzdlZjQ5MGY3YjM2YWEzZTIwMDY1MTc3
ODdhZmZhNC4uNjgwY2RkOTE4NjBmMzAxYWYxOGRkZWJmYTIyNjRmYTBlN2Q3MjBiZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3
ICs1OSw3IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2Zp
bGUsCi0gICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkJpbmFyeUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzkxLDYgKzc5MSwx
MyBAQCBvcCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJv
ZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAg
fSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZCwKKyAgICB9LAorICAg
IGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAg
ICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKQEAgLTgw
NSw2ICs4MTIsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAg
ICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50OiB1bnNpZ25l
ZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3Vu
dDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cywKQEAgLTg0NSw2ICs4NTksMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJh
cmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7Cisg
ICAgICAgIGFyZ0NvdW50OiB1bnNpZ25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAg
ICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAog
ICAgIH0KIAogb3AgOnJldCwKQEAgLTk5Miw3ICsxMDEzLDcgQEAgb3AgOmNhdGNoLAogICAgICAg
ICB0aHJvd25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsK
LSAgICAgICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAg
IGJ1ZmZlcjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQog
CiBvcCA6dGhyb3csCkBAIC0xMjM4LDYgKzEyNTksOCBAQCBvcCA6bGxpbnRfbmF0aXZlX2NhbGxf
dHJhbXBvbGluZQogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxs
aW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lCiBvcCA6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24KIG9wIDpvcF9jYWxsX3JldHVybl9s
b2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAKaW5kZXggOTE4ZTFkMjEzNGE2MGI2Y2ZmMTAxMTQzYWI1NTQzM2I4YjQzZjQ0MC4uN2Rh
MjJjMmQyY2M3YmZjMTFkMWY4ZjhkN2RiZTZkM2M5MTZjZTViYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAKQEAgLTIwMSw0ICsyMDEsMzkgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6
OmR1bXBSZXN1bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIH0KIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgRW51bVR5cGUxLCB0eXBlbmFtZSBFbnVtVHlwZTI+Citjb25zdGV4cHIgYm9vbCBl
bnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBlMSB2MSwgRW51bVR5cGUyIHYyKQorewor
ICAgIHVzaW5nIEludFR5cGUxID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RW51bVR5
cGUxPjo6dHlwZTsKKyAgICB1c2luZyBJbnRUeXBlMiA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWlu
Z190eXBlPEVudW1UeXBlMj46OnR5cGU7CisgICAgaWYgY29uc3RleHByIChzaXplb2YoSW50VHlw
ZTEpID4gc2l6ZW9mKEludFR5cGUyKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5
cGUxPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTE+KHYyKTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUy
Pih2Mik7Cit9CisKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JD
aGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCit7CisgICAgQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiByZXN1bHQ7Cisg
ICAgdWludDhfdCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7CisKKyAg
ICBpZiAoIWNoZWNrcG9pbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzd2l0Y2gg
KGNvZGVCbG9jay5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+b3Bjb2RlSUQoKSkg
eworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFy
Z3M6CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9w
VGFpbENhbGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChP
cENhbGxWYXJhcmdzOjphcmdDb3VudCwgT3BUYWlsQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJh
cmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVl
c0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudCwgT3BDb25zdHJ1Y3RWYXJh
cmdzOjphcmdDb3VudCkpOworICAgICAgICBpZiAoY2hlY2twb2ludCA9PSBPcENhbGxWYXJhcmdz
OjptYWtlQ2FsbCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQoT3BDYWxsVmFyYXJnczo6YXJnQ291
bnQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggNzM3OWIzYzliYzcyMzI1
OTEwOWM2MWU3YWRhNTMzZDllN2QyZjJjOS4uM2U1ZWRjMGE2OGFlNDRkZjY1MTVjZGJmZDRiNDI3
ZWY2OWVlZjE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkJ5dGVjb2RlQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05Nyw2ICs5OCw4IEBA
IHByaXZhdGU6CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogfTsKIAorQml0bWFwPG1heE51
bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2Nr
JiwgQnl0ZWNvZGVJbmRleCk7CisKIGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50
IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUo
Y29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVy
YW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggM2QxMmUxOTVjNjk5ZWZiZjk2MzZhMmI5NzRl
Nzk0NGNkYWVkNzJjMC4uZGU2Y2E4ZGM5MTA5Yjc4OTY3ZjEwNTUwMDlkYTMwZTg5OTg0ODI4MiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0zMywyMiArMzMsMjIgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9w
ZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUoVmlydHVhbFJl
Z2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gIVZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0xv
Y2FsKCk7CisgICAgcmV0dXJuICFyZWcuaXNMb2NhbCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGlu
dCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2
ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgdW5zaWduZWQgbG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgp
OworICAgIHVuc2lnbmVkIGxvY2FsID0gcmVnLnRvTG9jYWwoKTsKICAgICBpZiAobG9jYWwgPj0g
b3V0Lm51bUJpdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBvdXRbbG9j
YWxdOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3Im
IG91dCwgaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoY29u
c3QgRmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKIHsKLSAgICBy
ZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2
ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOwogfQogCiBpbmxpbmUgYm9vbCBpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggODY5ZjUzZjNmY2QwZDA3NjEwOWExZmRh
NWY5NDdmNTIwZmU1MTRkZC4uNjAyZGQ1MjVhMWJkMmMxNjNkYjhjZjEzYjM1Y2M2MzZlYTFlYjVj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAg
LTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJC
eXRlY29kZVVzZURlZi5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAi
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVz
LmgiCkBAIC00MDcsNyArNDA4LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7
CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmco
bG9ja2VyKTsKICAgICAgICAgfQotICAgICAgICByZXBsYWNlQ29uc3RhbnQodW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldCgpLCBjbG9uZWRTeW1ib2xUYWJsZSk7CisgICAgICAgIHJlcGxhY2VDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSwgY2xvbmVk
U3ltYm9sVGFibGUpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlID0gbV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aFR5cGVQcm9maWxl
ck9wY29kZXMoKSB8fCBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoQ29udHJvbEZsb3dQ
cm9maWxlck9wY29kZXMoKTsKQEAgLTY0MSw3ICs2NDIsNyBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGluawogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
ID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hp
bmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8gaXMgbm90IGFub255bW91cy4KICAg
ICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxl
Kj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xU
YWJsZSgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwog
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxl
LT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+
ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CkBAIC03MDksOCArNzEwLDcgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZlZDogewotICAg
ICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV9zeW1ib2xUYWJs
ZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpOwotICAgICAgICAgICAgICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50
KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJv
bFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV9pZGVudGlmaWVyKTsK
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5t
X2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0
ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJl
ZCBmb3IgcHJvZmlsaW5nIHlldC4KQEAgLTEwODYsNiArMTA4NiwxNSBAQCBzdGF0aWMgYm9vbCBz
aG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpbwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQorCitCeXRlY29kZUluZGV4IENv
ZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCBleGl0SW5kZXgpIGNv
bnN0Cit7CisgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgY29uc3Qg
YXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChleGl0SW5kZXgpOworICAgICAg
ICBleGl0SW5kZXggPSBpbnN0cnVjdGlvbi5uZXh0KCkuaW5kZXgoKTsKKyAgICB9CisgICAgcmV0
dXJuIGV4aXRJbmRleDsKK30KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBDb2Rl
QmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgxMSwxMCArMTgyMCwxMCBAQCB2b2lkIENvZGVCbG9j
azo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhjb25z
dCBPcENhdGNoJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1ldGVycygpOyArK2kp
CiAgICAgICAgIGxpdmVPcGVyYW5kcy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CisgICAgYXV0byBwcm9maWxlcyA9IG1h
a2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyPihsaXZlT3BlcmFu
ZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChwcm9maWxlcy0+bV9zaXplID09IGxpdmVP
cGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlcy0+
bV9zaXplOyArK2kpCi0gICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJh
bmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0KCk7CisgICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZl
ci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV07CiAKICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3MTMsNyArMjcyMiw3IEBAIHZvaWQgQ29kZUJsb2Nr
Ojp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWdu
ZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7
CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJv
ZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgICAgICBwcm9maWxlQnVja2V0LT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAg
ICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKaW5kZXggMTQ2NzQyZWIwNDhhMWQxNjZmMDE3OTFkNTZjZTU4MTUwZjUz
NDI2Ni4uMjUwNjcyNjNlMjQ3NmRhMWIyZGY2ZDVkMmY4ZTgwNDMxNWYzMDNjMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMTYxLDYgKzE2MSw3IEBA
IHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1D
YWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1W
YXJzOyB9CisgICAgaW50IG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAgICBpbnQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CkBAIC0yMjksMjAgKzIzMCwy
MCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNv
bnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUg
Ym9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKKyAgICBpbmxpbmUgYm9vbCBpc0tu
b3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICBpZiAo
aW5kZXggPT0gdGhpc1JlZ2lzdGVyKCkub2Zmc2V0KCkgJiYgIWlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICBpZiAocmVnID09IHRoaXNSZWdpc3RlcigpICYmICFpc1N0cmljdE1vZGUoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgp
OworICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXRD
b25zdGFudChyZWcpLmlzQ2VsbCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KGludCBpbmRl
eCkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKKyAg
ICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBtX251bVZhcnM7CiAgICAgfQogCiAgICAgSGFu
ZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVk
SGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CkBAIC01ODEsMTAgKzU4Miw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4
IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltyZWcudG9Db25zdGFudEluZGV4KCldOyB9
CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0
dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5j
dGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNzc0LDYg
Kzc3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFz
ZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0KTsKICAgICAKKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2RlSW5kZXgpIGNvbnN0OwogICAg
IHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRl
cjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsgfQpA
QCAtODc0LDcgKzg3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOworICAgICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAogICAgICAgICBEaXJlY3RFdmFsQ29kZUNhY2hlIG1f
ZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9OwpAQCAtOTQxLDEwICs5NDIsMTAgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFy
cmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0
YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAotICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KGlu
dCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHJlcGxhY2VDb25zdGFudChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkp
OwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOworICAgICAgICBBU1NFUlQocmVnLmlz
Q29uc3RhbnQoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0NvbnN0YW50SW5kZXgoKSkg
PCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9
CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCAy
MTA2ODEzZjBhMWVhYTUxMzRkMGYzOWJkNzUxYzczMThlYmMwNDMxLi5mOTgyOWEyODZmOGFhYmY0
ZDMzMmZmZjFlNzFlYTNjODNmOWJjNjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw3ICsxNjAsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFtZSogdGVybWluYWwgPSBudWxscHRyKSBj
b25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIHdhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CisgICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFj
ayhjb25zdCBGdW5jdGlvbiYpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgaW5saW5lU3RhY2tD
b250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAgICAvLyBHZXQgdGhlIGlu
bGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBv
bmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aAppbmRleCBlNGE1NzViMDNhN2QxYjU5OWFkMGQ1NmNlZGRkYWY0YmEwNTAyZjNhLi40N2M2NTdj
OGRmOTAzODNhZjY1ZWI1YzNiOGE4YjA1OTRkMGM0ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMjYsMTIg
KzI2LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czsKK2NsYXNzIENvZGVCbG9jazsKIAorLy8gTm90ZTogRnVsbCBieXRlY29kZSBsaXZlbmVzcyBk
b2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBz
LgorLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExp
dmVuZXNzRm9yQ2hlY2twb2ludC4KIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJs
aWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2
aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5k
VGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2lu
dCksIG9wZXJhbmQpOworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZl
KHJlZykgfHwgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZl
bmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8v
IEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBj
b21wYWN0LgorICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNt
IHRvIG1ha2UgdGhlbSBjb21wYWN0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDQ0Mjc8UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFz
dEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1l
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5k
ZXggOTc1MDhiYmYwYzQ1Y2I5N2E0Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uYTBhYTdjMDkyNDRm
OTk1NmJlZjFmYjk4MzhiNTYyYzE0ODk5OTRiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVj
dCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5l
Q29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVw
cy4KKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBu
b3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2ln
bmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlw
ZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3
ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3Qg
dHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBt
YW51YWxseS4KQEAgLTE5MSw3ICsxOTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAg
ICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBq
dXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6
ZSBleHBsaWNpdGx5LgogICAgIElubGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZz
ZXQoMCkKKyAgICAgICAgOiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAs
IHRtcE9mZnNldCgwKQorICAgICAgICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChD
YWxsKQogICAgICAgICAsIGlzQ2xvc3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIy
MiwxMiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3RhdGljX2Nhc3Q8c2lnbmVkPihzdGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICB2b2lkIHNldFRtcE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBP
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0bXBPZmZzZXQpID09IG9mZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxl
ckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJl
dHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0Nyw5ICsyNTYsOSBA
QCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5l
Q29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaQogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsK
IH0KIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3Jp
Z2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4g
SW5saW5lQ2FsbEZyYW1lCisvLyBUaGVzZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5v
dCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxs
ZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Ci1pbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlv
biYgZnVuY3Rpb24pCitpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhj
b25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gKnRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTI2MSwxMSArMjcwLDM4IEBAIGlu
bGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBm
dW5jdGlvbikKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgVmlydHVhbFJlZ2lzdGVyIHJlbWFw
T3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IHJlZykKK2lubGluZSBib29sIENvZGVPcmlnaW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVD
aGVja3BvaW50KCkgY29uc3QKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIHdhbGtV
cElubGluZVN0YWNrKFsmXSAoQ29kZU9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdp
bi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJh
bmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5k
IG9wZXJhbmQpCit7CisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIG9w
ZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpICsgaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpIDogb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FM
V0FZU19JTkxJTkUgT3BlcmFuZCByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHJlbWFwT3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgT3Bl
cmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQgb3BlcmFuZCkKIHsKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKHJlZy5vZmZzZXQoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpOwotICAgIHJldHVybiByZWc7CisgICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBP
cGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSAtIGlubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0KSA6IE9wZXJhbmQob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQpOworICAgIHJldHVybiBvcGVyYW5kOworfQorCitBTFdBWVNfSU5M
SU5FIE9wZXJhbmQgdW5tYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoreworICAgIHJldHVybiB1bm1hcE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLCBPcGVyYW5kKHJlZykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmgKaW5kZXggYmZiOTRiMzVmY2Q2MzlhNGExZjFkMDBjOGFiYjE0NWViMWM2NGE1OS4u
ZTAzZmEzOTM5NTk1NTUyZWJmMzhmN2I0YWIyZGQ1NzcwYTUwZjVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29uY3VycmVu
dEpTTG9jay5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxl
LmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KQEAgLTQ5LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgOiBtX2J5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
ICAgICB7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsg
bV9vcGVyYW5kLm9mZnNldCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2go
KSArIG1fb3BlcmFuZC52YWx1ZSgpICsgbV9vcGVyYW5kLmtpbmQoKTsKICAgICB9CiAgICAgCiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVy
YW5kOwpAQCAtOTAsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0
ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFu
ZDsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUtleUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlm
MzZjN2ZiZGExMDU1Nzg5ZGZmZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZl
Yzg3YWEyYzY5YThiYzA2NzA0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAg
LTQyLDcgKzQyLDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExh
enlPcGVyYW5kOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9j
azsKICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5k
KCkub2Zmc2V0KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVy
YW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMm
IGppdCwgSlNWYWx1ZVJlZwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6
eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6
eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9w
ZXJhbmQpKTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9w
ZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAog
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2Nr
LT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBA
IC05MSw3ICs5MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0
VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3Bl
cmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3Bl
cmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFu
ZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFu
ZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwog
ICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuaAppbmRleCA1ZDgxYzRjOTAwYjA4YTRkZWQ4M2E3NGRmYTVhMmRjZjMzNWVjODhk
Li4zNmQzNjlmMGMwMGZiZDQ0Yzg1NWEzODllMDY1MDg0YmM3OGU1ODE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5
ZmY5Zjk3MzZhZWIzNzM0NTk0NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uNDIxMzExN2RiNzZmNmVkN2Vl
YjkzOWQzNzc0M2ExYWE0NjBmZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSwxMTEgKzM1LDIyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVy
YW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5z
aWduZWQgbWF4TnVtQ2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIFRtcE9wZXJhbmQgaXMgb25l
IHRoYXQgZXhpc3RzIGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhp
c3QgYmV0d2VlbiBieXRlY29kZXMuCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5k
LCBMb2NhbE9wZXJhbmQsIFRtcE9wZXJhbmQgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6
CisgICAgT3BlcmFuZCgpID0gZGVmYXVsdDsKKyAgICBPcGVyYW5kKGNvbnN0IE9wZXJhbmQmKSA9
IGRlZmF1bHQ7CisKKyAgICBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICA6IG1fa2luZChvcGVyYW5kLmlzTG9jYWwoKSA/IExvY2FsT3BlcmFuZCA6IEFyZ3VtZW50T3Bl
cmFuZCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSkKKyAgICB7IH0KKwor
ICAgIE9wZXJhbmQoT3BlcmFuZEtpbmQga2luZCwgaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9r
aW5kKGtpbmQpCisgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCisgICAgeyAKKyAgICAgICAg
QVNTRVJUKGtpbmQgPT0gVG1wT3BlcmFuZCB8fCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNM
b2NhbCgpID09IChraW5kID09IExvY2FsT3BlcmFuZCkpOworICAgIH0KKworICAgIE9wZXJhbmRL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBpbnQgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX29wZXJhbmQ7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgIT0gVG1wT3BlcmFuZCk7
CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kKTsKKyAgICB9CisgICAg
dWludDY0X3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigq
dGhpcyk7IH0KKyAgICBzdGF0aWMgT3BlcmFuZCBmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSk7CisK
KyAgICBib29sIGlzVG1wKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IFRtcE9wZXJhbmQ7IH0K
KyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gQXJndW1lbnRP
cGVyYW5kOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IExv
Y2FsT3BlcmFuZCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCk7IH0KKyAgICBib29sIGlz
SGVhZGVyKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFRtcE9wZXJhbmQgJiYgdmlydHVhbFJl
Z2lzdGVyKCkuaXNIZWFkZXIoKTsgfQorCisgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFT
U0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgp
OyB9CisgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpc1ZhbGlk
KCkgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhbmQmKSBj
b25zdDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIE9wZXJhbmRLaW5kIG1fa2luZCB7IEFyZ3VtZW50T3BlcmFuZCB9OworICAgIGludCBtX29w
ZXJhbmQgeyBWaXJ0dWFsUmVnaXN0ZXI6OmludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgfTsKK307CisK
K0FMV0FZU19JTkxJTkUgYm9vbCBPcGVyYW5kOjpvcGVyYXRvcj09KGNvbnN0IE9wZXJhbmQmIG90
aGVyKSBjb25zdAoreworICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgpID09
IG90aGVyLnZhbHVlKCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpID09IG90aGVyLnZp
cnR1YWxSZWdpc3RlcigpOworfQorCitpbmxpbmUgYm9vbCBPcGVyYW5kOjppc1ZhbGlkKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkgPj0gMDsKKyAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpOworfQorCitpbmxpbmUgT3BlcmFu
ZCBPcGVyYW5kOjpmcm9tQml0cyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBPcGVyYW5kIHJlc3Vs
dCA9IGJpdHdpc2VfY2FzdDxPcGVyYW5kPih2YWx1ZSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc1Zh
bGlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKE9w
ZXJhbmQpID09IHNpemVvZih1aW50NjRfdCksICJPcGVyYW5kOjphc0JpdHMoKSByZWxpZXMgb24g
dGhpcy4iKTsKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKLSAgICBPcGVyYW5k
cygpCi0gICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9Ci0gICAgCi0gICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykKKyAgICB1c2lu
ZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBG
YXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+PjsKKyAgICB1
c2luZyBSZWZUeXBlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+
LCBGYXN0Qml0UmVmZXJlbmNlLCBUJj47CisgICAgdXNpbmcgQ29uc3RSZWZUeXBlID0gc3RkOjpj
b25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBib29sLCBjb25zdCBUJj47CisK
KyAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCiAgICAgewotICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1bWVu
dHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1ZXMu
ZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7Ci0gICAgICAgIH0KKyAgICAgICAg
c2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAg
ICBtX3ZhbHVlcy5ncm93KHNpemUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+
OjpuZWVkc0luaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkpOwog
ICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVf
dCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5k
cyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKKyAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCiAgICAgewotICAgICAgICBt
X3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsKKyAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsK
KyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRh
ZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJh
bmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1bWVu
dHMoKSkKKyAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQogICAg
IHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkg
KyBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5z
aXplKCkpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQotICAg
IAorCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1B
cmd1bWVudHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQotICAgIAorICAgIHNpemVfdCBudW1i
ZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9CisgICAgc2l6ZV90IG51
bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJn
dW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisKKyAgICBzaXplX3QgdG1wSW5kZXgoc2l6
ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMo
KSk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkgY29u
c3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CisgICAgICAg
IEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsK
ICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX251bUFyZ3VtZW50cyArIGlkeDsKKyAgICAgICAgQVNTRVJU
KGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIGlkeDsKICAgICB9CisKKyAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90
IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKLSAg
ICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVz
W2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQotICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNpemVf
dCBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRl
eChpZHgpXTsKLSAgICB9CisgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KICAgICAKLSAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9Ci0gICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIFJlZlR5cGUgbG9jYWwo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorICAgIENv
bnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2Nh
bEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJh
bmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkg
eworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZU
bXBzKCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAgICAgcmV0dXJu
IG51bWJlck9mQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkxv
Y2FscygpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVy
YW5kS2luZD4KLSAgICBUJiBhdEZvcihzaXplX3QgaWR4KQorICAgIFJlZlR5cGUgYXRGb3Ioc2l6
ZV90IGlkeCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJh
bmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBUbXBPcGVy
YW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBjYXNlIEFyZ3VtZW50
T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1
cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6CisgICAgICAgICAgICBy
ZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdG1wKDApOwogICAgIH0KICAgICB0ZW1wbGF0ZTxP
cGVyYW5kS2luZCBvcGVyYW5kS2luZD4KLSAgICBjb25zdCBUJiBhdEZvcihzaXplX3QgaWR4KSBj
b25zdAorICAgIENvbnN0UmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KSBjb25zdAogICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dpdGNo
IChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAgICBy
ZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAg
ICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgpOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiB0bXAoMCk7CiAgICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVf
dCBzaXplKQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVu
c3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1
ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6
ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0g
bnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7Cisg
ICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOworICAgICAgICBz
aXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93
KG5ld1NpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRp
YWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1f
dmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gVCgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE51bVRtcHM7ICsraSkKKyAgICAgICAg
ICAgIG1fdmFsdWVzW25ld1NpemUgLSAxIC0gaV0gPSBtX3ZhbHVlc1t0bXBJbmRleChvbGROdW1U
bXBzIC0gMSAtIGkpXTsKKworICAgICAgICBtX251bUxvY2FscyA9IHNpemU7CisgICAgICAgIGlm
IChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0
aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplIC0g
b2xkTnVtTG9jYWxzOyArK2kpCisgICAgICAgICAgICAgICAgbV92YWx1ZXNbbG9jYWxJbmRleChv
bGROdW1Mb2NhbHMgKyBpKV0gPSBlbnN1cmVkVmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlKQor
ICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0g
VCgpKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0g
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBp
ZiAobmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZlRtcHMo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFs
dWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6
ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKworICAgICAg
ICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBp
IDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZh
bHVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlk
eCwgY29uc3QgVCYgdmFsdWUpCkBAIC0xNjQsODQgKzI3OCw3NiBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChpZHggPj0gbnVtYmVyT2ZMb2NhbHMoKSB8fCBsb2NhbChpZHgpID09IFQoKSk7CiAg
ICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KGludCBvcGVyYW5kKSBjb25zdAorCisgICAgUmVmVHlwZSBnZXRGb3JPcGVyYW5k
SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25z
dFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5nZXRGb3JPcGVyYW5kSW5kZXgoaW5kZXgpOyB9
CisKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25z
dAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJn
dW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAg
ICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCi0g
ICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBj
b25zdAorICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAg
ICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmRJbmRleChv
cC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0bXBJbmRleChvcC52YWx1ZSgp
KTsKICAgICB9CiAgICAgCi0gICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBSZWZUeXBl
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBsb2Nh
bChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAg
ICB9CiAKLSAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisg
ICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCiAgICAgewotICAgICAgICByZXR1cm4gb3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlzVG1wKCkp
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZChvcC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHJldHVybiB0bXAob3AudmFsdWUoKSk7CiAgICAgfQogCi0gICAgY29uc3QgVCYgb3BlcmFu
ZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3Rf
Y2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQotICAgIGNvbnN0IFQm
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5k
KSk7IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJh
bmQpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0K
ICAgICAKLSAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgYm9vbCBo
YXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5k
LnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KLSAgICBib29sIGhhc09wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoT3BlcmFu
ZCBvcCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKHJlZy5vZmZzZXQo
KSk7CisgICAgICAgIGlmIChvcC5pc1RtcCgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AudmFs
dWUoKSA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wLnZh
bHVlKCkpIDwgbnVtYmVyT2ZUbXBzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc09w
ZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE9w
ZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChP
cGVyYW5kIG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy0+b3Bl
cmFuZChvcGVyYW5kKSA9IHZhbHVlOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUpCi0gICAgewot
ICAgICAgICBzZXRPcGVyYW5kKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFsdWUpOwotICAg
IH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tp
bmRleF07IH0KLSAgICBUJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4
XTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KLSAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4g
YXQoaW5kZXgpOyB9Ci0KLSAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbmRleCA8IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgYm9vbCBpc0xvY2FsKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IG9w
ZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgQ29uc3RSZWZUeXBlIGF0KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgUmVmVHlw
ZSBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0
UmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisgICAgUmVmVHlwZSBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9CisKKyAgICBPcGVyYW5kIG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQotICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZzZXQoKTsK
LSAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSkub2Zmc2V0KCk7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRGb3JJbmRleChpbmRleCkpOworICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgZWxzZSBp
ZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAg
ICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBpbmRleCAtIChu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAg
ICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1
bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xv
Y2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kp
CkBAIC0yNTcsNiArMzYzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJl
ck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFT
U0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAg
LTI2NSw5ICszNzIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRz
IG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVj
dG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBt
X251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9u
dW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2
YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBA
IC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFu
ZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAg
ICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnBy
aW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQg
T3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIs
IGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7
CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJP
ZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5k
ZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2Nh
bEluZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRl
eCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1w
IiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJj
MTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2Rl
VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQor
ICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFy
c2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUp
CiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmlu
ZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUuLjMwODJiMGEyNjNj
MzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Np
b25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYg
ZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29s
IGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAg
IHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisK
ICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7
IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0
ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0
YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0
YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQxOSw2ICs0MjEs
NyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2ln
bmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhB
Z2UpOworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3Vy
cmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTEx
ODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFhMzI5MmRjZGJlZDMxNjRlOWM3OTA5YTY5ZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3
NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5
dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1
Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3Np
emUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUg
c3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxl
cwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1
ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1fc2l6ZSAq
IHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CisgICAgICAgIG1fYnVmZmVyID0gTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj46Om1hbGxvYyhtX3NpemUgKiBz
aXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVy
LmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZt
X2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
fQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0u
flZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ld
Ln5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAg
ICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD4gbV9idWZmZXI7CisgICAgTWFsbG9j
UHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcj4gbV9idWZmZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVm
M2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNmMjI3Y2RjZGJmZWZmZWRjMzA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCkBAIC0zNSwy
MiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5y
KHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1i
ZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSk7CiAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOwor
ICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51
bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
Y2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CiAg
ICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJl
cihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJv
eGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJh
bWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWREb3VibGUoKSkpOwogICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKICAgICBjYXNlIEJvb2xl
YW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJu
IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAj
ZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKICNl
bmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZDhm
MThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2My4uNWU0M2JjNzJiYmNjNGZmOTdh
NjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCAzNjE5NTI5NDJkMmI4NmJhYjEyZjZj
Y2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRk
ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJl
Z2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdp
c3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBi
b29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lz
dGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA8IDA7CiB9CiAK
LWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wg
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3Bl
cmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5LDMyIEBAIHB1YmxpYzoKICAgICBmcmllbmQgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQsIGludCk7CiAKKyAg
ICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZm
ZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZ2lz
dGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+KTsKIAogICAg
IFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKGludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50
IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wg
aXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVy
KTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50Pihz
bG90KSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3Zp
cnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNM
b2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJl
Z2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzSGVhZGVy
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdp
c3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAgIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
cnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NF
UlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lz
dGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0
YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29u
c3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lz
dGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxS
ZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTA2LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZm
ZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBzdGF0aWMgaW50IGxvY2Fs
VG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsgfQogICAgIHN0YXRpYyBp
bnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQog
ICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CmluZGV4IGY4MGE3YzRmNjA4MTk1NWUxZTI0Y2UyMDU0YzAxM2FkY2JkNzg3ZTMuLjhkMmE3ZmI4
MjQ3NThmZDA0YWIwM2I3MDIwODJiZGJmNjMxNmJkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0x
MTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6
ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAgICBtX3BhcmFt
ZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1ldGVy
ID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgp
KTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFy
YW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb2RlIGJsb2Nr
IGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IHBh
cmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgotICAgIG1f
dGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkp
OyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcwogCiAgICAgYm9vbCBu
b25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVv
Zj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
PigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAg
ICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAg
ICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkg
ewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsK
KyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAg
ICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJl
Z2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0
dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZh
bHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAg
ICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAt
MzIyOSw2ICszMjI5LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNh
bGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6
ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRz
IDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZz
ZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTNiMTNmNmRhODE5ZTMx
ZmUwN2EwNDVmZmVmMGVmMjZjYjUxZTZmOS4uNDJkYjk3ZDY2NDM2NjcxMzgzYTBjZTQ2YWQzYzZm
ZWMwNjY2NDY1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAwNyw2ICsxMDA3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0
aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wg
aXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
OyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0
SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4
IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1NGMwNmJjODAzMDM3ODAuLmY4MTliMTIzZDRkODli
YTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50
IGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4KFZpcnR1YWxSZWdpc3RlciBpbmRleCkKICAg
ICAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVl
OwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWEx
ZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAK
QEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9p
ZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAg
ICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9
CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVh
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBE
T01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAg
IG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOwor
ICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91
dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2
ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFu
Z2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3Zh
bHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKwor
ICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChm
YWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBh
eWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFu
ZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBi
b29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
QVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtp
bmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNv
ZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAm
JiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0
SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0K
KyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFu
ZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFj
dEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjRh
Y2I1NDBkNDBhZTE3OThmN2MyMjM2ZDgxZGZlMWM4NDA4ZDUzMC4uNWQ5ZTE3YzkwYTJjNWI1MTgy
YjM2NTYxMjg3NjFkODUzNzE4NDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4
MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFs
dWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgp
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9j
YWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
dXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0
YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5k
KGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3Vs
ZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAo
dmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiArNDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3Rh
dGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0
ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJn
dW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVu
dCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0
dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJU
KCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1
OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sg
aWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVy
bgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBt
X3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFr
ZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMzU4LDcgKzIzNjQsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFyZ3Vt
ZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUub3Bl
cmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9s
ZGluZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmgKaW5kZXggZDczMjQ3YjkzYzVkYzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4u
ODljMDhmYTA4MGNlYTMyZmQ5YzU5MWYzMGYxZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYWYy
ZWRhNGFkODhlOWI5N2FhZDVmNGY5MzkyMzc2MjE5NTJhZWY4NC4uMTU1MTg2ZDBiZjgyMjVmMTkx
NTVmYzgzM2IzMzAwMGE3ZjVkOTllZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSAr
MzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNw
cmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+
YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+
b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgpAQCAtNDkzLDEwICs0OTYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0
byBhbiBhcmd1bWVudCBvciBsb2NhbCwgZm9yIGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQg
U2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXJlZy5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJl
ZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAg
ICAgICAgICB9CkBAIC01NjAsMTYgKzU2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9j
ayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKTsKQEAg
LTYyNyw3ICs2MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCBoZWFwKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2sgJiYgIWhlYXAucGF5bG9h
ZCgpLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTgwNiw3ICs4MDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNhZmVUb0dldFN0YWNrID0gaW5kZXggPj0gbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9
IGluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0gaW5kZXggPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSkgLSAxOwpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRl
ciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNB
cnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8q
IGFkZFRoaXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGls
ZCgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0
aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50KSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVk
SW50MzIpKSwKQEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJ
bmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZh
cmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocmVnLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
S2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJl
ZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRo
RXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSwgRWRnZSh2YWx1ZSkpOwpAQCAtOTM1LDcgKzk1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVu
dENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRD
b3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVBcmd1bWVudENvdW50IC0g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwpAQCAtOTgzLDcgKzEwMDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBm
cmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGZyYW1lQXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOyBsb2FkSW5kZXggPCBmcmFtZUFyZ3VtZW50Q291bnQ7ICsrbG9hZEluZGV4KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKQEAgLTEwMTksOSArMTAzNyw3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NE
YXRhLT5vZmZzZXQ7CkBAIC0xMDMwLDcgKzEwNDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID49IDEpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2
YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCB2
YXJhcmdzRGF0YS0+bGltaXQsIHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApp
bmRleCA2MjYxMTIzY2JmZWMzZWJhMTk1ZDA5YjkzMTAyNmYyNmM3MjU4NDc2Li5hOGQzODQ2NWNl
NDhhOWQ4ZjU0MjAwYmM3NDk2Y2I3NGFlOGQ2NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCkBAIC0zMiwxMSArMzIsMTUg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKKyAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSkKICAgICAgICAgcmV0dXJuIChyZWcuaXNBcmd1bWVudCgpICYmIHJlZy50b0FyZ3VtZW50KCkp
IHx8IHJlZy5pc0hlYWRlcigpOwotICAgIAorCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbAogICAgICAgICAmJiByZWcgPT0gVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQ2LDE5ICs1MCwxOSBAQCBib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBXZSBkbyBub3QgaW5jbHVkZSBmaXh1cHMg
aGVyZSBzaW5jZSBpdCBpcyBub3QgcmVsYXRlZCB0byB8YXJndW1lbnRzfCwgcmVzdCBwYXJhbWV0
ZXJzLCBhbmQgdmFyYXJncy4KLSAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICB1bnNpZ25lZCBudW1B
cmd1bWVudHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFN0
YXJ0ID0KICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKICAgICByZXR1cm4gcmVnID49IGFy
Z3VtZW50U3RhcnQgJiYgcmVnIDwgYXJndW1lbnRTdGFydCArIG51bUFyZ3VtZW50czsKIH0KIAot
Ym9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJl
Z2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRh
dGUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgcmVnKTsK
KyAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CiB9CiAKIE5vZGUqIGVtaXRDb2Rl
VG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNl
dCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2lu
KQorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2ln
bmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgYWRkVGhpcykKIHsKICAgICBH
cmFwaCYgZ3JhcGggPSBpbnNlcnRpb25TZXQuZ3JhcGgoKTsKIApAQCAtNjksMTEgKzczLDE0IEBA
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9t
Q2xvbmVkQXJndW1lbnRzCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyCi0gICAg
ICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLAorICAg
ICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCwKICAgICAgICAgYXJndW1lbnRzLT5vcCgp
KTsKIAorICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkKKyAgICAgICAg
cmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGFy
Z3VtZW50cy0+Y2hpbGQxKCkubm9kZSgpLCBub2RlSW5kZXgsIG9yaWdpbiwgYWRkVGhpcyk7CisK
ICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsK
LSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSAwOworICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IGFkZFRoaXM7CiAgICAgICAg
IEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJndW1lbnRzLT5iaXRWZWN0b3IoKTsKICAgICAgICAg
Tm9kZSogY3VycmVudFN1bSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudHMtPm51bUNoaWxkcmVuKCk7IGkrKykgewpAQCAtMTAzLDcgKzExMCw3IEBA
IE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKIAogICAgIGlmIChhcmd1
bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50
b21OZXdBcnJheUJ1ZmZlcikgewogICAgICAgICByZXR1cm4gaW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50
cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSkpOworICAg
ICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJh
bmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRoaXMpKTsKICAgICB9
CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKQEAgLTExMyw3ICsxMjAsNyBAQCBO
b2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwog
ICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
ICFhZGRUaGlzOwogICAgICAgICBpZiAoYXJndW1lbnRzU2l6ZSA+PSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkKICAgICAgICAgICAgIGFyZ3VtZW50c1NpemUgLT0gbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7CiAgICAgICAgIGVsc2UKQEAgLTEyOSwxNCArMTM2LDE0IEBAIE5vZGUqIGVtaXRDb2Rl
VG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJP
bmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tlZCksCiAgICAgICAg
IEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1i
ZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAg
IG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCArICFh
ZGRUaGlzKSwgSW50MzJVc2UpKTsKIAogICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkg
ewogICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1Y2UgYSBuZWdhdGl2
ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJlY3QgdGhhdCBoZXJl
LgogICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwgCiAgICAgICAgICAg
ICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKLSAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMCksIEludDMyVXNl
KSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUlu
ZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFkZFRoaXMpLCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1
bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5kZXggOWE3NzE4ZmJi
ZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYxMi4uNzRmOTM5ZTgxNjIyZDQwMjQ2ZTIzNTVk
NTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5s
aW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyKTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCk7Citib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5kKTsKIAogTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYsIE5v
ZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luKTsKKyAgICBJbnNl
cnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdp
biwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2MyOGJkNC4uODk3Yzcw
ZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAgLTEzOSw4ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQog
ICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFs
dWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5k
KGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYg
bG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwo
aW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXgg
Nzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDljNzdmODAyOWJhNS4uYzJiNTVhYTVjNGE1MjI5
YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZh
aWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVC
eUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5k
czxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwg
bV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsK
KyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xv
Y2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBsb2NhbHND
b3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAg
ICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggNTM1NTI1NjAyM2RkY2YyODBkYzU5
NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0ZTIzYzAyNWYyYWJl
NGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxp
dHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9y
PgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBj
b25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNs
b3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBvcCwgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBj
b25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxh
YmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICBBdmFpbGFiaWxpdHkgYXZh
aWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CiAgICAgICAgIGlmICghYXZhaWxhYmls
aXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCAwNTg0NDk2M2U2MTBlZDI5
M2M1NjBmYWJmZDM4OWE5ZjM5NzgwYTA3Li5lMjFiMjhiNTIyMWYxNTYxOGI4MDY0YTNhN2IyZDc4
NjkxMzg0MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5z
aWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNv
dW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1U
bXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVC
ZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgsMTEgQEAgQmFzaWNC
bG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51
bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBp
c1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
LSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVl
c0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVs
bFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1U
bXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBz
KQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRp
b25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDYgKzcwLDE1IEBAIHZvaWQgQmFz
aWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAgICBpbnRlcnNl
Y3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2FscywgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKHVu
c2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7Cisg
ICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRUYWls
LmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRI
ZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKK30K
Kwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWluYWwoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggYjVhZGYwOTEyZDA5NDJi
ZTk3ZTk4N2NkYzg5ZjRhZTM0ZDBjMGJjOC4uMWRkMzhjNzkwOGRjNmY0ZDFiMDg1YmM4ZTA2MjU0
ODBkYjQ0OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
QEAgLTQ2LDExICs0NiwxMiBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4gQmxvY2tOb2RlTGlz
dDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAgICBC
YXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVk
IG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxz
LCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAg
fkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKICAg
ICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAppbmRleCA3NTA4
ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5Li4wMDhjZjUyMjY5NTdjOWE4MzU4
NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNCbG9jaz4mJiBibG9j
aykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgs
IGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFk
b3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKKyAgICBS
ZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJ
bmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCks
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSwgZXhlY3V0
aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgIGF1dG8qIHJl
c3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92ZShibG9jaykpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA3ZTRhOWZlNjIzM2I3NDQ5ZTgyODY2MmMxZTQ5OWRjOWU4NDQwOGI3Li4wMTM0MjEyNzQ3NjAx
MTIzNGMxNGExMWFmYWNmYzQyNTI5MTU5ODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDYgKzExMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJlcigxKSkpCiAgICAg
ICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkKICAgICAg
ICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCisgICAgICAg
ICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAgICwgbV9wYXJhbWV0
ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1f
aW5saW5lU3RhY2tUb3AoMCkKQEAgLTEzOSw2ICsxNDAsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0K
IAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQorICAgIHsKKyAgICAg
ICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZVRtcHM6IHRyeWluZyB0byByYWlzZSBtX251bVRtcHMg
ZnJvbSAiLCBtX251bVRtcHMsICIgdG8gIiwgbmV3TnVtVG1wcywgIlxuIik7CisgICAgICAgIGlm
IChuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5l
bnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIH0KKworCiAgICAgLy8gSGVscGVyIGZvciBtaW4g
YW5kIG1heC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wg
aGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKQEAgLTI3MCwyNSArMjgyLDMzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3Np
YmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHVu
bGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAg
IAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcHJvZ3Jlc3NDaGVja3BvaW50KCkKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpICsgMSk7CisgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisgICAgICAgIG1fZXhpdE9LID0g
dHJ1ZTsKKyAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisgICAgICAgIHByb2Nlc3NTZXRM
b2NhbFF1ZXVlKCk7CisgICAgfQorCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVy
YW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICBy
ZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOwogICAgIH0KICAgICAK
ICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVj
dGlvbi4KLSAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
Tm9kZSogZ2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
b3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
ICFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgLy8g
SXMgdGhpcyBhbiBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAgcmV0
dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogCi0gICAgICAgIC8v
IE11c3QgYmUgYSBsb2NhbC4KLSAgICAgICAgcmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOworICAg
ICAgICByZXR1cm4gZ2V0TG9jYWxPclRtcChvcGVyYW5kKTsKICAgICB9CiAKICAgICBOb2RlKiBn
ZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCkBAIC0yOTgsOCArMzE4LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0YW50cy5zaXplKCk7CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25z
dGFudEluZGV4XSkgewogICAgICAgICAgICAgICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2Nr
ID0gKm1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiA9IGNvZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5k
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdl
dENvbnN0YW50KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
SW5kZXggPj0gb2xkU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93
KGNvbnN0YW50SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gb2xkU2l6ZTsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQpAQCAtMzU4LDkgKzM3OCwx
MCBAQCBwcml2YXRlOgogICAgICAgICAvLyBpbml0aWFsaXppbmcgbG9jYWxzIGF0IHRoZSB0b3Ag
b2YgYSBmdW5jdGlvbi4KICAgICAgICAgSW1tZWRpYXRlTmFrZWRTZXQKICAgICB9OwotICAgIE5v
ZGUqIHNldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1v
ZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKworICAgIE5vZGUqIHNldERpcmVjdChPcGVyYW5kIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewot
ICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFs
dWUpOworICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUp
OwogCiAgICAgICAgIC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhp
dCBzdGF0ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKQEAgLTM3NCw3
ICszOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhl
Y3V0ZSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVl
KCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVl
dWUuc2l6ZSgpOyArK2kpCkBAIC0zOTIsMTggKzQxMywxNyBAQCBwcml2YXRlOgogICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpID09IG1fY3VycmVudEluZGV4KTsKICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1
cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRz
LnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwogICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQog
CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBv
cGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCi0gICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgTm9kZSogZ2V0TG9jYWxPclRtcChPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotCi0g
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KGxvY2FsKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9j
YWwoKSk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdv
IGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAg
ICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkg
aXMgcmVxdWlyZWQgZm9yCkBAIC00MjgsMjAgKzQ0OCwyNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAog
ICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQotICAgIE5vZGUqIHNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2lu
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKKyAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNl
bWFudGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1v
ZGUgPSBOb3JtYWxTZXQpCiAgICAgeworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8
IG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3Jp
Z2luQ2hhbmdlKG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAg
ICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KSB7Ci0gICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChvcGVyYW5kKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKSA+PSBtX251bVRtcHMpIHsKKyAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKmlubGlu
ZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIG9wZXJhbmQ6ICIsIG9w
ZXJhbmQsICIgYnV0IGN1cnJlbnQgbnVtYmVyIG9mIHRtcHMgaXM6ICIsIG1fbnVtVG1wcywgIiBj
b2RlIGJsb2NrIGhhczogIiwgbV9wcm9maWxlZEJsb2NrLT5udW1UbXBzKCksICIgdG1wcy4iKTsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAh
PSBJbW1lZGlhdGVOYWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAg
ICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFu
ZCA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3Bl
UmVnaXN0ZXIoKSkKICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQog
CkBAIC00NTEsNyArNDc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRh
LT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpLCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3Jh
cGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0g
bm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODMsMjAgKzUwOSwyMSBA
QCBwcml2YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBO
b2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCisgICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmln
aW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKICAgICB7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5n
ZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudCA9IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShyZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4
Y2VwdCBmb3IgJ3RoaXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8g
dGhlbiBtYWtlIHN1cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1
bWVudCB8fCBtX2dyYXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNl
dE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzMiwxNCArNTU5LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZC5vZmZzZXQoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsK
ICAgICAgICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICAKLSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1l
bnRQb3NpdGlvbihPcGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1
bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1l
bnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU1MCw5ICs1Nzks
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoLmhhc0RlYnVnZ2VyRW5h
YmxlZCgpKTsKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzV2l0aEZpeHVwLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2Fs
bEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlu
bGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFw
T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNh
bGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKS0+bnVtUGFyYW1l
dGVycygpOwogCkBAIC01NzUsNiArNjA0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxs
TGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1w
cyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQgdG8gdGhlIHN0YWNrLgogICAgICAgICAg
ICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRlY29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRM
aXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxh
dGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsgbG9jYWwtLTsp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBA
IC01ODQsMjcgKzYxNCwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0g
ICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hE
aXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJn
dW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaERpcmVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9j
YWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFv
cGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwg
IW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02MTQsMjYgKzY0NCwyNSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7
CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9HcmFwaChub2RlVHlwZSwgT3BJbmZvKHZh
cmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAg
ICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAgIH0KIAot
ICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAg
IGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxvY2FsPihvcGVyYW5kLCBmaW5kQXJndW1l
bnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaChJbmxpbmVTdGFj
a0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERp
cmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVz
aERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07
CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwg
YWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAg
ICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1
dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRv
IGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQp
IHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2Fs
RGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRv
bUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1wbChj
dXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0
KTsKICAgICB9CiAKQEAgLTc2MSw2ICs3OTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVk
Z2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxkMSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhv
cGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZhbHVlKCkpLCBjaGlsZDEpOworICAgIH0K
ICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBp
bmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVk
Z2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAg
LTEwOTEsOCArMTEyNSwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIG51bWJlciBvZiBhcmd1
bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2Vk
IGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRl
bXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBmb3IgdGhlIGZ1bmN0aW9uLgogICAgIHVu
c2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBtYXggbnVtYmVyIG9mIHRlbXBzIHVzZWQg
Zm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhpdCB0byBjaGVja3BvaW50LgorICAgIHVu
c2lnbmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBv
ZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KICAgICAvLyBwcmVhbGxvY2F0ZSBm
b3IgYXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZyb20gdGhpcyBmcmFtZS4gVGhpcwogICAg
IC8vIG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1lIHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6
ZSBmb3IgdGhlIGNhbGxlZQpAQCAtMTE1OSwxNCArMTE5NSwxNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0Cisg
ICAgICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkg
KyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKIAotICAgICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAgICB9CiAgICAgfTsK
ICAgICAKQEAgLTExNzUsMTMgKzEyMTQsOCBAQCBwcml2YXRlOgogICAgIElDU3RhdHVzQ29udGV4
dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAgICAgc3RydWN0IERlbGF5ZWRTZXRMb2Nh
bCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFsdWU7Ci0gICAgICAgIFNldE1vZGUgbV9z
ZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVsYXllZFNldExvY2FsKCkgeyB9Ci0gICAgICAg
IERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQorICAgICAgICBEZWxheWVk
U2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAgICAgICA6IG1fb3JpZ2luKG9yaWdpbikK
ICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCkBAIC0xMTk0LDggKzEyMjgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRN
b2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsKG1fb3JpZ2luLCBtX29w
ZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5z
ZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAg
ICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOworICAgICAgICBPcGVyYW5k
IG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKKyAgICAgICAg
U2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8RGVsYXllZFNldExv
Y2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjA4LDcgKzEyNDcsNyBAQCBwcml2YXRlOgog
QmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVj
b2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxv
Y2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRz
IG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVn
aW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUo
KSkKQEAgLTEyMjAsNyArMTI1OSw3IEBAIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxv
Y2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2lj
QmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAg
ICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNv
ZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFz
aWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgp
LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2lj
QmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhX
VEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwpAQCAtMTQyMyw3ICsxNDYyLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ly8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUgaXMgVmFyYXJncywgd2UgZG8gbm90IGtu
b3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxseSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3Mu
IFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1
bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdo
aWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMg
bWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSB4a0xvYWRW
YXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKICAg
ICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVtcCBpbnRvLgogICAgICAgICAgICAgaWYg
KGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0x
NDQ5LDcgKzE0ODgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWls
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAvLyBXZSBt
dXN0IHNldCB0aGUgY2FsbGVlIHRvIHRoZSByaWdodCB2YWx1ZQogICAgICAgICBpZiAoc3RhY2tF
bnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGlmIChzdGFja0VudHJ5LT5t
X2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAgICBzZXREaXJl
Y3Qoc3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7CisgICAgICAgICAgICAgICAg
c2V0RGlyZWN0KHJlbWFwT3BlcmFuZChzdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgYWRkVG9HcmFwaChTZXRDYWxsZWUsIGNhbGxUYXJnZXROb2Rl
KTsKIApAQCAtMTYxNCwxNiArMTY1MywxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAg
IEFTU0VSVCghKG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHMgJSBzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpKSk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCA9IHJlZ2lzdGVyT2Zm
c2V0IC0gbnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90czsKICAgICAKLSAgICBpbnQgaW5saW5lQ2Fs
bEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLm9mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnM7CisgICAgT3BlcmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZp
cnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyk7CiAgICAgCiAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lU3RhcnQpLnRvTG9jYWwoKSArIDEgKworICAgICAg
ICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2FsKCkgKyAxICsKICAgICAgICAgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsK
ICAgICAKKyAgICBlbnN1cmVUbXBzKChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFt
ZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSAr
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51
bVRtcHMoKSk7CisKICAgICBzaXplX3QgYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFwaC5t
X2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsKIAogICAgIGlmIChyZXN1bHQuaXNWYWxpZCgpKQot
ICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KTsK
KyAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCku
dmlydHVhbFJlZ2lzdGVyKCk7CiAKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlh
YmxlID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAtMTYz
Niw3ICsxNjc3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKIAogICAgIElubGluZVN0YWNr
RW50cnkqIGNhbGxlclN0YWNrVG9wID0gbV9pbmxpbmVTdGFja1RvcDsKICAgICBJbmxpbmVTdGFj
a0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxl
ZS5mdW5jdGlvbigpLCByZXN1bHQsCi0gICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRp
b25CbG9jayk7CisgICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnZpcnR1YWxSZWdpc3Rlcigp
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOwog
CiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5z
LgogICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKQEAgLTE2NzEs
OSArMTcxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIEhvd2V2ZXIs
IHdoZW4gd2UgYmVnaW4gZXhlY3V0aW5nIHRoZSBjYWxsZWUsIHdlIG5lZWQgT1NSIGV4aXQgdG8g
YmUgYXdhcmUgb2Ygd2hlcmUgaXQgY2FuIHJlY292ZXIgdGhlIGFyZ3VtZW50cyB0byB0aGUgc2V0
dGVyLCBsb2M5IGFuZCBsb2MxMC4gVGhlIE1vdkhpbnRzIGluIHRoZSBpbmxpbmVkCiAgICAgICAg
IC8vIGNhbGxlZSBtYWtlIGl0IHNvIHRoYXQgaWYgd2UgZXhpdCBhdCA8SEVSRT4sIHdlIGNhbiBy
ZWNvdmVyIGxvYzkgYW5kIGxvYzEwLgogICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7
CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQub2Zmc2V0
KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1
bWVudFRvR2V0KSwgdmFsdWUpOwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChE
ZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvR2V0LCB2YWx1
ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
NzE3LDE2ICsxNzU4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIElu
IHN1Y2ggY2FzZXMsIHdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgZnJhbWVzLgogICAgICAgICBpZiAo
cmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwICE9IHJlZ2lzdGVyT2Zmc2V0KSB7CiAgICAgICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dl
dCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1
bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOwotICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHZh
bHVlKTsKICAgICAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRM
b2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHZhbHVlLCBJbW1lZGlh
dGVOYWtlZFNldCB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgYXJpdHlGaXh1cENvdW50OyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIGluZGV4KSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5m
byhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIE9wZXJh
bmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwg
dW5kZWZpbmVkKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNl
dExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb1NldCwgdW5kZWZpbmVkLCBJ
bW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAgfQogCkBAIC0xODkzLDEyICsxOTM0LDEyIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxs
VmFyaWFudCwgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudCk7CiAgICAgICAgIAogICAgICAg
ICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9Ci0gICAgICAgIG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsK
KyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCkpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAg
ICAgICAgZW5zdXJlTG9jYWxzKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
KS50b0xvY2FsKCkpOwogICAgICAgICAKICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBp
bnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkub2Zmc2V0KCk7CisgICAgICAgIGludCBy
ZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsK
ICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2Fk
VmFyYXJnc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVy
KHJlbWFwcGVkQXJndW1lbnRTdGFydCArIDEpOwpAQCAtMTkwNiwxMSArMTk0NywyNCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZz
ZXQ7CiAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CiAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKQotICAg
ICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEp
LCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKworICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnQ7Cisg
ICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnQgPSBhZGRUb0dyYXBoKEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlubGluZUNhbGxGcmFtZSgpLT5pc1ZhcmFyZ3MoKSkKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZ2V0RGlyZWN0KHJlbWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUoKSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAg
ZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0
YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
d2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQp
OworICAgICAgICAgICAgYXV0byBhcmdDb3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChPcGVyYW5kKFRtcE9wZXJhbmQsIE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KSk7Cisg
ICAgICAgICAgICBzZXREaXJlY3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0
aCwgT3BJbmZvKGRhdGEpLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzQ2hlY2tw
b2ludCgpOworCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0
YSksIGdldExvY2FsT3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBu
ZWVkIHRvIGtlZXAgYWxpdmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAv
LyBhbmQgYXJndW1lbnRzQXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdl
IG9ubHkgbmVlZCBhIFBoYW50b20gZm9yCkBAIC0xOTIyLDE0ICsxOTc2LDE0IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2
ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAv
LyBiZWZvcmUgU1NBLgogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3Vu
dFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBl
ZFJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoZGF0YS0+Y291bnQpOwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQg
d2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24n
dAogICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJn
dW1lbnREZWZpbml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAg
ICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnBy
ZWRpY3QoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9m
aXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFk
ZFRvR3JhcGgoU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRW
YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCks
IHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsK
ICAgICAgICAgdW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTE5NTMsNyArMjAwNyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVu
dHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERl
ZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVu
dCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1T
ZXRBcmd1bWVudHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjA1Myw3ICsyMTA3LDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0
OiAiLCByZWdpc3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcs
ICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlh
dGVTZXRXaXRoRmx1c2gpOwogCkBAIC01MTAyLDcgKzUxNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdl
eHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlz
Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVu
UmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC01MTEyLDcgKzUxNjYsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlzLT5pbmxpbmVDYWxsRnJhbWUo
KTsKICAgICAgICAgICAgIE5vZGUqIGxlbmd0aDsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNM
ZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdExlbmd0
aDsKICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDw9IGJ5dGVjb2RlLm1fbnVt
UGFyYW1ldGVyc1RvU2tpcCkKICAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVt
YmVyKDApOwpAQCAtNjE3OCw3ICs2MjMyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3Vy
cmVudEJsb2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAmJiBtX2N1cnJlbnRC
bG9jay0+c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5vcCgpID09IENvdW50
RXhlY3V0aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIq
IGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAg
ICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVm
ZmVyKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNh
dGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGgg
dGhlIG1haW4gdGhyZWFkLgpAQCAtNjE5NSw3ICs2MjQ5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5t
X29wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjIyMywxNCArNjI3NywxNCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgbV9leGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTG9j
YWxzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hMb2NhbCwgT3BJbmZv
KG51bWJlck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVtYmVyT2ZMb2NhbHNd
KSk7CiAgICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCksIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUp
OwogICAgICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihvcGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAo
bnVtYmVyT2ZMb2NhbHMpCkBAIC02MzU4LDcgKzY0MTIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Q
b2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1f
c3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0g
anVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4MjYsOCArNjg4MCw4IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNh
c2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFu
dCgpICYmIGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJs
ZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJv
emVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsK
KyAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2Rl
Lm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9H
cmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBPcEluZm8oaW5pdGlh
bFZhbHVlKSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBsZXhpY2Fs
RW52aXJvbm1lbnQpOwpAQCAtNjg1Nyw3ICs2OTExLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIC8vIGxvYWRzIGZyb20gdGhl
IHNjb3BlIHJlZ2lzdGVyIGxhdGVyLCBhcyB0aGF0IHdvdWxkIHByZXZlbnQgdGhlIERGRyBmcm9t
IHRyYWNraW5nIHRoZQogICAgICAgICAgICAgLy8gYnl0ZWNvZGUtbGV2ZWwgbGl2ZW5lc3Mgb2Yg
dGhlIHNjb3BlIHJlZ2lzdGVyLgogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAg
ICBOb2RlKiBjYWxsZWUgPSBnZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAg
IE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNh
bGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4oKm1fdm0pKQogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9uLT5zY29wZSgpKTsKQEAgLTcy
NzUsOCArNzMyOSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5l
U3RhY2tFbnRyeSgKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxv
Y2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAg
ICAgLy8gcGxhbiBmaW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVy
LT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zm
c2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZz
ZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5j
YWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzYzOCw3
ICs3Njk0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc2NTgsMjQgKzc3MTQsMjQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJl
c2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5
cGUgb3AsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVy
YW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0g
KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5s
aW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudC5pc0FyZ3VtZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVu
dHMgPSBtX2lubGluZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRv
QXJndW1lbnQoKV0tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5v
ZGVJbmRleCwgU3BlY05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5l
Q2FsbEZyYW1lLCBGbHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFt
ZSwgUGhhbnRvbUxvY2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRG
bHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAgLTc3NDAsNiArNzc5Niw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5t
X3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxz
OwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IDhlOWJiNGFjYmU1
NTAyZGRhN2IzNzQ3ODRiNWE4NWZmZGU3MDNiZmQuLjNkYzc1NjhmMWVlMmM2OTc3MjI2OGNjOTZk
ZWE0YTA1YzYyMzYyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2Uu
Y3BwCkBAIC0xNzAsMjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0
SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhh
bmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2
ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJh
bmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKTsKICAgICAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3Zl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBOb3QgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZh
bHVlKCksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0
YXJnZXQgPSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFs
dWUoKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKaW5kZXggZDk4
ZmQ0YWY0NDBmMDdjYmMxNmI2N2Q2MDJiYTY0MjZhZjBmMjM4Mi4uNTc3MGYwOTg5NDJjODk2Yjdh
Y2Y4MjNmY2FiOTQ0NGEyMjRjY2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC01Niw2ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKICAgICAgICAgcHJvcGFnYXRlUGhp
czxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5k
PigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIGNvbXB1
dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFk
ZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2Fs
aXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZh
cmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdl
dExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2Nh
bCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6
ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2Nh
bCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5k
KCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9u
aWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlh
YmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxp
emVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9y
PFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+
CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAg
ICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNzAsMTUgKzI4
MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50
b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFy
aWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5k
Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAg
c3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZ3Vt
ZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUt
Pm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZs
dXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25p
Y2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgVG1wT3BlcmFuZD4obm9kZSwg
dmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2Fs
aXplU2V0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFy
aWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCkKQEAgLTI4OSw2ICszMTEs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgY2xlYXJWYXJpYWJsZXM8QXJndW1lbnRP
cGVyYW5kPigpOwogICAgICAgICBjbGVhclZhcmlhYmxlczxMb2NhbE9wZXJhbmQ+KCk7CisgICAg
ICAgIGNsZWFyVmFyaWFibGVzPFRtcE9wZXJhbmQ+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBB
c3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVz
IHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16
ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcg
KzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+
CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFj
a0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/
IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBo
aVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7
CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBm
YWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVj
dG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlm
IChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9h
cmd1bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAg
ICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiBy
ZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDogcmV0
dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOiByZXR1cm4gbV90
bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0ZsdXNoZWQoKQpAQCAtNTIxLDYg
KzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAgICAgVmVjdG9yPFBoaVN0
YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fZmx1c2hlZExv
Y2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5NDcxYjVhNjE2NjdjZS4uNGNj
ZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazogewogICAgICAgICAgICAgQVNT
RVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChoZWFwLnBh
eWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAg
ICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
OworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2Fk
KCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAg
ICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigpOwogICAgICAgICAgICAgZWxz
ZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWNsb2Ji
ZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3RhY2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWly
LmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgp
LnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0g
cGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIyNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOwog
ICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOwot
ICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBhYnN0
cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFs
dWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFj
dEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpLCBudWxscHRy
KTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3IEltcHVyZURhdGFTbG90IHts
b2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2lkZVN0YXRlOgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdGFjazog
ewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSA9
PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsK
ICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgp
CiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CkBAIC0yOTgsNyAr
Mjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBhbmQgbm93
IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAgLy8KICAgICAvLyBPYnZpb3Vz
bHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFja01hcCBzaW5jZSBpdCBkb2Vz
IG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8aW50MzJfdCwgc3RkOjp1bmlx
dWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJfdD46Okhhc2gsIFdURjo6
U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90
PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOwogICAgIE1hcCBtX2ZhbGxi
YWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGZkMGI2ZDc0ZGE2NzdiYzQ1MDhjYWM0
OWZjNGVlMWM5OGRhNGU3YWQuLjRkNWEyYTBhYWExYTc0M2JmYmU2OTRiNDM5OGNmZjdmNWJkZjEw
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAK
QEAgLTMwNiw2ICszMDYsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29k
ZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2UgbGxp
bnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxf
ZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zy
b21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0
X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBjYXNl
IG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9s
b2NhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXgg
ODliYzY0MWY1MjZiYjUzZmYwMzdmNzNjZjk1MGJhYzY0NmQ0OTk1NC4uODJmM2NhNjQxODRmOTE5
MzY1MDM5YjEzMjIxN2RkOTllYTk3MTA1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVG
dQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhpcyBkb2VzLgogICAgIGZv
ciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0g
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywg
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0K
IAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5IGFjY291bnQgd2hpY2ggbm9k
ZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEtpbGxTdGFjazoKLSAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsK
KyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CkBAIC00
OTcsNyArNDk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJh
bmQoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKQEAg
LTc2NCwxMiArNzY0LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKLSAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgU2V0Q2FsbGVlOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczog
ewpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgfQogCiAg
ICAgY2FzZSBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoKLSAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgR2V0UmVzdExl
bmd0aDoKQEAgLTc4OCwzNiArNzg4LDQzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlO
b2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJh
bmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3Rh
Y2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJz
dHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFj
azogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgcmVhZChoZWFwKTsKICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAg
ICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5vcGVyYW5kKTsKICAgICAgICAgd3JpdGUoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKKyAgICAgICAgcmV0dXJu
OyAgCisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICByZWFkKFdvcmxk
KTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRh
dGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBk
YXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+
KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODI2LDkgKzgzMyw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoU3RhY2spOwogICAgICAg
ICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0
KCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNf
Y2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRh
dGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
YmluZWRMaXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVk
TGl2ZW5lc3MuY3BwCmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBkMDljZDJhYzMw
ZjMuLjE1NzQ2YzA1NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApAQCAtMzks
NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVuZXNzKEdyYXBoJiBncmFwaCwg
QXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAgICAgZ3JhcGguZm9yQWxsTGl2
ZUluQnl0ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCiAgICAgICAg
ICAgICAgICAgcmVnLAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCA3OTg3
Yjg3MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiLi43ZmZkNGQzNWI2Y2Y1YzlkZTM4
MWU3ZGE2MTMzMmZkNTI0OTY1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRh
OjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9yaWdp
bnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMu
c2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4p
OwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICBy
ZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4
IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMuYXBw
ZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgp
IC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAg
IHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4g
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZU9y
aWdpbnMuc2l6ZSgpKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNv
ZGVPcmlnaW5zLnNpemUoKSAtIDEpKTsKKyAgICByZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5k
ZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4
IENvbW1vbkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9y
aWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAKaW5kZXggM2IxNjVmMmM0MDIxMDAzZDA0MWNjYTZkOWFlMGNmZTdhZTgy
NzEzZi4uMTg1MzY2ZDA0ZTI2M2VlOWVkOTY0Yzg2YTdlZDk1MjRhOTViYjlkOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKQEAgLTM4Myw3ICszODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEdldE15
QXJndW1lbnRCeVZhbCBpbiBzdWNoIHN0YXRpY2FsbHktb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlczsg
d2UganVzdCBsb3NlIENGQSB1bmxlc3MKICAgICAgICAgICAgICAgICAvLyBHQ1NFIHJlbW92ZXMg
dGhlIGFjY2VzcyBlbnRpcmVseS4KICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0g
bV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aW5kZXggKyAxKSwgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRTdGFjayhk
YXRhKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmlu
ZGV4IDg1NDEyMzE0NzQxZTZmMTEyNjFmMmU5N2M0OWZlNjQ0ZGFlN2JhZjcuLmYzOGM4M2ZkZDMw
YzJmNTNiM2Q1MDkzZjQwYjJjNzBlOTUzMTA0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKQEAgLTI5NCw2ICsyOTQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoK
ICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAg
ICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAppbmRleCAxN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2
MjI3MmQ0Nzk5OThiNTM5Li40NWZiYzQzOWQ1M2JhOTUwZTdhOGQ4OWFjOWVjMTk3MmJhMDkzOWI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw3ICs5MCw2
IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlh
bGl6ZWQuIFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2Vu
ZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0
Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKG9zckV4aXRU
aHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFl
ZTFmMDA3M2IwZjRiYmNjNDczNGViNjQxZTQ2NDhjMzA1NWEyNDQuLmNhMzNkYjIyN2Q0YjkyNzcz
ZmE4NmQ3MmVlM2Q0ZDFiODViZjk4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcApAQCAtMjQzMiw2ICsyNDMyLDE0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQz
MlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2Fz
ZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9y
IG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKQEAgLTI0
NjQsOCArMjQ3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZh
cmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKLSAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UHJvbWlzZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCAwYmYxYzNmYmJhYzRhNjYyOThjZjkyOWZl
ZjUwYTYwZGNmZGUyOGI5Li45MzNhMmJkZTIyZTE2NmMyYWViNmQ0YWMxYmJlOWNlMWU1Y2VkNTZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC0zMiw2
ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFj
ZSBGb3JBbGxLaWxsc0ludGVybmFsIHsKK2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
K30KKwogLy8gVXRpbGl0aWVzIGZvciBmaW5kaW5nIHRoZSBsYXN0IHBvaW50cyB3aGVyZSBhIG5v
ZGUgaXMgbGl2ZSBpbiBERkcgU1NBLiBUaGlzIGFjY291bnRzIGZvciBsaXZlbmVzcyBkdWUKIC8v
IHRvIE9TUiBleGl0LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgZW51bWVyYXRpbmcgb3ZlciBh
bGwgb2YgdGhlIHByb2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlLAogLy8gYnkgZXhw
bG9yaW5nIGFsbCBibG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMgbGl2ZSBhdCB0YWlsIGFuZCB0aGVu
IGV4cGxvcmluZyBhbGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUgdGhlCkBAIC01MywxMyArNTcsMTMg
QEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZv
cmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAKICAgICBDb2RlT3JpZ2luIGFmdGVyID0g
bm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxy
ZWFkeU5vdGVkOworICAgIE9wZXJhbmQgYWxyZWFkeU5vdGVkOwogICAgIC8vIElmIHdlIE1vdkhp
bnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxsIHRoZSBv
bGQgdmFsdWUuCiAgICAgaWYgKG5vZGVBZnRlci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAg
ICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFmdGVyKSkgewotICAgICAgICAg
ICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gcmVnOworICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlQWZ0ZXItPnVubGlua2VkT3BlcmFuZCgpOworICAgICAg
ICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBhZnRlcikpIHsKKyAgICAgICAg
ICAgIGZ1bmN0b3Iob3BlcmFuZCk7CisgICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSBvcGVyYW5k
OwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNzAsOCArNzQsMjQgQEAgdm9pZCBmb3JBbGxL
aWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVB
ZnRlciwgY29uc3QKICAgICAvLyBvdGhlciBsb29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJ
bmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9y
ZUlubGluZUNhbGxGcmFtZSA9PSBhZnRlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBp
bnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBn
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihiZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAg
QVNTRVJUKGJlZm9yZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVj
b2RlSW5kZXgoKS5jaGVja3BvaW50KCkpOworCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUg
PSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2tw
b2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgaW50
IHRtcE9mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFt
ZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAg
ICAgICAgIGxpdmVCZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CisKKyAgICAgICAgICAgIGxpdmVC
ZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBm
dW5jdG9yKE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wICsgdG1wT2Zmc2V0KSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIC8vIE5vIGxvY2FscyBjYW4gZGllIGF0IGEgY2hlY2twb2ludC4K
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzdGFja09mZnNl
dCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgOiAwOwogICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0g
Z3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3Rv
ciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJ
bmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIGNv
bnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhh
ZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNl
KTsKQEAgLTgyLDE3ICsxMDIsMjEgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAgICAg
ICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25p
bmcgYWNyb3NzIGEgY2hlY2twb2ludCBidXQgYmVmb3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBh
biBpbmxpbmVDYWxsRnJhbWUuIik7CisKICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNv
bnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRl
YWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5
dGVjb2RlKGFmdGVyKTsKLSAgICBncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAg
ICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2Rl
KGFmdGVyKTsKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBiZWZvcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIHJlZykgewotICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAg
ICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBh
bHJlYWR5Tm90ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGxp
dmVBZnRlci5nZXQocmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5k
LnRvTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAg
ICAgZnVuY3RvcihvcGVyYW5kKTsKICAgICAgICAgfSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI5
LDggQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgc2VlbkluQ2xvc3VyZUZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FsbGVkRnVuY3RvckZsYWcgPSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVu
c2lnbmVkPiBmbGFnczsKLSAgICAKKworICAgIEFTU0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRy
ZW4oCkBAIC0xMjAsMTUgKzE0NSwxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5k
ZXgoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVs
bHB0cjsKLSAgICBpZiAobm9kZUluZGV4KQotICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9k
ZUluZGV4IC0gMSk7CisgICAgTm9kZSogYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEp
OwogCiAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5v
ZGUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRp
bmdXaXRoTG9jYWwoCi0gICAgICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgICAgIG9wZXJh
bmQsCiAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZsYWdzLmdldChub2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwog
ICAgICAgICAgICAgICAgIH0sCkBAIC0xNTksNiArMTgyLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0lu
QmxvY2soCiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5j
dG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgog
ICAgIC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJ
bmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAxOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgeworICAgICAgICBkYXRhTG9nTG5JZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJi
b3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5IGF0IGluZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9j
YWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rl
c0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgZ3JhcGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZh
aWxhYmlsaXR5LCBibG9jaywgbm9kZUluZGV4LAogICAgICAgICAgICAgWyZdIChOb2RlKiBub2Rl
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGIzMjBmNzA3Yzk1
ZjEyMzkzODUxYmMzYjJiMmI0MmI5NTZkZDBiZjUuLjA3MWRlMjM5MmI5YzVjOTI4NmRlOWM3ODc4
ZmU5YWYwMGMwYjRlNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBA
IC0zMDgsOCArMzA4LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZh
cmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7Cisg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQo
KTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVy
YW5kKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NE
YXRhKSwgIikiKTsKICAgICAgICAgICAgIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1h
Y2hpbmVMb2NhbCgpOwogICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcs
MTMgKzMxNywxMyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNo
YXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIH0KICAgICBpZiAobm9k
ZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkpIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgZGF0
YS0+bG9jYWwpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAg
ICAgICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5s
aW5rZWRMb2NhbCgpKSAKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExv
Y2FsKCkpOworICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVu
Z3RoSGludCA9ICIsIG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c0xhenlKU1ZhbHVlKCkpCkBAIC01MTUsOSArNTE1LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9j
a0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxv
Y2sqCiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgQVNTRVJU
KHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2Rl
LT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQo
KSwgIj4tPigiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgp
LCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+
KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQg
R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3Rh
cnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwog
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPm9wZXJhbmQoKSkKICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdy
YXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0
SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9j
YWwpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgTm9k
ZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9k
ZSkKLSAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxv
Y2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkp
ID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNv
ZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KQogICAgIHJldHVybiBraWxsc0ZvcihiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJh
bWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRl
Y29kZShPcGVyYW5kIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAogICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDaGVja2luZyBvZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJh
bmQsICJcbiIpOwogICAgIGJvb2wgaXNDYWxsZXJPcmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVP
cmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAmY29kZU9yaWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBv
cGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0
byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Cisg
ICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lk
ZSB0byBleGl0IHRvIHRoZQorICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRo
ZSB0YWlsIGNhbGwuCisgICAgZm9yICg7IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBp
bmxpbmVDYWxsRnJhbWUgPyAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRy
KSB7CisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxG
cmFtZSgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCB0bXBPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9m
ZnNldCA6IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmQudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJl
bG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5saW5lZC4KKyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5k
ZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1DaGVja3BvaW50VG1wcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGlmICghY29kZUJs
b2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9y
Q2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsK
KyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAi
XG4iKTsKIAotICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5p
bmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3Jp
Z2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMp
IHsKKyAgICAgICAgaWYgKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2Rl
T3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMpIHsKICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMpOwogCiAKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvb2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpCi0gICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSB0aGUgYXJndW1l
bnQgY291bnQuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc2
LDQyICsxMTk3LDQxIEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zv
cihjb2RlQmxvY2spOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bGxM
aXZlbmVzcy5vcGVyYW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9w
cmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3Jp
Z2luKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewotICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBv
ZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy52aXJ0dWFsUmVnaXN0ZXJJc0xpdmUocmVn
LCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29k
ZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFy
Z3VtZW50cyBhcmUgYWx3YXlzIGxpdmUuIFRoaXMgd291bGQgYmUgcmVkdW5kYW50IGlmIGl0IHdh
c24ndCBmb3Igb3VyCiAgICAgICAgIC8vIG9wX2NhbGxfdmFyYXJncyBpbmxpbmluZy4KLSAgICAg
ICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiBy
ZWcuaXNBcmd1bWVudCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50
b0FyZ3VtZW50KCkpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgp
KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJB
cmd1bWVudCBpcyBsaXZlLlxuIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdl
IG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKLSAgICAgICAgLy8gdGhlIHJldHVybiBieXRlY29k
ZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KLSAgICAgICAgY29kZU9yaWdpblB0ciA9ICZpbmxp
bmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICAgICAgaXNDYWxsZXJPcmlnaW4gPSB0cnVl
OwogICAgIH0KKworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNr
LCByZXR1cm5pbmcgdHJ1ZS5cbiIpOworICAgIHJldHVybiB0cnVlOyAgICAKICAgICAKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1CaXRWZWN0b3IgR3JhcGg6OmxvY2Fs
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6
bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAg
ICBCaXRWZWN0b3IgcmVzdWx0OwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0
ZWNvZGUoCisgICAgdW5zaWduZWQgbnVtTG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCkpOworICAgIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAgICAgY29kZU9yaWdpbiwKLSAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwo
KSk7Ci0gICAgICAgICAgICByZXN1bHQucXVpY2tTZXQocmVnLnRvTG9jYWwoKSk7CisgICAgICAg
IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBv
cGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRv
TG9jYWwoKTsKKyAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChvZmZzZXQpOwogICAgICAgICB9
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTYzNSw4ICsxNjU1LDggQEAgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihOb2RlKiBjdXJyZW4KIAogICAgIGZvciAoTm9kZSogbm9kZSA9IG9wZXJhbmROb2RlOyBub2Rl
OykgewogICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKLSAgICAgICAg
ICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7
CisgICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgp
LnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX3Jv
b3RUb0FyZ3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5v
ZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQpAQCAtMTY1Niw3ICsx
Njc2LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKSwgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZmFiOWNmMDJh
MjU5NzZlZjQ3ZDE3OTA1YmFkOWNlMDNlMzgyYmNlNS4uZjdhMWQ4MjE0YzMwMmQ3ZDk2YWMyYTc3
YTAxODY2YTlkMTE5ZjUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAt
ODQwLDEzICs4NDAsMTMgQEAgcHVibGljOgogICAgIC8vIFF1aWNrbHkgcXVlcnkgaWYgYSBzaW5n
bGUgbG9jYWwgaXMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgaXMgZmFzdGVyIHRoYW4g
Y2FsbGluZwogICAgIC8vIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgaWYgeW91IHdpbGwgb25seSBx
dWVyeSBvbmUgbG9jYWwuIEJ1dCwgaWYgeW91IHdhbnQgdG8ga25vdyBhbGwgb2YgdGhlCiAgICAg
Ly8gbG9jYWxzIGxpdmUsIHRoZW4gY2FsbGluZyB0aGlzIGZvciBlYWNoIGxvY2FsIGlzIG11Y2gg
c2xvd2VyIHRoYW4gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKS4KLSAgICBib29sIGlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAgICBib29sIGlzTGl2ZUluQnl0
ZWNvZGUoT3BlcmFuZCwgQ29kZU9yaWdpbik7CiAgICAgCi0gICAgLy8gUXVpY2tseSBnZXQgYWxs
IG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlz
IGRvZXNuJ3QgZ2l2ZSB5b3UKKyAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1
bWVudCBsb2NhbHMgYW5kIHRtcHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24n
dCBnaXZlIHlvdQogICAgIC8vIGFueSBhcmd1bWVudHMgYmVjYXVzZSB0aG9zZSBhcmUgYWxsIHBy
ZXN1bWVkIGxpdmUuIFlvdSBjYW4gY2FsbCBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIHRvCiAgICAg
Ly8gYWxzbyBnZXQgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNhbGxp
bmcgaXNMaXZlSW5CeXRlY29kZSgpIGZvciBlYWNoIGxvY2FsLgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxM
b2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3Igbm90IHJlZHVu
ZGFudGx5IHJlcG9ydGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGluIGNhc2Ugb2Yg
YSB2YXJhcmdzCiAgICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93cyB0aGF0IGFy
Z3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJhcmdzCkBAIC04
ODEsNiArODgxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5
dGVjb2RlW3JlbGF0aXZlTG9jYWxdKQogICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29k
ZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+bnVtVG1wcygpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5l
c3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0
bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLCBPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MDQsOSArOTEyLDkgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwg
b2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5
IHVzZWZ1bCBpZgorICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhlIGxvY2FscyBh
bmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCiAgICAgLy8g
eW91IHdhbnQgdG8gY29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxvY2FscyBmcm9tIHR3byBkaWZm
ZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENv
ZGVPcmlnaW4pOworICAgIEJpdFZlY3RvciBsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29k
ZU9yaWdpbik7CiAKICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9wcmlhdGVMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNDYWxsZXJPcmln
aW4pCiAgICAgewpAQCAtOTM4LDEyICs5NDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAgICAgfQogICAgIAotICAgIC8v
IFRlbGxzIHlvdSBhbGwgb2YgdGhlIGFyZ3VtZW50cyBhbmQgbG9jYWxzIGxpdmUgYXQgdGhlIGdp
dmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8vIGV4dGVuc2lvbiB0byBmb3JB
bGxMb2NhbHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMg
cHJlc3VtZWQgbGl2ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVyYW5kcyBsaXZl
IGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKKyAgICAvLyBleHRlbnNp
b24gdG8gZm9yQWxsTG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3Vt
ZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KICAgICB2b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdp
biwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIGZvckFsbExvY2Fsc0xp
dmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAgICAgICBmb3JBbGxMb2NhbHNB
bmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAgICAgIAogICAg
ICAgICAvLyBSZXBvcnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBsaXZlLgogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyBhcmd1bWVudC0tOykKQEAgLTExMTQsNiArMTEyMiw3IEBAIHB1YmxpYzoKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5zaWduZWQg
bV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2ln
bmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTExYzQ1YjA1
NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhiZTM4NGUz
ZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0
U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fYWJzdHJh
Y3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFyaWFibGVz
KG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMp
Ci0gICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2UsIGdyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIpCiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaAppbmRleCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcxMjk5Li4x
ODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBAIC0xNjcs
MTMgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX3Zhcmlh
Ymxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9w
ZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5kZXgob3Bl
cmFuZCkpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkp
OyB9Ci0gICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRleChpbmRleCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAz
ZDg0M2NlNThmMjBiNDExNjMzOWZjZGE5NTg4YWViYTZiN2E4YzJlLi41M2RiOWNkMTRjYWM2YjZl
NjY4MmVmZGY0YmE3OTQ4OTdjYTVkNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9z
ckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENvZGVM
b2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7
CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlv
bkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVy
ZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRz
KCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdldCA9IGp1
bXAoKTsKLSAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVs
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayh0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVt
cCgpOworICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAg
ICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9T
UkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkgIT0gdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUt
Pm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgp
LnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAgICAg
ICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAgICAg
ICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAppbmRleCA2OGNhOThkZjZmNWM0YjdiNjM3MmNjMTU4MThlYzI1NzI4
MmY4OWQ5Li41MGYxZDg5M2RhMzAyMTAyYjk1ZTc4YWM2MDQzOWQ4NjIzNmYzY2E2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyArMTM1LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0
ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxs
U2l0ZS5iaXRzKCkpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAg
IH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhj
ZXB0aW9uIGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXgg
NDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhhYzI1Y2E2MzEzNC4uNDVlY2I0NmFhMjQ0M2Jh
MWI5NTU3MTZiYzFmNDJhNzA4YTFhMDQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFy
dGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
Ym9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNp
Z25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2Rl
IGlzIG5vdCBtZWFudCB0byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4g
SWYgd2UgZ290IGxpdmVuZXNzIHdyb25nLAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxk
IHJldHVybiBmYWxzZSBmb3IgYSBGbHVzaCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcg
QEAgcHVibGljOgogICAgICAgICBhdXRvIGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAo
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFs
bEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07
ICkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9n
cmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgpID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5h
dChpKS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29v
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
QEAgLTExNSw4ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNh
dGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7
CiAgICAgICAgIEhhbmRsZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7
Ci0gICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRD
YXRjaEhlYWQucmVzaXplKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpKTsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1f
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhh
bmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hl
ZENvZGVPcmlnaW47CkBAIC0xMzMsMTEgKzEzMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYg
KEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0
Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5m
aWxsKGZhbHNlKTsKIAogICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNh
dGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJh
bmQudG9Mb2NhbCgpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxs
TG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4
LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVy
UmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1NiwxMiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9w
ZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhp
bmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAg
YXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRv
TG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGZs
dXNoID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGlu
ZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3OCw2ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0
bXAgPSAwOyB0bXAgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3Rt
cCkKKyAgICAgICAgICAgICAgICBmbHVzaChPcGVyYW5kKFRtcE9wZXJhbmQsIHRtcCkpOwogICAg
ICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zm
c2V0KCkpKTsKICAgICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChu
b2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0
ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xv
Y2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5v
ZGVJbmRleCwgb3BlcmFuZCkpOwogCiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5k
KG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAg
ICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNj
ZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikg
ewpAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50
KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFy
aWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUy
Yjk2NzYzNzEzM2Q2YTBmZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJi
NjdiMDU0YzFhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoCiAgICAgICAgICAgICBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0g
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAo
T3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1
cnJlbnRFcG9jaDsKICAgICAgICAgICAgIH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewot
ICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9z
dGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRF
cG9jaCwgIiwgbG9jYWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3
ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9
IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkgPSBFcG9jaCgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSkgPSBFcG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhp
dCkKQEAgLTExNiwxNSArMTE2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwg
YSBsb2NhbCBldmVuIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxp
dmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5k
IGF0ICIsIG5vZGUsICI6ICIsIHJlZywgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3Bl
cmFuZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3Bl
cmFuZCkgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM5MTU5
MzcyMjlmMjhhN2FhMmU2NTVmNTI1MWY5NmY0MDRlMzNiNDYuLmI4MDE1NWU5MzU2MjlkZjJjZGUz
OWFiNjQ2MzQ0MDA0NzBjNzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBA
IC0yNTAsMTMgKzI1MCwxMyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAg
fQogICAgIAotICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNo
Rm9ybWF0IGZvcm1hdCkKLSAgICAgICAgOiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0Rh
dGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFu
ZChvcGVyYW5kKQogICAgICAgICAsIGZvcm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAg
IApAQCAtOTAyLDYgKzkwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAg
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1l
bnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAg
IGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC05MjMsOSArOTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAg
c3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1
cm4gY2hpbGQxKCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2Ug
Q2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBj
YXNlIENvbnN0cnVjdFZhcmFyZ3M6CkBAIC05NzMsOSArOTc2LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9vcEluZm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAg
IH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFu
ZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7
CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0K
ICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk4Myw3ICs5ODYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGlu
ZUxvY2FsKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAg
Ym9vbCBoYXNVbmxpbmtlZE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7
CiAgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBAIC05OTYsMTAgKzk5OSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHVu
bGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5kKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5r
ZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8u
YXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0
YSgpCkBAIC0xMzUwLDcgKzEzNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2Fk
VmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3Mg
fHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZh
cmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09IFZhcmFyZ3NMZW5ndGg7
CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCAyNGM3MzNkMzg3MDI3OWY0
YTU2YjRlNjg4YmYwYmYwNmFjMjRjMWQ0Li5lM2U5YzMyZjhkMDgxM2E2YWRhMjJhYWNjZDM3NDQy
ZDRlYmQ5ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC03
NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhH
ZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNl
dExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1c2VkIGluIFNTQSBmb3JtIHRv
IHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2ICsyMDMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlWYWxXaXRoVGhpcywgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRC
eVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQ
dXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCAzMjgwZjg3YTYyNjdkZjAzNGM4NGUzMzE4NTMwYzc0
MTllNTVlOTdlLi40MjQ3ZGVhZWM3Y2JiY2U2MDgzYWE4NzMyYjljMjc3ZjVlZmQyOGRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5IEBACiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci1uYW1lc3BhY2Ug
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShH
cmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFu
YWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGljOgogICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAg
ICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFM
b2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsKICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAgICAgIH07CkBAIC05MSw3ICs4
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAgICAgICAgICAgICAg
ICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAgICAgIH0KQEAgLTEw
Niw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIGNoYW5naW5n
IEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxh
YmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjAsNyArMTE4LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+
c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29y
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgcHJ1bmluZyBCbG9jayAjIiwg
c3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmls
aXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQnl0ZWNvZGVMaXZl
bmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYsMjggQEAgdm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazogewogICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkuc2V0Rmx1c2goZGF0YS0+Zmx1
c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEt
Pm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1
c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENv
bmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRT
dGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5s
b2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gQXZhaWxhYmls
aXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlVW5hdmFpbGFi
bGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApAQCAtMjQyLDE1ICsyNDAsMTggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZh
cmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+
Y291bnQpID0KLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMy
LCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChkYXRhLT5jb3VudCkgPSBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQz
MiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEt
PmxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Ci0gICAgICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkgPQorICAgICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIGRhdGEtPm1h
Y2hpbmVTdGFydCArIGkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0y
NzIsMjAgKzI3MywyMCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhl
Y3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50
IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1l
bnRDb3VudCA9Ci0gICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywg
bm9kZSksIGFyZ3VtZW50Q291bnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkgY2FsbGVlID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9j
LCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoaSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUsIGkp
LCBhcmd1bWVudCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRiODQzZTg5MGRjNy4u
ZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgIC8vIDcpIEZpeCB0aGUgY2FsbCBmcmFtZSB0byBo
YXZlIHRoZSByaWdodCBjb2RlIGJsb2NrLgogICAgIAotICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJs
b2NrKio+KHBpdm90IC0gMSAtIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykgPSBjb2RlQmxvY2s7
CisgICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrICsgMSkpID0gY29kZUJsb2NrOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmluZyBkYXRhIGJ1ZmZl
ciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAtMzgyLDEwICszODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwogICAgIEFTU0VSVChp
bnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxp
bmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFz
ZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWlu
dGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNoT1NSRW50cnlCdWZmZXItPmRh
dGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBidWZmZXItPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAg
ICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1MDY2NTUzZDBjYjRkNi4u
NjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9T
UkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxv
Y2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJh
bmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdS
b290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZI
aW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksCisgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlh
YmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAgICAgICAgICAgICAgIEVkZ2Uo
bG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCmluZGV4IDE4YzY0MTQ3OTM0MjQ2OWI0MWNhOGY5OGYzMDhiM2E0YzkzM2Jh
OTguLjA1ZGU5NThjYWVlZjFiOGYwOWUzMmQwOTdhOGZlMzJkNjc3NDIwMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNp
bmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFy
Z3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5o
IgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQVVN0YXRlID0gUHJvYmU6OkNQ
VVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0OwotdXNpbmcgRnJhbWUgPSBQ
cm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6
OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFz
ZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFByb2JlOjpDb250ZXh0Jiwg
Vk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7
Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVpbnQzMl90IG9zckV4aXRJbmRl
eCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRl
JiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlmIChzb3VyY2UuaXNBZGRyZXNz
KCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1
bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsgc291cmNlLm9mZnNldCgpLCBz
aXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNW
YWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChzb3VyY2UuaGFzS25vd25UYWco
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+
KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMy
X3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIo
KSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+
IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVz
Rm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAg
ICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVy
cyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNl
dDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMt
PnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxTdGFja0ZyYW1lID0gY29udGV4
dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxl
ZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gVGhlIGNhbGxlZSBz
YXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFjaywgbm90IHRoZSByZWNvdmVy
ZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkg
ZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQgb2YKLSAgICAgICAgLy8gZ29p
bmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNl
dCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAgY29udGV4dC5ncHIoZW50cnku
cmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9m
KFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJz
OjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgYXV0byYg
c3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBj
b25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxs
RlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUo
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsK
LSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAg
ICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQuZnAoKSwgZW50cnkub2Zmc2V0
KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICB9
Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJl
Z2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3Vu
dCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJl
Y29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAgVUNQVVJlZ2lzdGVy
KiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRy
eVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0KLSAgICAvLyBSZXN0b3JlIGFs
bCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291
bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2
ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJl
ZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzaXplX3QgdWludHB0ck9mZnNl
dCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rlcik7Ci0gICAgICAgIGlmIChl
bnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCku
Z3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XTsKLSAgICAgICAgZWxzZSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygp
LmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9m
ZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMg
b24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNz
ZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJn
PFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLQotICAgIFZNRW50
cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsK
LSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdp
c3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0
ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
LSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAg
ICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBz
dGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVD
UFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRy
eS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5mcHIoKSkp
OwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkz
Mjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzIt
Yml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlI
ZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZl
T3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVk
VmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0
YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBSZWdpc3Rl
clNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0
ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVT
YXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVn
KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdWludHB0cl90IHNhdmVkUmVn
aXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlhVGFpbENhbGwgJiYgYmFzZWxp
bmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgc2F2ZWRSZWdpc3Rl
clZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zmc2V0KCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBjb250ZXh0LmdwcihlbnRyeS5y
ZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRSZWdpc3RlclZhbHVlKTsKLSAg
ICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAw
Ci0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2Nr
KikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9j
ayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZv
aWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFs
UmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19S
RUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmlu
Z0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1l
bnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNT
RVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlu
bGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0g
MTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMSkpOwotICAgIERpcmVjdEFy
Z3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCi0gICAgICAgIHZtLCBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVu
Z3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxlZSh2bSwgY2FsbGVlKTsKLQot
ICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNh
bGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBm
cmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
bGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgZnJh
bWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIEpTQ2Vs
bCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpj
b250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwot
Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIENsb25lZEFyZ3VtZW50
cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKLSAgICAgICAgdm0sIGds
b2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsK
LQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGlu
ZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFt
ZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9i
amVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUsIGNvbnN0IE9wZXJhbmRzPFZh
bHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRv
IG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNp
emUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBE
aXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAgICAgICAgICYmIHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2Rl
SUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5k
KGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQo
KSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5k
KGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0KLSAgICAgICAgICAgIGRmZ0pJ
VENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0KLSAgICAgICAg
aW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAg
ICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAgICAgICAgSlNGdW5jdGlvbiog
Y2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLmFzQ2Vs
bCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rp
b24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkp
OwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFy
Z3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOwotCi0gICAgICAgIEpTQ2VsbCogYXJndW1lbnRzT2JqZWN0OwotICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlyZWN0QXJn
dW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0g
Y3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGlu
ZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAg
ICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoY29u
dGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoYXJndW1lbnRzT2JqZWN0
KSk7Ci0KLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQp
OwotICAgIH0KLX0KLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgZXh0cmEgaW5pdGlh
bGl6YXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGluIG9yZGVyCi0vLyBvZiBtb3N0IGxpa2Vs
eSBuZWVkZWQgKGxvd2VyIGVudW0gdmFsdWUpIHRvIGxlYXN0IGxpa2VseSBuZWVkZWQgKGhpZ2hl
ciBlbnVtIHZhbHVlKS4KLS8vIEVhY2ggbGV2ZWwgaW5pdGlhbGl6YXRpb24gaW5jbHVkZXMgdGhl
IHByZXZpb3VzIGxvd2VyIGVudW0gdmFsdWUgKHNlZSB1c2Ugb2YgdGhlCi0vLyBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgdmFsdWUgYmVsb3cpLgotZW51bSBjbGFzcyBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgewotICAgIE5vbmUsCi0gICAgU3BlY3VsYXRpb25SZWNvdmVyeSwKLSAgICBWYWx1
ZVByb2ZpbGVVcGRhdGUsCi0gICAgQXJyYXlQcm9maWxlVXBkYXRlLAotICAgIE90aGVyCi19Owot
Ci12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAg
Vk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8
Q2FsbEZyYW1lKj4oKTsKLSAgICBBU1NFUlQoJmNhbGxGcmFtZS0+ZGVwcmVjYXRlZFZNKCkgPT0g
JnZtKTsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsKLQotICAgIGlmICh2YWxpZGF0ZURG
R0RvZXNHQykgewotICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBleGl0IG9wdGltaXplZCBjb2Rl
LiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGltaXplZAotICAgICAgICAvLyBjb2RlIHJ1
bm5pbmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAgICB2bS5oZWFwLnNldEV4cGVjdERvZXNH
Qyh0cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1lRm9yQ2F0Y2gpIHsKLSAgICAg
ICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2g7Ci0gICAgICAgIGNvbnRleHQuZnAo
KSA9IGNhbGxGcmFtZTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0KLSAgICAvLyBJdCdzIHNv
cnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMs
IGRvaW5nIHNvIHdvdWxkbid0Ci0gICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotCi0gICAgdWludDMyX3QgZXhpdEluZGV4
ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIERGRzo6SklUQ29kZSogZGZnSklUQ29kZSA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBPU1JFeGl0JiBleGl0ID0gZGZnSklUQ29kZS0+
b3NyRXhpdFtleGl0SW5kZXhdOwotCi0gICAgQVNTRVJUKCF2bS5jYWxsRnJhbWVGb3JDYXRjaCB8
fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBFWENFUFRJT05fQVNTRVJUX1VO
VVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24oKSB8fCAhZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoIWV4aXQuZXhpdFN0YXRlKSkgewotICAgICAgICBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gRXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsOjpOb25lOwotCi0gICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBl
eGVjdXRlIHRoaXMgYmxvY2sgb25jZSBmb3IgZWFjaCBPU1JFeGl0IHJlY29yZC4gVGhlIGNvbXB1
dGVkCi0gICAgICAgIC8vIHJlc3VsdHMgd2lsbCBiZSBjYWNoZWQgaW4gdGhlIE9TUkV4aXRTdGF0
ZSByZWNvcmQgZm9yIHVzZSBvZiB0aGUgcmVzdCBvZiB0aGUKLSAgICAgICAgLy8gZXhpdCByYW1w
IGNvZGUuCi0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9j
ay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0gICAgICAgIFNwZWN1
bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKGV4aXQubV9y
ZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICByZWNvdmVyeSA9ICZkZmdK
SVRDb2RlLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVyeUluZGV4XTsKLSAgICAg
ICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9PSBHZW5l
cmljVW53aW5kKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpP
dGhlcik7Ci0KLSAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBudWxscHRyOwot
ICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICAgICAgaWYgKGV4
aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSk7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX2tp
bmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZTsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3Jp
Z2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlID0g
cHJvZmlsZWRDb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQzMl90IGFjdGl2ZVRocmVz
aG9sZCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKTsKLSAgICAgICAgZG91YmxlIGFk
anVzdGVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9J
bnQoYWN0aXZlVGhyZXNob2xkLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChh
ZGp1c3RlZFRocmVzaG9sZCA+IDApOwotICAgICAgICBhZGp1c3RlZFRocmVzaG9sZCA9IEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBhZGp1c3RlZFRocmVzaG9sZCk7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBib29sIGV4
aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9ja0Zv
ckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwotICAgICAgICB2
b2lkKiBqdW1wVGFyZ2V0OwotICAgICAgICBpZiAoZXhpdFRvTExJbnQpIHsKLSAgICAgICAgICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0
aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0
KS5wdHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBK
SVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpOwotICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0g
Y29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjb2Rl
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENv
bXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCi0gICAgICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+IG9wZXJhbmRzOwotICAgICAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+IHVuZGVm
aW5lZE9wZXJhbmRTcGFuczsKLSAgICAgICAgZGZnSklUQ29kZS0+dmFyaWFibGVFdmVudFN0cmVh
bS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBkZmdKSVRDb2RlLT5t
aW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5kcywgJnVuZGVmaW5lZE9wZXJh
bmRTcGFucyk7Ci0gICAgICAgIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJPZmZzZXQgPSAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90Pihjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVp
cmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKTsKLQotICAgICAgICBl
eGl0LmV4aXRTdGF0ZSA9IGFkb3B0UmVmKG5ldyBPU1JFeGl0U3RhdGUoZXhpdCwgY29kZUJsb2Nr
LCBiYXNlbGluZUNvZGVCbG9jaywgb3BlcmFuZHMsIFdURk1vdmUodW5kZWZpbmVkT3BlcmFuZFNw
YW5zKSwgcmVjb3ZlcnksIHN0YWNrUG9pbnRlck9mZnNldCwgYWN0aXZlVGhyZXNob2xkLCBhZGp1
c3RlZFRocmVzaG9sZCwganVtcFRhcmdldCwgYXJyYXlQcm9maWxlLCBleGl0VG9MTEludCkpOwot
Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikpIHsKLSAgICAgICAgICAg
IFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVy
OwotICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRk
T1NSRXhpdCgKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFj
ayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0gICAgICAgICAgICAg
ICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxlSW52YWxpZGF0aW9uKTsK
LSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9maWxlckV4aXQgPSBwcm9maWxlckV4aXQ7
Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQo
KSkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwot
Ci0gICAgICAgIGV4aXQuZXhpdFN0YXRlLT5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpKSkgewotICAgICAgICAg
ICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykgZnJvbSAlcywgd2l0aCBvcGVy
YW5kcyA9ICVzXG4iLAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQu
bV9jb2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhl
eGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCi0gICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRh
KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NSRXhpdFN0YXRlJiBleGl0U3RhdGUgPSAq
ZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotCi0gICAgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzID0gZXhpdFN0YXRlLm9wZXJhbmRzOwotICAgIFZlY3Rv
cjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4mIHVuZGVmaW5lZE9wZXJhbmRTcGFucyA9IGV4aXRTdGF0
ZS51bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0KLSAgICBjb250ZXh0LnNwKCkgPSBjb250ZXh0LmZw
PHVpbnQ4X3QqPigpICsgZXhpdFN0YXRlLnN0YWNrUG9pbnRlck9mZnNldDsKLQotICAgIC8vIFRo
ZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGlsZSBsb29wIGlzIHNvIHdlIGNhbiBi
cmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCi0gICAgZG8gewotICAgICAgICBhdXRv
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19jYXN0PEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCk7Ci0KLSAgICAgICAg
aWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6
Ok5vbmUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0
aWxpemF0aW9uIGxldmVsOiBTcGVjdWxhdGlvblJlY292ZXJ5Ci0KLSAgICAgICAgLy8gV2UgbmVl
ZCB0byBkbyBzcGVjdWxhdGlvbiByZWNvdmVyeSBmaXJzdCBiZWNhdXNlIGFycmF5IHByb2ZpbGlu
ZyBhbmQgdmFsdWUgcHJvZmlsaW5nCi0gICAgICAgIC8vIG1heSByZWx5IG9uIGEgdmFsdWUgdGhh
dCBpdCByZWNvdmVycy4gSG93ZXZlciwgdGhhdCBkb2Vzbid0IG1lYW4gdGhhdCBpdCBpcyBsaWtl
bHkKLSAgICAgICAgLy8gdG8gaGF2ZSBhIHJlY292ZXJ5IHZhbHVlLiBTbywgd2UnbGwgZGVjb3Jh
dGUgaXQgYXMgVU5MSUtFTFkuCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5
ID0gZXhpdFN0YXRlLnJlY292ZXJ5OwotICAgICAgICBpZiAoVU5MSUtFTFkocmVjb3ZlcnkpKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVz
dCgpKSA9IGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gY3B1Lmdwcjx1aW50
MzJfdD4ocmVjb3ZlcnktPnNyYygpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAg
ICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNwZWN1
bGF0aXZlQWRkU2VsZjoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnktPmRlc3Qo
KSkgPj4gMSkgXiAweDgwMDAwMDAwVTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAg
ICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNwZWN1
bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRl
c3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSByZWNvdmVyeS0+
aW1tZWRpYXRlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJU
KCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNw
dS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0
aW9uQ2hlY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJl
Y292ZXJ5LT5kZXN0KCkpID0gY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSBeIEpTVmFsdWU6OlZh
bHVlRmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFZhbHVlUHJvZmlsZVVw
ZGF0ZQotICAgICAgICBKU1ZhbHVlIHByb2ZpbGVkVmFsdWU7Ci0gICAgICAgIGlmICghIWV4aXQu
bV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBwcm9maWxlZFZhbHVlID0ganNWYWx1ZUZv
cihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAgIGlmIChNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAg
ICAgICAgICAgIHByb2ZpbGUucmVwb3J0VmFsdWUocHJvZmlsZWRWYWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0
aW9uTGV2ZWw6OlZhbHVlUHJvZmlsZVVwZGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IEFycmF5UHJvZmlsZVVwZGF0
ZQotICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBleGl0U3RhdGUuYXJy
YXlQcm9maWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSk7
Ci0gICAgICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tp
bmQgPT0gQmFkSW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRD
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5
dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgICAgICBib29sIGRvUHJvZmlsZSA9ICFpbnN0
cnVjdGlvbi0+aXM8T3BHZXRCeUlkPigpIHx8IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCku
bWV0YWRhdGEocHJvZmlsZWRDb2RlQmxvY2spLm1fbW9kZU1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJ
ZE1vZGU6OkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgaWYgKGRvUHJvZmlsZSkgewotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcHJvZmlsZWRWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1
Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPm9ic2VydmVB
cnJheU1vZGUoYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OkFycmF5UHJvZmlsZVVwZGF0ZSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIEV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IE90
aGVyCi0gICAgICAgIGlmIChVTkxJS0VMWShleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSkg
ewotICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVj
YXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KLSAgICAgICAgICAgIC8v
IFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0g
ICAgICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29udGV4dC5mcCgpID09IHZtLmNh
bGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChleGl0U3RhdGUucHJv
ZmlsZXJFeGl0KQotICAgICAgICAgICAgZXhpdFN0YXRlLnByb2ZpbGVyRXhpdC0+aW5jQ291bnQo
KTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRFYWNoT1NSRXhpdCgpKSkK
LSAgICAgICAgICAgIHByaW50T1NSRXhpdChjb250ZXh0LCB2bS5vc3JFeGl0SW5kZXgsIGV4aXQp
OwotCi0gICAgfSB3aGlsZSAoZmFsc2UpOyAvLyBFbmQgZXh0cmEgaW5pdGlhbGl6YXRpb24uCi0K
LSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQo
IShjb250ZXh0LmZwPHVpbnRwdHJfdD4oKSAmIDB4NykpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcikg
PT0gSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBBU1NFUlQoY3B1LmdwcjxpbnQ2NF90PihHUFJJ
bmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOb3RDZWxsTWFzayk7Ci0jZW5k
aWYKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhl
IHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAgLy8gTm90ZTogd2UgbmVlZCB0byByZWNvdmVy
IHZhbHVlcyBiZWZvcmUgcmVzdG9yaW5nIGNhbGxlZSBzYXZlIHJlZ2lzdGVycyBiZWxvdwotICAg
IC8vIGJlY2F1c2UgdGhlIHJlY292ZXJ5IG1heSByZWx5IG9uIHZhbHVlcyBpbiBzb21lIG9mIGNh
bGxlZSBzYXZlIHJlZ2lzdGVycy4KLQotICAgIGludCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7Ci0gICAgc2l6ZV90IG51bWJlck9mT3BlcmFuZHMg
PSBvcGVyYW5kcy5zaXplKCk7Ci0gICAgc2l6ZV90IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucyA9
IHVuZGVmaW5lZE9wZXJhbmRTcGFucy5zaXplKCk7Ci0KLSAgICBzaXplX3QgbmV4dFVuZGVmaW5l
ZFNwYW5JbmRleCA9IDA7Ci0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSBu
dW1iZXJPZk9wZXJhbmRzOwotICAgIGlmIChudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMpCi0gICAg
ICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4
dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLQotICAgIEpTVmFsdWUgdW5kZWZpbmVk
ID0ganNVbmRlZmluZWQoKTsKLSAgICBmb3IgKHNpemVfdCBzcGFuSW5kZXggPSAwOyBzcGFuSW5k
ZXggPCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnM7ICsrc3BhbkluZGV4KSB7Ci0gICAgICAgIGF1
dG8mIHNwYW4gPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbc3BhbkluZGV4XTsKLSAgICAgICAgaW50
IGZpcnN0T2Zmc2V0ID0gc3Bhbi5taW5PZmZzZXQ7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0g
Zmlyc3RPZmZzZXQgKyBzcGFuLm51bWJlck9mUmVnaXN0ZXJzOwotCi0gICAgICAgIGZvciAoaW50
IG9mZnNldCA9IGZpcnN0T2Zmc2V0OyBvZmZzZXQgPCBsYXN0T2Zmc2V0OyArK29mZnNldCkKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob2Zmc2V0LCB1bmRlZmluZWQpOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZk9wZXJhbmRzOyArK2lu
ZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNb
aW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMudmlydHVhbFJl
Z2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShpbmRleCA9PSBu
ZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4KSkgewotICAgICAgICAgICAgaW5kZXggKz0gdW5kZWZp
bmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXgrK10ubnVtYmVyT2ZSZWdpc3Rl
cnMgLSAxOwotICAgICAgICAgICAgaWYgKG5leHRVbmRlZmluZWRTcGFuSW5kZXggPCBudW1VbmRl
ZmluZWRPcGVyYW5kU3BhbnMpCi0gICAgICAgICAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJ
bmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJz
dEluZGV4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRP
cGVyYW5kSW5kZXggPSBudW1iZXJPZk9wZXJhbmRzOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwg
Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0KLSAgICAgICAgc3dpdGNo
IChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY2FzZSBJbkdQUjoK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmdwcjxKU1ZhbHVlPihy
ZWNvdmVyeS5ncHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQotICAgICAgICBjYXNl
IEluUGFpcjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnRhZ0dQUigpKSwgY3B1LmdwcjxpbnQzMl90PihyZWNv
dmVyeS5wYXlsb2FkR1BSKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAg
ICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPEpTQ2VsbCo+KHJlY292ZXJ5LmdwcigpKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRDZWxsKCkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgY2Fz
ZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBqc0Jvb2xlYW4oY3B1Lmdwcjxib29sPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0
YWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2Fm
ZUpTVmFsdWUoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2Fu
VW5zYWZlSlNWYWx1ZSgpLnBheWxvYWQoKSkpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkuZ3ByKCkp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNh
bGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJ
bnQzMigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkgPj4gSlNW
YWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVVbmJveGVkSW50NTIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5Lmdwcigp
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNW
YWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVV
bmJveGVkU3RyaWN0SW50NTIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAg
ICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNw
dS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihj
YWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVk
RG91YmxlKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENvbnN0YW50
OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCByZWNvdmVyeS5jb25zdGFu
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHlldC4KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9u
ZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb250
ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGlu
ZUNvZGVCbG9jayk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNwdS5ncHIoR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFs
dWU6Ok51bWJlclRhZyk7Ci0gICAgY3B1LmdwcihHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVy
KSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOb3RDZWxsTWFzayk7
Ci0jZW5kaWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwot
Ci0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0
aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhhdCBhcmd1bWVudHMKLSAgICAvLyBy
ZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2Ug
ZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQotICAgIC8vIHJlZmVyIHRvIGNlcnRh
aW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBv
bmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAvLyBOb3RlIHRoYXQgd2UgYWxzbyByb3Vn
aGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVk
IG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNhbGwgZnJhbWUgc2NvcGUgLSBidXQgZm9y
IG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0KLSAgICBERkc6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKGNvbnRleHQsIGNvZGVCbG9jaywgZGZnSklUQ29kZSwgb3BlcmFuZHMpOwotCi0gICAg
Ly8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhp
dGluZyBPU1IsIHdlIGtub3cKLSAgICAvLyB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNv
ZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKLSAgICAvLyBjb3VudGVy
IG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2Fs
bCBmcmFtZXMKLSAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0
IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gT1NSIGV4aXQuIFdlIHdh
bnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAgIC8vCi0gICAgLy8g
KGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRl
ciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQg
Y29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAgICB3YW50IHRvIGRvIHN1Y2gg
cmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCi0gICAgLy8KLSAgICAv
LyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1
bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2Qs
IHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8vICAgICBwZXJmb3JtIE9TUiBl
bnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgotICAgIC8vCi0gICAgLy8g
KGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkg
cmV0cnkgT1NSCi0gICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUg
ZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAvLyAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2
ZS4KLSAgICAvLwotICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2Ug
dGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8gICAgIHJ1bm5pbmcgaW4gYSBo
b3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCi0gICAg
Ly8KLSAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNv
dW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRo
aXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8vIChhKSBhbmQgKGIpLCBzaW5j
ZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKLSAg
ICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwg
aWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBo
YXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKLSAgICAvLyBiZWNvbWUg
bm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBl
bnRyeQotICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBv
bGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gZ29vZCBqb2Igb2YgZW5zdXJpbmcg
KGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKLSAgICAvLyBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KLSAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRp
b24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vIGxhcmdlciB0aGFuIHRoZSBudW1i
ZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKLSAgICAv
LyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBz
bywgd2Ugc2V0IHRoZQotICAgIC8vIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUg
Y291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4K
LQotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hl
Y2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2RlQmxvY2s6Ok9wdGltaXplQWN0
aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KGJh
c2VsaW5lQ29kZUJsb2NrLCBjb2RlQmxvY2ssICZleGl0KTsKLQotICAgIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotICAgIGFkanVzdEFu
ZEp1bXBUb1RhcmdldChjb250ZXh0LCB2bSwgY29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jaywg
ZXhpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ29udGV4dCYg
Y29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jaywgY29uc3QgT1NS
RXhpdEJhc2UmIGV4aXQpCi17Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7Ci0gICAgRnJh
bWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NS
IGV4aXQKLSAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUxMQotICAgIEFTU0VS
VChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aml0
VHlwZSgpKSk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxvY2sqPihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIGNvbnN0IENv
ZGVPcmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2Rl
T3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2Rl
T3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5n
VGFpbENhbGxzKCkpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soKmNvZGVPcmlnaW4sIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZDsKLSAgICAgICAgQ29kZU9y
aWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWls
Q2FsbHMoJnRydWVDYWxsZXJDYWxsS2luZCk7Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lID0g
Y3B1LmZwKCk7Ci0KLSAgICAgICAgYm9vbCBjYWxsZXJJc0xMSW50ID0gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1l
LT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5QQyA9IGZyYW1lLmdldDx2b2lk
Kj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAg
ICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWlu
dDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9p
ZCopOwotICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIocmV0dXJuUEMsIGJpdHdp
c2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRy
eVNQKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZy
YW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7Ci0gICAgICAgICAgICBjYWxsZXJGcmFt
ZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBC
eXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRl
eCgpOwotICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxlclJldHVyblBDKGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxL
aW5kLCBjYWxsZXJJc0xMSW50KTsKLQotICAgICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGlu
ZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNhbGxlckZyYW1lID0gY3B1LmZwPHVpbnQ4
X3QqPigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCktPnN0YWNrT2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICB2b2lk
KiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1
cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSB0
YWdDb2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsK
LSNlbmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnJl
dHVyblBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgICAgIC8vIFJlc3Rv
cmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotICAgICAg
ICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwgdGhhdCB3aWxsIHJldHVy
biBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gY29w
eSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMgYWxyZWFkeSBzYXZlZCBm
b3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAgIHNhdmVPckNvcHlDYWxs
ZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7Ci0KLSAgICAgICAgaWYg
KGNhbGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAg
ICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwg
YmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpLm9m
ZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lz
dGVyczo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8
dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50LCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1lKTsKLSAgICAgICAg
ZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCksIGNh
bGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygp
OwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2Nh
dGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhl
IDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5i
aXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZzZXQs
IGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIFRhZ09mZnNl
dCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSk7Ci0j
ZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJl
Y3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBuZWVk
IHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRh
aWwgY2FsbHMKLSAgICBpZiAoY29kZU9yaWdpbikgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotI2VuZGlmCi0gICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNl
dCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBU
b1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0KQotewotICAgIE9TUkV4
aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0KLSAgICBXVEY6OnN0
b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0
aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8vIFdlIGJhcnJpZXIg
YWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVudCBpbmxpbmUgc3Rh
Y2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5saW5lZCBmdW5jdGlv
biBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3
ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBpZiBib3RoCi0gICAg
Ly8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBi
YWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1FOiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBDb2RlQmxvY2sgb3ducwot
ICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxGcmFtZVNldCogaW5saW5l
Q2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2Fs
bEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpCi0g
ICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0SW5saW5lQ2FsbEZyYW1l
ID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGV4aXRJbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+
KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5qdW1wVGFyZ2V0Owot
ICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5l
ZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5jYWxsRnJhbWVGb3JDYXRj
aCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAgICB2bS50b3BDYWxsRnJh
bWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAoZXhpdFN0YXRlLT5pc0p1
bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmln
aW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAgICAgIGNvbnRleHQuZ3By
KExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikgPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5v
ZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3RydWN0aW9uKTsKLSNl
bmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICAg
ICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJlbnRJbnN0cnVjdGlvbjsK
LSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4o
anVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBjb250
ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4aXQpCi17Ci0gICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIENvZGVCbG9j
ayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgRXhpdEtpbmQg
a2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBkYXRhTG9nKCJTcGVjdWxh
dGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4aXQgIyIs
IG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJp
bmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7Ci0gICAgICAgIGRh
dGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0
RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCi0gICAg
ICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+b3B0
aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRhTG9nKCJu
byBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0dGlzb25lZCkiKTsK
LSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2NrLT5vc3JFeGl0Q291
bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0g
ICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVy
KGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxuIik7Ci0g
ICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAg
IEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIg
IiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVpbnQ2NF90IGJpdHMgPSBj
b250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gY29udGV4
dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotfQotCi0v
LyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgs
IHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1f
b3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+bV9vcmlnaW4ud2Fz
SG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQpAQCAtOTU4LDE1
ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNv
ZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3Jl
QXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbHVl
UmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElE
IHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0dWFsUmVnaXN0ZXI+IGFs
cmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJ
RCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5k
cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkg
IT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAgICAgICAgICAmJiByZWNv
dmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5k
cy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5
Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRz
LmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRz
LmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFy
Z3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAog
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLAogICAgICAgICAg
ICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGpp
dC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1
bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVh
bFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpLAog
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRS
ZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRz
PFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCi0gICAgICAgIGFscmVhZHlBbGxv
Y2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICAgICAgYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIH0K
IApAQCAtMTQ2NiwxNiArNTgxLDg0IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QKICAgICBpZiAo
ZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCisgICAgaWYg
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkp
IHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4ndCB1c2UgYSBwcm9iZSBidXQg
ZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0cyBpcyB0cmlja3kgb3RoZXJ3aXNlLi4u
CisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2YWx1ZXMob3BlcmFuZHMubnVtYmVyT2ZU
bXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRzLm51bWJlck9m
VG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvcGVyYW5kcy50bXAoaSk7CisK
KyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBhdXRvKiB0bXBTY3JhdGNoID0gc2Ny
YXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAgICAgICBqaXQucHJvYmUoWz0sIHZhbHVl
cyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJ
bmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtl
VW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAg
c2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVzW2kgKyB0bXBPZmZzZXRdOworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdoYXQgdGhlIEZUTCBkb2VzIGFu
ZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBz
aWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBj
YXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRl
LT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0bXBTY3JhdGNoW2kgKyB0bXBP
ZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNj
cmF0Y2hbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0
YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3Jp
Z2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFp
bENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUlu
ZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIGlmICgh
Y2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWlu
dGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFt
ZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0
ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRl
eCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBj
b252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAKICAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7
CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMudmlydHVhbFJlZ2lzdGVy
Rm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xv
Y2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
VG1wKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpbnQgb3BlcmFuZCA9IHJl
Zy5vZmZzZXQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9M
b2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5k
ZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZjMGIwZWI1NGQ1NGYxYTA0ZWI4ZS4uOWU5YmNlYTQ4MWMx
ZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIyYjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsxNTAsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBP
U1JFeGl0QmFzZSB7CiAKICAgICBmcmllbmQgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBpbGVPU1JFeGl0KENhbGxGcmFtZSopOwogCi0gICAgc3RhdGljIHZvaWQgZXhlY3V0ZU9TUkV4
aXQoUHJvYmU6OkNvbnRleHQmKTsKLQogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdEJhc2UuaAppbmRleCAzMTA5NjNkODQ0MzZjNTMzMjc4NGYwYTI5MmE0OWNiZTFiODJh
NTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJhYWNlYzBhZmJjM2MxMjQzNWRiOTZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCkBAIC03MCw2ICs3MCwxMSBAQCBz
dHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICByZXR1cm4gbV9raW5kID09IEdlbmVyaWNVbndp
bmQ7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzRXhpdGluZ1RvQ2hlY2twb2lu
dEhhbmRsZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkuY2hlY2twb2ludCgpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQg
Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggMmZm
M2VhOGI1ZmJiNmYzZjI3MjFkNTAyNDQ1NjI5OGIwODRkNTExNS4uNjI3NmE1OTU4ZTgwMDc2YWFi
ZDc4MTYzN2JiMzEwY2FlZWYyMWVmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjksMTIgKzI5LDE1IEBA
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZXMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIK
ICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKKyNpbmNsdWRlICJQcm9iZUNv
bnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xNDMsNiArMTQ2LDkgQEAgdm9pZCogY2FsbGVyUmV0dXJu
UEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBj
YWxsQnkKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTElu
dCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazsKIAorICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpCisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVj
a3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CisKICAgICB2b2lkKiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklzTExJ
bnQpIHsKQEAgLTIzOCw3ICsyNDQsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIC8vIGluIHByZXNl
bmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKLSAgICBqaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygp
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgIGNvbnN0IENvZGVPcmln
aW4qIGNvZGVPcmlnaW47CiAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2lu
OyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENh
bGxzKCkpIHsKQEAgLTMwNSwzMyArMzExLDM0IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxl
ckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygp
OwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiYXNlbGlu
ZUNvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKSkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQotICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgp
KSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogI2Vsc2UgLy8gVVNFKEpT
VkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3Jl
UHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAgICBqaXQuc3RvcmUzMihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5
SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CisgICAgICAgIGppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVs
cGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBh
cnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAogICAgIH0KIAogICAgIC8v
IERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRp
ZCBpbmxpbmUgdGFpbCBjYWxscwogICAgIGlmIChjb2RlT3JpZ2luKSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJ
bmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKSkuYml0cygpOwogI2Vsc2UK
LSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSku
cHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsK
KyAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5
dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
IGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoYnl0ZWNvZGVJbmRleCkuYXQoKS5wdHIoKTsKKyAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGlu
c3RydWN0aW9uKSkuYml0cygpOwogI2VuZGlmCi0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFn
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Cisg
ICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9u
Qml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKTsKICAgICB9CiB9CiAKQEAgLTM4MiwxMSArMzg5LDEyIEBAIHZvaWQgYWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0
LT5qaXRUeXBlKCkpKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQ7CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNFbnRyeVB0clRhZz4gY2hlY2twb2ludFJldHVyblRhcmdldDsKICAgICBib29sIGV4
aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9ja0Zv
ckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogICAgIGlmIChl
eGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGJ5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpID8gY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lIDog
Y3VycmVudEluc3RydWN0aW9uLm9wY29kZUlEKCkpOwogCiAgICAgICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJlZ1QyKTsKQEAgLTQw
Miw3ICs0MTAsMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYKICAgICAgICAganVt
cFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCku
ZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBCeXRlY29k
ZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4gPSBjb2RlQmxvY2tG
b3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpOworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0
LT5qaXRDb2RlTWFwKCkuZmluZChpbmRleEZvckNoZWNrcG9pbnRSZXR1cm4pOworICAgICAgICBp
ZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgY2hlY2twb2ludFJldHVy
blRhcmdldCA9IGNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgIGNvZGVMb2NhdGlvbiA9IENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJU
YWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSkpOworICAgICAgICB9CisKICAgICAg
ICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCAyMTZjNWJhYTE0ZDk2YjI5YjVkZDM2OWE3M2JmZWNi
NGIwM2RjMTk5Li43ZGE2YWZkNWMyMjFjOTdmZjkzZjQwMGNiMzQ5NDQ1NGQ0ZDQ5MjQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9k
ZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43
N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAg
ICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVl
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBs
aWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA1MGNhMDBiMDBi
OTQ4OGExMDMyODcyNjI4YTllMmVlODczZjJjMzc5Li5jZjA5ZDg3Mzk3NGE4NTYzM2EyZWRiNjg3
NzY5MmRiMTA3Njg0MDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKQEAgLTI5NDYsMTUgKzI5NDYsMTYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoK
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IG1hbmRhdG9yeU1pbmltdW0pCiB7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dCB7IGZpcnN0RWxlbWVudERlc3QgfTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1l
bnRzKTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
JmNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQpKSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCAt
IDEpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoIC0gMTsgaSA8IG1h
bmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCAr
IGkpID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Rk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhi
ZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi4yYjEwNWIyY2FkZTdiN2Q1NTg5ZmFk
ZWFmYjAyYmMwOTY0NWUwOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00MywxMSArNDMsOCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBE
RkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJs
aWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBw
dWJsaWM6CiAgICAgUGhhbnRvbUluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAg
OiBQaGFzZShncmFwaCwgInBoYW50b20gaW5zZXJ0aW9uIikKQEAgLTYyLDcgKzU5LDcgQEAgcHVi
bGljOgogICAgICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4g
VGhhdCBjYXVzZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RS
ZWZDb3VudCk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
IGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTcyLDcgKzY5LDcgQEAgcHVibGljOgog
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKQogICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAg
ICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFu
dG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAg
IH0KQEAgLTEwMywyMiArMTAwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxhc3RF
eGl0aW5nSW5kZXggPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5v
ZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAoREZHUGhhbnRv
bUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAg
bV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBudWxscHRyOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50TWF5YmU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5v
cGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQsMzggKzEzMSw0MiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9k
ZSwKICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2UsICIgdG8g
IiwgY3VycmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3Vy
cmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFscmVhZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7
CiAKLSAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBL
aWxsZWQgb3BlcmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tp
bGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQpOwogCiAg
ICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAg
ICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChv
cGVyYW5kID09IGFscmVhZHlLaWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxsZWQgYnkg
c2V0IGxvY2FsIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9
IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUp
CisgICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQob3Bl
cmFuZCk7IAorICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiB3
YXMgbm90IGRlZmluZWQgaW4gdGhpcyBibG9jay4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJh
bmQocmVnKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVy
YW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ug
b25seSBuZWVkIHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNl
ZCBzaW5jZSB0aGUgbGFzdAogICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBi
ZWZvcmUgdGhlIGxhc3QgZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBv
Y2goKSA9PSBjdXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVw
b2NoKCkgPT0gY3VycmVudEVwb2NoKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVwb2NoICIs
IGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBh
ZnRlciAiLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5k
ZXgpLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgIiAgICBJ
bnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7CisgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGlu
ZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgLy8gaW5j
cmVtZW50IHRoZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZp
eFJlZigpOwpAQCAtMTc5LDE0ICsxODAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGVNYXlFeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBk
b2VzIGV4aXQsIHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAg
ICAgICAgIC8vIHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAg
ICAgICAgYWxyZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
S2lsbGVkT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxl
ZCA9IG9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQobG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCAr
IDEpLCBwcm9jZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IGE1OGUxNzk2NTYwZmM2
ZDk0YmI0NjNkMTQyOTg4NmUwNzhmMGFmY2MuLmY1ZjA5NmM4ZWI1NmQ0NWZhOTg5YmI0OTM2Zjcy
ZDQ0ODE5NWExNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBo
ZWFwLm9wZXJhbmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdy
aXRlcyB0byBhbHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJl
cml6ZSgpLgogICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNh
bGxJZkFwcHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVh
cC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZSht
X3VuY29uZGl0aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3Rh
Y2spOwogICAgICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhl
YXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9u
LmhlYXAoKS5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2Fs
bElmQXBwcm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvcGVyYW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAKaW5kZXggNDQ3ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4uNWI0Zjk5
MjkzNDExNzljMjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcApA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1
ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZh
bHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXgg
ODA1MDUxNmNiZmVjYzg0ZmUxOTU4NDI4YTBjZjg3Y2Q1NGVlMTE3Yi4uMjIxYzUwMWRiZDE0YzA0
NTcyYTdmZTFkMTliZTZkMzE5N2MxM2YzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEz
NjUsNiArMTM2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAg
Y2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4IDg3
Mjc3NjBjNmVjYmRiMzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcuLmZkNjEyM2ZhOWYxZDUyOWU0
YzJlZTJjMGU3ZWRmNjNmMDdmNzhkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFj
ZSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
cHVibGljOgogICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAg
OiBQaGFzZShncmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhpcyBp
cyBpbXBvcnRhbnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewog
ICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsK
ICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCwxMSArODUsOCBA
QCBwdWJsaWM6CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1f
Z3JhcGgpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9j
a10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQp
OwotICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5k
c0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxb
YmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVy
YW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZhbHNlKTsK
KyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGJvb2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAxLDM0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIs
IGxpdmUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7CisgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxPcGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Npbmtp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJh
bmQsICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWRzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNI
ZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5v
ZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8
fCBub2RlLT5vcCgpID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG9wID09IFB1dFN0YWNrIHx8IG9wID09IFZhcmFyZ3NMZW5ndGggfHwgb3AgPT0gTG9hZFZhcmFy
Z3MgfHwgb3AgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AgPT0gS2lsbFN0YWNrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRl
SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBM
YXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6
eU5vZGUpIHsgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA6IHdyaXRlcykKKyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJh
bmQgOiB3cml0ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFu
ZCkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA6IHJlYWRzKQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6
IHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMzQsNyArMjI5
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBkZWZl
cnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
RGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFjaykg
ewpAQCAtMjYxLDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzOTgKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBpc0NvbmZsaWN0aW5nID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9PSBDb25mbGlj
dGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFpc0NvbmZsaWN0aW5nKTsKQEAgLTI3NSwxNyAr
MjcwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChub2RlLT5vcCgpID09IFB1dFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlNldHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQg
Iiwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9w
ZXJhbmQpID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUt
Pm9wKCkgPT0gS2lsbFN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHNpbmsgYSBQdXRTdGFjayBwYXN0IGEgS2lsbFN0YWNrLgotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29u
ZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBmb3IgIiwg
bm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFu
ZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFu
ZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MywxNiArMjkxLDE4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3Bl
cmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5k
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1Rt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwgbm9k
ZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2Nh
bENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2Nh
cGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRhaWxb
YmxvY2tdKQpAQCAtMzEzLDEzICszMTMsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFu
ZEZvckluZGV4KGkpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJE
dW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVh
ZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNp
ZGVyaW5nICIsIGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBhdCAiLCBwb2ludGVyRHVt
cChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ld
LCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgZGVmZXJyZWRbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zNTIsMTAg
KzM1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFuZHNM
aWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0b3I8
VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmQ+
IGluZGV4VG9PcGVyYW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRG
b3JJbmRleChpKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisK
ICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1
bGF0b3IubmV3VmFyaWFibGUoKTsKICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJh
bmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3BlcmFu
ZC5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOwpAQCAtMzcwLDEyICszNzAsMTIgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAg
IHB1dFN0YWNrc1RvU2luay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1
bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUu
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRTdGFjazoKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTM4Niw3ICszODYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAogICAg
ICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxv
Y2sqIGJsb2NrKSAtPiBOb2RlKiB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10u
b3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0zOTcsNyArMzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0
ZShmb3JtYXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJBZGRpbmcgUGhpIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBibG9jay0+YXQoMCktPm9yaWdpbi53
aXRoSW52YWxpZEV4aXQoKSk7CkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWFwcGluZy5maWxsKG51bGxwdHIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0Rl
ZkF0SGVhZChibG9jaywgdmFyaWFibGUpOwpAQCAtNDIxLDE1ICs0MjEsMTUgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVyRHVt
cChibG9jayksICI6ICIsIG1hcHBpbmcsICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9y
QmxvY2soYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUo
KS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgcGhpRGVmLT52YWx1ZSgpLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZhbHVl
KCk7CiAgICAgICAgICAgICB9CkBAIC00MzcsMTUgKzQzNywxNSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2Rl
SW5kZXgpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gZGF0YS0+bG9jYWw7CisgICAgICAg
ICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGRhdGEtPm9wZXJhbmQ7CiAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5jaGls
ZDEoKS5ub2RlKCksICIgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIG1h
cHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC00NTMsMTYgKzQ1MywxNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3Jt
YXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpICE9
IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpICE9
IENvbmZsaWN0aW5nRmx1c2gsIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoZXJlIGlzIG5vIGRlZmVycmFsLiBObyBkZWZlcnJhbCBtZWFucyB0aGF0IHRoZSBtb3N0
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlIHZhbHVlIGZvciB0aGlz
IHN0YWNrIHNsb3QgaXMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHN0YWNrLiBTbywKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlIEdldFN0YWNrLgotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC00NzIsMjAgKzQ3MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIGhhdmUgc3RvcmVkIGFuZCBnZXQgcmlkIG9mIHRoZSBHZXRTdGFjay4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBmb3JtYXQgPT0gZGF0YS0+
Zm9ybWF0LCBmb3JtYXQsIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5s
b2NhbCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVy
YW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9
IGluY29taW5nLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9JZGVudGl0eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGlj
dGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRm9yICIsIG5vZGUsICIgZXNjYXBpbmcgIiwgb3BlcmFuZCwgIlxu
Iik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCkBA
IC00OTksNyArNDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2Vy
dCBhIFB1dFN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcg
YSBQdXRTdGFjayBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFu
ZCk7CkBAIC01MTMsNyArNTEzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAg
ICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZh
cmFyZ3MgYXJlIHVuY29uZGl0aW9uYWwgd3JpdGVzIHRvIHRoZSBzdGFjawpAQCAtNTIxLDEzICs1
MjEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25zIHRo
ZXkgd3JpdGUgdG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9jYXRpb25zIGRlYWQgcmlnaHQg
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBMb2FkVmFyYXJncy9Gb3J3YXJk
VmFyYXJncy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2luawogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1
YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgIH0KQEAgLTUzOSw4ICs1MzksOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNz
YUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkNyZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRl
ckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVhZFtz
dWNjZXNzb3JCbG9ja10ub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBpc0NvbmNyZXRlKGZvcm1hdCksIGZvcm1hdCk7CkBA
IC01ODUsNyArNTg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGgg
YWZ0ZXIgUHV0U3RhY2sgc2lua2luZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAppbmRleCA0MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMxMWQ2
NzY4NjUwLi4wNGYyYzBjZDM5OThiMTgxYjllOThiYmE0MjcwNDg4M2I0MGQyZDhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjaGlsZE5v
ZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJs
ZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPm9w
ZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVu
dEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRN
YXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJs
ZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBt
dWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAgICAgICAgICBOb2RlKiBoZWFk
Tm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWFk
Tm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMwMCw3ICsz
MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJl
cGxhY2VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzog
IiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAi
IC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFw
cGluZzogIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBub2Rl
LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9kZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1f
dmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNl
cnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkg
PSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9u
UG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxp
ZEV4aXQoKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9m
ZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1
bHRFZGdlKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KDAp
LT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQu
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSwx
OSArMzQ5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y29udmVydFRvUHV0U3RhY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hG
b3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIgLT4gIiwgY2hpbGQsICJcbiIp
OwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBp
bmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hpbGQsICJcbiIpOworICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5v
ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9
IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5v
ZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1l
bnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFBo
YW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkp
LT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFw
aCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQy
NSwxMiArNDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGV4
aXRPSy4KICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2VkVXNl
S2luZEZvcihmb3JtYXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPmxvY2FsKCksICIgcHJvcGFn
YXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiIHRv
ICIsIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
SW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgcHJvcGFnYXRp
bmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICIgdG8g
IiwgcGhpTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxv
bkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2luZCkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMTViZTQyYWMzYjY5YWY0ZGM1ODM4YTE4
ZGYzOWQwNzhjYTMxNjkxOS4uOWEzMmQ2N2E1ODc0Mjk1ODViMzdkOWFlMWE2Y2ViYzVmYzk2MmNm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAg
LTMyMiw2ICszMjIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgVGFpbENh
bGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIFZhcmFy
Z3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBiNWExMWM1MWVmMTBj
ZjdhNmIyMzE3MmQyZDhiZjhmNjc1ZTA1MmJkLi5iZTU4NWQ1ZDQzYzkyNzc4NzkyOTgzYjA5MzNm
NWEyNjI4NTAzMmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcApAQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJl
YW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQp
LCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoQWJvcnRSZWFzb24gcmVh
c29uKQpAQCAtMTgyNSw3ICsxODI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1
cnJlbnRCbG9jaygpCiAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7CiAgICAg
CiAgICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICBOb2RlKiBub2RlID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgpAQCAtMTgz
NSwxMSArMTgzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2so
KQogICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsg
Ly8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgogICAgICAgICBmb3JtYXQgPSBk
YXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsKLSAgICAgICAgbV9zdHJlYW0t
PmFwcGVuZEFuZExvZygKLSAgICAgICAgICAgIFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKAotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwKLSAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCi0gICAgICAgICAgICAgICAgZm9ybWF0KSk7CisgICAg
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW9wZXJhbmQuaXNBcmd1bWVudCgp
IHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOworICAgICAg
ICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKG9wZXJhbmQs
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAgICAgfQogCiAgICAgbV9vcmln
aW4gPSBOb2RlT3JpZ2luKCk7CkBAIC0xOTE5LDcgKzE5MTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAoZm9ybWF0ID09IEZsdXNoZWRK
U1ZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFs
UmVnaXN0ZXIuaXNBcmd1bWVudCgpKTsKIAogICAgICAgICBKU1ZhbHVlU291cmNlIHZhbHVlU291
cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpKTsKICAgICAgICAgCkBAIC03MzQxLDU0ICs3MzM5LDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5v
ZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKiBub2Rl
KQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgp
OwogCiAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAgICB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFyZ3Vt
ZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICB9CisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgSlNW
YWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAg
IGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKKyAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0
KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbG9jayhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpz
VmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQorICAgIEdQUlRl
bXBvcmFyeSBhcmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7CisgICAgR1BSUmVnIGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhpcy5ncHIoKTsKICAgICB1bmxv
Y2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIGEg
Y2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdp
Y2UuIFRoaXMgaXMgc2FmZQotICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3Mg
aW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQot
ICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3
ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgIC8vIHBhc3Qg
dGhlIHNpemluZy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxNDQ4CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKIAotICAgIEdQUlJlZyBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIgPQotICAgICAgICBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRj
aEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncyk7CisgICAgaW50MzJS
ZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2RlKTsgIAorfQogCi0gICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJ
bmNsdWRpbmdUaGlzR1BSKTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJn
cyhOb2RlKiBub2RlKQoreworICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50
Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1
bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgR1BSUmVnIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVn
cyBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CiAKICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRn
ZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwK
LSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAgYXJnQ291
bnRJbmNsdWRpbmdUaGlzR1BSKSk7CisgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNv
dXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
IAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1
ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAorICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCiAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoZGF0YS0+bGltaXQpKSk7CiAKLSAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIG1faml0LnN0b3JlMzIoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3Vu
dCkpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRz
UmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJn
dW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZGF0
YS0+bWFuZGF0b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAg
IG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM5OCwxNyArNzM5NywxOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgIGlu
bGluZUNhbGxGcmFtZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CisgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUoKTsKICAgICBlbHNlCiAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAorICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBH
UFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKyAgICBHUFJSZWcg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEdQ
UlJlZyBsZW5ndGhHUFIgPSBhcmd1bWVudENvdW50LmdwcigpOwogICAgIEpTVmFsdWVSZWdzIHRl
bXBSZWdzID0gdGVtcC5yZWdzKCk7Ci0gICAgICAgIAotICAgIGVtaXRHZXRMZW5ndGgoaW5saW5l
Q2FsbEZyYW1lLCBsZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0gKi8gdHJ1ZSk7CisgICAgCisg
ICAgbV9qaXQubW92ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbGVuZ3RoR1BSKTsKICAg
ICBpZiAoZGF0YS0+b2Zmc2V0KQogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoZGF0
YS0+b2Zmc2V0KSwgbGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC03NTY3LDcgKzc1NjgsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5v
ZGUpCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKICAgICAgICAgJiYgIWlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAga25vd25MZW5ndGggPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAga25v
d25MZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICBsZW5ndGhJc0tub3duID0gdHJ1ZTsK
ICAgICB9IGVsc2UgewogICAgICAgICBrbm93bkxlbmd0aCA9IFVJTlRfTUFYOwpAQCAtMTI0NDcs
NyArMTI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBub2RlLT5hcmd1bWVudHNJbmxpbmVDYWxsRnJhbWUoKSkKICAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXI7CiAgICAgZWxzZQotICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQ7CiAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJl
c3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBjNjRm
OTc4YWRmODVmYmYyNzdiYmE3OTIxNjA2NGY0MjgxYjhkNWE5Li4wM2Q0ODM1YmY0YjdhOGRlMDkz
OWVmY2ZhMzcwMjJiNDYyNjkwOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzkzLDYgKzEzOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdSZWdl
eHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFy
YXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsKQEAgLTE2NjksMTUg
KzE2NzAsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJl
ZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRh
Rm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lz
dGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKKyAgICAgICAgQVNTRVJU
KCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcudmlydHVhbFJlZ2lzdGVy
KCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5lUmVnLCBmb3JtYXQpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0IGZvcm1hdCkK
ICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX2N1cnJlbnRO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFi
bGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKKyAgICAgICAg
cmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZvJiBnZW5lcmF0aW9uSW5m
b0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCmluZGV4IDY3YjBlMGIzNzA0Y2E1OWE4OTBhYzU5Yzg2ZGJkMGQyYTA1NmRiODEuLjBhZjNm
MTcxODE1NDEwZDliZWY2NGEyMGZkMDkwNWRkYzAzZTY3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgyOCw3
ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSk7CiAKICAg
ICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3Vu
ZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVk
LCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnRO
b2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7
CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkT3BlcmFuZCgp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgyNCw2ICszODI0LDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1pdENhbGwobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAg
IGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAg
ICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhub2RlKTsK
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAppbmRleCAzZTYzOGM5Yjk0OWViNWVhMjZhMzEwNWRkYjhhZmU3NjYy
MTYzMzQ0Li43YjFlMjU3ZDYwZDQ2ODQ1ZjFhOTQwZmY2ZGZkYzkzYWM4NmM3YzUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAg
LTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
OwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQg
aXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBh
c3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0yMDA3LDcgKzIwMDcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9j
dXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1h
dERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQsNiArNDQ2NCwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRD
YWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewor
ICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggYmVlYzg2YWM3YTdkMzMzZTM5Njc5ZTI2NzU1
OTA3NGU0NjRjOWI4Mi4uZDc2MjhlNWExMTdjZTMzZGUxZDE2MTVmNjA0Mjc1MjIwNDc3YTIyYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdHJlYXQgYSB2YXJpYWJs
ZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2VzcyB0byBpdCAoU2V0TG9j
YWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxvY2FsKS4KICAgICAgICAg
Ci0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAgICBPcGVyYW5kczxib29sPiB1
c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3JhcGgoKS5tX3RtcHMsIGZhbHNl
KTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJl
IHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxz
ZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVz
aDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgog
ICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRhLT5jb3VudCwgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250
aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdu
bWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEt
PnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICB9IC8vIHRo
ZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAgICAgICAgICAgaGFzTm9k
ZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05
Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChzdGFjay0+bG9j
YWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJh
bmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA4LDIxICsxMDcsMjEg
QEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVn
aXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAg
ICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
V2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNl
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwotICAgICAgICAgICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2Nh
dGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2Nh
dGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9ncmFwaC5tX25leHRNYWNoaW5l
TG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRleChpKSkgewogICAgICAgICAg
ICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFi
bGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbG9j
YWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAgICAgICAgICBpZiAobG9jYWwg
Pj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gdXNlZE9wZXJhbmRz
Lm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBhbGxvY2F0
aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQorICAgICAgICAgICAg
aWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkg
PSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwg
dmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAo
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YSkgewotICAg
ICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgICAgICBk
YXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgIGlmIChkYXRhLT5v
cGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2Nh
bCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlv
bltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2NhbCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3BlcmFuZC50b0xvY2Fs
KCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5kLnRvTG9jYWwoKV0g
PT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24o
YWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2Fs
ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+b3BlcmFuZCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIo
KSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3Bl
UmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkp
KTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbih1c2Vk
T3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNp
emUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFibGVEYXRhIGRhdGEgPSBtX2dy
YXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbigK
LSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7IGFyZ3VtZW50LS07KSB7
CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24gPSBtX2dyYXBoLm1f
YXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXJndW1lbnRQb3Np
dGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIxNSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFs
bG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPmNvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbih1
c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29u
c3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
YWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwo
KV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlv
bik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVy
YW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9j
YXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01B
WCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CiAgICAgfQogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAKaW5kZXggZWIzZGRiZDcxODQzZDQ5ZjY1YjMyY2U5NjFmZjlhMDcxMmExYTA1MS4u
YjQ4YzZmN2YxOTA5Nzc1ZDcyNzk3OTkxZjNmYjk4M2RlNjM4YTcyNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGktLTspIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+b3BlcmFuZCgpID09
IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWwgPSBub2RlOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywg
bG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5v
ZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIwNzBiNmVlNmY0ZjhiZjkuLmYxYjFm
ZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQo
bnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCAmdm0pOwot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1Ig
ZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAppbmRl
eCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4MjA1ZDllLi44YjVjM2YwMWE0ODUy
MGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVy
YXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAK
aW5kZXggNjBmYmY4OTk1ZmRhZDc4MjU2YTA2N2I4OWM0ZWM1ZjU3MTNmMWQ3ZS4uNzk2NjVmOGFi
ODVmYzExMTZkNjM5ZmIzZDhiNTVmNmVkOTAyNjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0xNDYs
NyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUu
bV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY2hlY2tPcCA9IENo
ZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNwZWNDZWxsQ2hlY2sg
JiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gfHRoaXN8IGNhbiBiZSB0aGUgVERaIHZhbHVlLiBUaGUgY2Fs
bCBlbnRyeXBvaW50IHdvbid0IGhhdmUgfHRoaXN8IGFzIFREWiwKQEAgLTE2OCw4ICsxNjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOworICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkp
ID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpi
bG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAg
ICAgICAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0
SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFu
ZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDllZTVlMDA3NDA5ZGY1Mjk0YmZj
ZjUxYjc3NmViOGNmY2Y0N2M1MGUuLmEyZDZjZmMyNDkzNGUzZGMzYzQ2YzBlMjRkNGRhMWNlMWIw
Y2Y1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC00
ODMsNyArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnBoaXNbaV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250
YWlucyhub2RlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgp
ID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+
bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5k
KCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVt
Q2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRy
ZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCkBA
IC01MTksMTAgKzUxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRl
Y2Vzc29yc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJl
ZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhl
biBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUg
dGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChw
cmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMsMTEgKzUzMywxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9j
YWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJl
dk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2Nh
bCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dERlZmluaXRlbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBTZXRBcmd1bWVudE1heWJlCkBAIC01NDcsMTkgKzU0NywxNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVm
ZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxv
Y2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5C
bG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9w
ZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJ
bkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91
bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAg
ICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAg
ICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAg
ICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExv
Y2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBW
QUxJREFURSgodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2NrKSwgIWJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1
bWVudChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSk7CkBAIC02NjgsMjQgKzY2NCwyNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3VudHMuZ2V0KG5vZGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxv
Y2spLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBibG9jayksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5p
dGVseSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5
IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBTZXRMb2Nh
bHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBmbHVzaGluZy4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
IT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNldCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sgdG8gaGF2ZSBhIHNl
Y29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAgICAgICAgICAgICAg
ICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudERlZmluaXRlbHkgZm9yIHRoYXQgbG9j
YWwuCi0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm90U2V0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBj
YXNlIFNldEFyZ3VtZW50TWF5YmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTY4
LDI2ICs5NjQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVk
Z2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCisgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dChPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsK
ICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBu
dWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIG51bGwgQmxv
Y2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhTG9n
KGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwg
IiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sq
IHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrKQorICAgICAgICBPcGVy
YW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5h
dGlvbkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAq
c291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOworICAgICAgICBkYXRhTG9n
KG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlv
bkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywg
Tm9kZSogcHJldk5vZGUpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291
cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhwcmV2Tm9k
ZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKKyAgICAgICAg
ZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgb3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNl
QmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5v
ZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggMjZmMDMyOWQ1
NDMwNDE1NzIwNWU3ODE0OThjNjRlMGJlOTkzMjExMC4uOTVjZGM5MmUyYzI0MTBhMzVjMDEzMTMx
ZmRjM2I3Y2NjMjgyOWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC00MSwxMSArNDEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IHB1YmxpYzoKICAgICBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAg
ICAgOiBQaGFzZShncmFwaCwgInZhcmFyZ3MgZm9yd2FyZGluZyIpCkBAIC01Niw3ICs1NCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9n
cmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsK
ICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSB2YXJhcmdzIGZvcndhcmRpbmc6XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCw3ICs4Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBjYWxscyBpbnRvIHRoaXMgZnVuY3Rp
b24gdG8gYmUgcmFyZS4gU28sIHRoaXMgaXMgd3JpdHRlbiBpbiBhIHNpbXBsZSBPKG4pIG1hbm5l
ci4KICAgICAgICAgCiAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGJsb2NrLT5hdChjYW5kaWRh
dGVOb2RlSW5kZXgpOwotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2co
IkhhbmRsaW5nIGNhbmRpZGF0ZSAiLCBjYW5kaWRhdGUsICJcbiIpOwogICAgICAgICAKICAgICAg
ICAgLy8gV2UgZWxpbWluYXRlIEdldEJ1dHRlcmZseSBvdmVyIENyZWF0ZUNsb25lZEFyZ3VtZW50
cyBpZiB0aGUgYnV0dGVyZmx5IGlzIG9ubHkKQEAgLTEwNSw3ICsxMDMsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICBhdXRvIGRlZmF1bHRFc2NhcGUgPSBbJl0gewogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlkYXRlKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNyw5ICsxMTUsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFub2RlLT51bmxpbmtlZE9wZXJhbmQoKS5p
c1RtcCgpLCAiV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYSB0bXAgcmVmZXJyaW5nIHRvIGFu
IGFyZ3VtZW50cyBvYmplY3QuIik7CiAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5v
ZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxz
LmFwcGVuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICghcmVs
ZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lz
dGVyKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja1ZhcmFyZ3M6CkBA
IC0xNDAsMTMgKzEzOSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgc2F3
RXNjYXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
aWYgKHNhd0VzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwg
bm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgY2FuZGlk
YXRlKSkKICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJbmRleDsKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSB8fCBub2RlLT5jaGls
ZDIoKSA9PSBjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSA9PSBjYW5kaWRhdGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzTG9hZGVk
RnJvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAg
LTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2YWxpZEdldEJ5T2Zm
c2V0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBidXR0ZXJmbHkgOiBjYW5kaWRhdGVC
dXR0ZXJmbGllcykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUs
IGJ1dHRlcmZseSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQnV0
dGVyZmx5IGVzY2FwZWQgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNSwxMSArMjM1LDExIEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwKLSAgICAgICAg
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIHJlZywgIiB3aGlsZSB3ZSBh
cmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2FscyksICJcbiIpOworICAg
ICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxp
bmcgIiwgb3BlcmFuZCwgIiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChy
ZWxldmFudExvY2FscyksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVsZXZhbnRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kID09IHJlbGV2YW50TG9jYWxzW2ldKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHNbaS0tXSA9IHJlbGV2YW50TG9jYWxzLmxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5yZW1vdmVM
YXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVzZXJJbmRleCA9IG5vZGVJ
bmRleDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBsYXN0VXNlckluZGV4ID0gIiwgbGFzdFVzZXJJ
bmRleCwgIiwgIiwgYmxvY2stPmF0KGxhc3RVc2VySW5kZXgpLCAiXG4iKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFdlJ3JlIHN0aWxsIGluIGJ1c2luZXNzLiBEZXRlcm1pbmUgaWYgYmV0d2VlbiB0
aGUgY2FuZGlkYXRlIGFuZCB0aGUgbGFzdCB1c2VyIHRoZXJlIGlzIGFueQpAQCAtMjYzLDE2ICsy
NjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAg
IGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+b3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPmxv
Y2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5vcGVyYW5kKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxMyArMjk3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1Rv
cCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5w
YXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgcmVnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgaGVhcC5vcGVyYW5k
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNJbnRlcmZlcmUgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6
ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9lc0ludGVyZmVyZSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTEsNyArMzEwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2UgY2FuIG1ha2UgdGhp
cyB3b3JrLgotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBX
aWxsIGRvIGZvcndhcmRpbmchXG4iKTsKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgCkBAIC0zNDEsOCArMzQwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgd2l0aCB0aGVzZS4KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNhbmRp
ZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aChp
bnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIC8qIGFkZFRo
aXMgPSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndhcmRWYXJhcmdzKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCA4ZWJmZmI0MzVlZDRkYmY2MDJiZDYy
YWVkNGMzNDMyZWE1YTgyOTAyLi4yYWMyZWUzOWI0Y2NhZDMwODEyNWI0ZTZlY2M4OGE4N2M3ZDE3
OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCkBAIC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKLSAgICA6
IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpKSkKLSAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICA6IG1fcHJl
ZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2UpCkBA
IC00NSwxMCArNDQsMTAgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEo
KQogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFj
Y2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgIDogbV9sb2NhbChsb2NhbCkKLSAg
ICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKK1ZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKKyAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
ICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChm
YWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChmYWxzZSkKQEAgLTg3
LDcgKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1h
dEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZhY2ls
aXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgZm9y
IGFyZ3VtZW50cy4KLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJh
bmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
Ly8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVkaWN0aW9uLCB0aGVuIHRoaXMg
ZG9lc24ndApAQCAtMTIxLDcgKzEyMCw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxs
eVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKIHsKICAgICBBU1NFUlQoaXNSb290KCkp
OwogICAgICAgICAKLSAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJV
bmJveCgpCisgICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJv
eCgpCiAgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzQXJyYXlJbmRleCkp
CiAgICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUobV9kb3VibGVGb3Jt
YXRTdGF0ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgIApAQCAtMTc2LDcgKzE3NSw3IEBA
IGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUySW1wbCgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXZSBwdW50IGZvciBtYWNoaW5lIGFyZ3Vt
ZW50cy4KLSAgICBpZiAobV9sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG9wZXJhbmQoKS5p
c0FyZ3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgYXJn
dW1lbnQtYXdhcmUgcHJlZGljdGlvbiAtLSB3aGljaCBtZXJnZXMgYWxsIG9mIGFuIChpbmxpbmVk
IG9yIG1hY2hpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAppbmRleCAxZDM4OTJmOWVjMDljYmEyMDQzZmEyNTRlNjA5NDIzMjAxNGEy
ODRlLi5iZTJmYjU0MDEzNTI2NTViOWM3YWNiMTNiZGFlYTc1NTczZmNlZmY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKQEAgLTQ4
LDEyICs0OCwxMiBAQCBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJsaWMgVW5pb25GaW5k
PFZhcmlhYmxlQWNjZXNzRGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhcmlhYmxl
QWNjZXNzRGF0YSk7CiBwdWJsaWM6CiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgVmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCk7CisgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKE9wZXJhbmQpOwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAg
T3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQo
KS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOworICAgICAgICBBU1NFUlQobV9v
cGVyYW5kID09IGZpbmQoKS0+bV9vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsK
ICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyJiBtYWNoaW5lTG9jYWwoKQpAQCAtMjA4
LDEwICsyMDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlm
aWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQogICAgIC8vIHVzYWdl
IGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCiAKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7
CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1f
YXJndW1lbnRBd2FyZVByZWRpY3Rpb247CisgICAgT3BlcmFuZCBtX29wZXJhbmQ7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIE5vZGVGbGFncyBtX2ZsYWdzOwogCiAg
ICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5ib3g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50LmNwcAppbmRleCAyOGU0MzdmZDUxZmVhNDk2OWViNDhlY2YwYzA1
MDhmMGEzN2RmODM1Li41YjJjMWVlOTA5YjU0OGYzOTgyNzBjNDNiZDM2ZWQ3MmUzZjljZmJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKQEAg
LTU5LDExICs1OSwxMSBAQCB2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCJEZWF0aCgiLCBpZCgpLCAiKSIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgb3V0LnByaW50KCJNb3ZI
aW50KCIsIGlkKCksICIsICIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwgIikiKTsKKyAgICAgICAgb3V0
LnByaW50KCJNb3ZIaW50KCIsIGlkKCksICIsICIsIG9wZXJhbmQoKSwgIikiKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgogICAgICAgICBvdXQucHJpbnQoCi0gICAg
ICAgICAgICAiU2V0TG9jYWwobWFjaGluZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRl
Y29kZToiLCBieXRlY29kZVJlZ2lzdGVyKCksCisgICAgICAgICAgICAiU2V0TG9jYWwobWFjaGlu
ZToiLCBtYWNoaW5lUmVnaXN0ZXIoKSwgIiAtPiBieXRlY29kZToiLCBvcGVyYW5kKCksCiAgICAg
ICAgICAgICAiLCAiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgpKSwgIikiKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50LmgKaW5kZXggMjA2MGQ0YTJmZDI3MjIzZGQ2ZjY5OWM2ZGJhZDZkMjI0
NjdjOTgzNC4uYzFmNTRiYTRmYmRjYWFhNWExZDlhNWVkYzFhYzQ4MTM4ZDM0ZTNmZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKQEAgLTY4LDYgKzY4
LDEwIEBAIGVudW0gVmFyaWFibGVFdmVudEtpbmQgOiB1aW50OF90IHsKIH07CiAKIHVuaW9uIFZh
cmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24oKSAKKyAg
ICAgICAgOiBvcGVyYW5kKCkgCisgICAgeyB9CisKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBncHI7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTc2LDcgKzgwLDcgQEAgdW5pb24gVmFyaWFibGVSZXByZXNlbnRh
dGlvbiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CiAg
ICAgfSBwYWlyOwogI2VuZGlmCi0gICAgaW50MzJfdCB2aXJ0dWFsUmVnOworICAgIE9wZXJhbmQg
b3BlcmFuZDsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnQgewpAQCAtMTYyLDcgKzE2Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC5pZCA9IGlk
LmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsK
LSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3Rlci5vZmZz
ZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlcjsK
ICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0
ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7CkBAIC0x
ODEsMTMgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBWYXJpYWJs
ZUV2ZW50IHNldExvY2FsKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3Bl
cmFuZCBieXRlY29kZU9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9y
bWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAg
IFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2gudmlydHVhbFJlZyA9IG1hY2hpbmVSZWcu
b2Zmc2V0KCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247
Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQo
KTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlT3BlcmFuZDsKICAg
ICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAgICAgICAgZXZlbnQubV9kYXRh
Rm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7
CkBAIC0xOTUsMTMgKzE5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBldmVudDsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElEIGlk
LCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQg
bW92SGludChNaW5pZmllZElEIGlkLCBPcGVyYW5kIGJ5dGVjb2RlUmVnKQogICAgIHsKICAgICAg
ICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAg
ICB3aGljaC5pZCA9IGlkLmJpdHMoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiBy
ZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVj
b2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNv
ZGVSZWc7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnRFdmVudDsKICAgICAgICAgZXZl
bnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwogICAgICAgICBldmVudC5tX3JlcHJlc2VudGF0
aW9uID0gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CkBAIC0yNjUsMTMgKzI2OSwxMyBAQCBwdWJs
aWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsKTsK
LSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZp
cnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0
ZWNvZGVSZWdpc3RlcigpIGNvbnN0CisKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8IG1fa2luZCA9PSBN
b3ZIaW50RXZlbnQpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVzZW50
YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9u
LmdldCgpLm9wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5l
UmVnaXN0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAKaW5kZXggNDUyNmQzOWJiMDk0YzRiODY2ZTY3ZWQzZTJl
ZTFiNDg5NmFiYjcyNi4uOGNmNzA4MDQwM2E4ZWZmZDliMjIxYTM1YWY4ZDIxZGUzMmI1ZGRhMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6bG9n
RXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiB7CiAgICAgZGF0YUxvZ0YoInNlcSMl
dToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CiAgICAgZXZlbnQuZHVtcChXVEY6
OmRhdGFGaWxlKCkpOwotICAgIGRhdGFMb2dGKCIgIik7CisgICAgZGF0YUxvZ0xuKCIgIik7CiB9
CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTksMTAgKzExOSwxMiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFwaCwKICAgICB1bnNpZ25lZCBpbmRl
eCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVjb3ZlcmllcywgVmVjdG9yPFVuZGVm
aW5lZE9wZXJhbmRTcGFuPiogdW5kZWZpbmVkT3BlcmFuZFNwYW5zKSBjb25zdAogeworICAgIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZh
cmlhYmxlczsKKyAgICB1bnNpZ25lZCBudW1UbXBzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwogICAgIHVuc2lnbmVkIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIGJvb2wg
Zmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gZmFsc2U7CkBAIC0xMzAsMzcgKzEzMiw0MiBAQCB1
bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBhdXRvIGZsdXNo
VW5kZWZpbmVkT3BlcmFuZFNwYW4gPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgaWYgKGZp
cnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvcklu
ZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2
YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSAtIDEpLm9mZnNldCgpOwor
ICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4
KGZpcnN0VW5kZWZpbmVkKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKKyAgICAgICAgaW50
IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkgLSAxKS52aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgaW50IG1pbk9mZnNldCA9IHN0ZDo6bWlu
KGZpcnN0T2Zmc2V0LCBsYXN0T2Zmc2V0KTsKICAgICAgICAgdW5kZWZpbmVkT3BlcmFuZFNwYW5z
LT5hcHBlbmQoeyBmaXJzdFVuZGVmaW5lZCwgbWluT2Zmc2V0LCBpIC0gZmlyc3RVbmRlZmluZWQg
fSk7CiAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaW52YWxpZEluZGV4OwogICAgIH07CiAgICAg
YXV0byByZWNvcmRVbmRlZmluZWRPcGVyYW5kID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAg
IC8vIFdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNwYW4gb2YgYXJndW1lbnRzIGZyb20gdGhlIHNw
YW4gb2YgbG9jYWxzIGV2ZW4gaWYgdGhleSBoYXZlIGFkamFjZW50IG9wZXJhbmRzIGluZGV4ZXMu
Ci0gICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRl
ZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpKQorICAgICAg
ICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNB
cmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgIGZsdXNoVW5kZWZpbmVkT3BlcmFuZFNwYW4oaSk7CiAKICAgICAgICAg
aWYgKGZpcnN0VW5kZWZpbmVkID09IGludmFsaWRJbmRleCkgewogICAgICAgICAgICAgZmlyc3RV
bmRlZmluZWQgPSBpOwotICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFs
dWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSk7CisgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZElz
QXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQo
KTsKICAgICAgICAgfQogICAgIH07CiAKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlu
bGluZUNhbGxGcmFtZSktPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7Ci0gICAgZWxzZQorICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7CisgICAg
ICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0OworICAgIH0gZWxzZSB7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1UbXBzKCk7CisgICAgfQogICAgIAogICAgIC8vIENyYXp5IHNwZWNpYWwgY2Fz
ZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0aGVuIHRoaXMgbXVzdCBiZSBhbiBhcmd1bWVudCBj
aGVjawogICAgIC8vIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxy
ZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVzIHNob3VsZAogICAgIC8vIHJlZmxlY3QgdGhpcy4K
ICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZh
bHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOwor
ICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMgaGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3Qg
YmUgdXNlZCB5ZXQuCisgICAgICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMsIDApOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292
ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpKSwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBE
YXRhRm9ybWF0SlMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudW1WYXJpYWJsZXM7CiAg
ICAgfQpAQCAtMTcxLDEyICsxNzgsMTMgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6
cmVjb25zdHJ1Y3QoCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAgICAKICAgICAvLyBTdGVwIDI6
IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVu
dHMuCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIE9wZXJhbmRzPFZhbHVlU291cmNl
PiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVz
LCBudW1UbXBzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVyYW5kU291cmNlcy5zaXplKCk7
IGktLTspCiAgICAgICAgIG9wZXJhbmRTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNE
ZWFkKTsKICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+IGdl
bmVyYXRpb25JbmZvczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgaW5k
ZXg7ICsraSkgewogICAgICAgICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCA9IGF0KGkpOwor
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBldmVudCAiLCBldmVudCk7
CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CiAgICAgICAgIGNhc2UgUmVzZXQ6CiAg
ICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgpAQCAtMTk4LDIxICsyMDYsMjMgQEAgdW5zaWdu
ZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIE1vdkhpbnRFdmVudDoKLSAgICAgICAgICAgIGlmIChv
cGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAg
ICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lz
dGVyKCksIFZhbHVlU291cmNlKGV2ZW50LmlkKCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5k
U291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3Bl
cmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlKGV2ZW50
LmlkKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldExvY2FsRXZlbnQ6
Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29k
ZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQo
ZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVu
dC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNv
dXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5tYWNoaW5lUmVnaXN0ZXIoKSwgZXZlbnQuZGF0YUZv
cm1hdCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kIHNvdXJj
ZXM6ICIsIG9wZXJhbmRTb3VyY2VzKTsKICAgICAKICAgICAvLyBTdGVwIDM6IENvbXB1dGUgdmFs
dWUgcmVjb3ZlcmllcyEKLSAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICB2YWx1
ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PihPcGVyYW5kc0xpa2UsIG9wZXJh
bmRTb3VyY2VzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3Vy
Y2VzW2ldOwogICAgICAgICBpZiAoc291cmNlLmlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoKSkgewpA
QCAtMjMwLDYgKzI0MCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWN0KAogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChzb3VyY2UuaWQoKSk7
CiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5n
ZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAoIWluZm8uYWxpdmUpIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5k
Rm9ySW5kZXgoaSksICIgaXMgZGVhZC4iKTsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tp
XSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAg
aWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgICAg
ICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjM3LDYgKzI0OCw3IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIG5vZGUp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJl
Y292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGNvbnN0YW50LiIpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkgewogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIG5vZGUtPmNvbnN0YW50KCkgPT0g
anNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFu
ZChpKTsKQEAgLTI2Niw3ICsyNzgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjdCgKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFsdWVSZWNvdmVyaWVz
W2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8udS52aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQp
OworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKGluZm8udS5v
cGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7CiAgICAgfQogICAgIGlmIChz
dHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgIGZsdXNoVW5k
ZWZpbmVkT3BlcmFuZFNwYW4ob3BlcmFuZFNvdXJjZXMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKaW5kZXggMDE1NzMw
MDdlZGRkZDcwZjMxZDE3YWMwZDk5Zjc4ZWJmNWVhNmViYy4uZTllNDNhYmZlYzQ4NWZlYzdlNjYz
MTUxYzFjMjJlYzUxODk3NDEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKQEAgLTQyLDkgKzQyLDEyIEBAIHN0cnVjdCBVbmRl
ZmluZWRPcGVyYW5kU3BhbiB7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50U3RyZWFtIDogcHVi
bGljIFZlY3RvcjxWYXJpYWJsZUV2ZW50PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEFuZExvZyhjb25zdCBWYXJp
YWJsZUV2ZW50JiBldmVudCkKICAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgbG9nRXZlbnQoZXZlbnQpOwogICAgICAgICBhcHBlbmQoZXZlbnQpOwogICAgIH0KICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA3
ODFiNzFlNjkyNDM4Mjg2NDg5N2VmZjdmOWRlNjhlNGVlNGViZjFkLi4zMmNiYzEwNzZkZTU5ZGFh
NGE3MjdkYWM3ZDc1ZmJkY2E2MDdkZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNl
IEJyYW5jaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmNwcAppbmRleCAzMDgwZGMzNDUwOWM3MzMzMjRiODE0M2QyYTk1NGYwOGVkYWYx
M2ZiLi5jMDA0ZmFjY2MxYWQwNWQzNmNlZGJlZGY5Njc4MmFhYjdkY2I5ODMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCkBA
IC0zMSw4ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIEZvck9T
UkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKLSAgICA6IG1fYnl0ZWNvZGVJbmRl
eChVSU5UX01BWCkKLSAgICAsIG1fZW50cnlGYWlsdXJlQ291bnQoMCkKKyAgICA6IG1fZW50cnlG
YWlsdXJlQ291bnQoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCmluZGV4IDk0NTY1Nzc1NWEwZWNiNzgxY2ZiODliMTFjMzlmOThmN2E5
YWJhM2QuLjQ1ZTgxYmNkZGEyODgxNzNmZTE5OWU4NGM2N2I5Zjg4YzgwMjZkNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTIwOCw3ICsy
MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY2xlYXJTdGFja0Zy
YW1lKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgY29kZS5mcmFtZVNpemUoKSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRM
aXN0KCkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KGNvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9l
bnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsKQEAgLTI3NCw3ICsy
NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBD
b2RlQmxvY2sgdG8gaGF2ZSBhIHdlYWsgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVzZQogICAgICAg
ICAvLyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFsd2F5cyBnZXQgY29sbGVjdGVkLgotICAgICAg
ICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSkpOwogCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENoZWNrLgog
ICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVy
Q291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7
IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1
bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CkBAIC0xMjgxLDYg
KzEyODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAgICAgICAgICAg
Y29tcGlsZUNhbGxFdmFsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgorICAgICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgY29tcGls
ZUxvYWRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTMsNyArMTk1Niw3IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51
bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZp
cnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVF
eHRyYWN0Q2F0Y2hMb2NhbCgpCkBAIC0xOTcyLDcgKzE5NzUsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIAogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQp
LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAKQEAgLTc5MjYsMTMgKzc5MjksMTMgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQogICAgIHsKLSAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkp
OworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBp
bGVTZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsZWUgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwg
cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
CkBAIC03OTQ3LDcgKzc5NTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlU2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmUzMiht
X291dC5jb25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICBtX291dC5z
dG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQpAQCAtOTU0
Miw1MSArOTU0NSw1MSBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgdm9pZCBj
b21waWxlVmFyYXJnc0xlbmd0aCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNW
YWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1ZSBsZW5ndGgg
PSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNBcmd1bWVudHMsCiAgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRo
ZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJv
cGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50
IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVj
IGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291
bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJp
Z2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwogICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMy
T25lKTsKIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aCwgbGVu
Z3RoSW5jbHVkaW5nVGhpcykpOworICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNsdWRpbmdUaGlz
KTsKKyAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAgIExWYWx1ZSBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFs
dWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAorICAgICAgICAg
ICAgbV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhpcyksIG1fb3V0
LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQp
KSkpOyAKKwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxv
YWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdz
IGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21w
dXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdzIGp1c3QgdG9v
ayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ug
d291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQg
PSBtX291dC5sU2hyKAotICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFj
aGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBt
X291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCksIG1fY2FsbEZy
YW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAgICAgCiAgICAg
ICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJhcmdzLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFj
aGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwK
LSAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5p
bXVtKSk7CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMy
KGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Rm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpIHsK
LSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAgICAgICBOb2Rl
KiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpIHsKICAgICAgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFy
Z3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTU5NSw1MCArOTU5
OCwyNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
IAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExWYWx1ZSBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3Vt
ZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAg
ICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtu
b3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOwotICAgICAgICAgICAgaWYgKGtub3du
TGVuZ3RoID49IGRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtu
b3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGtub3duTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50
MzIoa25vd25MZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0
aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgotICAgICAgICAg
ICAgaWYgKCFkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRz
TGVuZ3RoLnZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihh
cmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOwot
ICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQs
IGxhcmdlckxlbmd0aFJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxKSk7Ci0g
ICAgICAgIH0KLQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRh
dGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXMgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGlu
Z1RoaXM7IAorICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKKyAgICAgICAg
ICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1YihjYWxsZXJMZW5ndGhJbmNsdWRpbmdU
aGlzLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7CisgICAgICAg
ICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFu
T3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0
LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKKyAgICAgICAg
fSBlbHNlIAorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGNhbGxlckxlbmd0aElu
Y2x1ZGluZ1RoaXM7CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJ
bmNsdWRpbmdUaGlzLCBtX291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAg
ICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAg
bV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5s
aW1pdCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5n
VGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAg
ICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUs
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0g
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk2OTcsNjUgKzk2
NzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1l
IGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWlj
IG9wZXJhdGlvbnMuCiAgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAgICAKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSU5UMzJfTUlOKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGggPSBtX291dC5zdWIoYXJndW1l
bnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KSk7CiAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5j
aCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1
bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRz
TGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkp
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGko
SW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOwor
ICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhl
ZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybywg
U2VsZWN0UHJlZGljdGFiaWxpdHk6OlByZWRpY3RhYmxlKTsKICAgICB9CiAKICAgICB2b2lkIGNv
bXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxJ
bmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1l
Kj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNo
ZWRTcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50
c0NoaWxkKCkubm9kZSgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKIAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7Ci0gICAgICAgIFZl
Y3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgYXV0byBjb2xsZWN0QXJn
dW1lbnRDb3VudCA9IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0
KSAtPiB2b2lkIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkgewotICAgICAgICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRh
cmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgICAgICAg
ICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3RvcigpOwotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNoaWxkcmVuKCk7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFyZ2V0LCBpKS5ub2Rl
KCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAr
K251bWJlck9mU3RhdGljQXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZT
dGF0aWNBcmd1bWVudHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSo+KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCk7Ci0gICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRTcHJlYWRMZW5ndGhz
LmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMtPmdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1l
LCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBjb2xsZWN0QXJndW1lbnRDb3VudChhcmd1bWVu
dHMpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50
MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKLSAgICAgICAgZm9yIChMVmFsdWUgbGVu
Z3RoIDogc3ByZWFkTGVuZ3RocykKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBt
X291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGxl
bmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAg
ICAgICBzcGVjdWxhdGUoCkBAIC05NzY2LDcgKzk3MDEsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1
ZSgpOwogCi0gICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3Ro
aXMsICZjYWNoZWRTcHJlYWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSog
dGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAgICAgYXV0byBmb3J3
YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJnRhcmdldFN0YXJ0XShhdXRvIHNl
bGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CiAgICAgICAg
ICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0b3JlSW5kZXgpOwogCkBAIC05
Nzk4LDggKzk3MzMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFy
Z2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0
UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOworICAgICAgICAg
ICAgYXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwor
ICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoZ2V0U3By
ZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQu
bmV3QmxvY2soKTsKQEAgLTEyMjU0LDggKzEyMTkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgTFZh
bHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX291dC5z
dG9yZVB0cihtX2NhbGxGcmFtZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0
X2ZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9y
KDApKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsK
LSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2Fs
bGVlKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcigwKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRf
Y2FsbGVyRnJhbWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgcGFja2V0LCBt
X2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CiAgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKHNjb3BlLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfc2NvcGUpOwog
ICAgIH0KICAgICAKQEAgLTEyMzE2LDcgKzEyMjUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQXJn
dW1lbnRzTGVuZ3RoIGxlbmd0aDsKIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICBsZW5ndGgua25vd24g
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAg
ICAgICAgIGxlbmd0aC5rbm93biA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICBsZW5ndGgu
aXNLbm93biA9IHRydWU7CiAgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5jb25zdElu
dDMyKGxlbmd0aC5rbm93bik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjM0Niw3ICsxMjI4Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVz
c0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAg
ICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5h
c0NlbGwoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwog
ICAgIH0KICAgICAKICAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzYxMSw3ICsxNzU0
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1f
ZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAg
ICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CisgICAgICAgICAgICB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1f
b3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0xNzcxOSw3ICsx
NzY1NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwg
cHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9m
QXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51
bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5u
dW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMTc4
MjQsMTUgKzE3NzYxLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdERlc2NyaXB0b3It
Pm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxp
dHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAgJiYgbV9ncmFw
aC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkKLSAgICAgICAgICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxv
Y2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCks
ICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9y
aWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5LmlzRGVhZCgp
ICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBleGl0T3JpZ2luKSkKKyAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZl
IGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBvcGVyYW5kLCAiLCBh
dmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4p
LmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVl
ID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkp
OwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMo
KSkKQEAgLTE4MTMyLDM5ICsxODA2OSwzOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9v
dXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwg
aW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRy
ZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJp
YWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJh
c2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCld
LCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFz
ZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2Us
IE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2Us
IG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9y
KExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1
ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYWRk
cmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2lu
dGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAg
aWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9j
YXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLCBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCwgb2Zmc2V0KTsKICAgICB9
Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2lu
dGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBh
eWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRl
ciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVk
UG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApp
bmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5Li4wOTFlN2YzYzli
NDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxu
Iik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxs
RnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5h
c2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLmFzYW5VbnNhZmVK
U1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZh
bHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFy
Z3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYx
OGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3Io
CiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9w
cm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxl
KHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJP
ZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2Fs
cywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9u
SnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXgg
ZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMx
ZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3Qg
T1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRh
Rm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJn
dW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUu
CiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFs
aWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4
ODE3NmVlNzIuLmEzNzg0MTBkYTliODAxNTcyNGE5ZGMxNmMzZmUxYWVjMDgwNTVkNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwx
MSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgog
I2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhp
dAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0g
YmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwog
CisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBleGl0Lm1f
ZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7CisgICAgICAgIFZNKiB2bVB0ciA9ICZ2
bTsKKyAgICAgICAgaml0LnByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAg
ICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRl
Y29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6
Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAg
ICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNl
dF07CisKKyAgICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShm
cmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsg
Y29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxs
cygpKSB7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9
IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxC
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnBy
ZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsg
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSks
IGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDAp
OworICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBOb3cgZ2V0IHN0YXRlIG91dCBvZiB0aGUg
c2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2suIFRoZSB2YWx1
ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1c3QgbW92ZSB0aGVtLgogICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgp
OyBpbmRleC0tOykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2Ny
aXB0b3ItPm1fdmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkg
PCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVz
KSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwg
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBp
bmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdU
MCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlZykpOworICAgICAgICBqaXQuc3RvcmU2
NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyh2bSwg
aml0LCBleGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
CmluZGV4IDdmN2NkMzgzMjQ5NjFhOGZmNGU0NzI1OWE4ODRkZTg2ZDU2NGIxMTcuLjEwMmMxZTZh
MWJkOWViM2I0NzEzMzc0NGY4NDNlYzY0ZDYzYTE4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApAQCAtNTA1LDcgKzUwNSw3IEBAIGV4dGVybiAiQyIg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5l
dyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0
byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVh
ZC4KICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJm
bHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAg
ICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1t
dXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsK
ICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IDc0OTMzZGM2MDUxNWM1ZGEwMGVh
MThmYzdkNWRiM2FkOWNlNWU5Y2YuLmQ1N2ZiMWVlYTgwNDRhMzRiNzkxNzY4YTkwOTc2OTg5OThh
YzMzOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUs
MTUgKzY1NSwzNyBAQCBMVmFsdWUgT3V0cHV0Ojpub3RaZXJvNjQoTFZhbHVlIHZhbHVlKQogICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVh
bCwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8pOwogfQogCi1MVmFsdWUgT3V0cHV0OjpzZWxl
Y3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikKK0xWYWx1ZSBP
dXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFNl
bGVjdFByZWRpY3RhYmlsaXR5IHByZWRpY3RhYmlsaXR5KQogewogICAgIGlmICh2YWx1ZS0+aGFz
SW50MzIoKSkgewogICAgICAgICBpZiAodmFsdWUtPmFzSW50MzIoKSkKLSAgICAgICAgICAgIHJl
dHVybiB0YWtlbjsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0OwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gbm90VGFrZW47CisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAg
fQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpT
ZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsKKworICAgIGlmIChwcmVk
aWN0YWJpbGl0eSA9PSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpCisgICAg
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxl
Y3QsIG9yaWdpbigpLCB2YWx1ZSwgbGVmdCwgcmlnaHQpOworCisgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbmV3QmxvY2soKTsKKyAgICBMQmFzaWNCbG9jayBsZWZ0VGFrZW5CbG9jayA9
IG5ld0Jsb2NrKCk7CisgICAgTEJhc2ljQmxvY2sgcmlnaHRUYWtlbkJsb2NrID0gbmV3QmxvY2so
KTsKKworICAgIG1fYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgbV9wcm9j
LCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgdmFsdWUsCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhs
ZWZ0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OlJp
Z2h0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpSYXJl
KSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHJpZ2h0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxp
dHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OkxlZnRMaWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6
Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAgIExWYWx1ZSBwaGkgPSBjb250
aW51YXRpb24tPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlBoaSwgbGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSk7CisKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNp
bG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGxlZnQsIHBoaSk7CisgICAgbGVmdFRha2VuQmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6
OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIHJpZ2h0VGFrZW5CbG9jay0+
YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHJpZ2h0LCBwaGkp
OworICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6
Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOworCisg
ICAgbV9ibG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICByZXR1cm4gcGhpOwogfQogCiBMVmFsdWUg
T3V0cHV0OjphdG9taWNYY2hnQWRkKExWYWx1ZSBvcGVyYW5kLCBUeXBlZFBvaW50ZXIgcG9pbnRl
ciwgV2lkdGggd2lkdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAppbmRleCBj
NTZiNGVmN2UwNjBmOTM2MmIzYmRjYTBmZDQ2YTAzYWE1NzBjYTJlLi40YzAyYjM0MDg1MTQ2Zjdk
ZjAyNTYyN2Q1ZmYzMWM3ODEwZDhmYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgi
CiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIkZUTENv
bW1vblZhbHVlcy5oIgorI2luY2x1ZGUgIkZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmgiCiAjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExTd2l0Y2hDYXNlLmgiCiAjaW5jbHVkZSAi
RlRMVHlwZWRQb2ludGVyLmgiCkBAIC0zNjUsNyArMzY2LDcgQEAgcHVibGljOgogICAgIExWYWx1
ZSB0ZXN0SXNaZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzTnVs
bChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0ZXN0Tm9uWmVyb1B0cihMVmFs
dWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3ROdWxsKGJpdEFuZCh2YWx1ZSwgbWFz
aykpOyB9CiAKLSAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBM
VmFsdWUgbm90VGFrZW4pOworICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
dGFrZW4sIExWYWx1ZSBub3RUYWtlbiwgU2VsZWN0UHJlZGljdGFiaWxpdHkgPSBTZWxlY3RQcmVk
aWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpOwogICAgIAogICAgIC8vIFRoZXNlIGFyZSByZWxh
eGVkIGF0b21pY3MgYnkgZGVmYXVsdC4gVXNlIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29y
YXRlRmVuY2VkQWNjZXNzKCkgd2l0aCBhCiAgICAgLy8gbm9uLW51bGwgaGVhcCB0byBtYWtlIHRo
ZW0gc2VxX2NzdCBmZW5jZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNlbGVjdFByZWRpY3RhYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE4NTNiYTk4NTIyYWFhYzYxYjg0
OTk1NTI3OTRhNTA5MzBjN2Q2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaApAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0M6OkZUTCB7CisKK2VudW0gY2xh
c3MgU2VsZWN0UHJlZGljdGFiaWxpdHkgOiB1aW50OF90IHsKKyAgICBOb3RQcmVkaWN0YWJsZSwK
KyAgICBQcmVkaWN0YWJsZSwKKyAgICBMZWZ0TGlrZWx5LAorICAgIFJpZ2h0TGlrZWx5LAorfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKaW5kZXggNjkzNGMz
ZjBkMzc5MWY2NGJhNDI5NjNlMDU1NjNkYmJjN2RkYTVhNC4uYzcyNmFkMjdjODE1YWM2N2E2NzBk
MjU4MDRhYThjYWUyMmIzYTBkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5oCkBAIC0xMDAsNyArMTAwLDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRp
b24oCiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGNh
bGxPcGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5j
dGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhNWY1Mjc3ZGQ2MzFh
Y2Q0Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAgLTAsMCArMSw2NCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgQ2hlY2twb2ludAorICAg
IGF0dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRlZnMKKyAgICBhdHRyX3JlYWRl
ciA6bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAgZGVmIGluaXRpYWxpemUobmFt
ZSwgaW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAaW5kZXggPSBp
bmRleAorICAgICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURl
ZiA9PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYp
fCB1c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MobmFtZXNw
YWNlKQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNwYWNlfTo6I3tuYW1lfToKK0VP
RgorICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisgICAgZGVmIGluaXRpYWxpemUo
b3Bjb2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAg
ICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFw
X3dpdGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hlY2twb2ludC5uZXcobmFtZSwg
aW5kZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcworICAgICAgICBAY2hl
Y2twb2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAgICBlbmQKKyAgICAgICAgRU9G
PC0tCitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ije0BvcGNvZGUuY2FwaXRhbGl6
ZWRfbmFtZX0odWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3aXRjaCAoY2hlY2twb2ludCkg
eworCisgICAgfQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9PcGNvZGUucmIKaW5kZXggZGFiODY4NmNhMzNhMTAyYzliZmExZGYxODAzZWJiNGYw
YWIyNDQ4NS4uY2ZkOWRmMTUxMTQ3YTg2ZGE0YmM3NWJlNDZhNjc4MjVlMjUzNzVmMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAgLTMwLDYgKzMwLDcgQEAg
Y2xhc3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAgICBhdHRyX3JlYWRlciA6bWV0
YWRhdGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0cl9yZWFkZXIgOmNoZWNrcG9p
bnRzCiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cgPSAiT3Bjb2RlU2l6ZTo6TmFy
cm93IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQogICAgICAgICB0aWQKICAgICBl
bmQKIAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0
YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9u
LCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMsIHRt
cHMsIGNoZWNrcG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNlY3Rpb24KICAgICAgICAgQG5h
bWUgPSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwge30KICAgICAgICAgQG1ldGFk
YXRhID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMKICAgICAg
ICAgQGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdfbmFtZSwgdHlwZSksIGluZGV4
fCBBcmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4ICsgMSB9IHVubGVzcyBhcmdzLm5p
bD8KKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9p
bnRzLm1hcCB7IHwoY2hlY2twb2ludCwgXyl8IGNoZWNrcG9pbnQgfSB1bmxlc3MgY2hlY2twb2lu
dHMubmlsPwogICAgIGVuZAogCiAgICAgZGVmIGNyZWF0ZV9pZCEKQEAgLTExOCw2ICsxMjEsOCBA
QCBjbGFzcyBPcGNvZGUKICAgICAgICAgPDwtRU9GCiBzdHJ1Y3QgI3tjYXBpdGFsaXplZF9uYW1l
fSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7CiAgICAgI3tvcGNvZGVJRH0KKyAgICAje3RlbXBzfQor
ICAgICN7Y2hlY2twb2ludFZhbHVlc30KIAogI3tlbWl0dGVyfQogI3tkdW1wZXJ9CkBAIC0xMzIs
NiArMTM3LDE4IEBAIEVPRgogICAgICAgICAic3RhdGljIGNvbnN0ZXhwciAje29wY29kZUlEVHlw
ZX0gb3Bjb2RlSUQgPSAje25hbWV9OyIKICAgICBlbmQKIAorICAgIGRlZiBjaGVja3BvaW50VmFs
dWVzCisgICAgICAgIHJldHVybiBpZiBAY2hlY2twb2ludHMubmlsPworCisgICAgICAgIFsiZW51
bSBDaGVja3BvaW50cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChjaGVja3BvaW50cy5tYXB7IHxjaGVj
a3BvaW50fCAiICAgICAgICAje2NoZWNrcG9pbnR9LCIgfSkuY29uY2F0KFsiICAgICAgICBudW1i
ZXJPZkNoZWNrcG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4iKQorICAgIGVuZAorCisgICAg
ZGVmIHRlbXBzCisgICAgICAgIHJldHVybiBpZiBAdG1wcy5uaWw/CisKKyAgICAgICAgWyJlbnVt
IFRtcHMgOiB1aW50OF90IHsiXS5jb25jYXQoQHRtcHMubWFwIHt8KHRtcCwgdHlwZSl8ICIgICAg
ICAgICN7dG1wfSwifSkucHVzaCgiICAgIH07Iikuam9pbigiXG4iKQorICAgIGVuZAorCiAgICAg
ZGVmIGVtaXR0ZXIKICAgICAgICAgb3Bfd2lkZTE2ID0gQXJndW1lbnQubmV3KHdpZGUxNiwgb3Bj
b2RlSURUeXBlLCAwKQogICAgICAgICBvcF93aWRlMzIgPSBBcmd1bWVudC5uZXcod2lkZTMyLCBv
cGNvZGVJRFR5cGUsIDApCkBAIC0yMDAsNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZTxPcGNvZGVTaXplIF9fc2l6ZSwgYm9vbCByZWNvcmRPcGNvZGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
R2VuZXJhdG9yPgogICAgIHN0YXRpYyBib29sIGVtaXRJbXBsKEJ5dGVjb2RlR2VuZXJhdG9yKiBn
ZW4je3R5cGVkX2FyZ3N9I3ttZXRhZGF0YV9wYXJhbX0pCiAgICAgeworICAgICAgICAjeyFAY2hl
Y2twb2ludHMubmlsPyA/ICJnZW4tPnNldFVzZXNDaGVja3BvaW50cygpOyIgOiAiIn0KICAgICAg
ICAgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMTYpCiAgICAgICAgICAgICBnZW4tPmFs
aWduV2lkZU9wY29kZTE2KCk7CiAgICAgICAgIGVsc2UgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXpl
OjpXaWRlMzIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1Nl
Y3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKaW5k
ZXggMjA0YWM3NTllMTNlZmYxNTFmOGNkMTc3ZjNiZjFiNzBlMDc3OWNhYS4uNjY4NTViYTY1MDA4
MGU0YzIzY2MwZWJlYzEwZTc5NDljZGU3NjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBTZWN0aW9uCiAgIGVu
ZAogCiAgIGRlZiBjcmVhdGVfb3Bjb2RlKG5hbWUsIGNvbmZpZykKLSAgICAgIE9wY29kZS5uZXco
c2VsZiwgbmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFk
YXRhXSwgY29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdKQorICAgICAgT3Bjb2RlLm5ldyhz
ZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRh
dGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10sIGNvbmZpZ1s6dG1wc10sIGNvbmZp
Z1s6Y2hlY2twb2ludHNdKQogICBlbmQKIAogICBkZWYgYWRkX29wY29kZV9ncm91cChuYW1lLCBv
cGNvZGVzLCBjb25maWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IGY2Mzk0YWM3MTA3MTI1YjdjYWIyMWFkMmI5MTEzYzA3OTUzNmE2
MDAuLmVmN2Y2Yzk0ZjQxNjhiNGEyODQ2MDUzYTVkMDEzYmUxMTIyMGRlZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC01MCw3ICs1
MCw3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2Vy
KENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsCiAgICAgQVNTRVJUKGdsb2JhbEV4ZWMtPmlz
RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkpOwogfQogCi1ib29sIENhbGxGcmFtZTo6
Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAorYm9vbCBDYWxsRnJhbWU6OmNh
bGxTaXRlQml0c0FyZUJ5dGVjb2RlSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxv
Y2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CkBAIC05MCwxMiAr
OTAsMTIgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgp
IGNvbnN0CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAog
ewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpOwor
ICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCldLnRhZygpOwogfQogCiBTVVBQUkVTU19BU0FOIHVuc2lnbmVkIENhbGxGcmFtZTo6dW5z
YWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnVuc2FmZVRhZygpOworICAgIHJldHVybiB0aGlzW3N0YXRp
Y19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnVuc2FmZVRhZygpOwog
fQogCiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CkBAIC0x
MDUsNyArMTA1LDcgQEAgQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBj
b25zdAogCiBTVVBQUkVTU19BU0FOIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjp1bnNhZmVDYWxs
U2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkgJiAoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpID4+IEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlm
dCkpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xMTcsMzMgKzExNywzNCBAQCBj
b25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIHZvaWQgQ2Fs
bEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZShCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
dnBjKSkpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBj
YWxsU2l0ZS5iaXRzKCk7CisgICAgdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpXS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKIH0KIAogdW5zaWduZWQg
Q2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBB
U1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9m
ZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAg
ICByZXR1cm4gY29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGN1cnJlbnRWUEMoKSk7ICAgICAK
IH0KIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxs
RnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogewotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVC
eXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRl
eCgpKTsKICAgICByZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxTaXRl
Qml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkucHRyKCk7CiB9CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRD
dXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZShjb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRdLnRhZygpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2Fs
bFNpdGUuYml0cygpKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCldLnRhZygpID0gY2FsbFNpdGUuYml0cygpOworICAgIEFTU0VSVChjdXJy
ZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNB
c0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAg
IEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVJbmRleCgpKTsKICAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgp
LmJpdHMoKTsKIH0KIApAQCAtMTY1LDggKzE2Niw4IEBAIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1l
OjpieXRlY29kZUluZGV4KCkKICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOwogICAgIH0KICNlbmRpZgotICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9m
ZnNldCgpKTsKLSAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2Rl
T2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4KCkpOwor
ICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpOwogfQogCiBDb2RlT3Jp
Z2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCkBAIC0xODAsNyArMTgxLDcgQEAgQ29kZU9yaWdp
biBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNv
ZGVPcmlnaW4oaW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBDb2RlT3JpZ2luKEJ5
dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKSk7CisgICAgcmV0dXJu
IENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKSk7CiB9CiAKIFJlZ2lz
dGVyKiBDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggY2ZiNzcxODU2MDM5OTMzOTEwMDRm
YzEzMjExODM4NDIzYzVkYzZhOS4uZjQxOThlZWIxYjY3ZDIyY2VhYTdlYTM4OGU5YjI1NDYxY2M0
YjI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
aApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtQ2xh
c3NPcGVyYXRvck92ZXJsb2Fkcy5oPgogCiBuYW1lc3BhY2UgSlNDICB7CiAKQEAgLTQ1LDE5ICs0
NiwzMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgcHVibGljOgogICAgICAgICBDYWxsU2l0ZUlu
ZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBl
eHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IG1f
Yml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQorICAgICAgICB7IAorICAgICAgICAgICAgQVNT
RVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisgICAgICAgIH0KKyNlbHNlCisgICAg
ICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoY29uc3QgSW5zdHJ1Y3Rpb24mIGluc3RydWN0aW9u
KQorICAgICAgICAgICAgOiBtX2JpdHMocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oJmluc3Ry
dWN0aW9uKSkKICAgICAgICAgeyB9CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQorICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVj
b2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4OyB9Ci0KLSAgICAgICAgdWludDMyX3Qg
Yml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQorICAgICAg
ICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKLSAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4
OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IEJ5dGVjb2RlSW5kZXgoYml0cygpKTsgfQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYWxs
U2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCisgICAgICAgICAgICA6IG1fYml0cyhiaXRzKQorICAg
ICAgICB7IH0KICAgICBwcml2YXRlOgotICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0ZWNvZGVJbmRleCgpLm9mZnNldCgp
IH07CiAgICAgfTsKIAogICAgIGNsYXNzIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IDogcHVibGlj
IENhbGxTaXRlSW5kZXggewpAQCAtNjUsNyArNzgsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIGV4cGxp
Y2l0IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAgICAgICA6
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cykpCisgICAgICAgICAg
ICA6IENhbGxTaXRlSW5kZXgoYml0cykKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTc4LDI0
ICs5MSwyNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgLy8gYXJtNjRfMzIgZXhwZWN0cyBjYWxs
ZXIgZnJhbWUgYW5kIHJldHVybiBwYyB0byB1c2UgOCBieXRlcyAKICAgICBzdHJ1Y3QgQ2FsbGVy
RnJhbWVBbmRQQyB7CiAgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIENhbGxGcmFtZSogY2Fs
bGVyRnJhbWU7Ci0gICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIGNvbnN0IEluc3RydWN0aW9u
KiByZXR1cm5QQzsKKyAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikgdm9pZCogcmV0dXJuUEM7
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNpemVJblJlZ2lzdGVycyA9IDIgKiBzaXpl
b2YoQ1BVUmVnaXN0ZXIpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9OwogICAgIHN0YXRpY19h
c3NlcnQoQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzID09IHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3RlciksICJDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMgaXMgaW5jb3JyZWN0LiIpOwogCi0gICAgc3RydWN0IENhbGxGcmFtZVNsb3Qgewot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNhbGxlZSA9
IGNvZGVCbG9jayArIDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGFyZ3VtZW50Q291
bnQgPSBjYWxsZWUgKyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCB0aGlzQXJndW1l
bnQgPSBhcmd1bWVudENvdW50ICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmly
c3RBcmd1bWVudCA9IHRoaXNBcmd1bWVudCArIDE7CisgICAgZW51bSBjbGFzcyBDYWxsRnJhbWVT
bG90IDogaW50IHsKKyAgICAgICAgY29kZUJsb2NrID0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzLAorICAgICAgICBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxLAorICAgICAgICBhcmd1
bWVudENvdW50ID0gY2FsbGVlICsgMSwKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRD
b3VudCArIDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxLAogICAg
IH07CiAKKyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lO
VEVHUkFMUyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JT
X0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisKICAgICAvLyBS
ZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRpb24uCiAgICAgLy8g
UGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAgICBjbGFz
cyBDYWxsRnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQgKyAxOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBoZWFkZXJT
aXplSW5SZWdpc3RlcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpICsgMTsKIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBpbiB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMKICAgICAgICAgLy8gd2hlbiB5b3Un
dmUgZ3VhcmFudGVlZCB0aGUgY2FsbGVlIGNhbid0IGJlIGEgV2FzbSBjYWxsZWUsIGFuZCBjYW4K
QEAgLTEwNiwxMCArMTIyLDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gdG8gc2Vl
IGlmIGl0J3MgYSBjZWxsLCBhbmQgaWYgaXQncyBub3QsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi4K
ICAgICAgICAgaW5saW5lIEpTVmFsdWUgZ3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdDsK
ICAgICAgICAgaW5saW5lIEpTT2JqZWN0KiBqc0NhbGxlZSgpIGNvbnN0OwotICAgICAgICBDYWxs
ZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJhbWVT
bG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KLSAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxsZWVC
aXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJh
bWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CisgICAgICAgIENhbGxlZUJp
dHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGlu
dD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ucG9pbnRlcigpKTsgfQorICAgICAgICBTVVBQUkVT
U19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0
cyh0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0uYXNhblVuc2Fm
ZVBvaW50ZXIoKSk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdDsKLSAg
ICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gYml0
d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsg
fQorICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaykpOyB9CiAgICAgICAgIGlubGluZSBTVVBQUkVTU19BU0FOIENv
ZGVCbG9jayogdW5zYWZlQ29kZUJsb2NrKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU1Njb3Bl
KiBzY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCkgY29uc3Q7CiAKQEAgLTE0Niw3ICsxNjIs
NyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJuUENP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcmV0dXJu
UEMpOyB9CiAgICAgICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0
dXJuIEFic3RyYWN0UEModm0sIHRoaXMpOyB9CiAKLSAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpIGNvbnN0OworICAgICAgICBib29sIGNhbGxTaXRlQml0c0FyZUJ5
dGVjb2RlSW5kZXgoKSBjb25zdDsKICAgICAgICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVDb2RlT3Jp
Z2luSW5kZXgoKSBjb25zdDsKIAogICAgICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygp
IGNvbnN0OwpAQCAtMTgyLDE1ICsxOTgsMTMgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBz
dGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSog
Z2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBh
IHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJs
b2NrKS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmly
dHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25z
dGFudAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFk
IGEgcmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1
bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3Vt
ZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBk
aWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9Ci0gICAgICAgIHNp
emVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpOyB9CisgICAgICAgIHNpemVfdCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5bG9hZCgpOyB9CiAgICAg
ICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoaW50IGFyZ3VtZW50KSB7IHJldHVybiAoQ2Fs
bEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCArIGFyZ3VtZW50KTsgfQogICAgICAgICBzdGF0aWMg
aW50IGFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudCk7IH0KIApAQCAtMjM5LDcgKzI1
Myw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50QWZ0ZXJD
YXB0dXJlKHNpemVfdCBhcmd1bWVudCk7CiAKLSAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Io
c2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7IH0KKyAgICAg
ICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSB7IHJldHVybiBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDE7IH0KIAogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBub0NhbGxlcigp
IHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAgICAgYm9vbCBpc0RlcHJlY2F0ZWRDYWxsRnJhbWVG
b3JEZWJ1Z2dlcigpIGNvbnN0CkBAIC0yNTEsMTAgKzI2NSwxMCBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIGJvb2wgaXNTdGFja092ZXJmbG93RnJhbWUoKSBjb25zdDsKICAgICAgICAgYm9v
bCBpc1dhc21GcmFtZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAgICAgICAg
dm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nh
c3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpXS5wYXlsb2FkKCkgPSBjb3VudDsgfQogICAgICAgICBpbmxpbmUgdm9pZCBzZXRD
YWxsZWUoSlNPYmplY3QqKTsKICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVC
bG9jayopOwotICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZy
YW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24q
Pih2YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxs
ZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSB2YWx1ZTsgfQogCiAgICAgICAgIFN0cmluZyBmcmll
bmRseUZ1bmN0aW9uTmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAppbmRleCBhOTdkZWNhNTNiY2UxNzkyODliMGMz
ODBkMDRlOGYyYTg2MDQ3N2QxLi5lZTdlYzJhYjEwNGE3YTM0ZDk4YjBmNDM4ZjY0NGMyZGNhMWM1
MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWVJbmxpbmVzLmgKQEAgLTMyLDUwICszMiwzOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0g
ICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6
cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19
Ci0KLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
LSAgICByZXR1cm4gdGhpc1tpbmRleF07CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZ0aGlzLT5jb2RlQmxvY2so
KS0+Y29uc3RhbnRSZWdpc3RlcihyZWcpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCld
OwogfQogCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CisgICAg
QVNTRVJUKCFyZWcuaXNDb25zdGFudCgpKTsKKyAgICByZXR1cm4gdGhpc1tyZWcub2Zmc2V0KCld
OwogfQogCiBpbmxpbmUgSlNWYWx1ZSBDYWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4g
dGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsKKyAgICByZXR1cm4gdGhpc1tz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLmpzVmFsdWUoKTsKIH0KIAog
aW5saW5lIEpTT2JqZWN0KiBDYWxsRnJhbWU6OmpzQ2FsbGVlKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpj
YWxsZWVdLm9iamVjdCgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKV0ub2JqZWN0KCk7CiB9CiAKIGlubGluZSBDb2RlQmxvY2sqIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjpjb2RlQmxv
Y2soKTsKIH0KIAogaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiBDYWxsRnJhbWU6OnVu
c2FmZUNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOworICAgIHJldHVybiB0
aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVnaXN0ZXI6
OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBDYWxs
RnJhbWU6OmxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKSBjb25zdApAQCAtMTAyLDEyICs5MSwx
MiBAQCBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OmlzV2FzbUZyYW1lKCkgY29uc3QKIAogaW5saW5l
IHZvaWQgQ2FsbEZyYW1lOjpzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSkKIHsKLSAgICBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBjYWxsZWU7
CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSldID0gY2FsbGVlOwogfQogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6
OnNldENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBzdGF0aWNfY2FzdDxS
ZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10gPSBjb2RlQmxvY2s7Cisg
ICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayldID0gY29kZUJsb2NrOwogfQogCiBpbmxpbmUgdm9pZCBDYWxsRnJh
bWU6OnNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29wZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMzYTFiZTRmNThkYWVhODA3
ZTNiYWZlZjBkNGJhMDJmZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBU
IGdldFRtcChzaXplX3Qgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6
ZW9mKFQpID09IHNpemVvZih1aW50NjRfdCkpCisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFQ+KHRtcHNbb2Zmc2V0XSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2Yo
VCkgPT0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
VD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIGlm
IGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih0bXBzW29mZnNldF0p
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9
PSBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihz
dGF0aWNfY2FzdDx1aW50OF90Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICB2b2lkKiBuZXh0SW5zdHJ1Y3Rp
b25KdW1wVGFyZ2V0OworICAgIHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdOwor
fTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKaW5kZXggZGFhOTRjODlmOTAwNWE5OTcyZmMwZTNiMDJlYjg5M2QyMTFjZGQ5Ny4u
OGVmMWMzZDg1MGMyYzhhMDE1NDZmMmM4YTlkZWIzZDg1NDdhNWIzNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3Vy
ZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNo
ZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpT
VmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1l
LT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxs
ZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNh
bGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9m
ZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWlu
ID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVy
KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxp
bmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAog
ICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2Nr
LT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1
bmN0aW9uQ29udGV4dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQz
Ml90CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAg
IGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFy
Z09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UK
QEAgLTI0OSw3ICsyNTMsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBs
ZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0
LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2
b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQz
Ml90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwg
IWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUsMzEgQEAgdm9pZCBsb2Fk
VmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGly
ZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nh
c3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBq
c0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmpl
Y3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgp
OworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50
cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNl
bGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVy
Zmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAg
ICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShv
YmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nh
c3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganND
YXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0
aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9
IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQo
Z2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50
RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFs
dWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk3LDggKzMwMSw3
IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAg
ICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFt
ZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0
aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhsZW5ndGggKyAxKTsKQEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGljOgogICAgICAgICBtX2Nv
ZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51
bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAo
bV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9p
bnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMgPT0g
TExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT52bSgpLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1fY2Fs
bEZyYW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKICAg
ICAgICAgICAgICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBt
X2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAgICAg
ICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3VsZFN0
b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCisg
ICAgICAgIG1fcmV0dXJuUEMgPSBtX2NhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAg
ICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2ICs2
MDYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9j
ayomIG1fY29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11dGFi
bGUgY29uc3Qgdm9pZCogbV9yZXR1cm5QQyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lOTElO
RSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNh
bGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTT2JqZWN0KgogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZt
LCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29m
dCgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdz
LnNpemUoKSA+IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAg
aWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1h
eEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMz
MjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3
OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsK
ICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMs
IHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JG
b3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25l
ZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7Cisg
ICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7
CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSog
ZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1
cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsK
ICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjgx
OGY0ZGIyYjY3ZGUzOTNhMTc5ODRkZDUwNjhhODQyZDIxZmIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyAr
MjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxG
cmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlu
bGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1l
Lm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1l
Lm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsK
QEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBXVEY6OkZ1bmN0aW9uPAogICAgICAgICBpZiAo
Y29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAgICAgICAgICAgIGluZGVudCsrOwogCi0gICAg
ICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7
CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZUluZGV4
KCkpIHsKICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjYWxs
RnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50
LCBieXRlY29kZUluZGV4LCAiIG9mICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
LCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1MmRl
ZjJkNzFiYzIuLmUwNmNiNDliMjk1ZGU1ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2
NDcsMjggQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAg
ICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwgR1BS
UmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQ
UlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHRvKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVn
IGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyNjQoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJl
ZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2Fk
NjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAg
IGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHRvKTsKICAgICB9CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAg
ICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJv
bSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgdm9p
ZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8p
CkBAIC02OTYsMTkgKzY5NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9p
bnRlci4gT24gc29tZSBwbGF0Zm9ybXMsIHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1
c2hpbmcgdGhlCiAgICAgLy8gImxpbmsgcmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVybiBh
ZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20s
IGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xv
Z3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBz
dG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRl
ckRlbHRhKCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UK
LSAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShH
UFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFt
ZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkp
CiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBw
cm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEo
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRU
YWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0b3Jl
UHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1Bv
aW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAg
ICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNz
Rm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSArMTE2
NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgp
KTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZp
cnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpOwog
ICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGlj
IEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3
OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIu
aXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXls
b2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3Bl
cmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAg
IHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAog
ICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNTRVJU
KHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0
dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xv
dCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NFUlQo
c2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOworICAg
ICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVy
KSAqIChzbG90IC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7
CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgog
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAg
ewotICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlRnJhbWVUYWdTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xv
dCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxSZWdp
c3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
VmlydHVhbFJlZ2lzdGVyKDApKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lz
dGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAg
ICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0dXJu
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5Njkw
ZTA5YzhiNTcyNzBkZWY3Zjg3YTQ2Y2MyYjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1M2Y4
ODgwYjk4MzdiNWM2NGQ0YzU2NDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxl
cjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNo
dWZmbGVEYQogI2VuZGlmCiAKICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkg
fHwgZGF0YS5jYWxsZWUudmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXco
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAg
ICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NF
UlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVn
aXN0ZXIoKS5pc0xvY2FsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCmluZGV4IDYyNDM5YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5
ZjUuLjRjNmFhMzJmNGY1ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAg
ICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5
KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0
TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292
ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3Zl
cnkoKSk7CiAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3Vt
ZUNhbGxlZUlzQ2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENh
Y2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2Fs
bGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAg
ICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkg
ewogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKaW5kZXggMjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUz
ZTI3YTgwYS4uODczMTVlZjg0NzdhYzEyYTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBD
b21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlw
ZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0
KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBS
ZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRv
RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBl
bnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRG
aWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07
CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZv
cmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhl
IHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1
bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2
b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVn
VDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZp
bmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpT
VmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQg
ZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNy
Yyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0g
ICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAg
IGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAg
ICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMp
OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAg
ICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAg
dm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAg
ICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAg
ICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5
bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3Rl
cklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQg
aW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFz
ZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4
MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdp
c3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
MihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwg
VmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwog
Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAg
ICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJl
Z2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVk
SW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElz
Q2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lk
IGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAg
IHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJl
Z2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3Rv
cmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNC
b29sID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3Rl
cklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdl
dEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IElu
c3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlz
dCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJ
blJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwog
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
UmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGlu
dCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAg
ICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBS
ZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwot
ICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBm
cm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVt
aXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNl
ZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQp
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNl
KQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5
bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklE
LCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVn
aXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lz
dGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklELCBpbnQgVlJlZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5v
dEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAg
ICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAg
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVn
aXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChp
bnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0
QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsK
IAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlv
biosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50
IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BF
UkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKTsKIApAQCAtNjg1LDggKzY3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVD
bG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
dW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1p
dFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAg
ICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
dm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAg
ICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFu
ZCwgR1BSUmVnKTsKQEAgLTY5NCwyMCArNjg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBH
UFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Q
b2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNl
bmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFy
KGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1p
dEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAg
ICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVu
Y3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRG
dW5jdGlvbik7CkBAIC03MzQsNyArNzI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAg
ICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAg
ICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlT2Zmc2V0KTsKIApAQCAtNzU0LDEzICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRT
bG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAj
ZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4p
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBp
bnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVy
OjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBp
bnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1i
bGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdz
KQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBP
cGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBl
PihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3Vs
dCk7CkBAIC04NjQsNyArODU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMx
LCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNm
Li4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
LSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlu
bGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAg
Ly8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyAr
MjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGlu
dCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
b3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
ICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3Ax
LCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBp
bnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6
ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6
ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAK
ICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBp
biB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5j
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3Jj
RHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
Y0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAt
NDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBp
bnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVj
dGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5
ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRv
cj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lk
IEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAt
NTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdo
dFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklU
UmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0
aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24g
bm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVy
IGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVk
RnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcg
Kzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9w
MiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZm
MTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVhYzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVj
NmU0ZDY3MjJmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEs
NyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2
LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNv
ZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdU
MCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCBy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1f
YXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4
NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlz
VmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lz
dGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0
ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlz
IGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50
IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlz
OgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFt
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3
ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3
YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93
KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0
b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJj
YmUwYjg1NDFiZWU5M2IxMGFiMzQuLmM2NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzllMzEx
NzY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSAr
NDgsMjAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0
TG9hZEZvckFycmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0RvdWJsZSgpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBK
SVQ6OmdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJ
VDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQo
c3JjLmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVn
aXN0ZXIgZW50cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IoZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsK
QEAgLTE0Myw3ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBj
YWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtMTU1LDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIs
IFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5v
dEltbWVkaWF0ZSh2UmVnKSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4
NSw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUp
CkBAIC0zNjMsMjYgKzM2NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJy
YXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsK
IH0KIAotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGlu
dCBzcmMpCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuYXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3Rl
ZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVn
aXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRh
Z0ZvcihpbmRleCksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2Fk
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAg
IGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDA2LDEzNiArNDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0
IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92
ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRz
dCkKIHsKICAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50
IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsK
ICAgICBlbWl0U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5
bG9hZCk7CiAKICAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQo
aW5kZXgsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAg
ICAgZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJl
ZywgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0
YXJnZXQgeyBpbmRleCB9OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3Rv
bXBpbmcgYmFzZQotICAgICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0g
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAg
ICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRh
Z0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFz
ZSksIHBheWxvYWQpOworICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBS
ZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVy
SUQgcGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIg
cmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVt
aXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFn
MSwgcGF5bG9hZDEpOworICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBl
bWl0TG9hZChyZWcxLCB0YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4
KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRy
dXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdp
c3RlcklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFu
dFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJl
Zy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0
YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNo
YXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29s
KTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2lu
dGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUp
OwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGlu
ZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJl
ZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBS
ZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRh
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7
CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3Jl
MzIodGFnLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0
b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMy
KQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMy
KFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJ
bnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIp
Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50
IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBp
ZiAoIWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9v
bCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXls
b2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KHJlZykpOwogICAgIGlmICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAot
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQg
dmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJl
c3NGb3IoaW5kZXgpKTsKKyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsK
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVl
IGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJh
c2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUz
MihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwot
ICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7
CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywg
YmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBi
YXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0
ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
ZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBv
cDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6
Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDEpKSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMSkuYXNJbnQzMigpOwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29s
IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGlu
dDMyX3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBh
cmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsK
KyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkp
LCBkc3QpOwpAQCAtNTcxLDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQo
YWRkcmVzc0ZvcihzcmMpLCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
SlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3Qu
cGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVy
SUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3Rl
cklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3Jj
KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnQgZHN0LCBSZWdpc3RlcklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsK
ICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJv
bSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSkKLXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJv
bSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0Nl
bGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
IHJlZykKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
IHJlZywgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFs
dWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRl
eCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0g
bV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91
YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5k
ZXgpKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKGluZGV4KS5hc0ludDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMy
KCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFk
ZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFk
ZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxl
SnVtcCBKSVQ6OmVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0
MTFiZTljZmI4MGY4MDgwNmY3ODhmNmMxLi42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQyMTlh
MWU5YTdlNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAg
LTU2LDEwICs1NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBA
IC03Nyw3ICs3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsK
QEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CiAgICAgfQogfQogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
ZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0
dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkg
KzEyOSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlk
ZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsK
LSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFu
Y2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwg
cmVnVDApOwogCkBAIC0xNTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8g
PSBieXRlY29kZS5tX3Byb3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlw
ZTsKIAogICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVl
IHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBi
YXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4g
dGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsK
ICAgICAKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpA
QCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVj
b2RlLm1fdHlwZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
QEAgLTMwNyw4ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BS
KTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9
IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1
ICszNjAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25f
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9v
cGVyYW5kLCByZWdUMCk7CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsg
aWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwg
YmUKICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAg
b3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3ICsz
NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5MCwx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51
bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3ICs0
MjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
dW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwpAQCAtNDcwLDggKzQ3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBn
ZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBz
cGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyKTsKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKQEAgLTQ4NSwxOCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCks
IHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zm
c2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVy
blZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpA
QCAtNTQ4LDkgKzU0OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMy
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01
OTIsOCArNTkyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBA
IC02NTAsOCArNjUwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7
Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CkBAIC02NjQsOCArNjY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1l
cmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50
IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwog
CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0LDIw
ICs2ODQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBp
bnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwxMCAr
NzI4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAg
ICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFk
ZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
cmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nl
c3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0g
bWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcgKzc0
OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAg
LTc2NiwxMCArNzY2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBp
bnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2Vs
bChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0
ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN3aXRjaEltbT4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJ
bmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigp
OwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBs
ZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRl
ZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9k
ZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CkBAIC04MzQsOCArODM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAt
OTAzLDcgKzkwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9u
KikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAg
ICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVf
dCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKIApAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CkBAIC05MjQsNyArOTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1
Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rk
ej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtOTk2LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihU
cnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAyNCwx
MCArMTAyNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29u
c3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBo
YXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhw
KSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTE1
LDEyICsxMTE1LDEyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKIApAQCAtMTE2MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIwNywx
MCArMTIwNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5
dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCiAgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1Qw
LCBzaXplKTsKIH0KQEAgLTEyMTksOCArMTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNpemU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBz
aXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9
IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKQEAgLTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
ci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjplbWl0
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5m
bygpOwogICAgIApAQCAtMTMzMCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbElu
Zm87CiAKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5LDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhIGNlbGwKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEz
OTAsOSArMTM5MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNl
dCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
MSk7CkBAIC0xNDE0LDkgKzE0MTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgcmVnVDEpOwpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwotICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdAogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVn
VDMpOwogfQogCkBAIC0xNTIzLDggKzE1MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5v
bi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAg
ICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1NDUs
NyArMTU0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1
bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhU
d29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJh
bWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBA
IC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
MCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVtcCBh
cmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1
c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5k
ZXgpKSwgcmVzdWx0UmVncyk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJndW1l
bnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3MzQz
MGU1YzFmN2EuLmM0NjM3OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkzMyw3
ICs5MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hv
dWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxz
ZQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
Tm9QdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmls
ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXgg
M2I0ODUwZmFiOGQ2ZmFlOTMwZTllODY5M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2VmODVm
MGFjMTE5ZjIyZWUyYWQxOTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0dXJu
VHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQz
Ml90IGJ5dGVjCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKQog
ICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2Yg
IiwgKmNvZGVCbG9jaywgIlxuIik7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1
ZXM7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAgaWYg
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZhcnNX
aXRoVmFsdWVzID0gMDsKLSAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RI
YW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVz
KTsKKworICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVl
cyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwogICAg
ICAgICBpbnQgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAm
JiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxl
ZVNhdmVzKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAm
JiBvcGVyYW5kLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVzdEhh
bmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4Myw3
ICsxNzgzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0
Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
ICAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBA
IC0xOTA3LDggKzE5MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNj
b3BlKCk7Ci0gICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5uZXh0
KCk7CisgICAgYXV0byYgc2NvcGVTbG90ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihzY29wZVJlZykpOworICAgIHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6
c2NvcGUoKS0+bmV4dCgpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEhhc0luc3RhbmNlKQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxG
cmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwor
ICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdldFB1
dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAogICAg
IC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9m
cm9tX3Njb3BlLgpAQCAtMjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHIK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
KS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAg
ICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAg
IC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2
ZSBpbiBERkcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCmluZGV4IGFiOTlmZDk4N2IwNjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUuLmU3
MjlmYzA1OGVjNjhlYzExZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyArOTMs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKQEAg
LTExNyw4ICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3Nyw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmlj
Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZAogICAgIH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKICAg
ICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkp
OwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29k
ZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcgKzI0
OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhp
cyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3Jl
NjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1w
IGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDggKzI3
NCw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQo
QnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAg
ICAgLy8gc2NyYXRjaDogcmVnVDIKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFs
SW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQsMTQg
KzMwNCwxNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hl
ZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0ID0g
Y3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owot
ICAgIGludCBiYXNlOwotICAgIGludCBwcm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2Rl
KSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtMzM3
LDM2ICszMzcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
ckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
clNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zm
c2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0
dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRy
aWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZz
ZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CkBAIC0zNzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1w
bCgpKTsKQEAgLTM5NSw5ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNS
ZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3ICs0
MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAg
LTQ4NSw4ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKQEAgLTUxMyw5ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
LSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5
SWRXaXRoVGhpc0luZGV4KytdOwpAQCAtNTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRp
cmVjdCA9ICEhKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgLy8g
SW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUg
b2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyArNjU3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+
YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJlc29s
dmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVz
b2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURl
cHRoOwogCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwpAQCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBsb2Fk
UHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVnVDApOwpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5LDE3
ICs5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQor
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAg
c3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihpbmRp
cmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJVDo6
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IGludCB2YWx1ZSwgVwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpA
QCAtOTUwLDggKzk1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1
dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBAIC0x
MDg2LDggKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMCk7CkBAIC0xMDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1p
dFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAt
MTEzMyw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3du
ZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVO
b3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsK
QEAgLTExNjQsOCArMTE2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVs
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJ
bnRlcm5hbEZpZWxkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEx
NzYsNyArMTE3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWdu
ZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
IHsKQEAgLTExOTksNyArMTE5OSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2ln
bmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAg
IHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQor
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQyNSw3
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAg
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVy
ZmFjZUpJVC5oCmluZGV4IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1YzEu
LjU4MjcxM2U2NDA4N2E1MWY1OTM5YjkwYjk4NTQ1ZGYxMzNkMGM2YWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
cGF5bG9hZCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQgdmly
dHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJ
RCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2Fk
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgaW5s
aW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsK
KyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJl
Z2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZy
b20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7
CisgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lz
dGVyIGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAg
IHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSk7CiAKICAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92
bTsgfQogCkBAIC02NCwzNiArNjQsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVt
cElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1
bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZp
cnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVh
bFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VK
SVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6
SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4KTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
ZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nh
c3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGRzdCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRE
b3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIs
IEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJl
Z2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxv
dywgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBK
dW1wIG5vdEludCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdp
c3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRj
aCwgZHN0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5s
aW5rKHRoaXMpOwotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBkc3QpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgZHN0KTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90
SW50OwogICAgIH0KQEAgLTEwMSwyMyArMTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsK
ICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3Rl
cklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGRzdCk7CiAgICAgICAgIEp1bXAgbm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAg
ICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdElu
dDMyOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVn
aXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VK
SVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAg
ICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2Ny
YXRjaCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0
Y2gpOwogICAgICAgICBKdW1wIG5vdE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gp
OwogICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMTIgKzEyOSwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVu
dHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFs
UmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0
byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50
ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQg
ZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAg
ICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxv
YWRGb3IoZW50cnkpKTsKQEAgLTE0MywxMiArMTQzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmCiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lk
KiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICAgICAgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9y
KGVudHJ5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwCmluZGV4IDM4ODczMDUyZDEyODUyZmM2YmI5MTQyZDQ1NjA3YWU4ZTE5YTY3MGEuLjBi
YTczZWY4YzEzNGViYmJkMWQwNGE0YjE3MjE0ZjRmYTczNTE4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCkBAIC0xMjgsNyArMTI4LDcg
QEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShWTSYgdm0sIENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3QKICAgICAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcg
PSBWaXJ0dWFsUmVnaXN0ZXIoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBEYXRhRm9y
bWF0SW50MzIpOworICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgRGF0
YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJn
dW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0
YWIyNjcxNTVjMTNkZjM2YTcyNDliNmMzNDMuLjkzM2NhOWJlMTAyZTBlZGY5NGJiNGVhZTgyODIx
NDgyMjljODI2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lh
bGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1lbnQsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUoc3Jj
LCBkc3QsIHNjcmF0Y2gpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBsb2Fk
Q2VsbEFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1l
bnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRM
b2FkSlNDZWxsKHNyYywgZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03Myw3ICs3Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkSW50MzJBcmd1
bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1wJiBmYWlsVGFyZ2V0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBmYWlsVGFyZ2V0ID0g
ZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggNTI0MWU1ZjdjYzMz
MmE2NGUwZGU2ZGI0NGJkYWY5ZThlODBmMjJhYS4uYzM3NmRiZTJjZDdkNmRkM2ZhNTQ4N2I1N2I1
ODk0N2Y2ZGZiYTMzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcApAQCAtMTAzMiw4ICsxMDMyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgdW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKTsKKyAg
ICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgYXV0byBub3RJbnRlZ2VyID0gaml0LmJyYW5jaElmTm90
SW50MzIoR1BSSW5mbzo6cmVnVDApOwogCiAgICAgLy8gQWJzIEludDMyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3YTQ2ZThlNTc4
OTdmMjc4NWNkMzM5ZmNiZTJiYzBjOTBjZWRiMi4uMjcwMGVjYzhlMTNkYTFiOTFlYzFhN2IxMGQx
ZTdmZmViNDY0OThiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJD
b21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFu
ZGxpbmdTY29wZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAg
IFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9u
Q29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0
ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNl
dCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZy
YW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0
Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUo
KTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1Zh
bHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsg
ICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAg
ICAgXApAQCAtMTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5l
cmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAg
IAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29k
ZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAg
Y2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkw
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVu
dHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBn
ZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVu
Z3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVB
c1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRD
dXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRV
cENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcy
Niw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVl
RnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hl
Y2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVl
RnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
ID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9p
bnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhu
dWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkzMCw3ICsx
OTMxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1l
dGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgp
KTsKICAgICB9KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjMgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9JTVBM
KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRsZVZh
cmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
c2lkZVN0YXRlLmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJbnQzMigpOwor
CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgeworICAgICAgICBs
b2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1f
YXJndW1lbnRzKS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7
CisgICAgfSk7CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisK
KyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAhPSBvcF9jb25z
dHJ1Y3RfdmFyYXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdldE9w
ZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1l
LCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisgICAgICAgIHJl
c3VsdCA9IGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRl
Y29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1
ZSksIGFyZ3MsICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CisgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJlc3VsdDsKK30K
KworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghY29kZUJsb2NrLT52bSgpLmV4Y2VwdGlvbkZvckluc3BlY3Rpb24oKSk7Cisg
ICAgaWYgKE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCkucHRyKCk7CisgICAgICAgIGF1dG8gbmV4dEJ5dGVj
b2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKnBjLm5leHQoKS5wdHIoKSk7
CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEJ5dGVjb2Rl
SW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAgICBhdXRvIG5l
eHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5dGVjb2RlSW5k
ZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbmV4dEJ5dGVjb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQq
LCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQpCit7CisgICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5n
IGNoZWNrcG9pbnRzIGRvIHJpZ2h0IG5vdyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdl
IGNhbiBqdXN0IGRvIHRoYXQgaGVyZSBhbmQgcmV0dXJuLgorICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZt
KCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9
IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIGF1dG8g
cGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAg
YXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihw
Yy0+YXM8T3BDYWxsVmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsK
KyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+
KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAvLyBvcF90YWlsX2NhbGxfdmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRo
ZSB0aGluZyBpdCB3YXMgY2FsbGluZyB3YXMgaW5saW5lZC4KKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisK
K2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9l
eGl0KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Cisg
ICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIEFTU0VSVChieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSk7CisKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlE
KCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAg
ICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0
LCBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFy
Z3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ29uc3Ry
dWN0VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGMu
bmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX3JldCwgIldlIHN0cm9uZ2x5IGFzc3VtZSBhbGwgdGFp
bCBjYWxscyBhcmUgZm9sbG93ZWQgYnkgYW4gb3BfcmV0LiIpOworICAgICAgICBoYW5kbGVWYXJh
cmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcFRhaWxD
YWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQocmV0dXJuVG9UaHJvdyh2bSksIDApOworCisgICAgcmV0
dXJuIGRpc3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCiBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihW
TSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0ZyYW1lKQogewogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gdm0tPnRvcENhbGxGcmFtZTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwotCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxw
dHI7CiAgICAgaWYgKGNhbGxGcmFtZSkKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCp2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5oCmluZGV4IDJmZjI4YjAwNmJjMjIzMzMwY2M2Nzg2NWExNjc5NGE5
MGU3ZTdhYWUuLmIwMDUwNzg4YTk0ZWI0MTJkNzZhYTc3ZWIzMTNlZjc1OTEwMmZkZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xMzYsNiAr
MTM2LDggQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdXBlcl9zYW1w
bGVyX2JlZ2luKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJf
c2FtcGxlcl9lbmQpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9vdXRf
b2ZfbGluZV9qdW1wX3RhcmdldCk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGlu
dF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lO
VEVSTkFMOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOworZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQqLCBFbmNvZGVkSlNWYWx1ZSk7CiAjaWYgRU5BQkxF
KENfTE9PUCkKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3N0YWNrX2NoZWNr
X2F0X3ZtX2VudHJ5KFZNKiwgUmVnaXN0ZXIqKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpp
bmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2FiMzBjODhmMmU0Li44OGRjZjdhMDFk
MDE3Y2MwODk4MmM4MjY0MGIzYzE2OTgwMzkxMDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDkxLDcgKzEwOTEs
NyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQog
ICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0b3Jl
U3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zm
c2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1h
Y3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBz
Y3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0LCBP
cENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEp
IGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAg
ICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4
Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwgLm5v
RXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
Ci0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9uOiAg
ICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAg
ICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGlu
IHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0yMDAwLDYgKzIw
MDQsMjEgQEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUs
IG1hY3JvICgpCiBlbmQpCiAKIAorb3AoY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRf
Y2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIG1vdmUgcjAsIGEyCisgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCkKKyAg
ICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGlu
ZSkKKyAgICBqbXAgcjEKK2VuZCkKKworb3AoY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5l
LCBtYWNybyAoKQorICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSBkaXNwYXRjaCB0byB0aGUg
Y2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdhcyBlYXNpZXIgCisgICAgIyBh
bmQgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgIGNhbGxTbG93
UGF0aChfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCisgICAgYnJhbmNoSWZFeGNlcHRp
b24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgam1wIHIxCitl
bmQpCisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3
ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZl
ciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydAogIyBhcyBt
dWNoLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQppbmRleCAzZGQyZWI0OGNiYmE2ZWY1Y2Q5ODg2MzljNzkxMWUyMmE3MTMz
MTQ4Li40MTFkZjJjNjc1MjMzMGIzN2I5NmFiY2VkODdhODQ0NmE4NzU2OTk4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQpAQCAtNDIsNiArNDIsMTQgQEAgbWFjcm8gbmV4dEluc3RydWN0aW9uV2lkZTMyKCkKICAgICBq
bXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAorbWFjcm8gc3RvcmVQ
QygpCisgICAgc3RvcmVpIFBDLCBMTEludFJldHVyblBDW2Nmcl0KK2VuZAorCittYWNybyBsb2Fk
UEMoKQorICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKK2VuZAorCiBtYWNybyBnZXR1
T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAgIGxvYWRiIGNv
bnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QK
IGVuZApAQCAtOTIsNyArMTAwLDcgQEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBi
eXRlY29kZSBpcyBjbGFpbWluZyBpbnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8g
ZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2Fk
aSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZFBDKCkKICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVjdCwgbV9kc3Qs
IHQxKQpAQCAtMzkwLDcgKzM5OCw3IEBAIGVuZAogCiAjIENhbGwgYSBzbG93IHBhdGggZm9yIGNh
bGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKLSAg
ICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMo
KQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3Zl
IFBDLCBhMQpAQCAtMzk5LDIwICs0MDcsMjAgQEAgbWFjcm8gY2FsbENhbGxTbG93UGF0aChzbG93
UGF0aCwgYWN0aW9uKQogZW5kCiAKIG1hY3JvIGNhbGxUcmFwSGFuZGxlcih0aHJvd0hhbmRsZXIp
Ci0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9y
ZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAg
bW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Nsb3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAg
ICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdP
ZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAg
ICAgICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgICAgICBzdG9yZVBDKCkKICAgICAgICAg
ICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAg
ICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTQyMSw3ICs0MjksNyBAQCBtYWNybyBjaGVja1N3aXRj
aFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAogICAgICAgICAgICAgam1w
IHIwLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIC5yZWNvdmVyOgotICAgICAgICAgICAgbG9hZGkg
QXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAgICAgbG9hZFBDKCkK
ICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTE3NjgsNiArMTc3Niw4IEBAIG1hY3JvIHB1dEJ5VmFs
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBvc3JFeGl0UG9pbnQpCiAgICAgZW5kKQogZW5k
CiAKKworCiBwdXRCeVZhbE9wKHB1dF9ieV92YWwsIE9wUHV0QnlWYWwsIG1hY3JvIChzaXplLCBk
aXNwYXRjaCkKIC5vc3JSZXR1cm5Qb2ludDoKICAgICBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJu
UG9pbnQob3BfcHV0X2J5X3ZhbCwgc2l6ZSkKQEAgLTIwNTcsNyArMjA2Nyw3IEBAIG1hY3JvIGNv
bW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2Fs
bCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9yZXEgdDIsIENh
bGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgdDIpCi0g
ICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAg
IHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zm
c2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVd
LCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCmluZGV4IDg0MGY4OWI4OGQ0MjBjYzNiNzVjODNkNmM1NzgyNDE1NDAyZjMzNjYu
LjhmNTA1Y2M2OTljZDRhZTM3ZWYzNDUwMGZkZmJlNjk5OTgwN2NkYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKQEAgLTEzMyw2ICsxMzMsMTcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBvdmVyZmxvd0NoZWNrTm90TmVlZGVkKCkgeyBjbGVhck5lZWRzT3ZlcmZsb3dD
aGVjaygpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZmls
bChzaXplX3QgY291bnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBBU1NF
UlQoIW1fc2l6ZSk7CisgICAgICAgIGVuc3VyZUNhcGFjaXR5KGNvdW50KTsKKyAgICAgICAgaWYg
KEJhc2U6Omhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9z
aXplID0gY291bnQ7CisgICAgICAgIGZ1bmMocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJnNs
b3RGb3IoMCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eSgp
OwogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCBmOGQ5Nzk5NTg3NDUy
MjZhNDdlNmY4YjZjNTU4NjBjMThmY2U4N2ExLi5mZmI3NDU5YTZhZGNjYmFiMTZkYThhNGVmOGIx
NzExZDg3MmExYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCkBAIC0xNzg4LDYgKzE3ODgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZGVy
aXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVkQ29udGV4dFR5cGU7IH0K
ICAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb250
ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWduZWQgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7
IHJldHVybiBtX2VuZENvbHVtbjsgfQogCkBAIC0xODIwLDYgKzE4MjEsNyBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKICAgICB1bnNpZ25lZCBtX2hhc1Rh
aWxDYWxscyA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6IDI7CisgICAgdW5zaWduZWQg
bV9oYXNDaGVja3BvaW50cyA6IDE7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAg
ICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC0yMDE4LDYgKzIwMjAsNyBAQCBBTFdB
WVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBk
ZWNvZGVyLCBTdHJ1Y3R1cmUqCiAKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2tw
b2ludHMoY2FjaGVkQ29kZUJsb2NrLmhhc0NoZWNrcG9pbnRzKCkpCiAKICAgICAsIG1fZmVhdHVy
ZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKCkpCiAgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRD
b2RlQmxvY2sucGFyc2VNb2RlKCkpCkBAIC0yMjA2LDYgKzIyMDksNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29ucwogICAgIG1fcGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwogICAg
IG1fY29kZUdlbmVyYXRpb25Nb2RlID0gY29kZUJsb2NrLm1fY29kZUdlbmVyYXRpb25Nb2RlOwog
ICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsKKyAgICBtX2hhc0NoZWNrcG9p
bnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAKICAgICBtX21ldGFkYXRhLmVuY29k
ZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5l
bmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggZjM1OGQ0
OGE1MGRlNzNlYWIzODU2OTliM2E2ZjUxMTNiYmJlOWJiYS4uOWI0ZDc4OWY0YTg2YWE0ZjQyOGYx
NGQyZmE1NzJhMDJiNGQ3MDJiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05OCw4ICs5OCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIEJFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAgICAgICAgXAogICAgIFNFVF9Q
Q19GT1JfU1RVQlMoKQogCi0jZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1l
LT5yKG9wZXJhbmQub2Zmc2V0KCkpKQorI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+
dW5jaGVja2VkUihvcGVyYW5kKSkKKyNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+
cihvcGVyYW5kKSkKIAogI2RlZmluZSBSRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAg
ICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAg
XApAQCAtMTEzOSw4ICsxMTM5LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKLSAgICBpbnQgc2NvcGVSZWcg
PSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAg
SlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1f
c2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFs
dWUoKSk7CiAgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRp
YWxWYWx1ZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmlu
ZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsKQEAgLTExNTUsOCArMTE1NCw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgSlNPYmpl
Y3QqIG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNvZGUubV9uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBpbnQgc2Nv
cGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBj
dXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX2N1cnJlbnRTY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgUkVUVVJO
KEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBuZXdT
Y29wZSkpOwogfQogCkBAIC0xMTY1LDcgKzExNjMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiAgICAgQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29w
ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29s
dmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFs
KGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpA
QCAtMTE3OSw3ICsxMTc3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2Nv
cGUpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIp
OwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgp
OwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxP
YmplY3QsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8gUHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhl
cmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CkBAIC0xNDI0LDcgKzE0MjIsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZz
ZXQoKSkpOworICAgIEFTU0VSVChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5pc0NvbnN0
YW50KCkpOwogICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBi
aXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29kZS5tX2ltbXV0
YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAgICBhdXRvJiBwcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAK
QEAgLTE0NDMsNyArMTQ0MSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlf
YnVmZmVyKQogICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJm
bHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0
ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJs
b2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBp
bW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0
RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNw
cAppbmRleCA0YmQxOTJhNmM3N2VmYzAyNmU3YTk1YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0
MThjYTg4ZWZkMWI3OGU2MzExYjY3NWQxZWZhNWE1ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2Jh
bE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJv
ck1lc3NhZ2UpOworfQorCitKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBj
b25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTQ2LDEwICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVj
dFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rv
ck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7
ICAKIH0KIAotCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJn
cywgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4
IGQwYWUwMGJhMTFkN2NlZTI0ZGZmYWU5MTkxMTk2N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzlj
NDkxZjlmOTNiYWViNmNhYzEyNjIxZjNiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdHJ1Y3REYXRhLmgKQEAgLTYwLDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVj
dERhdGEgewogCiAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRl
YWwgd2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNl
IHRoZW0uCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIq
IGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQs
IGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRf
UFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25z
dHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xp
c3QmLCBKU1ZhbHVlIG5ld1RhcmdldCk7CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0
cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2Jq
ZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEw
MjJhYzJkZDlhZWZhZmQ0M2EwMWE1Yzg1Li40YjM0NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNj
NTc1MDlmMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAKQEAgLTEzNywyMCArMTM3LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRz
Ojp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1
bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJl
Y3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBpZiAoIW1fbWFwcGVkQXJndW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3Rk
OjptaW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7
CiAgICAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
IGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAg
ICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3Rh
cnQgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50
RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAg
R2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6
Om1hcHBlZEFyZ3VtZW50c1NpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuaAppbmRleCAwYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJj
ZmNlNzcyZTBhLi44ZDk2NDJhMmM5NDA0MDgwYjkxM2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAt
MTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8
RGlyZWN0QXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9s
ZW5ndGgpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBh
YmQwMGNlZWFmNWViYjdlZTFkNDY3ZGE0ODg3MGQ1MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAw
NGJkYWIzZGFlZWIyNzJjYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oCkBAIC01OSw3ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVu
c2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRB
cmd1bWVudHNQdHIgPSBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47
CiAgICAgTW9kaWZpZWRBcmd1bWVudHNQdHIgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaAppbmRleCAyMTgyYTYyYjEzMDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4
MWZmLi5lMGFhYmY1ZjJlZTE4NWI3ZDEzMzE2MDM3ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46Omlz
TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC0zMDUsOSArMzA1LDkgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBU
eXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+
aXNNYXBwZWRBcmd1bWVudChpICsgb2Zmc2V0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihm
aXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9m
ZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0
SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2Jq
ZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCmluZGV4IDQ0YzdlNTIwZjFjMGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2
NjAuLjZkMDc1OTE3MTFlZWRiYzI4ZTBlNGRhNzg0OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2
b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1h
cmtlZEFyZ3VtZW50QnVmZmVyJiBhcgogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2Jq
ZWN0LCBpKSk7CiB9CiAKLXZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lk
IEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0Fy
cmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUKICAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKCkuYXQodGhpcywgaSk7CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERl
c3QgKyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwor
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTEyOTQsMTEgKzEyOTQsMTEgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpIC0gb2Zmc2V0KSA9IHYuZ2V0KCk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9m
ZnNldF0gPSB2LmdldCgpOwogICAgIH0KICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkg
PSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zm
c2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAppbmRleCAzMTc5NDljNTcyYTExYjc1YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4z
MTE2NWI1ZmY0OTI1NGNjMWE2YzQ3OTAyYjc5MTBhYzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmpl
Y3QqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29s
RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5
NTAzM2RhYTk5YTU5MzZkZWExOWExYzQ5YzAuLmU0OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4
ZDEyYzE5MTFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1t
dXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250
aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBK
U0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwg
cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVz
dCArIGkpID0gZ2V0KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
XSA9IGdldChpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2ldID0ganNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmlu
ZGV4IGFjYjY4NDgxOTFhMTkwMzUyMmI5YjNlNGQwMGY5NjllNDBiNzgxNWEuLjA3ZTFhOGExMGMz
Y2RjNzExN2FjYTNkYzU0M2VkN2RkYjBkNDFmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4K
ICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdk
Mjc3OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZhYTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJj
NjhmYjZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0y
MDQsNiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAg
UmVmUHRyPFZNPiB2bSA9IG1fdm07CiAgICAgaWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX1dJVEhfTUVTU0FHRSghdm0tPmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVh
c2luZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hlY2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWls
YWJsZSIpOwogICAgICAgICB2bS0+ZHJhaW5NaWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2
bS0+dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZi
MTMyYmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkx
NmM2NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1i
b2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0
YW50UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3Qt
PnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUu
c2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4o
dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFs
T2JqZWN0LT52bSgpKSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggNDEzODdjODUwYTk5NWFkNTc0MjEw
NTBjZGU4NmNiMjUyMWU1NDExNi4uOTFlZDczOWUyNWY0OTM4ZWY1MDI3MjdkZjUxNjgwZDg2Y2Ey
MDg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUw
OSwxMSArNTA5LDkgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAg
ICAgaWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZl
ZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6
c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1p
bmltdW1SZXNlcnZlZFpvbmVTaXplOwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBG
SVhNRTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3b3JrIG9uIDMyLWJpdDoKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNl
UHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3Bw
CmluZGV4IDA4MWQ5NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4
ZjYyNDFiMDI2MDVmYmY1MjViZGRmMjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBA
IHZvaWQgU2NvcGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkK
ICAgICAgICAgc3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBT
Y29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
KiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
LSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThj
YTdjMzcwNGYyOWVkNGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBi
NTFhYmMwZGUwODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVz
Y3JpcHRvcihpbmRleCwgbV90YWJsZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xB
UkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA2NGRk
ZmNiMWEyNTYwZTZmZTFiNDU0ZTRmZWUxNDg5MmFkYzA4YTlmLi44ZjZlNTY1ZTI0N2U1YTIzMTkz
MzE5ODgyODY3MmUyMTA0ODgxNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUg
IkJ1aWx0aW5FeGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUg
IkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
ZGVDYWNoZS5oIgpAQCAtMTAyNyw2ICsxMDI4LDIwIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hC
dWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB9CiAjZW5k
aWYKIAordm9pZCBWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxv
YWQpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdU
Rk1vdmUocGF5bG9hZCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZT4gVk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1l
KQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBh
dXRvIHNpZGVTdGF0ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7Cisg
ICAgcmV0dXJuIHNpZGVTdGF0ZTsKK30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkK
IHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxs
RnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDI4MDg2YzRlZDkxNjA2
YzI4MWIxYTFkNWI3YTFkYWIwNjA4ODA3MGEuLjI1YzRhNTE0YTE4YzY3MGU2NTQzMWFiOTY4Nzg4
MzM4MWQ3MWVjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDYgKzEw
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3Mg
Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNo
ZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtOTQ5LDYgKzk1MCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYp
OwogCisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6
dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9CisKICAgICBWTUVu
dHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hl
Y2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMDAsNiArMTIwNSw3IEBAIHByaXZhdGU6
CiAgICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVy
Kj4gbV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZl
ciB7IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVX
YXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggODFjOWYxZjY3NDcw
NzllZDgzMTI2NjJjMDgzMDBjNmNjMzYyOGUzNy4uZTE0ODQwMGQ0ODdkZmM2NGU0NDA1NGRkYWRi
MDg1ODk3MmUzOWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVy
cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAgY29u
c3QgUmVnaXN0ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwot
ICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgLSAxOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgZW5k
ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
LSAxKTsKICAgICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpz
VmFsdWUoKTsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVh
NTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAt
NzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25z
dGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoaW50IGluZGV4
KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2Vu
ZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fY29u
c3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwogICAgIH0KIAogICAgIHZvaWQgc2V0
SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXgg
YWIxNzQwNmFmYjczNGE3MDhkZjExZGJiNjgwMTUxOGI3NjY1ZmI0Mi4uZWUyYjMyN2QyYWY1NDcx
OTY4Nzk2OWFjMjUyYTg0Yzc4OGVmNmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsNiArMjQyLDkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBw
YXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMgZm9y
IGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgorICAgIHZvaWQg
c2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsg
fQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9u
cy5jcHAKaW5kZXggZTJhNGM0MjUzM2EyZjQ0N2RkMzIwMjA1Yjc3N2I3OGIwMzljMGI2OC4uMjA2
OWFkOGIyNGI3MzY5ZGNkOWQ1ZjBjN2Y1OGVlYzkyYjM1Yzc2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNzQzLDcgKzc0Myw3IEBAIHZv
aWQqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBj
YWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcK
ICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3Vs
ZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihj
YWxsRnJhbWUpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KGluc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZy
YW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2xvd1BhdGhzLmNwcAppbmRleCA5MjdhNjk4NGEzYmUwMTRjZjNlYTdkNjdmMDM0NTg0ZWViZWI2
MGNlLi41NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5MGQ1ZjMzM2NlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzYsNyArNzYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1
YWxSZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAg
ICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0so
KS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlz
dGljcyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayog
Y29kZUJsb2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1YmQ3YWI0M2RlMDZmODkzYzE2NGQ1OTljNmNjNGY1
ZmIxN2IwNWJiLi40ZWU3ZjUxZTgyNWVhNjZmYjczMWJiNzFlYzg3NzBhNzQzNmQyZjIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3Miw2ICszNzIsNyBA
QAogCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkE0MjNBQjA0RDEwMDM4MjY2
MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMuZGVm
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3
IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVj
b2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMwMDAw
ODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTQsNiAr
OTU1LDcgQEAKIAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYS5oICovLAogCQkJ
CUZFMDVGQUU2MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRyVHJhaXRzLmggKi8sCiAJCQkJQUQ2
NTNEQTgyMDA2QjZDMjAwRDgyMEQ3IC8qIER1bWJWYWx1ZVRyYWl0cy5oICovLAorCQkJCTUzMzhF
QkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovLAog
CQkJCTFBRUE4OEUxMUQ2QkJDRjQwMEU1QUQ2NCAvKiBFbnVtVHJhaXRzLmggKi8sCiAJCQkJQUQ3
QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8sCiAJCQkJQThBNDcyOUYxNTFB
ODI1QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAppbmRleCA0YzZmNWQ0NDI2
MzJjM2VmYzAwMGJkMThlOWUzNjk0NTJmYWYxYzEwLi5iNDZkYTllODVhYjliNjg2MjQzOGE2OTJl
MzY2YTc1MDU0ZGNjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAg
c2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhcihz
aXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGludmVydCgpOwogICAgIGlu
dDY0X3QgZmluZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1bkxlbmd0aCkgY29uc3Q7CiAgICAgc2l6ZV90
IGNvdW50KHNpemVfdCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBpc0VtcHR5KCkgY29u
c3Q7CkBAIC0xMDIsNiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcj0o
Ym9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAtPnNldChtX2luZGV4
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRtYXA7CiAgICAgICAgIHNpemVfdCBt
X2luZGV4OwpAQCAtMTExLDYgKzExOCw5IEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBmaW5kQml0KDAsIHRydWUpKTsgfQogICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBiaXRtYXBTaXpl
KTsgfQogICAgIAorICAgIGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KTsKKyAgICBjb25zdCBp
dGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCkgY29uc3Q7CisKICAgICB2b2lkIG1lcmdlQW5kQ2xl
YXIoQml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihCaXRtYXAmKTsKICAgICAKQEAgLTIy
NCw2ICsyMzQsMTMgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
Y2xlYXJBbGwoKQogICAgIG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsKIH0K
IAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5l
IHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aW52ZXJ0KCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgICAgIGJpdHNbaV0gPSB+Yml0c1tp
XTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgog
aW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpuZXh0UG9zc2libHlV
bnNldChzaXplX3Qgc3RhcnQpIGNvbnN0CiB7CkBAIC00MDksNiArNDI2LDE5IEBAIGlubGluZSBi
b29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yIT0oY29uc3QgQml0bWFw
JiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9CiAKK3RlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSAtPiBp
dGVyYXRvcgoreworICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7CisgICAgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBl
bmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46
Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCAtPiBjb25zdCBpdGVyYXRvcgoreworICAg
IHJldHVybiAoKmNvbnN0X2Nhc3Q8Qml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPio+KHRoaXMp
KVtpbmRleF07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpoYXNo
KCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggZGFlNGE3MWIyOGQxMzA0MjRjMGJk
NzMxYmU0MTY0M2YwNTJiM2VhOS4uMmEzMjYyYzliOGI2ZDU2ZGUzY2E0ZGEwMTU2OTZkNzUyN2Fh
NGI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdURl9QVUJM
SUNfSEVBREVSUwogICAgIER1bWJQdHJUcmFpdHMuaAogICAgIER1bWJWYWx1ZVRyYWl0cy5oCiAg
ICAgRW51bVRyYWl0cy5oCisgICAgRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaAogICAgIEV4
cGVjdGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaAogICAgIEZhc3RCaXRWZWN0b3IuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCBiL1NvdXJj
ZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZkZTcz
ZjViMmQ3ZDU3NDRhM2QwODU3N2NjNzI0ODcxZTkzZTYxOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisjZGVmaW5lIE9WRVJMT0FEX09QRVJB
VE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIG9wLCBlbmFibGVFeHByZXNzaW9uKSBc
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9y
IG9wKGVudW1OYW1lIGVudW1FbnRyeSwgVCB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDwoZW5h
YmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGVudW1FbnRyeSkgb3AgdmFsdWU7IFwKKyAgICB9IFwKKyAgICAgIFwKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoVCB2YWx1ZSwg
ZW51bU5hbWUgZW51bUVudHJ5KSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9u
KSwgVD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gdmFsdWUgb3Agc3RhdGljX2Nhc3Q8VD4o
ZW51bUVudHJ5KTsgXAorICAgIH0gXAorCisjZGVmaW5lIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JT
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCArLCBlbmFibGVF
eHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihl
bnVtTmFtZSwgLSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICosIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAvLCBlbmFibGVF
eHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihl
bnVtTmFtZSwgJSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX01BVEhf
T1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9B
RF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2lu
dGVncmFsX3Y8VD4pCisKKyNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJM
T0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID09LCBlbmFibGVFeHBy
ZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgIT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1Jf
RU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZF
UkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPD0sIGVuYWJsZUV4
cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVu
dW1OYW1lLCA+LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9S
X0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPj0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKworI2Rl
ZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lO
VEVHUkFMUyhlbnVtTmFtZSkgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1f
Q0xBU1NfV0hFTihlbnVtTmFtZSwgc3RkOjppc19pbnRlZ3JhbF92PFQ+KQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0
VmVjdG9yLmgKaW5kZXggODg1YjdiMTczYjExYTYwMWJlMjlhMzMyYWI5ZDJhNDE0ZDU2MjEyMi4u
OTIwODk1ZmM0OWU3MWJmOTY2OTIyMWMxMzFhMTc0MmZiNzU4ZmZkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRW
ZWN0b3IuaApAQCAtNDUwLDcgKzQ1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gISEoKm1fd29yZCAmIG1fbWFzayk7CiAgICAgfQpAQCAt
NDY0LDYgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAor
ICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFs
dWUgPyAqdGhpcyA9IHZhbHVlIDogKnRoaXM7IH0KKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVy
YXRvciY9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgOiAqdGhpcyA9IHZhbHVl
OyB9CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29yZCB7IG51bGxwdHIgfTsKICAgICB1
aW50MzJfdCBtX21hc2sgeyAwIH07CkBAIC01MDksNyArNTEyLDExIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBGb3Ig
dGVtcGxhdGluZyBhcyBWZWN0b3I8Ym9vbD4KKyAgICB2b2lkIGZpbGwoYm9vbCB2YWx1ZSkgeyB2
YWx1ZSA/IHNldEFsbCgpIDogY2xlYXJBbGwoKTsgfQorICAgIHZvaWQgZ3JvdyhzaXplX3QgbmV3
U2l6ZSkgeyByZXNpemUobmV3U2l6ZSk7IH0KKwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KQEAgLTU4OSw0
ICs1OTYsNSBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2luZyBXVEY6OkZh
c3RCaXRSZWZlcmVuY2U7CiB1c2luZyBXVEY6OkZhc3RCaXRWZWN0b3I7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaCBiL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25l
ZEFjY2Vzcy5oCmluZGV4IDVhNGU5ZWY0NDk0ZWY0NmNhOWU0ZWVmNzdmZGNjMGQ2MGZhYTRhMTEu
LjNhMzViMzhmNGMwMjM2NzlhYzdjZmM5YzQ2NTYwODRhMzkxNDgzYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1VuYWxp
Z25lZEFjY2Vzcy5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KIGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9p
bnRlcikKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbDxUeXBlPjo6dmFsdWUs
ICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlhYmxlPFR5cGU+
Ojp2YWx1ZSwgIiIpOwogICAgIFR5cGUgcmVzdWx0IHsgfTsKICAgICBtZW1jcHkoJnJlc3VsdCwg
cG9pbnRlciwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDMsNyArNDMs
NyBAQCBpbmxpbmUgVHlwZSB1bmFsaWduZWRMb2FkKGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIHZvaWQgdW5hbGlnbmVkU3RvcmUodm9pZCogcG9p
bnRlciwgVHlwZSB2YWx1ZSkKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbDxU
eXBlPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Nv
cHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIG1lbWNweShwb2ludGVyLCAmdmFsdWUsIHNp
emVvZihUeXBlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBhMGQ4ZTc1ZDdlZWUyZDZhYzU4ZTA2OGVlMTgyNjRkNDhkYWY2ZDEzLi5j
OTg5ZDA0YjkyODU1ZDU5NmY5YzcwNDE5MDE1NDk1YzI2MWJlY2MyIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTkt
MTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAg
REZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMy
CisKKyAgICAgICAgUmVtb3ZlIHByb2JlIE9TUiBleGl0IG9wdGlvbiBzaW5jZSB3ZSBhcmUgbm90
IHVzaW5nIHRoYXQgYW55bW9yZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMTIt
MTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4gTWFyayBXZWJLaXQuRm9jdXNlZEZyYW1lQWZ0ZXJD
cmFzaCBhcyB0aW1lb3V0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCBjZGJmOWMw
ZGJmOTMyZTI4YzZkNWE4MjA4YTBhOThjY2VlNmFlZDlmLi41ZmJjMjA5ZWRlNGQzNDVhNDYwNWIw
MGQyNzE3MjA0NWQwNDkyY2U2IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTQ5
OCw3ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0tdXNlQ29uY3VycmVudEpJVD1mYWxz
ZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMAogQjNPMV9PUFRJT05TID0gWyIt
LWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0gWyItLW1heERGR05vZGVzSW5C
YXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRlZmF1bHRCM09wdExldmVsPTAi
XQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQotUFJPQkVfT1NSX0VYSVRfT1BU
SU9OID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9O
UyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQogCiByZXF1aXJlX3JlbGF0aXZlICJ3
ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3skdGVzdFdyaXRlcn0iCkBAIC03MTMs
NyArNzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2Zp
bGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVl
IiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklU
X09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIi
LCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAi
LS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5v
Q0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAt
NzI5LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxpZGF0aW9uKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMgKyBD
T0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsgRk9S
Q0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAg
ICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZ
X09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZjYzM3OThmYWQ0MzZjY2IxZDg4M2I1
MTlmYTEuLjFjMTAwMGIyOTYzOGM5NTRjOTgyYTA1OGEzY2Q4MzIzMmYzYjZjMTEgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjQgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUg
b2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNl
cHRpb25zLW9jY2FzaW9uYWxseS5qczogQWRkZWQuCisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50
KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJh
eS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdl
dC1sZW5ndGgtb25jZS5qczogQWRkZWQuCisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAg
ICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQg
bGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxs
LWFuZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorICAgICAgICAqIHN0
cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50Lmpz
OgorCiAyMDE5LTEyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0pTQ10gUmVtb3ZlIEpTRml4ZWRBcnJheSwgYW5kIHVzZSBKU0ltbXV0YWJsZUJ1dHRl
cmZseSBpbnN0ZWFkCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1z
aG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzIGIvSlNUZXN0
cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25z
LW9jY2FzaW9uYWxseS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2YxNWE2ZWI4YzI3Y2MwYWQyZTlmNTk1NDFm
ZmUyYzUwYWMwYTIzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3Ny
LWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qcwpA
QCAtMCwwICsxLDM2IEBACisKK2xldCBjdXJyZW50QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3Rl
ZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Cit9Citub0lubGluZShl
eHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZp
bmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsK
K2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5n
dGgoKSB7CisgICAgaWYgKGxlbmd0aENhbGxzKysgJSAxMCA9PSAxKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoInRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiBsZW5ndGgiKTsKKyAgICByZXR1cm4g
Y3VycmVudEFyZ0NvdW50Cit9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU2OyBpKyspIHsKKyAg
ICB0cnkgeworICAgICAgICB0ZXN0KGFycmF5KTsKKyAgICB9IGNhdGNoIHsgfQorfQorCitjdXJy
ZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYg
KGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0
aC1vbmNlLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5n
dGgtb25jZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmVlNDVjZTFjNzI4MzY1MzgyNzA1ZDk5ZDMwMWFlNmJj
YjhkODdhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQt
c2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcwpAQCAtMCwwICsxLDMxIEBACisKK2xldCBjdXJyZW50
QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJy
ZW50QXJnQ291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24g
Y2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQo
KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkp
IHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0
KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJy
YXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7IGxlbmd0aENhbGxzKys7IHJldHVybiBj
dXJyZW50QXJnQ291bnQgfSB9Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKQorICAgIHRl
c3QoYXJyYXkpOworCisKK3Rlc3QoYXJyYXkpOworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVu
Z3RoQ2FsbHMgPSAwOwordGVzdChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAg
ICB0aHJvdyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pT
VGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJp
Y3QuanMKaW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3
MzIzMTkwY2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5q
cworKysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5k
LWV4aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwg
YikgewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2
ZXJzdXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEu
Yy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBp
ZiAoYS5jLmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIg
KyBiLmMubGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAg
ICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3Vz
ICIgKyBiLmM7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxs
LXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJz
aXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwppbmRleCAwNDdm
YjAxZjg4MzE0NWNjNzU1NGY1Y2Y3MDFhNzA3NGYyNjdkZWVlLi41M2Q3NTJkZWNkN2QwZjMxYmMy
ZjFkNzg5OTFjNjkxMDFmMDhiZmYzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNp
dmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291
bnQuanMKQEAgLTE4LDggKzE4LDggQEAgbm9JbmxpbmUoYmFyKTsKIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgewogICAgIHZhciByZXN1bHQgPSBmb28oNDAsIDIpOwogICAgIGlmIChy
ZXN1bHQgIT09IDQyKQotICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVj
dGVkIDQyLCBnb3QgIiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3Vs
dCBmb3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOwogICAgIHJlc3VsdCA9IGJh
cig0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0gICAgICAgIHRocm93ICJXcm9uZyBy
ZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0OworICAgICAgICB0aHJv
dyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3Vs
dCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386062</attachid>
            <date>2019-12-18 21:47:07 -0800</date>
            <delta_ts>2019-12-19 10:37:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191218214650.patch</filename>
            <type>text/plain</type>
            <size>668354</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi5jOTA2ZDhhOGQ2NjhkNGQ4
YTVkNDliOTFlNzY1YTIzNDlmMjRkNjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MTMgQEAKKzIwMTktMTItMTggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4K
KworICAgICAgICBJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBw
YXRjaCB0aGUgdmFyaW91cworICAgICAgICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4g
cmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBs
b25nLXN0YW5kaW5nIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdl
dHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4aXQgZHVyaW5nIGZyb20gTG9hZFZhcmFyZ3MuCisKKyAg
ICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNlZCBPU1IgZXhp
dCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0aGlzIHBhdGNo
IHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEgbm9uLXRyaXZp
YWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAgICAgICAgd2l0
aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZUZyYW1lLmg6CisgICAgICAg
IChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFt
ZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgIChwb3B1bGF0
ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6CisgICAgICAgIChmbG9hdGluZ1BvaW50T3BlcmFuZHMp
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlw
cGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFy
Z3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUgY29uc3Qp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmR1bXAg
Y29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNr
cG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojphc0JpdHMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpmcm9tQml0
cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6OmVudW1WYWx1
ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKToKKyAgICAgICAgKEpTQzo6dmly
dHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6OnZp
cnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5c0xpdmUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVkLgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhG
b3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVu
ZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bVRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1l
ZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpp
c1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdpc3Rlcklz
TGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5k
SXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJhbWUpOgor
ICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjp1bm1hcE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAg
KEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxl
S2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6b3BlcmFuZCBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5j
cHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5
T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVt
aXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmQ6OnZpcnR1YWxSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmQ6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmQ6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRl
ciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnRvQXJndW1lbnQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpmcm9tQml0cyk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fs
cyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpudW1iZXJPZlRtcHMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjps
b2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2l6ZUZvciBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdEZvcik6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvciBj
b25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRG
b3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRJbmRleCBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aGFzT3BlcmFuZCBj
b25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9y
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9jYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZpcnN0VGltZSk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9wZXJh
bmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4
dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzPFQ+OjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0No
ZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEhh
c0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50
UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2V0Q29u
c3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjp+VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyIGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5Lmg6CisgICAgICAgICogYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTG9j
YWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpW
aXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVn
aXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6Omlz
QXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQ29uc3Rh
bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OnRvQ29uc3RhbnRJbmRl
eCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xvY2FsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldFVzZXNDaGVj
a3BvaW50cyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaDoKKyAgICAgICAg
KEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhl
YXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFz
T3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RI
ZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRQb3NpdGlvbjo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRDb2RlVG9H
ZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxp
dGllcy5oOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5
TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6OmNsb3NlU3RhcnRpbmdXaXRo
TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAg
ICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qmxv
Y2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbnN1cmVUbXBzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvZ3Jlc3NDaGVja3BvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJn
dW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpmbHVzaEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZs
dXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJh
bmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0
TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAg
ICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQ
U1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRp
bmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1Jl
dGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQ
aGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNh
bm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6
Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJl
YWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVu
ZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjphZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAg
ICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0
YTo6YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5p
cXVlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENh
bGxTaXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2Vz
R0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxs
S2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5kcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3Vic3Rp
dHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFj
ZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjplbWl0U3RvcmVD
YWxsU2l0ZUluZGV4KToKKyAgICAgICAgKiBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmhhbmRsZUJsb2NrRm9yVHJ5Q2F0
Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjphcmd1
bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0xv
YWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bG9jYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2VkTG9jYWwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZH
OjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpqc1ZhbHVlRm9y
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGb3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnNhdmVDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OmNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OmNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OmVtaXRSZXN0b3JlQXJndW1lbnRzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpwcmludE9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Lmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmlzRXhpdGluZ1RvQ2hlY2twb2ludEhhbmRsZXIgY29uc3QpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJh
bWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAg
ICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHT3BJbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbUlu
c2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpy
ZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6
d3JpdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
OjpkZWYpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
OjpjYWxsSWZBcHByb3ByaWF0ZSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252
ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJy
ZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3Vt
ZW50VHlwZXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFy
YXJnc0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVG
b3J3YXJkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6CisgICAgICAgICogZGZnL0RG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmRpc2Fi
bGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9y
U2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vz
c0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpv
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmxvY2FsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxl
RXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0
cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6YXBwZW5k
QW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5
SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0U3RhY2spOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0Q2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldENhbGxlZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVW
YXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTG9nU2hhZG93
Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Z2V0QXJndW1lbnRzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcik6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICog
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVy
aWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6
CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgICogZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAg
ICAqIGdlbmVyYXRvci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9y
L09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBp
bnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxT
aXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxs
U2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVJ
bmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRl
eCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6Y29kZU9yaWdpbik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6Cisg
ICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OkNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlND
OjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bFNpdGVJbmRleDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5k
ZXg6OmJpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyk6
CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleDo6RGlzcG9zYWJsZUNhbGxTaXRlSW5k
ZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxlZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjphZGRyZXNzT2ZDb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjpvZmZzZXRGb3IpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRSZXR1cm5QQyk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OnIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuY2hlY2tlZFIpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpqc0NhbGxlZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6Y29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1
bnNhZmVDb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldENhbGxl
ZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oLgorICAgICAgICAoSlNDOjpDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZTo6Z2V0VG1wKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpzaXplT2ZW
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpzZXR1
cFZhcmFyZ3NGcmFtZSk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJhdG9yKCkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUpOgorICAg
ICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQ
cm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBheWxvYWRU
b0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpw
YXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVNs
b3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCk6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBq
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1ZVJlZ3Mp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXNDZWxsKToK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9t
b2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFJp
Z2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBG
cmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0
L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChK
U0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW5p
dFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExv
YWRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3Rv
cmVDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklU
T3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19v
YmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX251
bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZh
bHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
dW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmlu
ZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfcGFyZW50X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0p
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NoZWNrX3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21tb24pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2FyZ3VtZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9y
ZXN0X2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfY2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9p
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRS
ZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVu
dHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpT
Qzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJbnRl
cmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1
dENlbGxUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1l
LmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UpOgorICAg
ICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxp
emVkVGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxp
emVkVGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXpl
ZFRodW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJh
dG9ycy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXROb25Db25z
dGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdz
U2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAo
SlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6
aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6ZGlzcGF0Y2hO
ZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2xv
d19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRf
dGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAgICAgICogcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6aGFz
Q2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9Db25zdHJ1
Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0KToKKyAgICAgICAgKiBydW50aW1l
L0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHA6
CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKToKKyAgICAg
ICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwOgorICAgICAgICAoSlNDOjpKU0lt
bXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAg
ICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6CisgICAgICAgICogcnVudGltZS9N
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzOjpjb3B5
VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6CisgICAg
ICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjphZGRDaGVja3BvaW50T1NS
U2lkZVN0YXRlKToKKyAgICAgICAgKEpTQzo6Vk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRl
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpoYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlIGNvbnN0KToKKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6
CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlv
bkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvbkNvZGVCbG9jazo6Z2V0Q29uc3RhbnRUeXBlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpzZXRVc2VzQ2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbik6
CisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKwogMjAxOS0xMi0xNyAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIGpz
Y19jb250ZXh0X2V2YWx1YXRlX2luX29iamVjdCBzaG91bGQgdGFrZSB0aGUgQVBJIGxvY2sgYmVm
b3JlIGNhbGxpbmcgc2V0R2xvYmFsU2NvcGVFeHRlbnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMjE0YmQwNTRhYTQ3YjBi
NWZmNDM0ZTM4MGYyYTM0ZTE5ZTczNWRiZS4uN2JjZGU5NDkxYWE3YTU1YjlmMGUyODkyZDA3Y2Iw
NTVhZDY0NTY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxOS0xMi0xOCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdURjo6V29yZFR5cGU+
OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yKToKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6CisgICAgICAgICogd3RmL0NN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5o
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpG
YXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6RmFz
dEJpdFJlZmVyZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZlcmVu
Y2U6Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpmaWxsKToKKyAg
ICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisgICAgICAgICogd3RmL1VuYWxpZ25l
ZEFjY2Vzcy5oOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRMb2FkKToKKyAgICAgICAgKFdURjo6
dW5hbGlnbmVkU3RvcmUpOgorCiAyMDE5LTEyLTE2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludFNldApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDNkY2NlMGY4
MWVkNDRjNzRkNjBlYTVhMGM2MjhkOGJmYWQ5MzMwOGYuLmNjZWYxYWZkNDVkYTE5MzAxYzg2YTlm
NzU3MjJiYWRhMzdjODMxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTUyNSw2ICs1MjUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29k
ZS9PcGNvZGUuaAogICAgIGJ5dGVjb2RlL09wY29kZVNpemUuaAorICAgIGJ5dGVjb2RlL09wZXJh
bmRzLmgKICAgICBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCiAgICAgYnl0ZWNvZGUvUHV0
QnlJZEZsYWdzLmgKICAgICBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4
IGY4YzFiNGFlNTU2YjUzNGMyYWIxMDFhYzM5MGJhNzExYjQ1Y2JhZWEuLjllYWQ2NTNmYWFhYjE4
OTNlYjkyZGQwMmU5NzU3OTY2ZGZhOTlhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC02NCw2ICs2NCw3IEBA
ICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvb3B0YWJsZS54bWwKICQoUFJPSkVD
VF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfaXRhYi5weQogJChQUk9KRUNUX0RJUikvZ2Vu
ZXJhdG9yL0FyZ3VtZW50LnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXNzZXJ0aW9uLnJi
CiskKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKICQoUFJPSkVDVF9ESVIp
L2dlbmVyYXRvci9EU0wucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9GaXRzLnJiCiAkKFBS
T0pFQ1RfRElSKS9nZW5lcmF0b3IvR2VuZXJhdGVkRmlsZS5yYgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBkYmNlNWJhY2VkYzA1YzNkYzBlYThiMDQzMzQ2ZDE1MWQwZGVmNDQxLi5i
MjY0ZjRlZGQzOTYyNjkwNWUxYjIyYTgyZTFlNDE1MjM1NTY3NGRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtOTMxLDYgKzkzMSw4IEBACiAJCTUzMzNCQkRCMjExMEY3RDIwMDc2
MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsKIAkJNTMzM0JCREMyMTEwRjdEOTAwNzYxOEVD
IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2
ZUpJVC5jcHAgKi87IH07CiAJCTUzMzNCQkREMjExMEY3RTEwMDc2MThFQyAvKiBERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAq
LzsgfTsKKwkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MzM4RUJB
MzIzQUIwNEI4MDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFQkEyMjNBQjA0QTMwMDM4
MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovOyB9OwogCQk1MzQxRkM3MjFEQUMz
NDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8q
IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsgfTsKIAkJNTM0NjM4NzExRTcwQ0YzRDAwRjEy
QUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzQ2
Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyog
UHJvbWlzZVRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTM1OTcsNiArMzU5OSw4IEBACiAJCTUzMTgwNDVEMjJFQUFGMEYwMDRBNzM0MiAv
KiBCM0V4dHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0V4dHJhY3RWYWx1ZS5j
cHA7IHBhdGggPSBiMy9CM0V4dHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzMUQ0RTE5MUY1OUNERDIwMEVDODM2QyAvKiB0ZXN0YXBpLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IHRlc3RhcGkuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzI2MzFCMzIxODc3N0E1MDA3QjgxOTEgLyogSmF2
YVNjcmlwdENvcmUubW9kdWxlbWFwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gInNvdXJjZWNvZGUubW9kdWxlLW1hcCI7
IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzM4RUJBMjIzQUIw
NEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaDsgcGF0aCA9IGZ0bC9G
VExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
NDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
Y3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTEsNiArMzYxNSw5IEBACiAJCTUzNEM0NTdBMUJD
NzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0b3IuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBUeXBlZEFycmF5Q29uc3RydWN0b3IuanM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0
RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0SXRlcmF0b3JQcm90b3R5cGUuanM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkY5MjM2M0M1NUQwMDU0NTI0RCAv
KiBJdGVyYXRvckhlbHBlcnMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBh
dGggPSBJdGVyYXRvckhlbHBlcnMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
NEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpz
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM0RDFFNEQ0QjE2MDAyMTNGNjQg
LyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3ND
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzRGMUU0RDk1RUQwMDIx
M0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM1
MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTIxLDYgKzU1MjgsNyBAQAogCQkJCTBGNDg1
MzI2MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oICovLAogCQkJCTBGQ0VG
QUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCiAJCQkJMEZDRUZB
QUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCisJCQkJNTMzOEVCQTIy
M0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi8sCiAJCQkJMEYy
NUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgKi8sCiAJCQkJMEYy
NUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovLAogCQkJCTBGMjVG
MUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICovLApAQCAtNTk0
Nyw2ICs1OTU1LDcgQEAKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1l
LmggKi8sCiAJCQkJQTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxGcmFtZUNsb3N1cmUu
aCAqLywKIAkJCQlGRUEzQkJBNzIxMkI2NTU4MDBFOTNBRDEgLyogQ2FsbEZyYW1lSW5saW5lcy5o
ICovLAorCQkJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZS5oICovLAogCQkJCTE0MjlEODVCMEVEMjE4RTkwMEI4OTYxOSAvKiBDTG9vcFN0YWNr
LmNwcCAqLywKIAkJCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICov
LAogCQkJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5oICov
LApAQCAtODU3Niw3ICs4NTg1LDkgQEAKIAkJCQlBNTI3MDQ4NTFEMDI3Qzg4MDAzNTRDMzcgLyog
R2xvYmFsT3BlcmF0aW9ucy5qcyAqLywKIAkJCQlFMzVFMDM2MTFCN0FCNDg1MDA3M0FEMkEgLyog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovLAogCQkJCUUzM0Y1MDg4MUI4NDRB
MUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKKwkJCQk1MzRE
OUJGOTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJzLmpzICovLAogCQkJCTdDRjlC
QzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKKwkJCQk1MzRE
OUJGQTIzNjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJ
NzAzNTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5qcyAqLywKIAkJCQlFMzA2
Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovLAogCQkJCUE1MjcwNDg2
MUQwMjdDODgwMDM1NEMzNyAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywKQEAgLTg1ODcsNiAr
ODU5OCw3IEBACiAJCQkJN0NGOUJDNUYxQjY1RDlCMTAwOURCMUVGIC8qIFJlZmxlY3RPYmplY3Qu
anMgKi8sCiAJCQkJNjU0Nzg4NDIxQzkzN0QyQzAwMDc4MUEwIC8qIFJlZ0V4cFByb3RvdHlwZS5q
cyAqLywKIAkJCQk4NDkyNUE5QzIyQjMwQ0M4MDBEMURGRkYgLyogUmVnRXhwU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUuanMgKi8sCisJCQkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0
ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdEMUM0MTg0MTkwMDRCRDdCRiAvKiBT
ZXRQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNjAxQjY1RDlCMTAwOURCMUVGIC8qIFN0cmlu
Z0NvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzYxMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJp
bmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKQEAgLTkwODcsNiArOTA5OSw3IEBACiAJCQkJRkUx
QkQwMjExRTcyMDI3OTAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRUMxNjAzMjIzMzlFOUY5MDBBMDRDQjggLyogQ2VsbFNpemUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMUMzRERBMUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENs
YXNzSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMjYxQUE5MDk1NjAwRDMzQjMzIC8q
IENsb25lZEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAw
QjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTQzMiw2ICs5NDQ1LDcg
QEAKIAkJCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8q
IEZUTFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFBQzE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMzhFQkEz
MjNBQjA0QjgwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbEtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMkU1QTcxREE2NDRBODAwNkU3NzA5IC8q
IEZUTFNuaXBwZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggNTZk
OGEwN2RiZmNkZWZkZWM3NjA4OWExM2RmYjUwMTFiNjRiMjVkMy4uNjg4NDA4M2UwZmMxNzZhMjEz
Y2Q2NjgyNzY0YjJmNGViMzBjNmY2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBAIC0yMzksMTMgKzIzOSw2
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsK
ICAgICB9CiAKLSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgotICAgIGV4cGxpY2l0IFJldHVybkFk
ZHJlc3NQdHIoRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKLSAgICAgICAgOiBtX3ZhbHVlKHVu
dGFnQ29kZVB0cjx0YWc+KGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKLSAgICB9Ci0KICAgICBj
b25zdCB2b2lkKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV92YWx1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgKaW5kZXggY2Fi
MzY4ZGM3Y2QwZjNiNGY4NWI3NjliNzg4ZDQwZDYzZWE1NjM3Ny4uNDIyOWEwZDA5OTdhNGIwZjU4
M2FjYWVhM2EwZjE2NTcyOWY0NmUwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Qcm9iZUZyYW1lLmgKQEAgLTQ2LDE0ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBnZXQ8VD4oQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpTVmFsdWU+Ci0g
ICAgVCBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFQgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAg
ICByZXR1cm4gZ2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAg
ICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpTVmFsdWU+Ci0gICAgVCBvcGVyYW5kKGlu
dCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIFQgb3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQ8
VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikgKyBvZmZzZXQpOworICAgICAgICByZXR1cm4gZ2V0PFQ+KG9wZXJhbmQub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgpAQCAtNjIsMTQgKzYyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHNldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdp
c3RlciksIHZhbHVlKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lk
IHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIFQgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0PFQ+KHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpLCB2YWx1ZSk7CisgICAgICAgIHNldDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2YWx1ZSkK
KyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQs
IHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpICsgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9
IEpTVmFsdWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggMzVkMDE3NTZkNTMyYTcx
ZWMwN2ZlNDAzZWY3YTUyNTBiNWZjNmY2MS4uNDFiYzk2MWExNTMwODVmYmE4NTUwNjVjMzliNmM2
ZGE2ZmIyYTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMjYzLDIwICsyNjMs
MjAgQEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29tcGlsYXRpb24m
IGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KLXN0cnVjdCBPcGVyYW5kIHsKK3N0cnVjdCBCM09wZXJhbmQgewogICAgIGNvbnN0IGNoYXIq
IG5hbWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgT3BlcmFuZDxpbnQ2NF90PiBJ
bnQ2NE9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOwotdHlw
ZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQ4
X3Q+IEludDhPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50NjRfdD4gSW50NjRPcGVyYW5k
OwordHlwZWRlZiBCM09wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlwZWRlZiBCM09w
ZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwordHlwZWRlZiBCM09wZXJhbmQ8aW50OF90PiBJ
bnQ4T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIE9wZXJhbmQ8ZGVjbHR5
cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQorI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUp
IEIzT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMo
VmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQordm9pZCBwb3B1bGF0ZVdpdGhJ
bnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykK
IHsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAu
KSB9KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBl
PigtMC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3Rp
bmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci1WZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiBmbG9h
dGluZ1BvaW50T3BlcmFuZHMoKQorVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBmbG9hdGlu
Z1BvaW50T3BlcmFuZHMoKQogewotICAgIFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IG9wZXJh
bmRzOworICAgIFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CiAgICAgcG9w
dWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMob3BlcmFuZHMpOwogICAgIHJldHVybiBvcGVyYW5k
czsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAK
aW5kZXggNjAwNjJmOWQ0ODA2Zjc5MjNiZDM5M2QzYTc1OTJlYjhiNTA1ODgzOC4uZWFiZGM4MTBh
YjRkYmQyNjNmNDhiNWFmZmIwNDc0YjI0NTgwNzU1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtMTUwOCw3ICsxNTA4LDcgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKIAog
ICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5i
aXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwog
CiAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpIHsKICAg
ICAgICAgICAgIGF1dG8mIGFjY2VzcyA9IHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
KCk7CkBAIC0xNzk3LDcgKzE3OTcsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGlu
Z09yT3JpZ2luYWwoKS5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgICAgICAgICAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNu
aXBwZXRQYXJhbXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2VTbmlwcGV0UGFyYW1zLmNwcAppbmRleCBhMTc0ZTI0NzNmNzUzMGNjNzc3MTUzYzYzYjEzMTMz
MGVlNThmNTg4Li40NTJjMGVmMWJlMzBiMjFlNjM0ODFkYjc1MDI4OGNkMzJhMjAwODhmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
U25pcHBldFBhcmFtcy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAgICAgICAgIGpp
dC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAKICAgICAgICAg
aml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAppbmRleCA2MDU4ZmIwNjIwMzk0NmM0
Y2Q1NmVmNmE5ODM4NzlkMmQ2YzgxZmI2Li44MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNh
ZTVjMGVlM2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUR1bXBlci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6
OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLAog
CiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKFZpcnR1YWxSZWdpc3RlciByZWcp
CiB7Ci0gICAgbV9vdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcub2Zmc2V0KCkpLmRh
dGEoKSk7CisgICAgbV9vdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyZWcpLmRhdGEoKSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cz4KQEAgLTgzLDEyICs4MywxMiBAQCB0ZW1w
bGF0ZSB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVlKEdlbmVyaWNCb3VuZExhYmVs
PFdhc206OkdlbmVyYXRvclRyYQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogdGVt
cGxhdGU8Y2xhc3MgQmxvY2s+Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0
ZXJOYW1lKGludCByKSBjb25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lz
dGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIgcikgY29uc3QKIHsKLSAgICBpZiAoaXNDb25zdGFudFJl
Z2lzdGVySW5kZXgocikpCisgICAgaWYgKHIuaXNDb25zdGFudCgpKQogICAgICAgICByZXR1cm4g
Y29uc3RhbnROYW1lKHIpOwogCi0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0ZXIo
cikpOworICAgIHJldHVybiB0b0NTdHJpbmcocik7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCbG9j
az4KQEAgLTk4LDEwICs5OCwxMCBAQCBpbnQgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpvdXRPZkxp
bmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpjb25zdGFu
dE5hbWUoaW50IGluZGV4KSBjb25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNv
bnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAogewotICAgIGF1dG8gdmFsdWUg
PSBibG9jaygpLT5nZXRDb25zdGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1
ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLCAiKSIpOworICAgIGF1dG8gdmFsdWUgPSBi
bG9jaygpLT5nZXRDb25zdGFudChyZWcpOworICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIo
IiwgcmVnLCAiKSIpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KQEAgLTMzNSw3ICszMzUs
NyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyOjpkdW1wQ29uc3RhbnRzKCkKICAgICB9CiB9CiAKLUNT
dHJpbmcgQnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3Ry
aW5nIEJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBj
b25zdAogewogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAg
ICAgYXV0byB2YWx1ZSA9IGZvcm1hdENvbnN0YW50KGJsb2NrLT5nZXRDb25zdGFudFR5cGUoaW5k
ZXgpLCBibG9jay0+Z2V0Q29uc3RhbnQoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKaW5kZXggMGQ3MTY3NTAzOTRiMTVkNGViNWU4
N2M1YTg4MjUxMDc1ZWZlMDNlZS4uZWRiMTEyOTIxYWY3NTNlNjNkODYxMzcyZmJkZTBlZWY4OWZj
YTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
RHVtcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmgKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcFZhbHVlKFQgdikg
eyBtX291dC5wcmludCh2KTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDU3RyaW5nIHJl
Z2lzdGVyTmFtZShpbnQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJO
YW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IG91dE9mTGlu
ZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCkgY29uc3QgPSAwOwogCiAgICAg
Qnl0ZWNvZGVEdW1wZXJCYXNlKFByaW50U3RyZWFtJiBvdXQpCkBAIC05MSwxMSArOTEsMTEgQEAg
cHJvdGVjdGVkOgogCiAgICAgdm9pZCBkdW1wQnl0ZWNvZGUoY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJik7CiAKLSAgICBDU3RyaW5nIHJlZ2lzdGVy
TmFtZShpbnQgcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmly
dHVhbFJlZ2lzdGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6Ci0gICAgdmlydHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0
OworICAgIHZpcnR1YWwgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25z
dDsKIAogICAgIEJsb2NrKiBtX2Jsb2NrOwogfTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRl
OgogICAgIHVzaW5nIEpTQzo6Qnl0ZWNvZGVEdW1wZXI8RnVuY3Rpb25Db2RlQmxvY2s+OjpCeXRl
Y29kZUR1bXBlcjsKIAogICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIENTdHJpbmcgY29u
c3RhbnROYW1lKGludCBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyBjb25zdGFu
dE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25zdCBvdmVycmlkZTsKICAgICBDU3RyaW5n
IGZvcm1hdENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJh
OTA0MDFhNzExN2RjMGY5ZjI2ZTE5MTM3ZWIyYzMxNTliLi5hMmMxZjQxNWIxOTdkNDZiZDY4MTRh
MjAxMTFjODdjNTA4NzIyMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlSW5kZXguY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKICNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMiw2ICszMyw4IEBAIG5hbWVzcGFjZSBK
U0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1wKFdURjo6UHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9mZnNldCgpKTsKKyAgICBpZiAoY2hlY2twb2lu
dCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIsIGNoZWNrcG9pbnQoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMxZjcyYWMyMDczMWMxZDNiY2U5MzUxNThkZi4u
MTBmYmE0NDA1OGVjOWRmZWQyNTQ4MDlhNmQ3ODMzN2QwMTFhNGI2MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0yNiw2ICsyNiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0cmVhbTsK
QEAgLTM3LDI0ICszOCwzMyBAQCBjbGFzcyBCeXRlY29kZUluZGV4IHsKIHB1YmxpYzoKICAgICBC
eXRlY29kZUluZGV4KCkgPSBkZWZhdWx0OwogICAgIEJ5dGVjb2RlSW5kZXgoV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fb2Zmc2V0KGRlbGV0ZWRWYWx1ZSgpLmFz
Qml0cygpKQorICAgICAgICA6IG1fcGFja2VkQml0cyhkZWxldGVkVmFsdWUoKS5hc0JpdHMoKSkK
ICAgICB7CiAgICAgfQotICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgIDogbV9vZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAgeyB9CiAK
LSAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIHVp
bnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgZXhwbGljaXQg
Qnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgdWludDhfdCBjaGVja3BvaW50
ID0gMCkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMocGFjayhieXRlY29kZU9mZnNldCwgY2hlY2tw
b2ludCkpCisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMpOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDMyX3QgbnVtYmVyT2ZDaGVja3BvaW50cyA9IDQ7CisgICAgc3RhdGlj
X2Fzc2VydChoYXNPbmVCaXRTZXQobnVtYmVyT2ZDaGVja3BvaW50cyksICJudW1iZXJPZkNoZWNr
cG9pbnRzIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIiKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVp
bnQzMl90IGNoZWNrcG9pbnRNYXNrID0gbnVtYmVyT2ZDaGVja3BvaW50cyAtIDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50U2hpZnQgPSBXVEY6OmdldE1TQlNldENv
bnN0ZXhwcihudW1iZXJPZkNoZWNrcG9pbnRzKTsKKworICAgIHVpbnQzMl90IG9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyA+PiBjaGVja3BvaW50U2hpZnQ7IH0KKyAgICB1aW50
OF90IGNoZWNrcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgJiBjaGVja3BvaW50
TWFzazsgfQorICAgIHVpbnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0
czsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaCht
X29mZnNldCk7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRI
YXNoKG1fcGFja2VkQml0cyk7IH0KICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBkZWxldGVkVmFs
dWUoKSB7IHJldHVybiBmcm9tQml0cyhpbnZhbGlkT2Zmc2V0IC0gMSk7IH0KICAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgPT0gZGVsZXRlZFZh
bHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGZyb21CaXRzKHVpbnQzMl90IGJp
dHMpOwogCiAgICAgLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCi0gICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgJiYgbV9v
ZmZzZXQgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZzZXQgJiYg
bV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CiAgICAgYm9vbCBvcGVy
YXRvciA9PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRz
KCkgPT0gb3RoZXIuYXNCaXRzKCk7IH0KICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IEJ5dGVj
b2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogCkBA
IC02OSwxMyArNzksMjIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IGludmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCk7CiAKLSAgICB1aW50MzJfdCBtX29mZnNldCB7IGludmFsaWRPZmZzZXQgfTsKKyAgICBz
dGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90IGNoZWNr
cG9pbnQpOworCisgICAgdWludDMyX3QgbV9wYWNrZWRCaXRzIHsgaW52YWxpZE9mZnNldCB9Owog
fTsKIAoraW5saW5lIHVpbnQzMl90IEJ5dGVjb2RlSW5kZXg6OnBhY2sodWludDMyX3QgYnl0ZWNv
ZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQoreworICAgIEFTU0VSVChjaGVja3BvaW50IDwg
bnVtYmVyT2ZDaGVja3BvaW50cyk7CisgICAgQVNTRVJUKChieXRlY29kZUluZGV4IDw8IGNoZWNr
cG9pbnRTaGlmdCkgPj4gY2hlY2twb2ludFNoaWZ0ID09IGJ5dGVjb2RlSW5kZXgpOworICAgIHJl
dHVybiBieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCB8IGNoZWNrcG9pbnQ7Cit9CisK
IGlubGluZSBCeXRlY29kZUluZGV4IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKHVpbnQzMl90IGJp
dHMpCiB7CiAgICAgQnl0ZWNvZGVJbmRleCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
Yml0czsKKyAgICByZXN1bHQubV9wYWNrZWRCaXRzID0gYml0czsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgppbmRleCA3MWJmNmIwNmNjN2VmNDkwZjdiMzZhYTNlMjAwNjUxNzc4N2FmZmE0Li42ODBjZGQ5
MTg2MGYzMDFhZjE4ZGRlYmZhMjI2NGZhMGU3ZDcyMGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTU5LDcgKzU5LDcgQEAgdHlwZXMg
WwogICAgIDpXYXRjaHBvaW50U2V0LAogCiAgICAgOlZhbHVlUHJvZmlsZSwKLSAgICA6VmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlciwKKyAgICA6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyLAogICAgIDpVbmFyeUFyaXRoUHJvZmlsZSwKICAgICA6QmluYXJ5QXJpdGhQcm9m
aWxlLAogICAgIDpBcnJheVByb2ZpbGUsCkBAIC03OTEsNiArNzkxLDEzIEBAIG9wIDpjYWxsX3Zh
cmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICB9LAorICAgIHRtcHM6IHsK
KyAgICAgICAgYXJnQ291bnQ6IHVuc2lnbmVkLAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsK
KyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmls
LAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF92YXJhcmdzLApAQCAtODA1LDYgKzgxMiwxMyBAQCBv
cCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICB9
LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnQ6IHVuc2lnbmVkCisgICAgfSwKKyAgICBj
aGVja3BvaW50czogeworICAgICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAg
IG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
LApAQCAtODQ1LDYgKzg1OSwxMyBAQCBvcCA6Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAgbWV0YWRh
dGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnQ6
IHVuc2lnbmVkCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBkZXRlcm1pbmlu
Z0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBvcCA6cmV0
LApAQCAtOTkyLDcgKzEwMTMsNyBAQCBvcCA6Y2F0Y2gsCiAgICAgICAgIHRocm93blZhbHVlOiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBidWZmZXI6
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIuKiwKKyAgICAgICAgYnVmZmVyOiBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIuKiwKICAgICB9CiAKIG9wIDp0aHJvdywKQEAg
LTEyMzgsNiArMTI1OSw4IEBAIG9wIDpsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lCiBvcCA6
bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50ZXJuYWxfZnVu
Y3Rpb25fY2FsbF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmUKK29wIDpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxs
X3RyYW1wb2xpbmUKK29wIDpjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUKIG9wIDpoYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbgogb3AgOm9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3Bf
Y29uc3RydWN0X3JldHVybl9sb2NhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAppbmRleCA5MThl
MWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1NDMzYjhiNDNmNDQwLi43ZGEyMmMyZDJjYzdiZmMxMWQx
ZjhmOGQ3ZGJlNmQzYzkxNmNlNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcApAQCAtMjAxLDQg
KzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtVHlw
ZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4KK2NvbnN0ZXhwciBib29sIGVudW1WYWx1ZXNFcXVhbEFz
SW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCit7CisgICAgdXNpbmcgSW50VHlw
ZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTE+Ojp0eXBlOworICAg
IHVzaW5nIEludFR5cGUyID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGUy
Pjo6dHlwZTsKKyAgICBpZiBjb25zdGV4cHIgKHNpemVvZihJbnRUeXBlMSkgPiBzaXplb2YoSW50
VHlwZTIpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTE+KHYxKSA9PSBzdGF0
aWNfY2FzdDxJbnRUeXBlMT4odjIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEludFR5cGUyPih2MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYyKTsKK30KKworQml0
bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3Qg
Q29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAg
ICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKKyAgICB1aW50OF90IGNoZWNr
cG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKKworICAgIGlmICghY2hlY2twb2lu
dCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN3aXRjaCAoY29kZUJsb2NrLmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0Vx
dWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFyZ3M6
Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFy
Z0NvdW50LCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBP
cENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFs
KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50LCBPcENvbnN0cnVjdFZhcmFyZ3M6OmFyZ0NvdW50KSk7
CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKQorICAg
ICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3VudCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIzMjU5MTA5YzYxZTdhZGE1MzNk
OWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0MjdlZjY5ZWVmMTgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVCYXNp
Y0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICBC
eXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+
IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smLCBCeXRlY29kZUluZGV4
KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQgb3BlcmFuZCk7CiBpbmxp
bmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVj
dG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3NGU3OTQ0Y2RhZWQ3MmMwLi5k
ZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4MjgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQgb3BlcmFuZCkKK2lubGluZSBi
b29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewot
ICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9jYWwoKTsKKyAgICByZXR1
cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdh
eXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCitpbmxp
bmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZh
c3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICB1bnNpZ25lZCBs
b2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCk7CisgICAgdW5zaWduZWQg
bG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+PSBvdXQubnVtQml0cygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFtsb2NhbF07CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFu
ZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9y
JiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAgIHJldHVybiBvcGVyYW5kSXNB
bHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG91
dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShvcGVy
YW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG91dCwgb3Bl
cmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAppbmRleCA4NjlmNTNmM2ZjZDBkMDc2MTA5YTFmZGE1Zjk0N2Y1MjBmZTUxNGRk
Li42MDJkZDUyNWExYmQyYzE2M2RiOGNmMTNiMzVjYzYzNmVhMWViNWNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgi
CiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKQEAgLTQwNyw3ICs0
MDgsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgIGNs
b25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAg
ICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCks
IGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNvbnN0YW50KFZpcnR1YWxSZWdp
c3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3lt
Ym9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9uZWRTeW1ib2xUYWJsZSk7CiAg
ICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgPSBt
X3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2ZpbGVyT3Bjb2RlcygpIHx8IG1f
dW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxvd1Byb2ZpbGVyT3Bjb2Rlcygp
OwpAQCAtNjQxLDcgKzY0Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAg
ICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJl
VmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVy
dHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgogICAgICAgICAgICAgICAgIGlm
IChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgICAgICAgICBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChi
eXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0
PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVE
ZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CiAgICAgICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgaWRl
bnQuaW1wbCgpKTsKQEAgLTcwOSw4ICs3MTAsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQ
cm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0gICAgICAgICAgICAgICAgaW50
IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5
bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRl
eCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxT
eW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVw
dGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIpOwogICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAg
ICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRlZCB3aGlsZSBwcm9maWxp
bmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVkIGZvciBwcm9maWxpbmcg
eWV0LgpAQCAtMTA4Niw2ICsxMDg2LDE1IEBAIHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0
aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvCiAgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29k
ZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkgY29uc3QKK3sKKyAgICBpZiAo
ZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25zdCBhdXRvJiBpbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAgICAgIGV4aXRJbmRleCA9IGlu
c3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICByZXR1cm4gZXhpdEluZGV4Owor
fQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCkBAIC0xODExLDEwICsxODIwLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNvbnN0IE9wQ2F0Y2gmCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbWV0ZXJzKCk7ICsraSkKICAgICAgICAgbGl2ZU9w
ZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CiAKLSAgICBhdXRv
IHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPihsaXZl
T3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKHByb2ZpbGVzLT5tX3NpemUgPT0gbGl2ZU9wZXJhbmRzLnNpemUoKSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGVzLT5tX3NpemU7ICsraSkKLSAg
ICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3BlcmFuZCA9IGxpdmVPcGVyYW5k
c1tpXS5vZmZzZXQoKTsKKyAgICAgICAgcHJvZmlsZXMtPm1fYnVmZmVyLmdldCgpW2ldLm1fb3Bl
cmFuZCA9IGxpdmVPcGVyYW5kc1tpXTsKIAogICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsKIApAQCAtMjcxMyw3ICsyNzIyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVl
UHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmUKIAogICAg
IGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKICAgICAgICAgZm9yIChh
dXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykgewotICAgICAg
ICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBw
cm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApp
bmRleCAxNDY3NDJlYjA0OGExZDE2NmYwMTc5MWQ1NmNlNTgxNTBmNTM0MjY2Li4yNTA2NzI2M2Uy
NDc2ZGExYjJkZjZkNWQyZjhlODA0MzE1ZjMwM2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0xNjEsNiArMTYxLDcgQEAgcHVibGljOgogICAgIGlu
dCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQog
CiAgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KKyAgICBpbnQg
bnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygp
ICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAogICAgIGludCogYWRkcmVzc09mTnVtUGFyYW1l
dGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxv
Y2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KQEAgLTIyOSwyMCArMjMwLDIwIEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBp
bnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25Ob3RJ
bW1lZGlhdGUoaW50IGluZGV4KQorICAgIGlubGluZSBib29sIGlzS25vd25Ob3RJbW1lZGlhdGUo
VmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA9PSB0aGlzUmVn
aXN0ZXIoKS5vZmZzZXQoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCisgICAgICAgIGlmIChyZWcgPT0g
dGhpc1JlZ2lzdGVyKCkgJiYgIWlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAg
ICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRleCkuaXNDZWxsKCk7CisgICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXND
ZWxsKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGluZGV4KQorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAg
ewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOworICAgICAgICByZXR1cm4gcmVn
Lm9mZnNldCgpID49IG1fbnVtVmFyczsKICAgICB9CiAKICAgICBIYW5kbGVySW5mbyogaGFuZGxl
ckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWly
ZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKQEAgLTU4MSwxMCArNTgyLDkgQEAgcHVibGljOgogICAg
IH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJl
Z2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5k
ZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1ty
ZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENv
bnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KIAogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
Y2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC03NzQsNiArNzc0LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOwogICAgIAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCkgY29uc3Q7CiAgICAgdWludDMyX3Qgb3NyRXhp
dENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVyOyB9CiAKICAgICB2b2lk
IGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9CkBAIC04NzQsNyArODc1LDcg
QEAgcHVibGljOgogICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyPj4gbV9jYXRjaFBy
b2ZpbGVzOwogCiAgICAgICAgIERpcmVjdEV2YWxDb2RlQ2FjaGUgbV9kaXJlY3RFdmFsQ29kZUNh
Y2hlOwogICAgIH07CkBAIC05NDEsMTAgKzk0MiwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBz
ZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4
ZWN1dGFibGUpOwogCi0gICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50IGluZGV4LCBKU1ZhbHVl
IHZhbHVlKQorICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcsIEpT
VmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KCpt
X3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChyZWcuaXNDb25zdGFudCgpICYmIHN0
YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQ29uc3RhbnRJbmRleCgpKSA8IG1fY29uc3RhbnRSZWdp
c3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIGJvb2wgc2hv
dWxkVmlzaXRTdHJvbmdseShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4IDIxMDY4MTNmMGExZWFhNTEz
NGQwZjM5YmQ3NTFjNzMxOGViYzA0MzEuLmY5ODI5YTI4NmY4YWFiZjRkMzMyZmZmMWU3MWVhM2M4
M2Y5YmM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
aApAQCAtMTYwLDcgKzE2MCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhh
c2goSW5saW5lQ2FsbEZyYW1lKiB0ZXJtaW5hbCA9IG51bGxwdHIpIGNvbnN0OwogCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotICAgIHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29u
c3QgRnVuY3Rpb24mKTsKKyAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9u
JikgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBpbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hl
Y2twb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlz
IGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9y
PENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCmluZGV4IGU0YTU3NWIw
M2E3ZDFiNTk5YWQwZDU2Y2VkZGRhZjRiYTA1MDJmM2EuLjQ3YzY1N2M4ZGY5MDM4M2FmNjVlYjVj
M2I4YThiMDU5NGQwYzRkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0yNiwxMiArMjYsMTYgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVk
ZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworY2xhc3MgQ29kZUJs
b2NrOwogCisvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNzIGRvZXMgbm90IHRyYWNrIGFu
eSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVtcHMuCisvLyBJZiB5b3Ugd2Fu
dCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1wTGl2ZW5lc3NGb3JDaGVja3Bv
aW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgpAQCAtNDcsMTUgKzUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYW5k
SXNMaXZlKGludCBvcGVyYW5kLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNz
Q2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKKyAgICBib29sIHZpcnR1YWxSZWdpc3Rlcklz
TGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7Cisg
ICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUocmVnKSB8fCB2aXJ0dWFs
UmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5k
ZXgsIHBvaW50KSwgcmVnKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAgLy8gRklYTUU6IFVzZSBGYXN0
Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5zaW0gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCisgICAgLy8g
RklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNv
bXBhY3QuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NDQyNzxQYXN0ZT4KICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwogICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAppbmRleCA5NzUwOGJiZjBjNDVj
Yjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzLi5hMGFhN2MwOTI0NGY5OTU2YmVmMWZiOTgzOGI1
NjJjMTQ4OTk5NGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUNhbGxGcmFtZS5oCkBAIC0xNzksNyArMTc5LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAg
Q29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKLSAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyB7IDAgfTsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgorICAgIHVuc2lnbmVk
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVw
cy4KKyAgICB1bnNpZ25lZCB0bXBPZmZzZXQgOiAxMDsKICAgICBzaWduZWQgc3RhY2tPZmZzZXQg
OiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0eXBlIGlzIEtpbmQKICAgICBi
b29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxs
ZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZh
cmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1hbnVhbGx5LgpAQCAtMTkx
LDcgKzE5Miw5IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIC8vIElubGluZUNhbGxG
cmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNv
bmZ1c2lvbiBpZgogICAgIC8vIHdlIGZvcmdvdCB0byBpbml0aWFsaXplIGV4cGxpY2l0bHkuCiAg
ICAgSW5saW5lQ2FsbEZyYW1lKCkKLSAgICAgICAgOiBzdGFja09mZnNldCgwKQorICAgICAgICA6
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDApCisgICAgICAgICwgdG1wT2Zmc2V0KDApCisg
ICAgICAgICwgc3RhY2tPZmZzZXQoMCkKICAgICAgICAgLCBraW5kKENhbGwpCiAgICAgICAgICwg
aXNDbG9zdXJlQ2FsbChmYWxzZSkKICAgICB7CkBAIC0yMTksNiArMjIyLDEyIEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaWdu
ZWQ+KHN0YWNrT2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgc2V0VG1wT2Zm
c2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRtcE9mZnNldCA9IG9mZnNldDsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRtcE9mZnNldCkg
PT0gb2Zmc2V0KTsKKyAgICB9CisKICAgICBwdHJkaWZmX3QgY2FsbGVyRnJhbWVPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3QgcmV0dXJuUENPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBDYWxsRnJhbWU6
OnJldHVyblBDT2Zmc2V0KCk7IH0KIApAQCAtMjQ3LDkgKzI1Niw5IEBAIGlubGluZSBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3Qg
Q29kZU9yaWdpCiAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrOwogfQogCi0vLyBUaGlzIGZ1
bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVPcmlnaW4gYmVjYXVzZSBpdCBu
ZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBpbiBJbmxpbmVDYWxsRnJhbWUK
Ky8vIFRoZXNlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIENvZGVPcmlnaW4g
YmVjYXVzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGRpcmVjdENhbGxlciBmaWVsZCBpbiBJbmxp
bmVDYWxsRnJhbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLWlubGluZSB2b2lkIENv
ZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK2lu
bGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBm
dW5jdGlvbikgY29uc3QKIHsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSAqdGhpczsKICAg
ICB3aGlsZSAodHJ1ZSkgewpAQCAtMjYxLDExICsyNzAsMzggQEAgaW5saW5lIHZvaWQgQ29kZU9y
aWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQogICAgIH0K
IH0KIAotQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoraW5saW5lIGJv
b2wgQ29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25z
dAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgd2Fsa1VwSW5saW5lU3RhY2soWyZd
IChDb2RlT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KS5jaGVja3BvaW50KCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3BlcmFuZCByZW1hcE9wZXJhbmQo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKK3sKKyAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8g
T3BlcmFuZChUbXBPcGVyYW5kLCBvcGVyYW5kLnZhbHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRt
cE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVy
YW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFt
ZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFu
ZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogewog
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIo
cmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJu
IHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQoVG1wT3BlcmFu
ZCwgb3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpIDogT3BlcmFu
ZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1h
cE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAppbmRleCBi
ZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1ZWIxYzY0YTU5Li5lMDNmYTM5Mzk1OTU1NTJl
YmYzOGY3YjRhYjJkZDU3NzBhNTBmNWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaApAQCAtMjYsNiArMjYs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCisjaW5j
bHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNDksNyArNTAs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgIHsKQEAgLTY5LDcg
KzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsgbV9vcGVyYW5kLnZh
bHVlKCkgKyBtX29wZXJhbmQua2luZCgpOwogICAgIH0KICAgICAKICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgoKSBjb25zdApAQCAtNzgsNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQoKSBjb25zdAorICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJldHVybiBtX29wZXJhbmQ7CkBAIC05MCw3ICs5
MSw3IEBAIHB1YmxpYzoKICAgICB9CiBwcml2YXRlOiAKICAgICBCeXRlY29kZUluZGV4IG1fYnl0
ZWNvZGVJbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgIE9wZXJhbmQg
bV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5SGFzaCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggMmI2OWYzNmM3ZmJkYTEwNTU3ODlk
ZmZkZTY3ZjM5NmY4NmUyYjUwMy4uNzAxYzMzMDg5Yjk1NmY3OTc4NmVjODdhYTJjNjlhOGJjMDY3
MDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApAQCAtNDIsNyArNDIsNyBAQCBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6
OmZyb21MYXp5T3BlcmFuZCgKICAgICByZXN1bHQubV9raW5kID0gTGF6eU9wZXJhbmQ7CiAgICAg
cmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC51
LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0ga2V5LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBy
ZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJhbmQoKS5vZmZzZXQoKTsKKyAg
ICByZXN1bHQudS5sYXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJhbmQoKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKENDYWxsSGVscGVycyYgaml0LCBKU1ZhbHVlUmVn
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29k
ZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkpOworICAgICAg
ICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9m
ZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KQEAgLTkxLDcgKzkxLDcgQEAg
dm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZShKU1ZhbHVlIHZh
bHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7Ci0gICAgICAg
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zm
c2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7CisgICAgICAgIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0
LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogCiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCmluZGV4
IDVkODFjNGM5MDBiMDhhNGRlZDgzYTc0ZGZhNWEyZGNmMzM1ZWM4OGQuLjM2ZDM2OWYwYzAwZmJk
NDRjODU1YTM4OWUwNjUwODRiYzc4ZTU4MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaApA
QCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZDsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9IHU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCBmMjlmZjlmOTczNmFlYjM3MzQ1
OTQ0NmRjNzRjZDEyMDI3NTYyNTc2Li40MjEzMTE3ZGI3NmY2ZWQ3ZWViOTM5ZDM3NzQzYTFhYTQ2
MGZlMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDExMSArMzUsMjI1IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi1lbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1l
bnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1DaGVj
a3BvaW50VG1wcyA9IDQ7CisKKy8vIEEgVG1wT3BlcmFuZCBpcyBvbmUgdGhhdCBleGlzdHMgZm9y
IGV4aXRpbmcgdG8gYSBjaGVja3BvaW50IGJ1dCBkb2VzIG5vdCBleGlzdCBiZXR3ZWVuIGJ5dGVj
b2Rlcy4KK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3BlcmFuZCwg
VG1wT3BlcmFuZCB9OworCitjbGFzcyBPcGVyYW5kIHsKK3B1YmxpYzoKKyAgICBPcGVyYW5kKCkg
PSBkZWZhdWx0OworICAgIE9wZXJhbmQoY29uc3QgT3BlcmFuZCYpID0gZGVmYXVsdDsKKworICAg
IE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIDogbV9raW5kKG9wZXJh
bmQuaXNMb2NhbCgpID8gTG9jYWxPcGVyYW5kIDogQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAs
IG1fb3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKQorICAgIHsgfQorCisgICAgT3BlcmFuZChPcGVy
YW5kS2luZCBraW5kLCBpbnQgb3BlcmFuZCkKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7IAorICAgICAgICBBU1NFUlQoa2luZCA9PSBU
bXBPcGVyYW5kIHx8IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0xvY2FsKCkgPT0gKGtpbmQg
PT0gTG9jYWxPcGVyYW5kKSk7CisgICAgfQorCisgICAgT3BlcmFuZEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
cmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBUbXBPcGVyYW5kKTsKKyAgICAgICAgcmV0dXJu
IFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOworICAgIH0KKyAgICB1aW50NjRfdCBhc0JpdHMo
KSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KCp0aGlzKTsgfQorICAgIHN0
YXRpYyBPcGVyYW5kIGZyb21CaXRzKHVpbnQ2NF90IHZhbHVlKTsKKworICAgIGJvb2wgaXNUbXAo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gVG1wT3BlcmFuZDsgfQorICAgIGJvb2wgaXNBcmd1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBBcmd1bWVudE9wZXJhbmQ7IH0KKyAgICBi
b29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gTG9jYWxPcGVyYW5kICYmIHZp
cnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKTsgfQorICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7
IHJldHVybiBraW5kKCkgIT0gVG1wT3BlcmFuZCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0hlYWRl
cigpOyB9CisKKyAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQo
KSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCk7IH0KKyAgICBpbnQgdG9M
b2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIo
KS50b0xvY2FsKCk7IH0KKworICAgIGlubGluZSBib29sIGlzVmFsaWQoKSBjb25zdDsKKworICAg
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYpIGNvbnN0OworCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgT3BlcmFuZEtpbmQg
bV9raW5kIHsgQXJndW1lbnRPcGVyYW5kIH07CisgICAgaW50IG1fb3BlcmFuZCB7IFZpcnR1YWxS
ZWdpc3Rlcjo6aW52YWxpZFZpcnR1YWxSZWdpc3RlciB9OworfTsKKworQUxXQVlTX0lOTElORSBi
b29sIE9wZXJhbmQ6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkgPT0gb3RoZXIudmFsdWUoKTsK
KyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkgPT0gb3RoZXIudmlydHVhbFJlZ2lzdGVyKCk7
Cit9CisKK2lubGluZSBib29sIE9wZXJhbmQ6OmlzVmFsaWQoKSBjb25zdAoreworICAgIGlmIChp
c1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA+PSAwOworICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXIoKS5pc1ZhbGlkKCk7Cit9CisKK2lubGluZSBPcGVyYW5kIE9wZXJhbmQ6OmZyb21C
aXRzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIE9wZXJhbmQgcmVzdWx0ID0gYml0d2lzZV9jYXN0
PE9wZXJhbmQ+KHZhbHVlKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzVmFsaWQoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9m
KHVpbnQ2NF90KSwgIk9wZXJhbmQ6OmFzQml0cygpIHJlbGllcyBvbiB0aGlzLiIpOwogCiBlbnVt
IE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgotICAgIE9wZXJhbmRzKCkKLSAgICAgICAgOiBt
X251bUFyZ3VtZW50cygwKSB7IH0KLSAgICAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3Qg
bnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzKQorICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6
OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZl
Y3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OworICAgIHVzaW5nIFJlZlR5cGUgPSBz
dGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRSZWZlcmVu
Y2UsIFQmPjsKKyAgICB1c2luZyBDb25zdFJlZlR5cGUgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3Rk
Ojppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKKworICAgIE9wZXJhbmRzKCkg
PSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCiAgICAgICAgIDogbV9udW1Bcmd1bWVu
dHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAgICB7
Ci0gICAgICAgIGlmIChXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikg
ewotICAgICAgICAgICAgbV92YWx1ZXMucmVzaXplKG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSwgbnVtQXJn
dW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfQorICAgICAgICBzaXplX3Qgc2l6ZSA9IG51
bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIG1fdmFsdWVzLmdyb3co
c2l6ZSk7CisgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6
YXRpb24pCisgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhw
bGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscywgY29u
c3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1
bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAs
IG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoaW5p
dGlhbFZhbHVlLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOworICAgICAgICBtX3ZhbHVlcy5n
cm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVl
cy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5k
czxVPiYgb3RoZXIpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25z
dCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAg
ICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAs
IG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCiAgICAgewotICAgICAgICBtX3Zh
bHVlcy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSArIG90aGVyLm51bWJlck9m
TG9jYWxzKCkpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CisgICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICBzaXplX3Qg
bnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQotICAg
IHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAt
IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgCisgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJl
ck9mTG9jYWxzKCk7IH0KKworICAgIHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsKKyAgICAgICAgcmV0
dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOworICAgIH0K
ICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlkeCA8IG1fbnVtQXJndW1lbnRzKTsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51
bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KICAgICAKICAg
ICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbnVtQXJndW1lbnRzICsgaWR4OworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZM
b2NhbHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAg
IH0KKworICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW3RtcElu
ZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAotICAgIFQmIGFyZ3VtZW50KHNp
emVfdCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChp
ZHgpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0K
KyAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3Vt
ZW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIAotICAg
IFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KLSAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
c1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGxvY2Fs
KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0K
ICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qg
c2l6ZUZvcigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1l
bnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2Ug
VG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJPZlRtcHMoKTsKKyAgICAgICAg
Y2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVu
dHMoKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIGNhc2UgTG9j
YWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgotICAgIFQm
IGF0Rm9yKHNpemVfdCBpZHgpCisgICAgUmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KQogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgc3dp
dGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6CisgICAgICAgICAg
ICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOgogICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgpOwor
ICAgICAgICBjYXNlIExvY2FsT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgp
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiB0bXAoMCk7CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJh
bmRLaW5kPgotICAgIGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CisgICAgQ29uc3RS
ZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7
CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsK
KyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1l
bnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgTG9jYWxP
cGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRtcCgwKTsK
ICAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisKKyAgICB2
b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgp
KQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBpZiAo
bmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2Fscygp
KQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG9s
ZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHNpemVfdCBvbGROdW1UbXBz
ID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7Ci0gICAg
ICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBUKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb2xkTnVtVG1wczsgKytpKQorICAgICAgICAgICAgbV92YWx1ZXNbbmV3
U2l6ZSAtIDEgLSBpXSA9IG1fdmFsdWVzW3RtcEluZGV4KG9sZE51bVRtcHMgLSAxIC0gaSldOwor
CisgICAgICAgIG1fbnVtTG9jYWxzID0gc2l6ZTsKKyAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAh
PSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUgLSBvbGROdW1Mb2NhbHM7ICsr
aSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2FscyArIGkp
XSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5zdXJlTG9j
YWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUpCisgICAgdm9pZCBlbnN1cmVU
bXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAgewotICAg
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXplIDw9IG9s
ZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mVG1wcygpKQogICAgICAgICAgICAg
cmV0dXJuOwogCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOworICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOworCisgICAgICAgIGlmIChlbnN1cmVkVmFs
dWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikg
eworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyArK2kp
CisgICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1
ZSkKQEAgLTE2NCw4NCArMjc4LDc2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlkeCA+PSBu
dW1iZXJPZkxvY2FscygpIHx8IGxvY2FsKGlkeCkgPT0gVCgpKTsKICAgICAgICAgc2V0TG9jYWwo
aWR4LCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoaW50IG9w
ZXJhbmQpIGNvbnN0CisKKyAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5k
ZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBnZXRGb3JP
cGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJh
bmRzKj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KKworICAgIHNpemVfdCBv
cGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAg
ICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2Fs
SW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKLSAgICBzaXplX3Qgb3BlcmFu
ZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CisgICAgc2l6ZV90
IG9wZXJhbmRJbmRleChPcGVyYW5kIG9wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhbmRJbmRleCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlz
VG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOwogICAgIH0KICAgICAK
LSAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChv
cGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkp
CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAg
ICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIAotICAgIFQmIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBSZWZUeXBlIG9wZXJh
bmQoT3BlcmFuZCBvcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kKHZpcnR1YWxSZWdp
c3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIHRtcChv
cC52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4o
dGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIENvbnN0
UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBj
b25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KKyAgICBDb25z
dFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQogICAgIAotICAgIGJvb2wg
aGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51
bWJlck9mTG9jYWxzKCk7CiAgICAgfQotICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKKyAgICAgICAgaWYg
KG9wLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcC52YWx1ZSgpID49IDApOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3AudmFsdWUoKSkgPCBudW1iZXJP
ZlRtcHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChvcC52aXJ0dWFs
UmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFu
ZCwgY29uc3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCwg
Y29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5vcGVyYW5kKG9wZXJhbmQpID0g
dmFsdWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldE9wZXJh
bmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgfQogCiAgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25zdCBUJiBh
dChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQotICAgIFQm
IGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAgY29uc3Qg
VCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQot
ICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KLQot
ICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwg
bV9udW1Bcmd1bWVudHM7IH0KLSAgICBib29sIGlzTG9jYWwoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgb3BlcmFuZEZvckluZGV4KHNp
emVfdCBpbmRleCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBSZWZUeXBlIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBSZWZUeXBl
IG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIE9w
ZXJhbmQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpLm9mZnNldCgpOwotICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKS5vZmZz
ZXQoKTsKLSAgICB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAg
ICAgIHJldHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkg
KyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFu
ZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHNldEFyZ3VtZW50
Rmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCksIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFsdWUpOwot
ICAgIH0KLSAgICAKKwogICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKQEAgLTI1Nyw2ICszNjMs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVudHMoKSA9
PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgQVNTRVJUKG51bWJlck9mTG9j
YWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChudW1iZXJP
ZlRtcHMoKSA9PSBvdGhlci5udW1iZXJPZlRtcHMoKSk7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gbV92YWx1ZXMgPT0gb3RoZXIubV92YWx1ZXM7CiAgICAgfQpAQCAtMjY1LDkgKzM3MiwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4KLSAgICBWZWN0b3I8VCwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fdmFsdWVzOwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwor
ICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRz
LCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMu
CisgICAgU3RvcmFnZSBtX3ZhbHVlczsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCmluZGV4IDY1ZmVkZGEwNzMwYTgzOTFmODMxNTYzZGJkZWI4MTZhZjkyNTY2ZmQuLjBiMWNj
MWYyZDE5N2FkMDgzNjVhOGY3ODU2MWZkZjY3YTdkOWVkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKQEAgLTMwLDYgKzMwLDE0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIG91dC5wcmludCgi
dG1wIiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lz
dGVyKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBPcGVyYW5kczxUPjo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
IHsKQEAgLTQ0LDYgKzUyLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoi
LCBpbkNvbnRleHQobG9jYWwobG9jYWxJbmRleCksIGNvbnRleHQpKTsKICAgICB9CisgICAgZm9y
IChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9mVG1wcygpOyArK3RtcElu
ZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRl
eHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KQEAgLTYwLDYgKzczLDExIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGxvY2FsKGxvY2FsSW5kZXgpKTsKICAgICB9
CisgICAgZm9yIChzaXplX3QgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG51bWJlck9mVG1wcygp
OyArK3RtcEluZGV4KSB7CisgICAgICAgIGlmICghdG1wKHRtcEluZGV4KSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoi
LCB0bXAodG1wSW5kZXgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
aW5kZXggZDVkZGVlOGQ1NjA3NzAzMjNiMWZkNWYxYWNjY2NjMDUwMmMxMjY1NC4uN2U5MzI2MmRm
YjA5NTlkZWMyYTkyNDFmZjhjNjExZjMzYjkyYjQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC03Miw2ICs3Miw3
IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlCiAgICAgLCBtX2NvZGVUeXBlKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjb2RlVHlwZSkpCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdlKDApCisgICAgLCBtX2hhc0NoZWNr
cG9pbnRzKGZhbHNlKQogICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkKICAgICAs
IG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1fbWV0YWRh
dGEoVW5saW5rZWRNZXRhZGF0YVRhYmxlOjpjcmVhdGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggYWQxZjkwYjcwYmVi
OTgxN2YzMmJiODBjNTQ3YWU0YmFiNjY1NTFhNS4uMzA4MmIwYTI2M2MzMDY1NTI1NGFkODZmOTdm
YTIzMjBkYzUwYjQxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTE0MSw2ICsxNDEsOSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9
CiAgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbygp
IHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAorICAgIGJvb2wgaGFzQ2hlY2twb2ludHMo
KSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CisgICAgdm9pZCBzZXRIYXNDaGVj
a3BvaW50cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KKwogICAgIC8vIFNwZWNpYWwg
cmVnaXN0ZXJzCiAgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNS
ZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQogICAgIHZvaWQgc2V0
U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Njb3BlUmVn
aXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9CkBAIC0xOTgsOSArMjAxLDggQEAgcHVibGljOgogICAg
IH0KIAogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJl
Z2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25zdCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAg
ICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247IH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRl
bnRpZmllclNldHMuc2l6ZSgpIDogMDsgfQpAQCAtNDE5LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9kaWRPcHRpbWl6ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9hZ2UgOiAzOwog
ICAgIHN0YXRpY19hc3NlcnQoKCgxVSA8PCAzKSAtIDEpID49IG1heEFnZSk7CisgICAgYm9vbCBt
X2hhc0NoZWNrcG9pbnRzIDogMTsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9j
azsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgKaW5kZXggYmJiOGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFlMTE4MzNlZmI5MDM2Ny4uZWI5
MTc5NDUzMGRmMWEzMjkyZGNkYmVkMzE2NGU5Yzc5MDlhNjlmMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApAQCAtMTc2LDI4ICsxNzYsMjggQEAg
aW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRleChSYXJl
Q2FzZVByb2ZpbGUqIHJhcmVDYXNlUHIKICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxlLT5tX2J5
dGVjb2RlSW5kZXg7CiB9CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDogcHVibGlj
IFZhbHVlUHJvZmlsZSB7Ci0gICAgaW50IG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9vcGVyYW5kOwogfTsKIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZm
ZXIgeworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciB7CiAgICAg
V1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQorICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgIHsK
ICAgICAgICAgLy8gRklYTUU6IFZhbHVlUHJvZmlsZSBoYXMgbW9yZSBzdHVmZiB0aGFuIHdlIG5l
ZWQuIFdlIGNvdWxkIG9wdGltaXplIHRoZXNlIHZhbHVlIHByb2ZpbGVzCiAgICAgICAgIC8vIHRv
IGJlIG1vcmUgc3BhY2UgZWZmaWNpZW50LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDEzCi0gICAgICAgIG1fYnVmZmVyID0gTWFsbG9jUHRy
PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQ+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0pIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdldCgpW2ld
KSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKLSAgICB+VmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlcigpCisgICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlcigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9z
aXplOyArK2kpCi0gICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9maWxlQW5k
T3BlcmFuZCgpOworICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciB7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0cjxWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kPiBtX2J1ZmZlcjsKKyAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCmlu
ZGV4IGM1Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0N2YwZTE4
ZGYwNjNhODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBAQCBKU1Zh
bHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0CiB7
CiAgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNr
OgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgp
KS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVy
KCkpLmpzVmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAg
ICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgp
KS51bmJveGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUyRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJldHVybiBq
c051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1MigpKTsK
ICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4g
anNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVk
U3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERvdWJsZURp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxs
RnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUoKSkpOwor
ICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXIoKSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS51bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxS
ZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNT
dGFjazoKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxs
RnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkQm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAgY2FzZSBD
b25zdGFudDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5NGYzMmEy
OTNhZmQ4OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMwOTRlNThk
YTNiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292
ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAyMWY1YWQw
NDguLmZkMTcwMDcxN2MzYmZmM2JhZjBjM2IwMDMxNzZmZTY2NTkyNGRmNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAgLTMxLDEy
ICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTG9j
YWwoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKGludCBv
cGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJvb2wgb3Bl
cmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7CiB9CkBA
IC00OSwyNSArNDksMzIgQEAgcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGludCwgaW50KTsKIAorICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOworICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CisKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJJRCopOwogICAgIFZp
cnR1YWxSZWdpc3RlcihSZWZQdHI8UmVnaXN0ZXJJRD4pOwogCiAgICAgVmlydHVhbFJlZ2lzdGVy
KCkKLSAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
CisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoaW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAg
ICB7IH0KIAogICAgIGV4cGxpY2l0IFZpcnR1YWxSZWdpc3RlcihpbnQgdmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKICAgICB7IH0K
IAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAh
PSBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29uc3Qg
eyByZXR1cm4gb3BlcmFuZElzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBp
c0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Qgc2xvdCkKKyAgICAg
ICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihzdGF0aWNfY2FzdDxpbnQ+KHNsb3QpKQorICAgIHsgfQor
CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9
IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBi
b29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVy
biBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50OyB9Ci0gICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQor
ICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49
IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7
IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0
ZXIpOyB9CiAgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkp
OyByZXR1cm4gb3BlcmFuZFRvQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgaW50
IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBt
X3ZpcnR1YWxSZWdpc3RlciAtIHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBp
bnQgdG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0dXJu
IG1fdmlydHVhbFJlZ2lzdGVyIC0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBp
bnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KICAgICBpbnQg
b2Zmc2V0SW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9m
KFJlZ2lzdGVyKTsgfQogCkBAIC0xMDYsOSArMTEzLDYgQEAgcHVibGljOgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsKLQogICAgIHN0YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50IGxv
Y2FsKSB7IHJldHVybiAtMSAtIGxvY2FsOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2Nh
bChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBv
cGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggZjgwYTdjNGY2
MDgxOTU1ZTFlMjRjZTIwNTRjMDEzYWRjYmQ3ODdlMy4uOGQyYTdmYjgyNDc1OGZkMDRhYjAzYjcw
MjA4MmJkYmY2MzE2YmQwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTExODcsNyArMTE4Nyw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcigp
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KG1fcGFy
YW1ldGVycy5zaXplKCkgKyAxKTsKICAgICBhdXRvJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihy
ZWcpOwotICAgIHBhcmFtZXRlci5zZXRJbmRleChyZWcub2Zmc2V0KCkpOworICAgIHBhcmFtZXRl
ci5zZXRJbmRleChyZWcpOwogICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKICAgICBy
ZXR1cm4gJnBhcmFtZXRlcjsKIH0KQEAgLTExOTYsNyArMTE5Niw3IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmluaXRpYWxpemVQYXJhbWV0ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25vd3MgYWJvdXQgYWxs
IG9mIG91ciBwYXJhbWV0ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycwogICAgIC8v
IG5lZWRpbmcgZGVzdHJ1Y3R1cmluZyBhcmUgbm90ZWQuCi0gICAgbV90aGlzUmVnaXN0ZXIuc2V0
SW5kZXgoaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+aW5kZXgoKSk7IC8vIHRoaXMKKyAgICBt
X3RoaXNSZWdpc3Rlci5zZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIoaW5pdGlhbGl6ZU5leHRQYXJh
bWV0ZXIoKS0+aW5kZXgoKSkpOyAvLyB0aGlzCiAKICAgICBib29sIG5vblNpbXBsZUFyZ3VtZW50
cyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUo
KTsgKytpKSB7CkBAIC0xNjM3LDExICsxNjM3LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRFcXVhbGl0eU9wSW1wbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJl
CiAKICAgICBpZiAobV9sYXN0SW5zdHJ1Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAgICAgICAg
IGF1dG8gb3AgPSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAgIGlm
IChzcmMxLT5pbmRleCgpID09IG9wLm1fZHN0Lm9mZnNldCgpCisgICAgICAgIGlmIChzcmMxLT52
aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcC5tX2RzdAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1w
b3JhcnkoKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KHNyYzItPmluZGV4KCkpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOworICAgICAgICAgICAgJiYg
c3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpCisgICAgICAgICAgICAmJiBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCku
aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5n
KG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5n
ZXQoKSktPnRyeUdldFZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5l
ZCIpIHsKICAgICAgICAgICAgICAgICByZXdpbmQoKTsKICAgICAgICAgICAgICAgICBPcElzVW5k
ZWZpbmVkOjplbWl0KHRoaXMsIGRzdCwgb3AubV92YWx1ZSk7CkBAIC0zMjI5LDYgKzMyMjksOCBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBBU1NFUlQo
ZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSk7CiAgICAgVmFyYXJnc09wOjplbWl0KHRoaXMsIGRzdCwg
ZnVuYywgdGhpc1JlZ2lzdGVyLCBhcmd1bWVudHMgPyBhcmd1bWVudHMgOiBWaXJ0dWFsUmVnaXN0
ZXIoMCksIGZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgaWYgKFZh
cmFyZ3NPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAg
ICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIHJldHVybiBk
c3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA5M2IxM2Y2ZGE4MTllMzFmZTA3YTA0NWZmZWYwZWYy
NmNiNTFlNmY5Li40MmRiOTdkNjY0MzY2NzEzODNhMGNlNDZhZDNjNmZlYzA2NjY0NjU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCkBAIC0xMDA3LDYgKzEwMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBzaG91bGRFbWl0Q29udHJvbEZsb3dQcm9maWxlckhvb2tzKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlR2VuZXJhdGlvbk1vZGUuY29udGFpbnMoQ29kZUdlbmVyYXRpb25Nb2RlOjpDb250cm9s
Rmxvd1Byb2ZpbGVyKTsgfQogICAgICAgICAKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCk7IH0KKyAgICAgICAgdm9p
ZCBzZXRVc2VzQ2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5zZXRIYXNDaGVja3BvaW50cygp
OyB9CiAKICAgICAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKTsgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKaW5kZXggMzU2MjBhMTExNjExYzVl
MGI4MTAxY2Q0NTU0YzA2YmM4MDMwMzc4MC4uZjgxOWIxMjNkNGQ4OWJhMDU5OTA4YWFhZGM1MGY2
MjlkYjNlNDkyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9SZWdpc3RlcklELmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9S
ZWdpc3RlcklELmgKQEAgLTY5LDEyICs2OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpCisgICAgICAg
IHZvaWQgc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyIGluZGV4KQogICAgICAgICB7CiAjaWZuZGVm
IE5ERUJVRwogICAgICAgICAgICAgbV9kaWRTZXRJbmRleCA9IHRydWU7CiAjZW5kaWYKLSAgICAg
ICAgICAgIG1fdmlydHVhbFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKGluZGV4KTsKKyAgICAg
ICAgICAgIG1fdmlydHVhbFJlZ2lzdGVyID0gaW5kZXg7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIHNldFRlbXBvcmFyeSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHAKaW5kZXggYjgzZmVlMGQzYzA5ZDE0OTdhYTdlYTFkZTNlMDQ5MDYyZjIyNmMx
NC4uZTY0MDcxYjFhYTBlMzQ4OTQ0MzQzOWZmMjhmY2EyNTFiNjJiOTY1YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcApAQCAtNDAsNiArNDAsMTQg
QEAgdm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICAgICAgb3V0LnByaW50KHZhbHVlKCkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcDo6
UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlm
IChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAgICAgICAg
b3V0LnByaW50KE9wZXJhbmQ6OmZyb21CaXRzKHZhbHVlKCkpKTsKK30KKwogdm9pZCBBYnN0cmFj
dEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoa2lu
ZCgpKTsKQEAgLTQ5LDYgKzU3LDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiKCIsIERPTUpJVDo6SGVhcFJhbmdl
Ojpmcm9tUmF3KHBheWxvYWQoKS52YWx1ZTMyKCkpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmIChraW5kKCkgPT0gU3RhY2spIHsKKyAgICAgICAgb3V0LnByaW50KCIoIik7
CisgICAgICAgIHBheWxvYWQoKS5kdW1wQXNPcGVyYW5kKG91dCk7CisgICAgICAgIG91dC5wcmlu
dCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgb3V0LnByaW50KCIoIiwgcGF5
bG9hZCgpLCAiKSIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAppbmRleCBiZjk5Mzc3OTcwNDcwMmQ4ZDViMjBiNmMyZjZmNzM5NWFmZTZiODY4Li4z
YzRjZTNkNWQwMmRjM2E4MWYzYWE0MjRjZmMzZmQxYzQ0N2M1MjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRPTUpJVEhlYXBSYW5nZS5oIgorI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC0xMjMs
MTAgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fdmFsdWUoYml0d2lzZV9jYXN0
PGludHB0cl90Pihwb2ludGVyKSkKICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorCisgICAgICAgIFBheWxvYWQo
T3BlcmFuZCBvcGVyYW5kKQogICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQotICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgICAgICAgICAsIG1fdmFsdWUob3Bl
cmFuZC5hc0JpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUGF5bG9hZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgICAgIDogUGF5bG9hZChPcGVyYW5kKG9w
ZXJhbmQpKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODMsNiArMTg5LDcg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wQXNPcGVyYW5kKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9pc1RvcDsKQEAg
LTIwNCw2ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCAhPSBJ
bnZhbGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQgJiYga2luZCAhPSBIZWFwICYmIGtp
bmQgIT0gU2lkZVN0YXRlKTsKICAgICAgICAgbV92YWx1ZSA9IGVuY29kZShraW5kLCBwYXlsb2Fk
KTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPmtpbmQoKSA9PSBraW5kICYmIHRoaXMtPnBheWxvYWQo
KSA9PSBwYXlsb2FkKTsKICAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKQEAgLTIxOSw2ICsyMjcsMTEgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFw
KTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CiAgICAgfQorICAgIE9wZXJhbmQgb3Bl
cmFuZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrICYmICFw
YXlsb2FkKCkuaXNUb3AoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjpmcm9tQml0cyhwYXls
b2FkKCkudmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcCBzdXBlcnR5cGUo
KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCA2NGFjYjU0MGQ0MGFlMTc5OGY3
YzIyMzZkODFkZmUxYzg0MDhkNTMwLi41ZDllMTdjOTBhMmM1YjUxODJiMzY1NjEyODc2MWQ4NTM3
MTg0NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zODEsNyArMzgxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3Bl
cmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3Bl
cmFuZCgpKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFk
eSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlz
VHlwZSh0eXBlRmlsdGVyRm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkpKTsK
ICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC0zOTIsNyArMzkyLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBT
dGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7
CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hl
Y2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlw
ZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpA
QCAtNDAyLDEyICs0MDIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBt
X3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPm9wZXJhbmQpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjksNyArNDI5LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xv
YmJlckxpbWkKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBo
YXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50RGVmaW5pdGVseS9TZXRBcmd1bWVudE1heWJlIG1lYW5z
CiAgICAgICAgIC8vIHRoYXQgc29tZW9uZSBzZXQgdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2Yt
YmFuZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKICAgICAg
ICAgLy8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NFUlQoIW1fc3RhdGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBBU1NFUlQoIW1fc3RhdGUub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czogewpAQCAtNDU4LDYgKzQ1OCwxMiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAg
ICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVjayBpZiB0aGUgY291bnQgYmVj
b21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0dXJuCkBAIC00NzYsNyArNDgy
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIG1fc3RhdGUub3BlcmFuZChk
YXRhLT5jb3VudCkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykKLSAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQgKyBpKS5tYWtlSGVhcFRvcCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTIzNTgsNyArMjM2NCw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4OwogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50SW5kZXhDaGVja2VkLnNhZmVHZXQoYXJndW1lbnRJbmRleCkgIT0gQ2hl
Y2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgewogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9zdGF0ZS5vcGVyYW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50SW5k
ZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRydWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAppbmRleCBk
NzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZhMDgwY2VhMzJm
ZDljNTkxZjMwZjFlN2RkNDZmMWQxMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFy
aWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFi
bGUtPm9wZXJhbmQoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBhZjJlZGE0YWQ4OGU5Yjk3YWFk
NWY0ZjkzOTIzNzYyMTk1MmFlZjg0Li4xNTUxODZkMGJmODIyNWYxOTE1NWZjODMzYjMzMDAwYTdm
NWQ5OWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJh
eVdpdGhTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVudHNDaGlsZCgp
LT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5v
cCgpID09IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5
QnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5hcmd1bWVudHND
aGlsZCgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00OTMsMTAgKzQ5
NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
aGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBvaW50IHRvIGFuIGFyZ3VtZW50IG9y
IGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnLmlzSGVhZGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3Bl
cmFuZChyZWcpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmFuZC5p
c0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Js
b2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTU2
MCwxNiArNTYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJl
cmVkQnlCbG9jayB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5
VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0Nsb2JiZXJlZEJ5QmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgLSAxOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7ICsraSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpOwpAQCAtNjI3LDcgKzYzMCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUs
IE5vT3BDbG9iYmVyaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
QWJzdHJhY3RIZWFwIGhlYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChoZWFwLmtpbmQoKSA9PSBTdGFjayAmJiAhaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgaGVhcC5vcGVy
YW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODA2LDcgKzgwOSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2FmZVRvR2V0U3RhY2sgPSBpbmRleCA+PSBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0gaW5kZXggPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzYWZlVG9HZXRTdGFjayAmPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSAt
IDE7CkBAIC04NDUsOSArODQ4LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRh
dGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwgc28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KKyAg
ICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4u
ZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5v
cmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKKworCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2Vy
dGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRy
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewotICAgICAgICAgICAgICAgICAgICBO
b2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAg
LTg2MiwxMCArODc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxp
ZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFy
Z3NEYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQu
b2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpLCBFZGdlKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4
aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tB
Y2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLApAQCAtODc0
LDE0ICs4OTEsMTUgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICBhdXRvIHN0b3Jl
VmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBzdG9yZUluZGV4KSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0
ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2Nh
bCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQo
cmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2lu
LnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
cmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhyZWcpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7
CkBAIC05MzUsNyArOTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNh
bmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
LSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lQXJndW1lbnRD
b3VudCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmcmFtZUFyZ3VtZW50Q291bnQgLSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC05
ODMsNyArMTAwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3Vu
dCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbG9hZEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGxvYWRJ
bmRleCA8IGZyYW1lQXJndW1lbnRDb3VudDsgKytsb2FkSW5kZXgpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hl
ZEpTVmFsdWUpOwpAQCAtMTAxOSw5ICsxMDM3LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
ICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKQEAg
LTEwMzAsNyArMTA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0g
dmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1p
dCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIHZhcmFyZ3NEYXRhLT5saW1p
dCwgdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCmluZGV4IDYyNjExMjNjYmZl
YzNlYmExOTVkMDliOTMxMDI2ZjI2YzcyNTg0NzYuLmE4ZDM4NDY1Y2U0OGE5ZDhmNTQyMDBiYzc0
OTZjYjc0YWU4ZDY2ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2Jv
b2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogeworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1
cm4gKHJlZy5pc0FyZ3VtZW50KCkgJiYgcmVnLnRvQXJndW1lbnQoKSkgfHwgcmVnLmlzSGVhZGVy
KCk7Ci0gICAgCisKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCiAgICAg
ICAgICYmIHJlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDYs
MTkgKzUwLDE5IEBAIGJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAogICAgIC8vIFdlIGRvIG5vdCBpbmNsdWRlIGZpeHVwcyBoZXJlIHNpbmNlIGl0IGlz
IG5vdCByZWxhdGVkIHRvIHxhcmd1bWVudHN8LCByZXN0IHBhcmFtZXRlcnMsIGFuZCB2YXJhcmdz
LgotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50cyA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMSk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50U3RhcnQgPQogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkgKyBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0KDApOwogICAgIHJldHVybiByZWcgPj0gYXJndW1lbnRTdGFydCAmJiBy
ZWcgPCBhcmd1bWVudFN0YXJ0ICsgbnVtQXJndW1lbnRzOwogfQogCi1ib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorYm9v
bCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCBvcGVy
YW5kKQogewotICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpLCByZWcpOworICAgIHJldHVybiBhcmd1
bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSgpLCBvcGVyYW5kKTsKIH0KIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0Fy
cmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVu
dHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4pCisgICAgSW5zZXJ0aW9u
U2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBO
b2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBhZGRUaGlzKQogewogICAgIEdyYXBoJiBncmFwaCA9IGlu
c2VydGlvblNldC5ncmFwaCgpOwogCkBAIC02OSwxMSArNzMsMTQgQEAgTm9kZSogZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
TmV3QXJyYXlCdWZmZXIKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21EaXJl
Y3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMK
ICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGFyZ3Vt
ZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIKLSAgICAgICAgfHwgYXJndW1lbnRz
LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQsCisgICAgICAgIHx8IGFyZ3VtZW50
cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tU3ByZWFkLAogICAgICAgICBhcmd1bWVudHMtPm9wKCkpOwogCisgICAgaWYgKGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQorICAgICAgICByZXR1cm4gZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgYXJndW1lbnRzLT5jaGlsZDEo
KS5ub2RlKCksIG5vZGVJbmRleCwgb3JpZ2luLCBhZGRUaGlzKTsKKwogICAgIGlmIChhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mTm9uU3ByZWFkQXJndW1lbnRzID0gYWRkVGhpczsKICAgICAgICAgQml0VmVjdG9yKiBiaXRW
ZWN0b3IgPSBhcmd1bWVudHMtPmJpdFZlY3RvcigpOwogICAgICAgICBOb2RlKiBjdXJyZW50U3Vt
ID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy0+
bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CkBAIC0xMDMsNyArMTEwLDcgQEAgTm9kZSogZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBO
ZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVy
KSB7CiAgICAgICAgIHJldHVybiBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAg
ICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxK
U0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpKSk7CisgICAgICAgICAgICBub2RlSW5k
ZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1
dHRlcmZseSo+KCktPmxlbmd0aCgpICsgYWRkVGhpcykpOwogICAgIH0KICAgICAKICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGFyZ3VtZW50cy0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOwpAQCAtMTEzLDcgKzEyMCw3IEBAIE5vZGUqIGVtaXRDb2RlVG9H
ZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgCiAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gIWFkZFRoaXM7CiAgICAg
ICAgIGlmIChhcmd1bWVudHNTaXplID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAg
ICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAg
ZWxzZQpAQCAtMTI5LDE0ICsxMzYsMTQgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0Fy
cmF5TGVuZ3RoKAogICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoU3ViLCBv
cmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVja2VkKSwKICAgICAgICAgRWRnZShhcmd1bWVudENv
dW50LCBJbnQzMlVzZSksCiAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVz
ZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigxICsgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmln
aW4sIGpzTnVtYmVyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwICsgIWFkZFRoaXMpLCBJbnQzMlVz
ZSkpOwogCiAgICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CiAgICAgICAgIC8vIFRo
ZSBhYm92ZSBzdWJ0cmFjdGlvbiBtYXkgcHJvZHVjZSBhIG5lZ2F0aXZlIG51bWJlciBpZiB0aGlz
IG51bWJlciBpcyBub24temVyby4gV2UgY29ycmVjdCB0aGF0IGhlcmUuCiAgICAgICAgIHJlc3Vs
dCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
SW50MzJPbmx5LCBBcml0aE1heCwgb3JpZ2luLCAKICAgICAgICAgICAgIEVkZ2UocmVzdWx0LCBJ
bnQzMlVzZSksIAotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNl
KG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNO
dW1iZXIoYWRkVGhpcyksIEludDMyVXNlKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5v
ZGVSZXN1bHRJbnQzMik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAppbmRleCA5YTc3MThmYmJmNTQ3YjJmNmFlMTAxZGFm
Mzc0YTA2YTJjM2RkZjEyLi43NGY5MzllODE2MjJkNDAyNDZlMjM1NWQ1MDk4YTllZDJhODUyMTBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxp
dGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0
aWVzLmgKQEAgLTMxLDExICszMSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqLCBW
aXJ0dWFsUmVnaXN0ZXIpOwotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNh
bmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyKTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xv
dChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kKTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChOb2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQpOwogCiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJn
dW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4pOworICAgIEluc2VydGlvblNldCYsIE5vZGUq
IGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBib29sIGFkZFRoaXMg
PSBmYWxzZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAppbmRleCA5NmRhYzM5
YTQ0NGZmYmQzY2U1NDNmNTdmMzZjZDYxZGVjYzI4YmQ0Li44OTdjNzBkZmZiYTA2NmI2NDljYWZk
Y2MxZWYwOTMzNzY4MTA0ZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaApAQCAtMTM5LDggKzEzOSw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyB9CiAgICAgdW5zaWduZWQgbnVt
YmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpIHsg
cmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9Ci0gICAgQWJz
dHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9i
bG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVl
JiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7IH0KICAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5k
ZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpbmRleCk7IH0KICAgICBB
YnN0cmFjdFZhbHVlJiBhcmd1bWVudChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZh
bHVlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAppbmRleCA3NzQzZTdkMDFmMWNhZDc4
MWQ4NGFiMDNkM2MwOWM3N2Y4MDI5YmE1Li5jMmI1NWFhNWM0YTUyMjliMWIxYTQ0MzFjMTg3YWRl
ZjQ2YzNkYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHlNYXAuY3BwCkBAIC02NSwxMCArNjUsMTAgQEAgdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBy
dW5lSGVhcCgpCiAKIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MoR3JhcGgm
IGdyYXBoLCBDb2RlT3JpZ2luIHdoZXJlKQogewotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4g
bG9jYWxzQ29weShtX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2xvY2Fscy5udW1iZXJP
ZkxvY2FscygpLCBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkpOworICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4gbG9jYWxzQ29weShPcGVyYW5kc0xpa2UsIG1fbG9jYWxzLCBBdmFpbGFiaWxp
dHk6OnVuYXZhaWxhYmxlKCkpOwogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAg
ICAgICB3aGVyZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAg
IFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgIGxvY2Fsc0NvcHkub3BlcmFuZChyZWcp
ID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOwogICAgICAgICB9KTsKICAgICBtX2xvY2FscyA9IFdU
Rk1vdmUobG9jYWxzQ29weSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFp
bGFiaWxpdHlNYXAuaAppbmRleCA1MzU1MjU2MDIzZGRjZjI4MGRjNTk1YjMzYTdjN2ZkZWM1NGU2
NGYwLi44MGMxMmJmMTgwMjVhNTYxMDU5NmRhMjRlMjNjMDI1ZjJhYmU0ZjIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKQEAgLTY2LDkgKzY2
LDkgQEAgc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc0Z1bmN0b3IsIHR5cGVuYW1lIEFkZEZ1bmN0b3I+Ci0gICAgdm9pZCBjbG9z
ZVN0YXJ0aW5nV2l0aExvY2FsKFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0IEhhc0Z1bmN0b3Im
IGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQorICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhM
b2NhbChPcGVyYW5kIG9wLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3Im
IGFkZCkKICAgICB7Ci0gICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2xvY2Fs
cy5vcGVyYW5kKHJlZyk7CisgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2xv
Y2Fscy5vcGVyYW5kKG9wKTsKICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCmluZGV4IDA1ODQ0OTYzZTYxMGVkMjkzYzU2MGZhYmZkMzg5YTlm
Mzk3ODBhMDcuLmUyMWIyOGI1MjIxZjE1NjE4YjgwNjRhM2E3YjJkNzg2OTEzODQyMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcApAQCAtMzIsNyArMzIs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUJhc2ljQmxvY2s6OkJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVu
dHMsIHVuc2lnbmVkIG51bUxvY2FscywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCitCYXNpY0Jsb2Nr
OjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJn
dW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRtcHMsIGZsb2F0IGV4ZWN1
dGlvbkNvdW50KQogICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICwgaW5k
ZXgoTm9CbG9jaykKICAgICAsIGNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZChTdHJ1Y3R1
cmVzQXJlV2F0Y2hlZCkKQEAgLTQ4LDExICs0OCwxMSBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNp
ZwogICAgICwgaXNMaW5rZWQoZmFsc2UpCiAjZW5kaWYKICAgICAsIGlzUmVhY2hhYmxlKGZhbHNl
KQotICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwg
dmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCB2
YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2
YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2
YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCB2YWx1
ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCisgICAgLCBpbnRlcnNl
Y3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMs
IEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlv
bkNvdW50KQogewogfQpAQCAtNzAsNiArNzAsMTUgQEAgdm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVM
b2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQogICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVl
c0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9w
KCkpOwogfQogCit2b2lkIEJhc2ljQmxvY2s6OmVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1w
cykKK3sKKyAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2
YXJpYWJsZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YWx1ZXNBdEhlYWQu
ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdO
dW1UbXBzKTsKKyAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlVG1wcyhu
ZXdOdW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpOworfQorCiB2b2lkIEJhc2ljQmxv
Y2s6OnJlcGxhY2VUZXJtaW5hbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CiAgICAgTm9k
ZUFuZEluZGV4IHJlc3VsdCA9IGZpbmRUZXJtaW5hbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAppbmRleCBiNWFkZjA5MTJkMDk0MmJlOTdlOTg3Y2RjODlmNGFl
MzRkMGMwYmM4Li4xZGQzOGM3OTA4ZGM2ZjRkMWIwODViYzhlMDYyNTQ4MGRiNDQ5N2NmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNDYsMTEgKzQ2LDEy
IEBAIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCi0gICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwg
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRt
cHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50KTsKICAgICB+QmFzaWNCbG9jaygpOwog
ICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7CisgICAg
dm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpOwogICAgIAogICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KICAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCmluZGV4IDc1MDhlMjE5ZGM3YzU4M2RiOWVh
OGZjZTY0Njg1ODk5OWUwNDYwZjkuLjAwOGNmNTIyNjk1N2M5YTgzNTg1YzVlNWUyYzEyNWYyZjhj
ZTRiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNl
cnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNl
cnRpb25TZXQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omlu
c2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNpY0Jsb2Nr
KiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0aW9u
Q291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNp
Y0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpLCBleGVjdXRpb25Db3VudCkpOwogICAg
IGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgYXV0byogcmVzdWx0ID0gYmxvY2sucHRy
KCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDdlNGE5ZmU2MjMzYjc0
NDllODI4NjYyYzFlNDk5ZGM5ZTg0NDA4YjcuLjAxMzQyMTI3NDc2MDExMjM0YzE0YTExYWZhY2Zj
NDI1MjkxNTk4OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCkBAIC0xMTEsNiArMTExLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY29u
c3RhbnRPbmUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKDEpKSkKICAgICAgICAgLCBtX251bUFyZ3Vt
ZW50cyhtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKQogICAgICAgICAsIG1fbnVtTG9jYWxz
KG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bVRtcHMobV9j
b2RlQmxvY2stPm51bVRtcHMoKSkKICAgICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAgICAg
ICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDApCiAgICAgICAgICwgbV9pbmxpbmVTdGFja1RvcCgw
KQpAQCAtMTM5LDYgKzE0MCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5ibG9j
ayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCisgICAgdm9pZCBlbnN1
cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCisgICAgeworICAgICAgICBWRVJCT1NFX0xPRygi
ICAgZW5zdXJlVG1wczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVtVG1wcyBmcm9tICIsIG1fbnVtVG1w
cywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bVRtcHMgPD0g
bV9udW1UbXBzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX251bVRtcHMgPSBuZXdO
dW1UbXBzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZVRtcHMobmV3TnVt
VG1wcyk7CisgICAgfQorCisKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRD
aGVja3MpOwpAQCAtMjcwLDI1ICsyODIsMzMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxpbmtCbG9j
ayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAg
ICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJhc2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgdm9pZCBwcm9ncmVzc0NoZWNrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50
SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpLCBtX2N1cnJlbnRJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQncyBh
Z2FpbiBPSyB0byBPU1IgZXhpdC4KKyAgICAgICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICBh
ZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKKyAg
ICB9CisKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgp
KTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7CiAgICAgfQogICAgIAogICAgIC8vIEdldC9TZXQg
dGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5vZGUq
IGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3Qo
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3Rh
bnQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpKTsKIAotICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3Vt
ZW50PwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICByZXR1
cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQo
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAKLSAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2Fs
LgotICAgICAgICByZXR1cm4gZ2V0TG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBnZXRM
b2NhbE9yVG1wKG9wZXJhbmQpOwogICAgIH0KIAogICAgIE5vZGUqIGdldChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKQEAgLTI5OCw4ICszMTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5z
aWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb25z
dGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSAqbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2s7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVC
bG9jay5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2Nr
LmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXpl
KSB7CiAgICAgICAgICAgICAgICAgICAgIG1fY29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCAr
IDEpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwg
bV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCkBAIC0zNTgsOSArMzc4LDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIGluaXRpYWxpemluZyBsb2NhbHMgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgog
ICAgICAgICBJbW1lZGlhdGVOYWtlZFNldAogICAgIH07Ci0gICAgTm9kZSogc2V0RGlyZWN0KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9y
bWFsU2V0KQorCisgICAgTm9kZSogc2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFs
dWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7Ci0gICAgICAgIGFkZFRvR3Jh
cGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAKICAgICAgICAgLy8g
V2UgY2FuJ3QgZXhpdCBhbnltb3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFu
Z2VkLgogICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOwpAQCAtMzc0LDcgKzM5NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZGVsYXllZC5leGVjdXRlKHRoaXMpOwogICAg
IH0KLSAgICAKKwogICAgIHZvaWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkK
QEAgLTM5MiwxOCArNDEzLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IEdldExvY2FsKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KCkgPT0gbV9jdXJyZW50SW5kZXgpOwogICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2Rl
LT5sb2NhbCgpKTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3Vy
cmVudEluZGV4LCBub2RlLT5vcGVyYW5kKCkpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2Nr
ZXIsIGtleSk7CiAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHBy
ZWRpY3Rpb24pOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGlu
IGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2Nh
bCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICBOb2RlKiBnZXRMb2NhbE9yVG1wKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0KLSAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpOworICAgICAg
ICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8IG9wZXJhbmQuaXNMb2NhbCgpKTsKKyAgICAgICAg
Tm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsg
dG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRhdGFzLCBhbmQgMikKICAgICAgICAgLy8gdHJ5IHRv
IGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBHZXRMb2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IK
QEAgLTQyOCwyMCArNDQ4LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBp
bmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2
YXJpYWJsZSkpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChsb2NhbCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSog
c2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAg
IE5vZGUqIHNldExvY2FsT3JUbXAoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9w
ZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
ICAgICB7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2Fs
KCkpOwogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJy
ZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBs
b2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHNldE1vZGUg
IT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKLSAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFy
Z3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVy
YW5kLnZhbHVlKCkpID49IG1fbnVtVG1wcykgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigqaW5saW5lQ2FsbEZyYW1lKCkpOwor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQgb3BlcmFuZDogIiwgb3BlcmFuZCwgIiBidXQgY3Vy
cmVudCBudW1iZXIgb2YgdG1wcyBpczogIiwgbV9udW1UbXBzLCAiIGNvZGUgYmxvY2sgaGFzOiAi
LCBtX3Byb2ZpbGVkQmxvY2stPm51bVRtcHMoKSwgIiB0bXBzLiIpOworICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2Vk
U2V0ICYmICFvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgQXJndW1lbnRQb3Np
dGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwocmVn
KTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgICAgIGZs
dXNoRGlyZWN0KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwotICAgICAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiBvcGVyYW5kID09IG1fY29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpCisgICAgICAgICAgICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2Nv
cGVSZWdpc3RlcigpICYmIHJlZyA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQogICAg
ICAgICAgICAgICAgIGZsdXNoKG9wZXJhbmQpOwogICAgICAgICB9CiAKQEAgLTQ1MSw3ICs0Nzcs
NyBAQCBwcml2YXRlOgogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlQ2hlY2tBcnJh
eUhvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShzZW1hbnRpY09yaWdpbi5ieXRlY29kZUluZGV4KCksIEJhZEluZGV4
aW5nVHlwZSkpOwogICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJ
bmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHZhbHVlKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9CiAKQEAgLTQ4MywyMCArNTA5LDIxIEBAIHByaXZhdGU6CiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0g
bm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIE5vZGUqIHNldEFyZ3VtZW50
KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICBOb2RlKiBz
ZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVy
YW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAg
ICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3JpZ2luQ2hhbmdlKG1fY3VycmVudFNlbWFu
dGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnQg
PSBvcGVyYW5kLnRvQXJndW1lbnQoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gcmVn
LnRvQXJndW1lbnQoKTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMp
OwogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKHJlZyk7
CiAKICAgICAgICAgLy8gQWx3YXlzIGZsdXNoIGFyZ3VtZW50cywgZXhjZXB0IGZvciAndGhpcycu
IElmICd0aGlzJyBpcyBjcmVhdGVkIGJ5IHVzLAogICAgICAgICAvLyB0aGVuIG1ha2Ugc3VyZSB0
aGF0IGl0J3MgbmV2ZXIgdW5ib3hlZC4KICAgICAgICAgaWYgKGFyZ3VtZW50IHx8IG1fZ3JhcGgu
bmVlZHNGbHVzaGVkVGhpcygpKSB7CiAgICAgICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlh
dGVOYWtlZFNldCkKLSAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kKTsKKyAgICAg
ICAgICAgICAgICBmbHVzaERpcmVjdChyZWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBpZiAoIWFyZ3VtZW50ICYmIG1fY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ29uc3RydWN0KQpAQCAtNTMyLDE0ICs1NTksMTYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGludCBhcmd1bWVudCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpIC0gaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0
dXJuIHN0YWNrLT5tX2FyZ3VtZW50UG9zaXRpb25zW2FyZ3VtZW50XTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAg
IEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9uKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9uKE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yQXJndW1lbnQob3BlcmFu
ZC50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9j
YWwob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQWRkRmx1c2hEaXJlY3RGdW5jPgpAQCAtNTUwLDkgKzU3OSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpOwogICAgICAg
ICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAu
c2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3Bl
cmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSk7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCBy
ZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAg
ICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7
CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9w
ZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gbV9ncmFwaC5iYXNlbGlu
ZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpLT5udW1QYXJhbWV0ZXJzKCk7CiAKQEAgLTU3
NSw2ICs2MDQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IG1fZ3Jh
cGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBk
b24ndCBuZWVkIHRvIGhhbmRsZSB0bXBzIGhlcmUgYmVjYXVzZSB0bXBzIGFyZSBub3QgcmVxdWly
ZWQgdG8gYmUgZmx1c2hlZCB0byB0aGUgc3RhY2suCiAgICAgICAgICAgICAgICAgY29uc3QgYXV0
byYgbGl2ZW5lc3NBdEJ5dGVjb2RlID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJ5dGVjb2Rl
SW5kZXgsIG1fZ3JhcGguYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQob3JpZ2lu
LCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwg
PSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICAgICAg
ICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW2xvY2FsXSkKQEAgLTU4NCwyNyArNjE0LDI3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2goT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9w
ZXJhbmQpKTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgZmx1
c2hEaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0
aW9uKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4ob3BlcmFu
ZCwgYXJndW1lbnRQb3NpdGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9k
ZVR5cGU+Ci0gICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgYWRk
Rmx1c2hPclBoYW50b21Mb2NhbChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFy
Z3VtZW50UG9zaXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFu
dCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
OwogICAgICAgICAKQEAgLTYxNCwyNiArNjQ0LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2
YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAg
ICAgIG5vZGUgPSBhZGRUb0dyYXBoKG5vZGVUeXBlLCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9k
ZTsKICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBv
c2l0aW9uLT5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBwaGFudG9t
TG9jYWxEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwaGFudG9tTG9j
YWxEaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50
b21Mb2NhbDxQaGFudG9tTG9jYWw+KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJh
bmQpKTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0
YWNrRW50cnkpCiAgICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07
CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9w
ZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hJ
bXBsKGlubGluZVN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7
CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaEZvclRlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIGF1
dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rl
ciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKLSAgICAgICAgYXV0byBhZGRQaGFudG9tTG9j
YWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsg
cGhhbnRvbUxvY2FsRGlyZWN0KHJlZyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3Qg
PSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChv
cGVyYW5kKTsgfTsKKyAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElu
bGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBwaGFudG9tTG9jYWxEaXJlY3Qob3Bl
cmFuZCk7IH07CiAgICAgICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwogICAgIH0KIApAQCAt
NzYxLDYgKzc5MCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKHJlc3Vs
dCk7CiAgICAgfQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3Bl
cmFuZCwgTm9kZSogY2hpbGQxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wID09IE1vdkhpbnQp
OworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChvcCwgT3BJbmZvKG9wZXJhbmQua2luZCgpKSwg
T3BJbmZvKG9wZXJhbmQudmFsdWUoKSksIGNoaWxkMSk7CisgICAgfQogICAgIE5vZGUqIGFkZFRv
R3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBFZGdlIGNoaWxk
MSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKApAQCAtMTA5MSw4ICsxMTI1LDEw
IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8g
dGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwotICAgIC8vIFRoZSBu
dW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4gdGhlIGZ1bmN0aW9u
LgorICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQg
YnkgdGhlIGJ5dGVjb2RlIGZvciB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2Nh
bHM7CisgICAgLy8gVGhlIG1heCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3IgZm9yd2FyZGluZyBk
YXRhIHRvIGFuIE9TUiBleGl0IHRvIGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQgbV9udW1UbXBz
OwogICAgIC8vIFRoZSBudW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3Rl
cikpIHRoYXQgd2UgbmVlZCB0bwogICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1bWVudHMgdG8g
b3V0Z29pbmcgY2FsbHMgZnJvbSB0aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVtYmVyIGluY2x1
ZGVzIHRoZSBDYWxsRnJhbWUgc2xvdHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0aGUgY2FsbGVl
CkBAIC0xMTU5LDE0ICsxMTk1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB+SW5s
aW5lU3RhY2tFbnRyeSgpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFw
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAgT3BlcmFuZCBy
ZW1hcE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5k
OworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSArIG1faW5saW5lQ2FsbEZy
YW1lLT50bXBPZmZzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwor
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBtX2lubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIH0KICAgICB9OwogICAgIApAQCAtMTE3NSwx
MyArMTIxNCw4IEBAIHByaXZhdGU6CiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2sgbV9pY0NvbnRl
eHRTdGFjazsKICAgICAKICAgICBzdHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKLSAgICAgICAgQ29k
ZU9yaWdpbiBtX29yaWdpbjsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKLSAg
ICAgICAgTm9kZSogbV92YWx1ZTsKLSAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7Ci0gICAgICAg
IAogICAgICAgICBEZWxheWVkU2V0TG9jYWwoKSB7IH0KLSAgICAgICAgRGVsYXllZFNldExvY2Fs
KGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBD
b2RlT3JpZ2luJiBvcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUg
c2V0TW9kZSkKICAgICAgICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAgLTExOTQs
OCArMTIyOCwxMyBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9vcGVy
YW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRBcmd1
bWVudChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwotICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWwobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwg
bV9zZXRNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsT3JUbXAobV9v
cmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKICAgICAgICAgfQorCisgICAg
ICAgIENvZGVPcmlnaW4gbV9vcmlnaW47CisgICAgICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAg
ICAgICBOb2RlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworICAgICAgICBTZXRNb2RlIG1fc2V0TW9k
ZTsKICAgICB9OwogICAgIAogICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1fc2V0TG9j
YWxRdWV1ZTsKQEAgLTEyMDgsNyArMTI0Nyw3IEBAIHByaXZhdGU6CiBCYXNpY0Jsb2NrKiBCeXRl
Q29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewogICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsKLSAgICBSZWY8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0g
YWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBt
X251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBi
bG9jay5wdHIoKTsKICAgICAvLyBtX2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdheXMgYmUg
c29ydGVkIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlmIChtX2lu
bGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpKQpAQCAtMTIyMCw3ICsx
MjU5LDcgQEAgQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJs
b2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIAogQmFzaWNCbG9jayogQnl0ZUNvZGVQ
YXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVt
QXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9
IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRz
LCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIg
PSBibG9jay5wdHIoKTsKICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxvY2spKTsK
ICAgICByZXR1cm4gYmxvY2tQdHI7CkBAIC0xNDIzLDcgKzE0NjIsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2Fs
bFZhcmlhbnQgYwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9
IHN0YXRpY19jYXN0PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0
IElubGluZUNhbGxGcmFtZSBpcyBWYXJhcmdzLCB3ZSBkbyBub3Qga25vdyBob3cgbWFueSBhcmd1
bWVudHMgYXJlIGFjdHVhbGx5IGZpbGxlZCBieSBMb2FkVmFyYXJncy4gVmFyYXJncyBJbmxpbmVD
YWxsRnJhbWUncwotICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMg
bWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSBMb2FkVmFy
YXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCisgICAg
ICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBv
ZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZhcmFyZ3MuIFdlICJjb250
aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQogICAgICAgICAgICAgLy8gYSBn
b29kIHRhcmdldCB0byBqdW1wIGludG8uCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDksNyArMTQ4OCw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgIC8vIFdlIG11c3Qgc2V0IHRoZSBjYWxs
ZWUgdG8gdGhlIHJpZ2h0IHZhbHVlCiAgICAgICAgIGlmIChzdGFja0VudHJ5LT5tX2lubGluZUNh
bGxGcmFtZSkgewogICAgICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1l
LT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIHNldERpcmVjdChzdGFja0VudHJ5LT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBjYWxs
VGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgICAgICBzZXREaXJlY3QocmVtYXBP
cGVyYW5kKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUpOwogCkBAIC0xNjE0LDE2
ICsxNjUzLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgQVNTRVJUKCEobnVtYmVy
T2ZTdGFja1BhZGRpbmdTbG90cyAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwID0gcmVnaXN0ZXJPZmZzZXQgLSBudW1iZXJPZlN0
YWNrUGFkZGluZ1Nsb3RzOwogICAgIAotICAgIGludCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXRBZnRlckZpeHVwKSkub2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
czsKKyAgICBPcGVyYW5kIGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
KTsKICAgICAKICAgICBlbnN1cmVMb2NhbHMoCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgpICsgMSArCisgICAgICAgIGlubGluZUNhbGxGcmFt
ZVN0YXJ0LnRvTG9jYWwoKSArIDEgKwogICAgICAgICBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycyArIGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpOwogICAgIAorICAgIGVuc3Vy
ZVRtcHMoKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lID8gbV9pbmxpbmVTdGFj
a1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSArIGNvZGVCbG9jay0+bnVtVG1wcygpKTsKKwogICAg
IHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlv
bnMuc2l6ZSgpOwogCiAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3VsdCA9
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOworICAgICAgICByZXN1bHQg
PSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFsUmVnaXN0ZXIo
KTsKIAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxscHRyOwog
ICAgIGlmIChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xNjM2LDcgKzE2NzcsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSogY2FsbGVyU3Rh
Y2tUb3AgPSBtX2lubGluZVN0YWNrVG9wOwogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3Rh
Y2tFbnRyeSh0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgY2FsbGVlLmZ1bmN0aW9uKCksIHJl
c3VsdCwKLSAgICAgICAgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKKyAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudmlydHVhbFJlZ2lzdGVyKCksIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBUaGlzIGlz
IHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgQnl0ZWNvZGVJ
bmRleCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OwpAQCAtMTY3MSw5ICsxNzEyLDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3ZSBiZWdpbiBl
eGVjdXRpbmcgdGhlIGNhbGxlZSwgd2UgbmVlZCBPU1IgZXhpdCB0byBiZSBhd2FyZSBvZiB3aGVy
ZSBpdCBjYW4gcmVjb3ZlciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZXR0ZXIsIGxvYzkgYW5kIGxv
YzEwLiBUaGUgTW92SGludHMgaW4gdGhlIGlubGluZWQKICAgICAgICAgLy8gY2FsbGVlIG1ha2Ug
aXQgc28gdGhhdCBpZiB3ZSBleGl0IGF0IDxIRVJFPiwgd2UgY2FuIHJlY292ZXIgbG9jOSBhbmQg
bG9jMTAuCiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgT3BlcmFu
ZCBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgYWRkVG9H
cmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1
ZSk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtl
ZFNldCB9KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTcsMTYgKzE3NTgsMTYg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcywgd2Ug
ZG8gbm90IG5lZWQgdG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9mZnNldEFm
dGVyRml4dXAgIT0gcmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0
ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxs
ZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4
LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0RGly
ZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENv
ZGVPcmlnaW4oKSwgYXJndW1lbnRUb1NldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBhcml0eUZpeHVwQ291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgp
KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQu
b2Zmc2V0KCkpLCB1bmRlZmluZWQpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0
ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOwogICAg
ICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50
Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0
IH0pOwogICAgICAgICB9CiAKQEAgLTE4OTMsMTIgKzE5MzQsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFs
UmVnaXN0ZXIKICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBjYWxsVGFy
Z2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGludCByZW1hcHBlZFJl
Z2lzdGVyT2Zmc2V0ID0KLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSku
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMb2Nh
bHMoVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwoKSk7CiAg
ICAgICAgIAogICAgICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBlZEFyZ3Vt
ZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
KGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRT
dGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRTdGFydCkpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQo
KTsKICAgICAgICAgZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVu
dFN0YXJ0ICsgMSk7CkBAIC0xOTA2LDExICsxOTQ3LDI0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lz
dGVyCiAgICAgICAgIGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAgICAgZGF0
YS0+bGltaXQgPSBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgZGF0YS0+
bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmltdW07Ci0gICAgICAgIAotICAgICAgICBp
ZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNB
cmd1bWVudCkpOworCisgICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJn
cykgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKKyAgICAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRv
R3JhcGgoR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnQgPSBnZXREaXJlY3QocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dy
YXBoLmZyZWV6ZShqc051bWJlcihpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJncywgT3BJ
bmZvKGRhdGEpLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IE5vZGUqIGFyZ3VtZW50cyA9IGdldChhcmd1bWVudHNBcmd1bWVudCk7CisgICAgICAgICAgICBh
dXRvIGFyZ0NvdW50VG1wID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKE9wZXJhbmQo
VG1wT3BlcmFuZCwgT3BDYWxsVmFyYXJnczo6YXJnQ291bnQpKTsKKyAgICAgICAgICAgIHNldERp
cmVjdChhcmdDb3VudFRtcCwgYWRkVG9HcmFwaChWYXJhcmdzTGVuZ3RoLCBPcEluZm8oZGF0YSks
IGFyZ3VtZW50cykpOworICAgICAgICAgICAgcHJvZ3Jlc3NDaGVja3BvaW50KCk7CisKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0TG9jYWxPclRt
cChhcmdDb3VudFRtcCksIGFyZ3VtZW50cyk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIExvYWRWYXJhcmdzIG1heSBPU1IgZXhpdC4gSGVuY2UsIHdlIG5lZWQgdG8ga2VlcCBhbGl2
ZSBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50CiAgICAgICAgIC8vIGFuZCBhcmd1bWVudHNB
cmd1bWVudCBmb3IgdGhlIGJhc2VsaW5lIEpJVC4gSG93ZXZlciwgd2Ugb25seSBuZWVkIGEgUGhh
bnRvbSBmb3IKQEAgLTE5MjIsMTQgKzE5NzYsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIK
ICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxzbyBoYXZlIG90aGVyIHJlYXNvbnMg
Zm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CiAgICAgICAgIC8vIGJlZm9yZSBTU0EuCiAg
ICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShkYXRhLT5jb3VudCk7
CiAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1dCBpdCB3aWxsIGZvcmNlIHRoZSBj
b3VudCB0byBiZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBkb2Vzbid0CiAgICAgICAgIC8vIG1h
dHRlciB2ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudERlZmluaXRlbHkg
YW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcwogICAgICAgICAvLyBtb3N0bHkganVz
dCBhIGZvcm1hbGl0eS4KICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzJP
bmx5KTsKICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1VuYm94KHRy
dWUpOwogICAgICAgICBOb2RlKiBzZXRBcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1
bWVudERlZmluaXRlbHksIE9wSW5mbyhjb3VudFZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5sb2NhbCgp
LCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnRDb3Vu
dCk7CiAgICAgICAgIAogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQp
LCBnZXQodGhpc0FyZ3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICB1bnNpZ25l
ZCBudW1TZXRBcmd1bWVudHMgPSAwOwpAQCAtMTk1Myw3ICsyMDA3LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0
dWFsUmVnaXN0ZXIKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKG51bVNldEFyZ3VtZW50cyA+PSBtYW5kYXRvcnlN
aW5pbXVtID8gU2V0QXJndW1lbnRNYXliZSA6IFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZv
KHZhcmlhYmxlKSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+b3Bl
cmFuZCgpLCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAgICArK251bVNldEFyZ3VtZW50czsKICAg
ICAgICAgfQogICAgIH07CkBAIC0yMDUzLDcgKzIxMDcsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2Fs
bE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAg
Ly8geWV0LgogICAgIFZFUkJPU0VfTE9HKCJSZWdpc3RlciBvZmZzZXQ6ICIsIHJlZ2lzdGVyT2Zm
c2V0KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlUmVnKHJlZ2lzdGVyT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICBjYWxsZWVSZWcgPSBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoY2FsbGVlUmVnKTsKKyAgICBjYWxsZWVSZWcgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQoY2FsbGVlUmVnKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBWRVJCT1NF
X0xPRygiQ2FsbGVlIGlzIGdvaW5nIHRvIGJlICIsIGNhbGxlZVJlZywgIlxuIik7CiAgICAgc2V0
RGlyZWN0KGNhbGxlZVJlZywgY2FsbFRhcmdldE5vZGUsIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7
CiAKQEAgLTUxMDIsNyArNTE1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogewogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7
CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUubV9yZWdleHAuaXNDb25zdGFudCgpKTsKLSAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9u
ZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9y
ZWdleHAub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5SZWdFeHAg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9yZWdleHApKTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhmcm96ZW5SZWdFeHApLCBqc0NvbnN0
YW50KGpzTnVtYmVyKDApKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4
cCk7CiAgICAgICAgIH0KQEAgLTUxMTIsNyArNTE2Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IHRoaXMtPmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAg
Tm9kZSogbGVuZ3RoOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50c0xlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
LSAxOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c0xlbmd0aCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN0TGVuZ3RoOwogICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNMZW5ndGggPD0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lw
KQogICAgICAgICAgICAgICAgICAgICByZXN0TGVuZ3RoID0ganNOdW1iZXIoMCk7CkBAIC02MTc4
LDcgKzYyMzIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUo
KSB8fCAobV9ncmFwaC5jb21waWxhdGlvbigpICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0g
MSAmJiBtX2N1cnJlbnRCbG9jay0+YXQoMCktPm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAot
ICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgICAgIFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29k
ZUJsb2NrKS5tX2J1ZmZlcjsKIAogICAgICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBl
eGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQu
CkBAIC02MTk1LDcgKzYyNDksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OwogCi0gICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAg
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0xvY2FsKCkpCkBAIC02MjIzLDE0ICs2Mjc3LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZh
bHNlOyAKIAogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMgPSAwOwotICAgICAg
ICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmls
ZSkgeworICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBhZGRUb0dyYXBoKEV4dHJhY3RDYXRjaExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMp
LCBPcEluZm8obG9jYWxQcmVkaWN0aW9uc1tudW1iZXJPZkxvY2Fsc10pKTsKICAgICAgICAgICAg
ICAgICArK251bWJlck9mTG9jYWxzOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGlu
dCwgT3BJbmZvKHByb2ZpbGUubV9vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgbG9jYWxzVG9TZXQudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZh
bHVlKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChudW1iZXJPZkxvY2FscykK
QEAgLTYzNTgsNyArNjQxMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjogewog
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
UHRyPigpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBo
LmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVu
VmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcikp
OwogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNv
ZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KS5tX2hhc0p1bXBlZCkgewpAQCAtNjgyNiw4ICs2ODgwLDggQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7CiAgICAgICAgICAg
ICBBU1NFUlQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5pc0NvbnN0YW50KCkgJiYgYnl0ZWNvZGUu
bV9pbml0aWFsVmFsdWUuaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBz
eW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlLm9mZnNldCgpKSk7Ci0g
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1f
aW5pdGlhbFZhbHVlLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9s
VGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkpOworICAgICAgICAgICAgRnJv
emVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkp
OwogICAgICAgICAgICAgTm9kZSogc2NvcGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAg
ICAgICAgICBOb2RlKiBsZXhpY2FsRW52aXJvbm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2
YXRpb24sIE9wSW5mbyhzeW1ib2xUYWJsZSksIE9wSW5mbyhpbml0aWFsVmFsdWUpLCBzY29wZSk7
CiAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGxleGljYWxFbnZpcm9ubWVudCk7CkBA
IC02ODU3LDcgKzY5MTEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gbG9hZHMgZnJvbSB0aGUgc2NvcGUgcmVnaXN0ZXIg
bGF0ZXIsIGFzIHRoYXQgd291bGQgcHJldmVudCB0aGUgREZHIGZyb20gdHJhY2tpbmcgdGhlCiAg
ICAgICAgICAgICAvLyBieXRlY29kZS1sZXZlbCBsaXZlbmVzcyBvZiB0aGUgc2NvcGUgcmVnaXN0
ZXIuCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFNjb3BlPigpOwotICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9
IGdldChDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwogICAgICAgICAgICAgTm9kZSogcmVzdWx0Owog
ICAgICAgICAgICAgaWYgKEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbGVlLT5keW5hbWljQ2Fz
dENvbnN0YW50PEpTRnVuY3Rpb24qPigqbV92bSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
d2Vha0pTQ29uc3RhbnQoZnVuY3Rpb24tPnNjb3BlKCkpOwpAQCAtNzI3NSw4ICs3MzI5LDEwIEBA
IEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAg
ICAgICAvLyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVh
ZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlz
aGVzLgogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0
aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAg
bV9pbmxpbmVDYWxsRnJhbWUtPnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZy
YW1lID8gbV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2Fs
bGVyLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID09IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaWYgKGNh
bGxlZSkgewogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0g
VmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsID0gZmFsc2U7CkBAIC03NjM4LDcgKzc2OTQsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
bWFwcGluZy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+b3BlcmFu
ZCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpICE9IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNzY1OCwyNCArNzcxNCwyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vz
c29yLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0g
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVz
c1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5v
ZGVUeXBlIG9wLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gdmFy
aWFibGU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5saW5lQ2FsbEZyYW1l
ID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOworICAgICAgICAgICAgICAgICAg
ICAgICAgT3BlcmFuZCBhcmd1bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50LmlzQXJndW1lbnQo
KSAmJiAhYXJndW1lbnQuaXNIZWFkZXIoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uKj4mIGFyZ3VtZW50cyA9IG1faW5saW5lQ2Fs
bEZyYW1lVG9Bcmd1bWVudFBvc2l0aW9ucy5nZXQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbYXJndW1lbnQudG9Bcmd1bWVudCgpXS0+YWRk
VmFyaWFibGUodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9u
ZSwgb3AsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIEZsdXNo
LCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBQaGFudG9tTG9jYWws
IG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBm
bHVzaEZvclRlcm1pbmFsSW1wbChvcmlnaW4uc2VtYW50aWMsIGFkZEZsdXNoRGlyZWN0LCBhZGRQ
aGFudG9tTG9jYWxEaXJlY3QpOwpAQCAtNzc0MCw2ICs3Nzk2LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2UoKQogICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1i
ZXJPZkFyZ3VtZW50cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpKTsKICAgICB9CiAKKyAgICBtX2dyYXBoLm1fdG1wcyA9IG1fbnVtVG1w
czsKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5t
X3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKaW5kZXggOGU5YmI0YWNiZTU1MDJkZGE3YjM3NDc4NGI1
YTg1ZmZkZTcwM2JmZC4uM2RjNzU2OGYxZWUyYzY5NzcyMjY4Y2M5NmRlYTRhMDVjNjIzNjI1MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE3MCwyMiAr
MTcwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAg
ICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBt
X2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaW50IG9wZXJh
bmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAg
ICAgICAgICAgT3B0aW9uYWw8SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwog
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAi
LCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAg
ICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAi
LCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICBXaWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIg
d2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICBXaWRlbmluZyAiLCBvcGVyYW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHRhcmdldCA9IGJsb2NrLT52
YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdGFy
Z2V0Lm1lcmdlT1NSRW50cnlWYWx1ZShtX2dyYXBoLCB2YWx1ZS52YWx1ZSgpLCBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSwgbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAppbmRleCBkOThmZDRhZjQ0MGYwN2NiYzE2
YjY3ZDYwMmJhNjQyNmFmMGYyMzgyLi41NzcwZjA5ODk0MmM4OTZiN2FjZjgyM2ZjYWI5NDQ0YTIy
NGNjZWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBzcGVj
aWFsQ2FzZUFyZ3VtZW50cygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4o
KTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIHBy
b3BhZ2F0ZVBoaXM8VG1wT3BlcmFuZD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hlZCgpOwog
ICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAgLTIxMSwx
MCArMjEyLDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2Rl
KiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCku
aXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1l
bnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9j
YWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsK
KyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBj
YXNlIEFyZ3VtZW50T3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxG
b3I8QXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50
b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBMb2NhbE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExv
Y2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG1wT3BlcmFu
ZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8VG1wT3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5v
ZGVUeXBlIG5vZGVUeXBlLCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlQob3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90
aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAg
ICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50
KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVU
eXBlLCBBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50
b0FyZ3VtZW50KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVz
aE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxl
LCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxl
LT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7Cisg
ICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBB
cmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJn
dW1lbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExv
Y2FsT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9w
ZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBUbXBPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhh
bnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBUbXBPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFi
bGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5v
ZGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0
T3BlcmFuZChub2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNh
bm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg5LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICBjbGVhclZhcmlhYmxlczxBcmd1bWVudE9wZXJhbmQ+KCk7CiAgICAg
ICAgIGNsZWFyVmFyaWFibGVzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJs
ZXM8VG1wT3BlcmFuZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwg
cGhpIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhh
dAogICAgICAgICAvLyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBi
dXQgZG9lc24ndCBhc3N1bWUgdGhhdCB0aGUgcmVmCkBAIC0zODgsNyArNDExLDcgQEAgcHJpdmF0
ZToKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICB2b2lkIHByb3Bh
Z2F0ZVBoaXMoKQogICAgIHsKLSAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBo
aVN0YWNrID0gb3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1bWVudFBoaVN0
YWNrIDogbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4
PiYgcGhpU3RhY2sgPSBwaGlTdGFja0ZvcjxvcGVyYW5kS2luZD4oKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5Lgog
ICAgICAgICBtX2Jsb2NrID0gMDsKQEAgLTQ2Niw5ICs0ODksMTIgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBWZWN0b3I8UGhpU3RhY2tFbnRy
eSwgMTI4PiYgcGhpU3RhY2tGb3IoKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09
IEFyZ3VtZW50T3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7
Ci0gICAgICAgIHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIHN3aXRjaCAob3BlcmFu
ZEtpbmQpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHJldHVybiBtX2FyZ3VtZW50
UGhpU3RhY2s7CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOiByZXR1cm4gbV9sb2NhbFBoaVN0
YWNrOworICAgICAgICBjYXNlIFRtcE9wZXJhbmQ6IHJldHVybiBtX3RtcFBoaVN0YWNrOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcHV0ZUlzRmx1c2hlZCgpCkBAIC01MjEsNiArNTQ3LDcgQEAgcHJpdmF0
ZToKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAx
Mjg+IG1fYXJndW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBt
X2xvY2FsUGhpU3RhY2s7CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV90bXBQaGlT
dGFjazsKICAgICBWZWN0b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAppbmRleCAyMzgx
YzZiOGY4ZjRiYTc2MzRiYjY2YjEyMzk0NzFiNWE2MTY2N2NlLi40Y2NlMTc0ODgzZTIwNDEwZDYy
MjNhNmY0MTcyZWRkZTY5OGFhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcApAQCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFN0YWNrOiB7CiAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9h
ZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkg
PT0gaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBt
X2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZSgpKTsKICAg
ICAgICAgICAgIGlmIChjbG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgbV9m
YWxsYmFja1N0YWNrTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNzIsNyArMTcx
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghY2xvYmJlckNvbnNlcnZhdGl2ZWx5
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAocGFpci5r
ZXkuaGVhcCgpLmtpbmQoKSA9PSBTdGFjaykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGl0
ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXls
b2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVl
KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBT
dGFja01hcC5lbmQoKSAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBwYWlyLmtleSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMjYsOCArMjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3Ry
YWN0SGVhcCBhYnN0cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CiAgICAgICAgICAgICBpZiAo
YWJzdHJhY3RIZWFwLnBheWxvYWQoKS5pc1RvcCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBh
ZGQobV9mYWxsYmFja1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0SGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhl
YXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCksIG51bGxwdHIp
OworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFk
ZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCksIG51bGxwdHIpOwogICAgICAgICAgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9uLCBub2RlLCAw
fSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksOCArMjQ3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBTaWRlU3RhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBjYXNlIFN0YWNrOiB7Ci0gICAgICAgICAgICBB
U1NFUlQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpID09IGxvY2F0aW9uLmhlYXAo
KS5wYXlsb2FkKCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fi
c3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMy
KCkpOworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
ZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYg
KGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKICAgICAgICAgICAgICAg
ICAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlLT52YWx1ZTsKQEAgLTI5OCw3ICsyOTUsNyBAQCBwcml2YXRl
OgogICAgIC8vIGEgZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1f
ZmFsbGJhY2tTdGFja01hcC4KICAgICAvLwogICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBn
b2VzIGludG8gbV9mYWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlx
dWUgdmFsdWUuCi0gICAgSGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0
YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8aW50MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0SGFzaDxp
bnQ2NF90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50NjRfdD4+
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CiAgICAgTWFwIG1fZmFsbGJhY2tTdGFja01hcDsKIAog
ICAgIE1hcCBtX2hlYXBNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHAKaW5kZXggZmQwYjZkNzRkYTY3N2JjNDUwOGNhYzQ5ZmM0ZWUxYzk4ZGE0ZTdh
ZC4uNGQ1YTJhMGFhYTFhNzQzYmZiZTY5NGI0Mzk4Y2ZmN2Y1YmRmMTA1OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMzA2LDYgKzMwNiw4
IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3Ry
YW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJh
bXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxf
dHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKICAg
ICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5f
bG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA4OWJjNjQxZjUyNmJiNTNm
ZjAzN2Y3M2NmOTUwYmFjNjQ2ZDQ5OTU0Li44MmYzY2E2NDE4NGY5MTkzNjUwMzliMTMyMjE3ZGQ5
OWVhOTcxMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApA
QCAtMTExLDkgKzExMSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgLy8gc2NhbiB3
b3VsZCByZWFkLiBUaGF0J3Mgd2hhdCB0aGlzIGRvZXMuCiAgICAgZm9yIChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3Rh
Y2ssIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsK
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2RlcyBjYW4gcmVhZCBmcm9t
IHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5Nyw3ICs0OTcsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZsdXNo
OgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNzY0LDEyICs3NjQsMTIg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBMYXp5Tm9kZShub2Rl
KSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBTZXRD
YWxsZWU6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7CkBAIC03ODAsNyArNzgw
LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAgICBjYXNlIFNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ss
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgpAQCAtNzg4LDM2
ICs3ODgsNDMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZSkpOworICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3Bl
cmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUt
PmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RI
ZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7Ci0gICAgICAgIEFi
c3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
Pm9wZXJhbmQpOwogICAgICAgICByZWFkKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBo
ZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0
cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwog
ICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywg
aGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOworICAgICAgICByZXR1cm47ICAKKyAgICB9CisKICAg
ICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3cml0
ZShIZWFwKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQu
b2Zmc2V0KCkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTsp
Ci0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNl
dCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MjYsOSArODMzLDkgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnUKICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAgIAogICAgICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3Jp
dGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsK
KyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0
aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKaW5k
ZXggOTU4NjZhN2Y5MWE3MTQ0MmRhMWM0ZjdlNDcwMGQwOWNkMmFjMzBmMy4uMTU3NDZjMDU0ZjBk
ZjMzYmEzMmQzOWZhZmUwMmRiYmQ3ZDI5MTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCkBAIC0zOSw3ICszOSw3IEBAIHN0YXRp
YyB2b2lkIGFkZEJ5dGVjb2RlTGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlNYXAm
IGF2YWlsYWJpbGl0eU1hcCwKIHsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAg
ICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBhdmFpbGFi
aWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKICAgICAgICAgICAgICAgICByZWcsCiAg
ICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IDc5ODdiODcwZmQ1MDlmOTMwMDA3
ZTM1NmFjMDU1ZWE2NmJmZTdhZGIuLjdmZmQ0ZDM1YjZjZjVjOWRlMzgxZTdkYTYxMzMyZmQ1MjQ5
NjU1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcApA
QCAtNTYsNyArNTYsNyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4o
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9y
aWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAg
IEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3NhYmxl
Q2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRk
VW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkBAIC02NCwxMyArNjQs
MTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7
CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFTU0VS
VChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNp
dGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6bGFzdENhbGxT
aXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5zaXplKCkpOwot
ICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgp
IC0gMSkpOworICAgIHJldHVybiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lucy5z
aXplKCkgLSAxKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRk
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApp
bmRleCAzYjE2NWYyYzQwMjEwMDNkMDQxY2NhNmQ5YWUwY2ZlN2FlODI3MTNmLi4xODUzNjZkMDRl
MjYzZWU5ZWQ5NjRjODZhN2VkOTUyNGE5NWJiOWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgzLDcgKzM4
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5VmFsIGlu
IHN1Y2ggc3RhdGljYWxseS1vdXQtb2YtYm91bmRzIGFjY2Vzc2VzOyB3ZSBqdXN0IGxvc2UgQ0ZB
IHVubGVzcwogICAgICAgICAgICAgICAgIC8vIEdDU0UgcmVtb3ZlcyB0aGUgYWNjZXNzIGVudGly
ZWx5LgogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZGV4ID49IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
LSAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0YXRlLm51bWJlck9m
QXJndW1lbnRzKCkgLSAxKQpAQCAtNDA0LDcgKzQwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCArIDEpLCBGbHVz
aGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkgJiYgaW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwogICAgICAgICAg
ICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggODU0MTIzMTQ3NDFl
NmYxMTI2MWYyZTk3YzQ5ZmU2NDRkYWU3YmFmNy4uZjM4YzgzZmRkMzBjMmY1M2IzZDUwOTNmNDBi
MmM3MGU5NTMxMDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApA
QCAtMjk0LDYgKzI5NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFu
Y2VPZkN1c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJn
czoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9T
dHJpbmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1Mzku
LjQ1ZmJjNDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVi
cyB0aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0
bwogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmlu
YWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4
dXBHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsK
ICAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAg
IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsK
ICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWVlMWYwMDczYjBmNGJiY2M0
NzM0ZWI2NDFlNDY0OGMzMDU1YTI0NC4uY2EzM2RiMjI3ZDRiOTI3NzNmYTg2ZDcyZWUzZDRkMWI4
NWJmOTgzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CkBAIC0yNDMyLDYgKzI0MzIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2Fk
VmFyYXJnczogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKwogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3Vy
ZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ2NCw4ICsyNDcyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAg
ICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAg
ICAgICAgY2FzZSBOZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGb3JBbGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JB
bGxLaWxscy5oCmluZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4Yjku
LjkzM2EyYmRlMjJlMTY2YzJhZWI2ZDRhYzFiYmU5Y2UxZTVjZWQ1NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50
ZXJuYWwgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRp
ZXMgZm9yIGZpbmRpbmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERG
RyBTU0EuIFRoaXMgYWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRo
aXMgaXMgdXN1YWxseSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3Jh
bSBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2Nr
cyB3aGVyZSB0aGUgbm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBw
cm9ncmFtIHBvaW50cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtp
bGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFm
dGVyLCBjb25zdAogICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdp
bi5mb3JFeGl0OwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAg
T3BlcmFuZCBhbHJlYWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhh
dCBpcyBsaXZlIGF0IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBp
ZiAobm9kZUFmdGVyLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gbm9kZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7
Ci0gICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG5vZGVBZnRlci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xp
dmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVy
YW5kKTsKKyAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCkBAIC03MCw4ICs3NCwyNCBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAg
IC8vIG90aGVyIGxvb3AsIGJlbG93LgogICAgIGF1dG8qIGJlZm9yZUlubGluZUNhbGxGcmFtZSA9
IGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1l
ID09IGFmdGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGludCBzdGFja09mZnNldCA9
IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgOiAwOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGJlZm9yZUlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhZnRlci5ieXRl
Y29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5
dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNr
cG9pbnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9y
Q2hlY2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAg
ICAgIGF1dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ss
IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBpbnQgdG1wT2Zmc2V0ID0gYmVm
b3JlSW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAw
OworICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9y
ZS5maWx0ZXIobGl2ZUFmdGVyKTsKKworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0
Qml0KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoT3BlcmFuZChU
bXBPcGVyYW5kLCB0bXAgKyB0bXBPZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgLy8gTm8gbG9jYWxzIGNhbiBkaWUgYXQgYSBjaGVja3BvaW50LgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5l
Q2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAg
ICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zv
cihjb2RlQmxvY2spOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0g
ZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNz
Q2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3Rv
ciYgbGl2ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5k
ZXgoKSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwpAQCAtODIsMTcgKzEw
MiwyMSBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgICAgICAgICAgfSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhZnRlci5i
eXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmluZyBhY3Jvc3MgYSBjaGVj
a3BvaW50IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFuIGlubGluZUNhbGxGcmFt
ZS4iKTsKKwogICAgIC8vIERldGVjdCBraWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTog
aXQgaXMga2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBC
aXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwot
ICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZl
QWZ0ZXIgPSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOworICAgIHVu
c2lnbmVkIG51bUxvY2FscyA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUo
CiAgICAgICAgIGJlZm9yZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0g
ICAgICAgICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgWyZdIChPcGVyYW5k
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3RlZCkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcu
dG9Mb2NhbCgpKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAo
KSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAg
ICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKG9wZXJh
bmQpOwogICAgICAgICB9KTsKIH0KICAgICAKQEAgLTEwNSw3ICsxMjksOCBAQCB2b2lkIGZvckFs
bEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBz
ZWVuSW5DbG9zdXJlRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxs
ZWRGdW5jdG9yRmxhZyA9IDI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IGZsYWdzOwot
ICAgIAorCisgICAgQVNTRVJUKG5vZGVJbmRleCk7CiAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwogICAgIAogICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKQEAgLTEyMCwxNSAr
MTQ1LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAg
IH0KICAgICAgICAgfSk7CiAKLSAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOwotICAgIGlmIChu
b2RlSW5kZXgpCi0gICAgICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKKyAg
ICBOb2RlKiBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CiAKICAgICBmb3JBbGxL
aWxsZWRPcGVyYW5kcygKICAgICAgICAgZ3JhcGgsIGJlZm9yZSwgbm9kZSwKLSAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAg
ICAgICAgICAgICAgICByZWcsCisgICAgICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAgICAg
ICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmxhZ3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xvc3VyZUZsYWc7CiAgICAgICAgICAgICAgICAg
fSwKQEAgLTE1OSw2ICsxODIsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAgICAvLyBT
dGFydCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQg
dG8gb25seSBpbnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2Nr
IHVwIHRvIG5vZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhl
biB0aGUgZnVuY3RvciBoYXMgbm90aGluZyB0byBkby4KICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAg
ICAgIGRhdGFMb2dMbklmKEZvckFsbEtpbGxzSW50ZXJuYWw6OnZlcmJvc2UsICJsb2NhbCBhdmFp
bGFiaWxpdHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRleCwgIiAiLCBsb2NhbEF2YWlsYWJpbGl0eS5t
X2F2YWlsYWJpbGl0eSk7CiAgICAgICAgIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAg
ICAgICAgICAgICBncmFwaCwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHksIGJsb2Nr
LCBub2RlSW5kZXgsCiAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYjMyMGY3MDdjOTVmMTIzOTM4NTFiYzNiMmIy
YjQyYjk1NmRkMGJmNS4uMDcxZGUyMzkyYjljNWM5Mjg2ZGU5Yzc4NzhmZTlhZjAwYzBiNGU0MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTMwOCw4ICszMDgsOCBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0
ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2
YXJpYWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigiLCBWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAg
ICAgICAgICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CiAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKQEAgLTMxNywxMyArMzE3LDEzIEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBO
b2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNTdGFja0FjY2Vz
c0RhdGEoKSkgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7CisgICAg
ICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIGlmIChkYXRhLT5t
YWNoaW5lTG9jYWwuaXNWYWxpZCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFj
aGluZToiLCBkYXRhLT5tYWNoaW5lTG9jYWwpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRh
dGEtPmZvcm1hdCk7CiAgICAgfQotICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZExvY2FsKCkpIAot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgaWYg
KG5vZGUtPmhhc1VubGlua2VkT3BlcmFuZCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICBpZiAobm9kZS0+aGFzVmVjdG9yTGVuZ3RoSGlu
dCgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ2ZWN0b3JMZW5ndGhIaW50ID0gIiwgbm9k
ZS0+dmVjdG9yTGVuZ3RoSGludCgpKTsKICAgICBpZiAobm9kZS0+aGFzTGF6eUpTVmFsdWUoKSkK
QEAgLTUxNSw5ICs1MTUsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgQmFzaWNCbG9jayoKICAgICAgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBwaGlO
b2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+b3AoKSA9
PSBQaGkpOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBo
aU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8Iiwg
cGhpTm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAg
ICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+
b3BlcmFuZCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CiAgICAgICAgICAg
ICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkAi
LCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUtPmNoaWxkMigpKSB7CkBAIC04ODQsNyArODg1LDcgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0
ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywg
VmEKICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAg
ICBpZiAobm9kZS0+b3BlcmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKQog
ICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtODkzLDkgKzg5NCw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVH
ZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZh
CiAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVB
Y2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3Vic3Rp
dHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAg
ICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9
IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFu
ZCgpKTsKICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAg
ICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSkgPSBuZXdHZXRMb2NhbDsKKyAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkgPSBuZXdHZXRMb2NhbDsK
ICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTEzMywzNiArMTEzNCw1NiBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6
a2lsbHNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgcmV0dXJuIGtp
bGxzRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOwogfQogCi1ib29s
IEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3Bl
cmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFM
b2coIkNoZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAg
Ym9vbCBpc0NhbGxlck9yaWdpbiA9IGZhbHNlOworCiAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdp
blB0ciA9ICZjb2RlT3JpZ2luOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkg
LSBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpKTsKKyAgICBhdXRvKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAvLyBXZSBuZWVkIHRv
IGhhbmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhl
CisgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2FsbC4KKyAg
ICBmb3IgKDsgY29kZU9yaWdpblB0cjsgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZSA/
ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlciA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAg
IGlmIChvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcE9mZnNldCA9
IGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVy
YW5kLnZhbHVlKCkpOworCisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC52YWx1ZSgpID49IDAp
OworICAgICAgICAgICAgLy8gVGhpcyB0bXAgc2hvdWxkIGhhdmUgYmVsb25nZWQgdG8gc29tZW9u
ZSB3ZSBpbmxpbmVkLgorICAgICAgICAgICAgaWYgKG9wZXJhbmRJbmRleCA+IHRtcE9mZnNldCAr
IG1heE51bUNoZWNrcG9pbnRUbXBzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihp
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8
fCBvcGVyYW5kSW5kZXggPCB0bXBPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGF1dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2Rl
QmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1
cm4gYml0TWFwLmdldChvcGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOworICAgICAgICB9CisKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBj
b2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJyZWcgPSAiLCByZWcsICJcbiIpOwogCi0gICAgICAg
IGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgp
OwotICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zm
c2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgeworICAgICAgICBpZiAo
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0YWNr
T2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgewogICAgICAgICAg
ICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZWcub2Zmc2V0KCkgPCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAKIAog
ICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKLSAgICAg
ICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkg
eworICAgICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTG9va3MgbGlrZSBhIGNhbGxlZS5cbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJMb29rcyBsaWtlIHRoZSBhcmd1bWVudCBjb3VudC5cbiIpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNzYsNDIgKzExOTcsNDEgQEAg
Ym9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CiAg
ICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luUHRyLT5i
eXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLm9wZXJhbmRJ
c0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4pKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5p
bmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1
cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShyZWcsIGJ5dGVjb2RlSW5kZXgs
IGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3JpZ2luUHRyLCBpc0Nh
bGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbHdh
eXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQgd2Fzbid0IGZvciBvdXIKICAg
ICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5nLgotICAgICAgICBpZiAocmVnLmlzQXJn
dW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmIHJlZy5pc0FyZ3VtZW50KCkK
ICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQXJndW1lbnQoKSkgPCBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCkpIHsKICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IGlzIGxpdmUu
XG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8g
V2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBl
eGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUg
dGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRyID0gJmlubGluZUNhbGxGcmFtZS0+ZGly
ZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdpbiA9IHRydWU7CiAgICAgfQorCisgICAg
aWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVl
LlxuIik7CisgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9yIEdyYXBoOjpsb2NhbHNBbmRUbXBzTGl2
ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIEJpdFZlY3RvciByZXN1
bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICB1bnNp
Z25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9jYWxzICsgYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5
dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKLSAgICAgICAgICAg
IHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/
IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAg
ICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAgICAgICAgIH0pOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0xNjM1LDggKzE2NTUsOCBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgog
CiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5vZGU7IG5vZGU7KSB7CiAgICAgICAgIGlm
IChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKG1fZm9ybSAh
PSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBp
bnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAgICAgICAgICAgIGlm
IChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5vcGVyYW5kKCkudG9Bcmd1bWVudCgpOwog
ICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fcm9vdFRvQXJndW1lbnRzLmZp
bmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50
cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0xNjU2LDcgKzE2NzYsNyBAQCBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2Rl
LT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBmYWI5Y2YwMmEyNTk3NmVmNDdkMTc5MDVi
YWQ5Y2UwM2UzODJiY2U1Li5mN2ExZDgyMTRjMzAyZDdkOTZhYzJhNzdhMDE4NjZhOWQxMTlmNTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04NDAsMTMgKzg0MCwxMyBA
QCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBpZiBhIHNpbmdsZSBsb2NhbCBpcyBsaXZl
IGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nCiAgICAgLy8g
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5IHF1ZXJ5IG9uZSBsb2NhbC4g
QnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0aGUKICAgICAvLyBsb2NhbHMgbGl2ZSwg
dGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVjaCBzbG93ZXIgdGhhbiBmb3JB
bGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVn
aXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5CeXRlY29kZShPcGVyYW5kLCBD
b2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1
bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlv
dQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBhbmQg
dG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CiAgICAg
Ly8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwgcHJlc3VtZWQgbGl2ZS4gWW91
IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgdG8KICAgICAvLyBhbHNvIGdldCB0aGUg
YXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gY2FsbGluZyBpc0xpdmVJbkJ5dGVj
b2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAg
ICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lkIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBub3QgcmVkdW5kYW50bHkgcmVwb3J0aW5n
IGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBvZiBhIHZhcmFyZ3MKICAgICAg
ICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dzIHRoYXQgYXJndW1lbnRzIGFyZSBsaXZl
IHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAgLTg4MSw2ICs4ODEsMTQgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbcmVsYXRpdmVM
b2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKS5jaGVja3Bv
aW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1UbXBzKCkpOwor
ICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQo
KmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAg
ICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAg
ICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQo
VG1wT3BlcmFuZCwgdG1wKSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTkwNCw5ICs5MTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbm9uLWFyZ3Vt
ZW50IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCisgICAg
Ly8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbG9jYWxzIGFuZCB0bXBzIGxpdmUgcmln
aHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKICAgICAvLyB5b3Ugd2FudCB0byBjb21w
YXJlIHR3byBzZXRzIG9mIGxpdmUgbG9jYWxzIGZyb20gdHdvIGRpZmZlcmVudCBDb2RlT3JpZ2lu
cy4KLSAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CisgICAg
Qml0VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsKIAogICAg
IExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Q
b2ludChDb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0NhbGxlck9yaWdpbikKICAgICB7CkBAIC05
MzgsMTIgKzk0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBMaXZlbmVzc0NhbGN1bGF0
aW9uUG9pbnQ6OkJlZm9yZVVzZTsKICAgICB9CiAgICAgCi0gICAgLy8gVGVsbHMgeW91IGFsbCBv
ZiB0aGUgYXJndW1lbnRzIGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4g
VGhpcyBpcyBhIHNtYWxsCi0gICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExvY2Fsc0xpdmVJbkJ5
dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgor
ICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxpdmUgYXQgdGhlIGdpdmVuIENv
ZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAorICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2Nh
bHNPclRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMg
cHJlc3VtZWQgbGl2ZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQg
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoY29k
ZU9yaWdpbiwgZnVuY3Rvcik7CisgICAgICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRl
Y29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlcG9ydCBh
bGwgYXJndW1lbnRzIGFzIGJlaW5nIGxpdmUuCiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3Vt
ZW50LS07KQpAQCAtMTExNCw2ICsxMTIyLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNr
d2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5
c2lzOworICAgIHVuc2lnbmVkIG1fdG1wczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKICAg
ICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJT
bG90czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHAKaW5kZXggOTlhZWZmY2RjMDVhMTFjNDViMDU3NDEyNTBmNGQyYWViNGUy
MjhjZC4uMjAyZDIyNTA1M2ZhOWRmYmU1YzIzYzY0YmNmOGJlMzg0ZTNlNzY1NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5j
cHAKQEAgLTQ1LDggKzQ1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3Jh
cGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9hYnN0cmFjdFZhbHVlcygqZ3JhcGgu
bV9hYnN0cmFjdFZhbHVlc0NhY2hlKQotICAgICwgbV92YXJpYWJsZXMobV9ncmFwaC5tX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5tX2xvY2FsVmFycykKLSAgICAsIG1fYmxvY2so
MCkKKyAgICAsIG1fdmFyaWFibGVzKE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZCkKKyAgICAsIG1fYmxvY2sobnVsbHB0cikKIHsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCmluZGV4IGJm
NWVhZDE4ZWMxNjQ3ZWUxNjc2Njg4MzU3NDAxZmE3ZmVjNzEyOTkuLjE4NjVlNmExZWZmYzNkYWFl
ZmU1ODRjYTg2MmM0OWJjMzY4NTg1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKQEAgLTE2NywxMyArMTY3LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFibGVzW2luZGV4XSk7CiAg
ICAgfQogCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBBYnN0
cmFjdFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVy
biB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLm9wZXJhbmRJbmRleChvcGVyYW5kKSk7CiAgICAgfQog
ICAgIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsgcmV0dXJuIHRoaXMtPm9wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSk7IH0KLSAgICAKICAgICBB
YnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4g
dmFyaWFibGVBdChtX3ZhcmlhYmxlcy5sb2NhbEluZGV4KGluZGV4KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDNkODQzY2U1OGYyMGI0MTE2
MzM5ZmNkYTk1ODhhZWJhNmI3YThjMmUuLjUzZGI5Y2QxNGNhYzZiNmU2NjgyZWZkZjRiYTc5NDg5
N2NhNWQ1YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCkBAIC04NSw4ICs4NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJh
dG9yKTsKLSAgICBhdXRvIG9zckV4aXRUaHVua0xhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhp
dENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAg
ICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJlSnVtcHM7CkBAIC05Nywx
MyArOTUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogCiAgICAgICAgIGpp
dEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGkpLCAmdm0oKS5vc3JFeGl0SW5kZXgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlUHJvYmVP
U1JFeGl0KCkpIHsKLSAgICAgICAgICAgIEp1bXAgdGFyZ2V0ID0ganVtcCgpOwotICAgICAgICAg
ICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRodW5rTGFiZWxdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHRhcmdldCwgb3Ny
RXhpdFRodW5rTGFiZWwpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CisgICAgICAgIGlu
Zm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOwogICAgIH0KIH0KIApAQCAtNTk1
LDExICs1ODcsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9j
ayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2MKICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkpIHsKKworICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+b3BlcmFuZCgpLmlzVG1w
KCkpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVy
KCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgZW50cnkt
Pm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgT1NSRW50cnlSZXNo
dWZmbGluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNl
dCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCks
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CmluZGV4IDY4Y2E5OGRmNmY1YzRiN2I2MzcyY2MxNTgxOGVjMjU3MjgyZjg5ZDkuLjUwZjFkODkz
ZGEzMDIxMDJiOTVlNzhhYzYwNDM5ZDg2MjM2ZjNjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSkKICAg
ICB7Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0Zv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRh
Z0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgfQogCiAgICAgLy8gQWRk
IGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZl
Q2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA0MmY2OGFkYTMyNDc4YTEx
NzFjZWFkMGY5M2UwOGFjMjVjYTYzMTM0Li40NWVjYjQ2YWEyNDQzYmExYjk1NTcxNmJjMWY0MmE3
MDhhMWEwNDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTYz
LDcgKzYzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBi
b29sIGlzVmFsaWRGbHVzaExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2ln
bmVkIGluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBib29sIGlzVmFsaWRGbHVz
aExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IG1lYW50IHRv
IGJlIGZhc3QuIFdlIGp1c3QgdXNlIGl0IGZvciBhc3NlcnRpb25zLiBJZiB3ZSBnb3QgbGl2ZW5l
c3Mgd3JvbmcsCiAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIGZhbHNlIGZv
ciBhIEZsdXNoIHRoYXQgd2UgaW5zZXJ0LgpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGF1dG8gZmx1c2hJc0RlZmluaXRlbHlJbnZhbGlkID0gWyZdIChCYXNpY0Jsb2NrKiBibG9j
aywgdW5zaWduZWQgaW5kZXgpIHsKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IGZhbHNlOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5kZXg7IGktLTsgKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+
YXQoaSktPmxvY2FsKCkgPT0gb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChibG9jay0+
YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5vcGVyYW5kKCkg
PT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE1LDggKzExNSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2goQmFzaWNCbG9jayog
YmxvY2ssIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQogICAgIHsKICAgICAgICAgSGFuZGxl
ckluZm8qIGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgRmFzdEJp
dFZlY3RvciBsaXZlQXRDYXRjaEhlYWQ7Ci0gICAgICAgIGxpdmVBdENhdGNoSGVhZC5yZXNpemUo
bV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAg
ICAgICBPcGVyYW5kczxib29sPiBsaXZlQXRDYXRjaEhlYWQoMCwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZlRtcHMoKSk7CiAKICAgICAgICAgSGFuZGxlckluZm8qIGNhY2hl
ZEhhbmRsZXJSZXN1bHQ7CiAgICAgICAgIENvZGVPcmlnaW4gY2FjaGVkQ29kZU9yaWdpbjsKQEAg
LTEzMywxMSArMTMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhh
bmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhU
b0NoZWNrKSkgewotICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmZpbGwoZmFsc2UpOwogCiAg
ICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleChoYW5kbGVyLT50YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4
LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2
ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFt
ZSksIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZl
QXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogCiAgICAgICAgICAgICAgICAgICAgIGNhY2hlZEhhbmRsZXJSZXN1bHQgPSBoYW5kbGVy
OwpAQCAtMTU2LDEyICsxNTUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhY2hl
ZEhhbmRsZXJSZXN1bHQ7CiAgICAgICAgIH07CiAKLSAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVB
Y2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2Nh
bHMoKSwgbnVsbHB0cik7CisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1
cnJlbnRCbG9ja0FjY2Vzc0RhdGEoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRUYWls
LCBudWxscHRyKTsKIAogICAgICAgICBhdXRvIGZsdXNoRXZlcnl0aGluZyA9IFsmXSAoTm9kZU9y
aWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIGlmICgob3BlcmFu
ZC5pc0xvY2FsKCkgJiYgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3Bl
cmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKE9wZXJh
bmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8
fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogCiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgaW5kZXgsIG9wZXJhbmQpKTsK
IApAQCAtMTc4LDYgKzE3Nyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2Fs
cygpOyBsb2NhbCsrKQogICAgICAgICAgICAgICAgIGZsdXNoKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGxvY2FsKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcCA9IDA7IHRtcCA8IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCk7ICsrdG1wKQorICAgICAgICAgICAg
ICAgIGZsdXNoKE9wZXJhbmQoVG1wT3BlcmFuZCwgdG1wKSk7CiAgICAgICAgICAgICBmbHVzaChW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkpOwogICAgICAg
ICB9OwogCkBAIC0xOTIsOSArMTkzLDggQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIgJiYgKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+b3Ao
KSA9PSBTZXRBcmd1bWVudE1heWJlKSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQu
aXNMb2NhbCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJh
bmQuaXNBcmd1bWVudCgpKSB7Ci0KKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBu
b2RlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
IHx8IGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgbm9kZUluZGV4LCBvcGVyYW5k
KSk7CiAKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7CkBAIC0y
MDcsNyArMjA3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
bm9kZS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50Qmxv
Y2tBY2Nlc3NEYXRhLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyKSB7CkBAIC0yMTYsOSArMjE2
LDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFT
U0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25z
dGFudCgpKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEu
YXBwZW5kKG9wZXJhbmQpOwogICAgICAgICByZXR1cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vz
c0RhdGEubGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92
SGludFJlbW92YWxQaGFzZS5jcHAKaW5kZXggNzNhM2Q3NWI3NjBiNTJiOTY3NjM3MTMzZDZhMGZl
ZmIwMGViZWQ4Ny4uZmZmOTZiZmNmNjI5ZWI0ZDA1MmU3YjE0MjdiMmI2N2IwNTRjMWEwMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhh
c2UuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3RhdGUuZmlsbChF
cG9jaCgpKTsKICAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAg
ICAgIGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgICAgIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewog
ICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChyZWcpID0gY3VycmVudEVwb2NoOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KSB7Ci0gICAgICAgICAgICAgICAg
RXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkp
OworICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVt
b3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBBdCAiLCBub2RlLCAiOiBjdXJyZW50ID0gIiwgY3VycmVudEVwb2NoLCAiLCBsb2NhbCA9
ICIsIGxvY2FsRXBvY2gsICJcbiIpOwogICAgICAgICAgICAgICAgIGlmICghbG9jYWxFcG9jaCB8
fCBsb2NhbEVwb2NoID09IGN1cnJlbnRFcG9jaCkgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IEVwb2No
KCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKSA9IEVwb2NoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KQpAQCAtMTE2LDE1ICsx
MTYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlSW5kZXgpIHsKICAgICAgICAg
ICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLCBub2RlLAotICAgICAgICAgICAgICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVy
YW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24g
aXMgYSBiaXQgc2xvcHB5IC0gaXQgbWlnaHQgY2xhaW0gdG8ga2lsbCBhIGxvY2FsIGV2ZW4gaWYK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3RpbGwgbGl2ZSBhZnRlci4gV2UgbmVl
ZCB0byBwcm90ZWN0IGFnYWluc3QgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
IW1fc3RhdGUub3BlcmFuZChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9z
dGF0ZS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjog
IiwgcmVnLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChy
ZWcpID0gY3VycmVudEVwb2NoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCBvcGVyYW5kLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSA9IGN1cnJlbnRF
cG9jaDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggMzkxNTkzNzIyOWYyOGE3YWEyZTY1
NWY1MjUxZjk2ZjQwNGUzM2I0Ni4uYjgwMTU1ZTkzNTYyOWRmMmNkZTM5YWI2NDYzNDQwMDQ3MGM3
OGM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTI1MCwxMyArMjUwLDEz
IEBAIHN0cnVjdCBTdGFja0FjY2Vzc0RhdGEgewogICAgIHsKICAgICB9CiAgICAgCi0gICAgU3Rh
Y2tBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgRmx1c2hGb3JtYXQgZm9ybWF0KQot
ICAgICAgICA6IGxvY2FsKGxvY2FsKQorICAgIFN0YWNrQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJh
bmQsIEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgOiBvcGVyYW5kKG9wZXJhbmQpCiAgICAg
ICAgICwgZm9ybWF0KGZvcm1hdCkKICAgICB7CiAgICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbDsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1h
Y2hpbmVMb2NhbDsKICAgICBGbHVzaEZvcm1hdCBmb3JtYXQ7CiAgICAgCkBAIC05MDIsNiArOTAy
LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3Vu
ZHM6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJn
czoKQEAgLTkyMyw5ICs5MjQsMTEgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsK
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAg
ICAgICAgIHJldHVybiBjaGlsZDEoKTsKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAg
ICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAg
ICAgICAgICAgIHJldHVybiBjaGlsZDIoKTsKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAg
ICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKQEAgLTk3Myw5ICs5NzYsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29wSW5m
by5hczxWYXJpYWJsZUFjY2Vzc0RhdGEqPigpLT5maW5kKCk7CiAgICAgfQogICAgIAotICAgIFZp
cnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAgT3BlcmFuZCBvcGVyYW5kKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKKyAgICAgICAgcmV0dXJu
IHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCk7CiAgICAgfQogICAgIAogICAgIFZpcnR1
YWxSZWdpc3RlciBtYWNoaW5lTG9jYWwoKQpAQCAtOTgzLDcgKzk4Niw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwoKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBoYXNVbmxpbmtlZExvY2FsKCkKKyAgICBib29sIGhhc1VubGlua2Vk
T3BlcmFuZCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBF
eHRyYWN0T1NSRW50cnlMb2NhbDoKQEAgLTk5NiwxMCArOTk5LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5saW5rZWRMb2NhbCgpCisg
ICAgT3BlcmFuZCB1bmxpbmtlZE9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1Vu
bGlua2VkTG9jYWwoKSk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vcEluZm8u
YXM8aW50MzJfdD4oKSk7CisgICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZE9wZXJhbmQoKSk7Cisg
ICAgICAgIHJldHVybiBPcGVyYW5kOjpmcm9tQml0cyhtX29wSW5mby5hczx1aW50NjRfdD4oKSk7
CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3RhY2tBY2Nlc3NEYXRhKCkKQEAgLTEzNTAsNyAr
MTM1Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0xvYWRWYXJhcmdzRGF0YSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09IEZvcndh
cmRWYXJhcmdzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09
IEZvcndhcmRWYXJhcmdzIHx8IG9wKCkgPT0gVmFyYXJnc0xlbmd0aDsKICAgICB9CiAgICAgCiAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0RhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IDI0YzczM2QzODcwMjc5ZjRhNTZiNGU2ODhiZjBiZjA2
YWMyNGMxZDQuLmUzZTljMzJmOGQwODEzYTZhZGEyMmFhY2NkMzc0NDJkNGViZDlkM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTc0LDYgKzc0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAg
ICBcCisgICAgLyogVGhlc2UgYXJlIHVzZWQgaW4gU1NBIGZvcm0gdG8gcmVwcmVzZW50IHRvIHRy
YWNrICovXAogICAgIG1hY3JvKFB1dFN0YWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oS2lsbFN0YWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0U3RhY2ssIE5v
ZGVSZXN1bHRKUykgXApAQCAtMjAyLDYgKzIwMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhHZXRCeVZhbFdpdGhUaGlzLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsT3V0
T2ZCb3VuZHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhW
YXJhcmdzTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAg
bWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGb3J3YXJk
VmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dEJ5VmFsRGlyZWN0LCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCmluZGV4IDMyODBmODdhNjI2N2RmMDM0Yzg0ZTMzMTg1MzBjNzQxOWU1NWU5N2UuLjQyNDdk
ZWFlYzdjYmJjZTYwODNhYTg3MzJiOWMyNzdmNWVmZDI4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmNwcApAQCAtMzUsMTEgKzM1LDkgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLW5hbWVzcGFjZSBERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKLX0KIAogY2xhc3MgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1
YmxpYzoKICAgICBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKICAg
ICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMiKQpAQCAtNzUs
OCArNzMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlOiAiKTsKICAgICAg
ICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICAgICAgYmxv
Y2stPmF0KDApLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhyZWcsICIgIik7Cisg
ICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZyhvcGVyYW5kLCAiICIpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgZGF0YUxvZ0xuKCIiKTsKICAgICAgICAgfTsKQEAgLTkxLDcgKzg5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkJlZm9yZSBjaGFuZ2lu
ZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZHVtcEF2YWls
YWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTA2LDcgKzEwNCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwgPSBj
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OwogCi0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2Nr
LT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTEyMCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vz
c29ySW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmls
aXR5QXRIZWFkLnBydW5lQnlMaXZlbmVzcygKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIHN1Y2Nlc3Nvci0+YXQoMCktPm9yaWdpbi5mb3JFeGl0KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJBZnRlciBwcnVuaW5nIEJsb2NrICMiLCBzdWNjZXNzb3ItPmluZGV4
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoc3VjY2Vzc29yKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBCeXRlY29kZUxpdmVuZXNzQXRIZWFkKHN1Y2Nl
c3Nvcik7CkBAIC0yMDgsMjggKzIwNiwyOCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKGRhdGEtPmxvY2FsKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7CisgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkuc2V0Rmx1
c2goZGF0YS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgS2lsbFN0YWNrOiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXRGbHVzaChGbHVzaGVkQXQoQ29uZmxpY3Rp
bmdGbHVzaCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKS5zZXRGbHVzaChGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IEF2YWlsYWJp
bGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+
Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1vdkhpbnQ6
IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9k
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOworICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5z
ZXROb2RlVW5hdmFpbGFibGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNDIsMTUg
KzI0MCwxOCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5v
ZGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAg
IAorCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPQotICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVD
b3VudCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNv
dW50KSA9IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5l
Q291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIHsK
LSAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+bWFj
aGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoZGF0YS0+c3RhcnQgKyBpKSA9CisgICAgICAgICAgICAgICAgQXZhaWxh
YmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgZGF0YS0+bWFjaGluZVN0YXJ0ICsgaSkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI3MiwyMCArMjczLDIwIEBA
IHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBu
b2RlKQogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAg
ICAgICAgLy8gUmVjb3JkIGhvdyB0byByZWFkIGVhY2ggYXJndW1lbnQgYW5kIHRoZSBhcmd1bWVu
dCBjb3VudC4KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudENvdW50ID0KLSAgICAg
ICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAg
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0
KFByb21vdGVkSGVhcExvY2F0aW9uKEFyZ3VtZW50Q291bnRQTG9jLCBub2RlKSwgYXJndW1lbnRD
b3VudCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBjYWxsZWUgPSBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0
KFByb21vdGVkSGVhcExvY2F0aW9uKEFyZ3VtZW50c0NhbGxlZVBMb2MsIG5vZGUpLCBjYWxsZWUp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOyArK2kpIHsKICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eSBhcmd1bWVudCA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoCi0g
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoaSkpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFBy
b21vdGVkSGVhcExvY2F0aW9uKEFyZ3VtZW50UExvYywgbm9kZSwgaSksIGFyZ3VtZW50KTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA0
NDk3MzA4MzljOTQ0NTA3MjU3MWE1YjBjN2M5NGI4NDNlODkwZGM3Li5lZTVmN2YzZDY4ZTJlYTBl
YjFkZGVmMTM5ZmY5MzliNmFkODlkOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcApAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
CiAgICAgCiAgICAgLy8gNykgRml4IHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgdGhlIHJpZ2h0IGNv
ZGUgYmxvY2suCiAgICAgCi0gICAgKmJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAx
IC0gQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSA9IGNvZGVCbG9jazsKKyAgICAqYml0d2lzZV9j
YXN0PENvZGVCbG9jayoqPihwaXZvdCAtIChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKyAxKSkg
PSBjb2RlQmxvY2s7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAg
ICAgZGF0YUxvZ0YoIiAgICBPU1IgcmV0dXJuaW5nIGRhdGEgYnVmZmVyICVwLlxuIiwgc2NyYXRj
aCk7CkBAIC0zODIsMTAgKzM4MiwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAg
YXV0byBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChj
YWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgQVNTRVJUKGluc3RydWN0aW9uLT5pczxP
cENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9i
dWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIg
PSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jayku
bV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNW
YWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCkuaXNMb2NhbCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBkYXRhQnVmZmVyW2luZGV4XSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihw
cm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCBk
Yzc2YmNiYWVkNDFlZWUwNjNkZmRiZWE4NDUwNjY1NTNkMGNiNGQ2Li42MDk2ODY2M2I2NGMyYjY4
NTRlNDYxNjFmOTQ5OTQ2NTdlMWFlZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTAy
LDEwICsxMDIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICBsb2NhbHNbbG9jYWxdID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICBt
X2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgb3Jp
Z2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkp
OworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUo
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJ
bmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52
aXJ0dWFsUmVnaXN0ZXIoKSksCiAgICAgICAgICAgICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7
CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5k
ZXggMThjNjQxNDc5MzQyNDY5YjQxY2E4Zjk4ZjMwOGIzYTRjOTMzYmE5OC4uMDVkZTk1OGNhZWVm
MWI4ZjA5ZTMyZDA5N2E4ZmUzMmQ2Nzc0MjAxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBc3NlbWJseUhl
bHBlcnMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgorI2luY2x1ZGUgIkNoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCkBAIC00Nyw4OTUgKzQ4
LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBQcm9iZSBiYXNl
ZCBPU1IgRXhpdC4KLQotdXNpbmcgQ1BVU3RhdGUgPSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBD
b250ZXh0ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2luZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQot
c3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayos
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHBy
aW50T1NSRXhpdChDb250ZXh0JiwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0
Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVGb3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNv
dXJjZSBzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBK
U1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgc3RkOjptZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50
OF90Kj4oc291cmNlLmJhc2UoKSkgKyBzb3VyY2Uub2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmRlY29kZShjcHUuZ3ByPEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3By
KCkpKTsKLSNlbHNlCi0gICAgaWYgKHNvdXJjZS5oYXNLbm93blRhZygpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZShzb3VyY2UudGFnKCksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRH
UFIoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQ
UigpKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0K
LQotI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi0vLyBCYXNlZCBv
biBBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2
b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQo
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwot
ICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAg
VUNQVVJlZ2lzdGVyKiBwaHlzaWNhbFN0YWNrRnJhbWUgPSBjb250ZXh0LmZwPFVDUFVSZWdpc3Rl
cio+KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykg
ewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwot
ICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBUaGUgY2FsbGVlIHNhdmVkIHZhbHVlcyBjb21l
IGZyb20gdGhlIG9yaWdpbmFsIHN0YWNrLCBub3QgdGhlIHJlY292ZXJlZCBzdGFjay4KLSAgICAg
ICAgLy8gSGVuY2UsIHdlIHJlYWQgdGhlIHZhbHVlcyBkaXJlY3RseSBmcm9tIHRoZSBwaHlzaWNh
bCBzdGFjayBtZW1vcnkgaW5zdGVhZCBvZgotICAgICAgICAvLyBnb2luZyB0aHJvdWdoIGNvbnRl
eHQuc3RhY2soKS4KLSAgICAgICAgQVNTRVJUKCEoZW50cnkub2Zmc2V0KCkgJSBzaXplb2YoVUNQ
VVJlZ2lzdGVyKSkpOwotICAgICAgICBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBw
aHlzaWNhbFN0YWNrRnJhbWVbZW50cnkub2Zmc2V0KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKV07
Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVl
U2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiBjb250
ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQu
c3RhY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
OwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0
ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVu
c2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFNh
dmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBzdGFjay5zZXQoY29udGV4dC5mcCgpLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5ncHI8
VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5ncHIoKSkpOwotICAgIH0KLX0KLQotLy8gQmFzZWQg
b24gQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2
bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxs
Q2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2
ZXMtPnNpemUoKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJl
Y29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICBVQ1BVUmVnaXN0ZXIqIGNhbGxlZVNhdmVCdWZm
ZXIgPSByZWludGVycHJldF9jYXN0PFVDUFVSZWdpc3Rlcio+KGVudHJ5UmVjb3JkLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzQnVmZmVyKTsKLQotICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAg
ICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIHNpemVfdCB1aW50cHRyT2Zmc2V0ID0gZW50cnkub2Zmc2V0
KCkgLyBzaXplb2YoVUNQVVJlZ2lzdGVyKTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BS
KCkpCi0gICAgICAgICAgICBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSkgPSBjYWxsZWVT
YXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdOwotICAgICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgY29udGV4dC5mcHIoZW50cnkucmVnKCkuZnByKCkpID0gYml0d2lz
ZV9jYXN0PGRvdWJsZT4oY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XSk7Ci0jZWxzZQot
ICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBv
cnQgY2FsbGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0
ZWN0dXJlcwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRp
ZgotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKS4KLXN0YXRpYyB2
b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4
dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotICAgIGF1
dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwotCi0gICAgVk1FbnRyeVJlY29yZCogZW50cnlS
ZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxl
ZVNhdmVCdWZmZXIgPSBlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQot
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2
bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCBkb250Q29weVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJl
Z2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udENvcHlS
ZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVT
YXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5ncHI8VUNQVVJlZ2lzdGVyPihlbnRy
eS5yZWcoKS5ncHIoKSkpOwotICAgICAgICBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250
ZXh0LmZwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmZwcigpKSk7Ci0jZWxzZQotICAgICAg
ICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xOTMyNzU+IHN1cHBvcnQgY2Fs
bGVlLXNhdmVkIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJl
cwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAg
ICAgICB9Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZl
T3JDb3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZl
c0ZvcihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lz
dGVyIG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9vbCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsK
LSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVl
U2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNl
dCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2Fs
bGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsK
LSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAg
ICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICB1aW50cHRyX3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0g
ICAgICAgIGlmICh3YXNDYWxsZWRWaWFUYWlsQ2FsbCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdl
dChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5n
ZXQ8dWludHB0cl90PihlbnRyeS5vZmZzZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQot
ICAgICAgICBmcmFtZS5zZXQob2Zmc2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSAr
IGVudHJ5Lm9mZnNldCgpLCBzYXZlZFJlZ2lzdGVyVmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8v
IG5vdCBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQg
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2
b2lkIHNhdmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMg
dm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
Q29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2Fs
bGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkg
eyB9Ci0KLSNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQot
c3RhdGljIEpTQ2VsbCogY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBj
b250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAg
IFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0Rl
ZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsK
LQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVk
IGNhcGFjaXR5ID0gc3RkOjptYXgobGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkgLSAxKSk7Ci0gICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQg
PSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKLSAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsK
LQotICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBjYWxsZWUpOwotCi0gICAgdm9pZCogZnJhbWVC
YXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFzZSwg
Y29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCi0g
ICAgICAgIHJlc3VsdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpLCBmcmFtZS5hcmd1bWVudChpKSk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgSlNDZWxsKiBjcmVhdGVDbG9uZWRB
cmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBp
bnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4o
KTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGlu
ZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9u
ZWRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAotICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LT5jbG9u
ZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVlLCBsZW5ndGgpOwotCi0gICAgdm9pZCogZnJh
bWVCYXNlID0gY29udGV4dC5mcDxSZWdpc3Rlcio+KCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwotICAgIEZyYW1lIGZyYW1lKGZyYW1lQmFz
ZSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTsp
Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5h
cmd1bWVudChpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJl
c3RvcmVBcmd1bWVudHMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERG
Rzo6SklUQ29kZSogZGZnSklUQ29kZSwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9w
ZXJhbmRzKQotewotICAgIEZyYW1lIGZyYW1lKGNvbnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygp
KTsKLQotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1l
bnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7
Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7
Ci0KLSAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpcmVjdEFyZ3VtZW50c1Ro
YXRXZXJlTm90Q3JlYXRlZAotICAgICAgICAgICAgJiYgcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0g
Q2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwotICAgICAgICBh
dXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOwotICAgICAgICBp
ZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZyYW1lLm9wZXJhbmQoaXRlci0+dmFsdWUpKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPQotICAgICAgICAgICAgZGZnSklUQ29kZS0+bWluaWZpZWRE
RkcuYXQoaWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsKLQotICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7
Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBzdGFja09mZnNldCA9
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0YWNrT2Zmc2V0ID0gMDsKLQotICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7Ci0gICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnJhbWUub3BlcmFuZChz
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkuYXNDZWxsKCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7Ci0KLSAgICAgICAgaW50
MzJfdCBhcmd1bWVudENvdW50OwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGZy
YW1lLm9wZXJhbmQ8aW50MzJfdD4oc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50LCBQYXlsb2FkT2Zmc2V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJndW1l
bnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0K
LSAgICAgICAgSlNDZWxsKiBhcmd1bWVudHNPYmplY3Q7Ci0gICAgICAgIHN3aXRjaCAocmVjb3Zl
cnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1
bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxs
ZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xv
bmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJndW1lbnRzT2Jq
ZWN0ID0gY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ss
IGlubGluZUNhbGxGcmFtZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShhcmd1bWVudHNPYmplY3QpKTsKLQotICAgICAgICBh
bHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7Ci0gICAgfQotfQotCi0v
LyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBleHRyYSBpbml0aWFsaXphdGlvbnMgdGhhdCBu
ZWVkIHRvIGJlIGRvbmUgaW4gb3JkZXIKLS8vIG9mIG1vc3QgbGlrZWx5IG5lZWRlZCAobG93ZXIg
ZW51bSB2YWx1ZSkgdG8gbGVhc3QgbGlrZWx5IG5lZWRlZCAoaGlnaGVyIGVudW0gdmFsdWUpLgot
Ly8gRWFjaCBsZXZlbCBpbml0aWFsaXphdGlvbiBpbmNsdWRlcyB0aGUgcHJldmlvdXMgbG93ZXIg
ZW51bSB2YWx1ZSAoc2VlIHVzZSBvZiB0aGUKLS8vIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2
YWx1ZSBiZWxvdykuCi1lbnVtIGNsYXNzIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB7Ci0gICAg
Tm9uZSwKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5LAotICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwK
LSAgICBBcnJheVByb2ZpbGVVcGRhdGUsCi0gICAgT3RoZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6
ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4
dC5hcmc8Vk0qPigpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwot
ICAgIEFTU0VSVCgmY2FsbEZyYW1lLT5kZXByZWNhdGVkVk0oKSA9PSAmdm0pOwotICAgIGF1dG8m
IGNwdSA9IGNvbnRleHQuY3B1OwotCi0gICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKSB7Ci0gICAg
ICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0aW1pemVkIGNvZGUuIFNvLCB0aGVyZSdzIG5v
IGxvbmdlciBhbnkgb3B0aW1pemVkCi0gICAgICAgIC8vIGNvZGUgcnVubmluZyB0aGF0IGV4cGVj
dHMgbm8gR0MuCi0gICAgICAgIHZtLmhlYXAuc2V0RXhwZWN0RG9lc0dDKHRydWUpOwotICAgIH0K
LQotICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRjaCkgewotICAgICAgICBjYWxsRnJhbWUgPSB2
bS5jYWxsRnJhbWVGb3JDYXRjaDsKLSAgICAgICAgY29udGV4dC5mcCgpID0gY2FsbEZyYW1lOwot
ICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKLQotICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxl
IHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRu
J3QKLSAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRl
ZmVyR0Modm0uaGVhcCk7Ci0KLSAgICB1aW50MzJfdCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5k
ZXg7Ci0gICAgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZygpOwotICAgIE9TUkV4aXQmIGV4aXQgPSBkZmdKSVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRl
eF07Ci0KLSAgICBBU1NFUlQoIXZtLmNhbGxGcmFtZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09
IEdlbmVyaWNVbndpbmQpOwotICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNj
b3BlLmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKTsKLQotICAgIGlm
IChVTkxJS0VMWSghZXhpdC5leGl0U3RhdGUpKSB7Ci0gICAgICAgIEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBFeHRyYUluaXRpYWxpemF0aW9uTGV2
ZWw6Ok5vbmU7Ci0KLSAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9j
ayBvbmNlIGZvciBlYWNoIE9TUkV4aXQgcmVjb3JkLiBUaGUgY29tcHV0ZWQKLSAgICAgICAgLy8g
cmVzdWx0cyB3aWxsIGJlIGNhY2hlZCBpbiB0aGUgT1NSRXhpdFN0YXRlIHJlY29yZCBmb3IgdXNl
IG9mIHRoZSByZXN0IG9mIHRoZQotICAgICAgICAvLyBleGl0IHJhbXAgY29kZS4KLQotICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZUFsdGVy
bmF0aXZlKCk7Ci0gICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGlu
ZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSog
cmVjb3ZlcnkgPSBudWxscHRyOwotICAgICAgICBpZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0g
VUlOVF9NQVgpIHsKLSAgICAgICAgICAgIHJlY292ZXJ5ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0
aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhdOwotICAgICAgICAgICAgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpKQotICAg
ICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAg
ICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghIWV4
aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmls
ZSkKLSAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQ
cm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8
fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpIHsKLSAgICAgICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAg
ICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVC
bG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29k
ZUJsb2NrKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9j
ay0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQotICAgICAgICAgICAgICAgICAgICBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGludDMyX3QgYWN0aXZlVGhyZXNob2xkID0gYmFzZWxpbmVD
b2RlQmxvY2stPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKCkpOwotICAgICAgICBkb3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQg
PSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0FuZENvbnZlcnRUb0ludChhY3RpdmVUaHJlc2hv
bGQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGFkanVzdGVkVGhyZXNob2xk
ID4gMCk7Ci0gICAgICAgIGFkanVzdGVkVGhyZXNob2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3Vu
dGVyOjpjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVk
VGhyZXNob2xkKTsKLQotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNl
bGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3Jp
Z2luLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRp
b25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7
Ci0gICAgICAgIGlmIChleGl0VG9MTEludCkgewotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2Nr
Rm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0g
TExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKLSAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAg
ICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVN
YXAgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCk7Ci0gICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChjb2Rl
TG9jYXRpb24pOwotICAgICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUg
cmVjb3Zlcmllcy4KLSAgICAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0g
ICAgICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5z
OwotICAgICAgICBkZmdKSVRDb2RlLT52YXJpYWJsZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNv
ZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0
Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzLCAmdW5kZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAg
ICAgcHRyZGlmZl90IHN0YWNrUG9pbnRlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50
Rm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0g
YWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJs
b2NrLCBvcGVyYW5kcywgV1RGTW92ZSh1bmRlZmluZWRPcGVyYW5kU3BhbnMpLCByZWNvdmVyeSwg
c3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJlc2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBq
dW1wVGFyZ2V0LCBhcnJheVByb2ZpbGUsIGV4aXRUb0xMSW50KSk7Ci0KLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewotICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFi
YXNlJiBkYXRhYmFzZSA9ICp2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0gICAgICAgICAgICBQ
cm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKLQotICAgICAgICAgICAgUHJvZmlsZXI6
Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0KAotICAgICAg
ICAgICAgICAgIGV4aXRJbmRleCwgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2Rl
QmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luKSwKLSAgICAgICAgICAgICAgICBleGl0Lm1fa2luZCwg
ZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZhbGlkYXRpb24pOwotICAgICAgICAgICAgZXhp
dC5leGl0U3RhdGUtPnByb2ZpbGVyRXhpdCA9IHByb2ZpbGVyRXhpdDsKLSAgICAgICAgICAgIGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpPdGhlcik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAg
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgZXhpdC5l
eGl0U3RhdGUtPmV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9w
dGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nRigiREZH
IE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0g
ICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRh
dGEoKSwKLSAgICAgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9D
U3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdu
b3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVyYW5kcykpLmRhdGEoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBPU1JFeGl0U3RhdGUmIGV4aXRTdGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5n
ZXQoKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gZXhpdFN0YXRlLmJhc2Vs
aW5lQ29kZUJsb2NrOwotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGlu
ZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0KLSAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYg
b3BlcmFuZHMgPSBleGl0U3RhdGUub3BlcmFuZHM7Ci0gICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJh
bmRTcGFuPiYgdW5kZWZpbmVkT3BlcmFuZFNwYW5zID0gZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJh
bmRTcGFuczsKLQotICAgIGNvbnRleHQuc3AoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBl
eGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zmc2V0OwotCi0gICAgLy8gVGhlIG9ubHkgcmVhc29uIGZv
ciB1c2luZyB0aGlzIGRvIHdoaWxlIGxvb3AgaXMgc28gd2UgY2FuIGJyZWFrIG91dCBtaWR3YXkg
d2hlbiBhcHByb3ByaWF0ZS4KLSAgICBkbyB7Ci0gICAgICAgIGF1dG8gZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsID0gc3RhdGljX2Nhc3Q8RXh0cmFJbml0aWFsaXphdGlvbkxldmVsPihleGl0U3Rh
dGUuZXh0cmFJbml0aWFsaXphdGlvbkxldmVsKTsKLQotICAgICAgICBpZiAoZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsID09IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6
IFNwZWN1bGF0aW9uUmVjb3ZlcnkKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0
aW9uIHJlY292ZXJ5IGZpcnN0IGJlY2F1c2UgYXJyYXkgcHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9m
aWxpbmcKLSAgICAgICAgLy8gbWF5IHJlbHkgb24gYSB2YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBI
b3dldmVyLCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGF0IGl0IGlzIGxpa2VseQotICAgICAgICAvLyB0
byBoYXZlIGEgcmVjb3ZlcnkgdmFsdWUuIFNvLCB3ZSdsbCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VM
WS4KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVj
b3Zlcnk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShyZWNvdmVyeSkpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFk
ZDoKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1
aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+
c3JjKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgot
ICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAw
MDAwMDBVOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlh
dGU6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3By
PHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIHJlY292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkg
PSBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIF4gSlNWYWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRp
ZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVj
dWxhdGlvblJlY292ZXJ5KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4g
ZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogVmFsdWVQcm9maWxlVXBkYXRlCi0gICAgICAgIEpT
VmFsdWUgcHJvZmlsZWRWYWx1ZTsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2Up
IHsKLSAgICAgICAgICAgIHByb2ZpbGVkVmFsdWUgPSBqc1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pz
VmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgaWYgKE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgcHJvZmls
ZS5yZXBvcnRWYWx1ZShwcm9maWxlZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQ
cm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0
cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogQXJyYXlQcm9maWxlVXBkYXRlCi0gICAgICAgIGlmIChB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGV4aXRTdGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghIWV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAgIEFT
U0VSVChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGlu
Z1R5cGUpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZSwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJvZmlsZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5w
dHIoKTsKLSAgICAgICAgICAgIGJvb2wgZG9Qcm9maWxlID0gIWluc3RydWN0aW9uLT5pczxPcEdl
dEJ5SWQ+KCkgfHwgaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKS5tZXRhZGF0YShwcm9maWxl
ZENvZGVCbG9jaykubV9tb2RlTWV0YWRhdGEubW9kZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5n
dGg7Ci0gICAgICAgICAgICBpZiAoZG9Qcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBwcm9maWxlZFZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwot
ICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+b2JzZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1v
ZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgLy8gQmVnaW4gRXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogT3RoZXIKLSAgICAgICAgaWYg
KFVOTElLRUxZKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpKSB7Ci0gICAgICAgICAgICAv
LyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBo
ZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAgICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVz
dG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAgICAgICAgIHJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsK
LSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZwKCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAg
ICAgICAgICBleGl0U3RhdGUucHJvZmlsZXJFeGl0LT5pbmNDb3VudCgpOwotCi0gICAgICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgcHJp
bnRPU1JFeGl0KGNvbnRleHQsIHZtLm9zckV4aXRJbmRleCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxl
IChmYWxzZSk7IC8vIEVuZCBleHRyYSBpbml0aWFsaXphdGlvbi4KLQotICAgIEZyYW1lIGZyYW1l
KGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVCghKGNvbnRleHQuZnA8dWlu
dHB0cl90PigpICYgMHg3KSk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEFTU0VSVChjcHUu
Z3ByPGludDY0X3Q+KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1i
ZXJUYWcpOwotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om5vdENlbGxNYXNr
UmVnaXN0ZXIpID09IEpTVmFsdWU6Ok5vdENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgLy8gRG8g
YWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRo
ZSBzdGFjay4KLSAgICAvLyBOb3RlOiB3ZSBuZWVkIHRvIHJlY292ZXIgdmFsdWVzIGJlZm9yZSBy
ZXN0b3JpbmcgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzIGJlbG93Ci0gICAgLy8gYmVjYXVzZSB0aGUg
cmVjb3ZlcnkgbWF5IHJlbHkgb24gdmFsdWVzIGluIHNvbWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0
ZXJzLgotCi0gICAgaW50IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRp
Y19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUo
KTsKLSAgICBzaXplX3QgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFu
ZFNwYW5zLnNpemUoKTsKLQotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsK
LSAgICBzaXplX3QgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7
Ci0gICAgaWYgKG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgbmV4dFVuZGVmaW5l
ZE9wZXJhbmRJbmRleCA9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3Bhbklu
ZGV4XS5maXJzdEluZGV4OwotCi0gICAgSlNWYWx1ZSB1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgp
OwotICAgIGZvciAoc2l6ZV90IHNwYW5JbmRleCA9IDA7IHNwYW5JbmRleCA8IG51bVVuZGVmaW5l
ZE9wZXJhbmRTcGFuczsgKytzcGFuSW5kZXgpIHsKLSAgICAgICAgYXV0byYgc3BhbiA9IHVuZGVm
aW5lZE9wZXJhbmRTcGFuc1tzcGFuSW5kZXhdOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSBz
cGFuLm1pbk9mZnNldDsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSBmaXJzdE9mZnNldCArIHNw
YW4ubnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLSAgICAgICAgZm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RP
ZmZzZXQ7IG9mZnNldCA8IGxhc3RPZmZzZXQ7ICsrb2Zmc2V0KQotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvZmZzZXQsIHVuZGVmaW5lZCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mT3BlcmFuZHM7ICsraW5kZXgpIHsKLSAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChp
bmRleCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4ID09IG5leHRVbmRlZmluZWRPcGVy
YW5kSW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRleCArPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNb
bmV4dFVuZGVmaW5lZFNwYW5JbmRleCsrXS5udW1iZXJPZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAg
ICAgICBpZiAobmV4dFVuZGVmaW5lZFNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFu
cykKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVk
T3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51
bWJlck9mT3BlcmFuZHM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpbnQg
b3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKLQotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwg
Y3B1LmZwcjxKU1ZhbHVlPihyZWNvdmVyeS5mcHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZ3ByPEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAg
ICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4o
cmVjb3ZlcnkudGFnR1BSKCkpLCBjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIo
KSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVk
Q2VsbEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVl
KGNwdS5ncHI8SlNDZWxsKj4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZENlbGwoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFu
SW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihj
cHUuZ3ByPGJvb2w+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k
aWYKLQotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1l
LT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNl
bHNlCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCku
cGF5bG9hZCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
VW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDMyKCkpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY2FzZSBVbmJveGVk
SW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1
ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5LmdwcigpKSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0
QW1vdW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEludDUyRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1Zh
bHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVu
Ym94ZWRJbnQ1MigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94
ZWRTdHJpY3RJbnQ1MkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1
MigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hl
ZERvdWJsZUluRlBSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5m
cHIoKSkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERvdWJsZURpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWREb3VibGUoKSkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIHJlY292ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0
ZWQ6Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAg
ICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgeWV0LgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlc3RvcmUg
dGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5kIHRoZW4gc2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUg
SklUIHVzZXMuCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGNvZGVCbG9jayk7
Ci0gICAgc2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY3B1LmdwcihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rl
cikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsK
LSAgICBjcHUuZ3ByKEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8
SlNDOjpVQ1BVUmVnaXN0ZXI+KEpTVmFsdWU6Ok5vdENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhh
dCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNvdmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVj
b3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50cwotICAgIC8vIHJlY292ZXJpZXMgZG9uJ3Qg
cmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhlci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNz
dW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVmZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9j
YWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlz
IHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQg
dGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBtYXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMK
LSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29wZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291
bGRuJ3QgZG8gdGhhdC4KLQotICAgIERGRzo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoY29udGV4dCwg
Y29kZUJsb2NrLCBkZmdKSVRDb2RlLCBvcGVyYW5kcyk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9s
ZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25v
dwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRo
ZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAgIC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNh
bGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8v
IHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5v
dGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhh
dCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAgLy8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVy
Zm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAotICAg
IC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4g
QnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdn
cmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBp
cyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0g
ICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQg
Z2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhl
IGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVy
Zm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAv
LyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBl
bnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAg
Ly8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1
bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQg
aW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVu
c3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8v
IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0
IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NS
IGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwg
ZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBw
ZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRo
ZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAgIC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2ls
bCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRv
ZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0
IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3Vs
YXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNv
IHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBz
aWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMg
KHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVl
biBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0g
ICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAg
Ly8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotCi0gICAgaWYgKFVOTElL
RUxZKGNvZGVCbG9jay0+dXBkYXRlT1NSRXhpdENvdW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRp
bWl6ZShleGl0U3RhdGUpID09IENvZGVCbG9jazo6T3B0aW1pemVBY3Rpb246OlJlb3B0aW1pemVO
b3cpKQotICAgICAgICB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coYmFzZWxpbmVDb2RlQmxvY2ss
IGNvZGVCbG9jaywgJmV4aXQpOwotCi0gICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0
LCBiYXNlbGluZUNvZGVCbG9jaywgZXhpdCk7Ci0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNv
bnRleHQsIHZtLCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLX0KLQotc3Rh
dGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxv
Y2sqIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkK
LXsKLSAgICBhdXRvJiBjcHUgPSBjb250ZXh0LmNwdTsKLSAgICBGcmFtZSBmcmFtZShjcHUuZnAo
KSwgY29udGV4dC5zdGFjaygpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUg
aG9sZXMgb24gdGhlIHN0YWNrIHdoZW4gcGVyZm9ybWluZyBhbiBPU1IgZXhpdAotICAgIC8vIGlu
IHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCi0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICBm
cmFtZS5zZXRPcGVyYW5kPENvZGVCbG9jayo+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0
ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9y
aWdpbjsKLSAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmln
aW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewot
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlu
bGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqY29kZU9yaWdp
biwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBJbmxpbmVDYWxsRnJhbWU6
OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kOwotICAgICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVy
ID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxl
ckNhbGxLaW5kKTsKLSAgICAgICAgdm9pZCogY2FsbGVyRnJhbWUgPSBjcHUuZnAoKTsKLQotICAg
ICAgICBib29sIGNhbGxlcklzTExJbnQgPSBmYWxzZTsKLQotICAgICAgICBpZiAoIXRydWVDYWxs
ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAg
ICAgICAgICAgIHZvaWQqIHJldHVyblBDID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJl
dHVyblBDT2Zmc2V0KCkpOwotI2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICB2b2lkKiBvbGRF
bnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwot
ICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGlu
ZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAg
ICByZXR1cm5QQyA9IHJldGFnQ29kZVB0cihyZXR1cm5QQywgYml0d2lzZV9jYXN0PFB0clRhZz4o
b2xkRW50cnlTUCksIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgot
ICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zm
c2V0KCksIHJldHVyblBDKTsKLSAgICAgICAgICAgIGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZv
aWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91
dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2Fs
bEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAg
ICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJ
bnQpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0g
ICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBjcHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2Fs
bGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBz
aXplb2Yodm9pZCopOwotICAgICAgICAgICAganVtcFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRh
cmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAg
ICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwg
anVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQq
PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNh
bGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0gICAgICAgIC8vIElmIHRoaXMgaW5s
aW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAgICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250
ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJlYWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJh
bWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRl
eHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQotICAgICAgICBpZiAoY2FsbGVySXNMTEludCkg
ewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIs
IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25z
dCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9j
aywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVD
YWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zm
c2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
KTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBh
eWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOwotICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1l
LnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlLCBKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwot
I2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0g
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsK
LSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNl
dCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRo
ZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3Bs
ZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlm
IChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJp
dHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91
dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVj
dGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJf
dD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMp
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQm
IGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCi17Ci0gICAgT1NSRXhpdFN0YXRlKiBleGl0U3Rh
dGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLQotICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsg
Ly8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhwZWN0cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNo
YW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2UuCi0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
YmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgLy8gV2UgYmFycmllciBhbGwgaW5saW5lZCBmcmFt
ZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50IGlubGluZSBzdGFjayAtLQotICAgIC8vIGJl
Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxpbmVkIGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVl
IHByb2ZpbGUgdGhhdAotICAgIC8vIHdlJ2xsIHVwZGF0ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBj
YXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlmIGJvdGgKLSAgICAvLyBhIGFuZCBiIGFyZSBp
bmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBiIGR1ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQK
LSAgICAvLyBmcm9tIGEuCi0gICAgLy8gRklYTUU6IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVCbG9jayBvd25zCi0gICAgLy8gdGhlIHZhbHVl
IHByb2ZpbGUuCi0gICAgSW5saW5lQ2FsbEZyYW1lU2V0KiBpbmxpbmVDYWxsRnJhbWVzID0gY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpOwot
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykKLSAgICAgICAgICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
OwotICAgIH0KLQotICAgIGF1dG8qIGV4aXRJbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAoZXhpdElubGluZUNhbGxGcmFtZSkKLSAg
ICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRJbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQotICAgIHZv
aWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1bXBUYXJnZXQ7Ci0gICAgQVNTRVJUKGp1bXBU
YXJnZXQpOwotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAg
Ly8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZy
YW1lRm9yQ2F0Y2guCi0gICAgICAgIHZtLmNhbGxGcmFtZUZvckNhdGNoID0gY29udGV4dC5mcDxD
YWxsRnJhbWUqPigpOwotICAgIH0KLQotICAgIHZtLnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8
Q2FsbEZyYW1lKj4oKTsKLQotICAgIGlmIChleGl0U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKLSAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleCkucHRyKCk7Ci0KLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVy
czo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tG
b3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNv
bnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAg
IGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpKTsKLSNlbHNl
Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1Y3Rpb24pOwotI2VuZGlmCi0KLSAgICAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICB2bS50YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudEluc3RydWN0aW9uOwotICAgIH0KLQotICAgIGNv
bnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKLX0K
LQotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9z
ckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9
IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAgICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tp
bmQ7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKLQotICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4g
IiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAi
ICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0
aCAiKTsKLSAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKLSAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigp
LAotICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5h
dGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIG9wdGlt
aXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRhdGFMb2coIm5vIGFsdGVybmF0aXZlIGNv
ZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0aXNvbmVkKSIpOwotICAgIGRhdGFMb2coIiwg
b3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCksICJcbiIpOwot
ICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAg
ICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygi
ICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIsIFJhd1BvaW50ZXIoY29udGV4dC5ncHI8dm9p
ZCo+KGdwcikpKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAg
RlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgRlBSUmVnIGZwciA9IEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0LmZwck5h
bWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0X3QgYml0cyA9IGNvbnRleHQuZnByPHVpbnQ2
NF90PihmcHIpOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBjb250ZXh0LmZwcihmcHIpOwotICAg
ICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2
YWx1ZSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLS8vIEpJVCBiYXNlZCBPU1Ig
RXhpdC4KLQogT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBT
cGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3Zl
cnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9vcmlnaW4uZm9yRXhpdCwg
aml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5tX29yaWdpbi53YXNIb2lzdGVkKQogICAgICwg
bV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCkBAIC05NTgsMTUgKzcwLDE4IEBAIENvZGVM
b2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVw
YXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJh
bmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgaW50PiBhbHJlYWR5QWxsb2NhdGVkQXJn
dW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4KKyAg
ICBIYXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxSZWdpc3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCiAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRl
eCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2lu
ZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgp
ICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKwogICAgICAgICBNaW5pZmllZElEIGlkID0gcmVjb3Zlcnkubm9kZUlEKCk7CiAgICAg
ICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZmluZChpZCk7CiAgICAg
ICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZW5kKCkpIHsKQEAgLTk4
Nyw3ICsxMDIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVs
cGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAg
ICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwKKyAgICAgICAgICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKHN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC05OTcs
NyArMTEyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBl
cnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAg
ICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSksCiAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUo
CkBAIC0xMDIzLDcgKzEzOCw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMo
Q0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGpp
dC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5h
ZGQoaWQsIG9wZXJhbmQpOworICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChp
ZCwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1
ODEsODQgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0m
IHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9u
SGFuZGxlcigpKQogICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmln
aW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBG
SVhNRTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBhIHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUg
c2lkZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBvdGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9y
PFZhbHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5kcy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAg
ICAgICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRzLnRtcChpKTsKKworICAgICAgICBWTSogdm1Q
dHIgPSAmdm07CisgICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMu
dG1wSW5kZXgoMCk7CisgICAgICAgIGppdC5wcm9iZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1
ZXMpXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lk
ZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXpl
X3QgdG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2lu
dE9TUkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVj
b2RlSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYg
cmVjb3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUgRlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFs
bCB0aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tp
XSA9IEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3Bs
YWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbklu
R1BSOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF0pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2lkZVN0YXRlLT50bXBzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19j
YXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF0pKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBD
ZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazogeworICAgICAgICAg
ICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zm
c2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1v
dmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2Rl
T3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBj
b250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4g
JiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2lu
LT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAg
ICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2Fs
bEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxG
cmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNv
ZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAg
ICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAg
fSk7CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBz
dG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7
Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19j
YXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFu
ZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworICAg
ICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNf
Y2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNr
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcw
OGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJj
MWEyMzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAt
MTUwLDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAog
ICAgIGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2Fs
bEZyYW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4
dCYpOwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFi
bGVKdW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+
IG1fY29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmlu
ZGV4IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjkyYTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0
MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYgKzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFz
ZSB7CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gR2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5nVG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVj
a3BvaW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklU
VHlwZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCAyZmYzZWE4YjVmYmI2ZjNmMjcy
MWQ1MDI0NDU2Mjk4YjA4NGQ1MTE1Li42Mjc2YTU5NThlODAwNzZhYWJkNzgxNjM3YmIzMTBjYWVl
ZjIxZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNp
bmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKQEAgLTE0Myw2ICsxNDYsOSBAQCB2b2lkKiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeQogewogICAgIGNh
bGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OwogCisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgcmV0
dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRf
ZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKwogICAg
IHZvaWQqIGp1bXBUYXJnZXQ7CiAKICAgICBpZiAoY2FsbGVySXNMTEludCkgewpAQCAtMjM4LDcg
KzI0NCw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0
YWlsIGNhbGxzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDc1MTEKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0LmJhc2VsaW5l
Q29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwotICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsKKyAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5i
YXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaykpOwogCiAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsK
ICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYg
Y29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewpAQCAtMzA1
LDMzICszMTEsMzQgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJG
cmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJhc2VsaW5lQ29kZUJsb2NrLT5ieXRl
Y29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRzKCk7Cisg
ICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9u
Qml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBq
aXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3Jl
NjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0
aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVH
UFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0
cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSkpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleCgpLmJpdHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSkpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFu
dCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkg
YWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgfQogCiAgICAgLy8gRG9uJ3QgbmVlZCB0byBz
ZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNh
bGxzCiAgICAgaWYgKGNvZGVPcmlnaW4pIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKSkuYml0cygpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9yRXhpdChjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1
Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOworICAgICAgICBhdXRvIGJ5
dGVjb2RlSW5kZXggPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleEZvckV4
aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucyhi
eXRlY29kZUluZGV4KS5hdCgpLnB0cigpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKS5iaXRz
KCk7CiAjZW5kaWYKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdp
c3RlcikoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgaml0LnN0b3Jl
MzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlI
ZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgIH0KIH0K
IApAQCAtMzgyLDExICszODksMTIgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZt
LCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwog
CiAgICAgdm9pZCoganVtcFRhcmdldDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPiBjaGVja3BvaW50UmV0dXJuVGFyZ2V0OwogICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRp
b25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAg
ICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpj
b2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
ID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
ID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkgPyBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUgOiBjdXJyZW50SW5zdHJ1Y3Rp
b24ub3Bjb2RlSUQoKSk7CiAKICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
IHsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3Vy
cmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIpOwpAQCAtNDAyLDcgKzQxMCwxNCBAQCB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKICNlbmRpZgogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGlu
YXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVM
b2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4
ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUlu
ZGV4IGluZGV4Rm9yQ2hlY2twb2ludFJldHVybiA9IGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2Rl
SW5kZXhGb3JFeGl0KGV4aXRJbmRleCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5m
aW5kKGluZGV4Rm9yQ2hlY2twb2ludFJldHVybik7CisgICAgICAgIGlmIChleGl0SW5kZXguY2hl
Y2twb2ludCgpKSB7CisgICAgICAgICAgICBjaGVja3BvaW50UmV0dXJuVGFyZ2V0ID0gY29kZUxv
Y2F0aW9uOworICAgICAgICAgICAgY29kZUxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz4oTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9v
c3JfZXhpdF90cmFtcG9saW5lKSk7CisgICAgICAgIH0KKwogICAgICAgICBBU1NFUlQoY29kZUxv
Y2F0aW9uKTsKIAogICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkPE9T
UkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCmluZGV4IDIxNmM1YmFhMTRkOTZiMjliNWRkMzY5YTczYmZlY2I0YjAzZGMxOTkuLjdkYTZh
ZmQ1YzIyMWM5N2ZmOTNmNDAwY2IzNDk0NDU0ZDRkNDkyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcApAQCAtMjEwNyw3ICsyMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICht
X2hlYXAuZm9sbG93KGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2RlKCkpICE9IGVzY2FwZWUp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0g
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7
CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4
aXQpLCBPcEluZm8ob3BlcmFuZCksCiAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5k
ZWZhdWx0RWRnZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCmluZGV4IGYz
OWMxNGI5ZjBhNDQ4Nzg5ZDc3MmRjMjdkZjE1ODgxZTUwODY4OTUuLjc3ZWZjZmIyNDgwMDJhNGJm
NWVhNjBhNmU2NjUyMGZlMDUxNDRiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcElu
Zm8uaApAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgT3BJbmZvIHsKICAgICBleHBsaWNpdCBPcElu
Zm8oSW50ZWdyYWxUeXBlIHZhbHVlKQogICAgICAgICA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHZhbHVlKSkgeyB9CiAgICAgZXhwbGljaXQgT3BJbmZvKFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgc3RydWN0dXJlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHN0cnVjdHVyZSkpKSB7IH0KLQorICAgIGV4cGxpY2l0IE9wSW5mbyhPcGVy
YW5kIG9wKSA6IG1fdmFsdWUob3AuYXNCaXRzKCkpIHsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CiAgICAgZXhwbGljaXQgT3BJbmZvKFQqIHB0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDUwY2EwMGIwMGI5NDg4YTEwMzI4NzI2Mjhh
OWUyZWU4NzNmMmMzNzkuLmNmMDlkODczOTc0YTg1NjMzYTJlZGI2ODc3NjkyZGIxMDc2ODQwN2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMjk0
NiwxNSArMjk0NiwxNiBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRl
eE9mVmFsdWVEb3VibGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogCiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRz
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgbWFuZGF0b3J5TWlu
aW11bSkKIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50IHsgZmlyc3RFbGVtZW50
RGVzdCB9OwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJv
bG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUg
YXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAgIAotICAg
IGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoZmly
c3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOworICAgIGxvYWRWYXJh
cmdzKGdsb2JhbE9iamVjdCwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yKGZp
cnN0RWxlbWVudCkpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoIC0gMSk7CiAgICAgCi0gICAg
Zm9yICh1aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQotICAg
ICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGggLSAxOyBpIDwgbWFuZGF0b3J5TWluaW11bTsg
KytpKQorICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50ICsgaSkgPSBqc1VuZGVmaW5l
ZCgpOwogfQogCiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMy
X3QgYSwgaW50MzJfdCBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCmluZGV4IGNiYzJjOGJmYWU0ZTk0ZDA5NWRkYzkx
NTdkYjM2YWI1YTBjNmFkYzIuLjJiMTA1YjJjYWRlN2I3ZDU1ODlmYWRlYWZiMDJiYzA5NjQ1ZTA5
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21J
bnNlcnRpb25QaGFzZS5jcHAKQEAgLTQzLDExICs0Myw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNwYWNlIERGR1BoYW50b21JbnNlcnRp
b25QaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci19Ci0KIGNsYXNzIFBoYW50b21JbnNlcnRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQaGFu
dG9tSW5zZXJ0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
cGhhbnRvbSBpbnNlcnRpb24iKQpAQCAtNjIsNyArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFNldExvY2FscyBleGVjdXRlLCB3aGljaCBpcyBpbmFjY3VyYXRlLiBUaGF0IGNhdXNlcyB1cyB0
byBpbnNlcnQgdG9vIGZldyBQaGFudG9tcy4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
dWxscHRyLCBtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9PSBFeGFjdFJlZkNvdW50KTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGgg
YmVmb3JlIFBoYW50b20gaW5zZXJ0aW9uOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICAgICAgfQpAQCAtNzIsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCiAgICAgICAg
ICAgICBoYW5kbGVCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhhbnRv
bUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFBoYW50b20gaW5zZXJ0aW9uOlxu
Iik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtMTAzLDIyICsx
MDAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbGFzdEV4aXRpbmdJbmRleCA9IDA7
CiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgTW92SGlu
dDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwo
KSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3Bl
cmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBudWxs
cHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTEzNCwzOCArMTMxLDQyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X2dyYXBoLmRvVG9DaGlsZHJlbigKICAgICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAg
ICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJVcGRhdGluZyBlcG9jaCBmb3IgIiwgZWRnZSwgIiB0byAiLCBjdXJyZW50RXBvY2gp
OwogICAgICAgICAgICAgICAgICAgICBlZGdlLT5zZXRFcG9jaChjdXJyZW50RXBvY2gpOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBub2RlLT5zZXRFcG9j
aChjdXJyZW50RXBvY2gpOwogCi0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeUtp
bGxlZDsKKyAgICAgICAgICAgIE9wZXJhbmQgYWxyZWFkeUtpbGxlZDsKIAotICAgICAgICAgICAg
YXV0byBwcm9jZXNzS2lsbGVkT3BlcmFuZCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewot
ICAgICAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kOiAi
LCByZWcsICJcbiIpOworICAgICAgICAgICAgYXV0byBwcm9jZXNzS2lsbGVkT3BlcmFuZCA9IFsm
XSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIiAgICBLaWxsZWQgb3BlcmFuZDogIiwgb3BlcmFuZCk7CiAKICAgICAgICAgICAgICAgICAv
LyBBbHJlYWR5IGhhbmRsZWQgZnJvbSBTZXRMb2NhbC4KLSAgICAgICAgICAgICAgICBpZiAocmVn
ID09IGFscmVhZHlLaWxsZWQpCisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFk
eUtpbGxlZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAg
IE9wZXJhbmQgIiwgb3BlcmFuZCwgIiBhbHJlYWR5IGtpbGxlZCBieSBzZXQgbG9jYWwiKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFu
ZChyZWcpOwotICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkKKyAgICAgICAgICAgICAg
ICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKTsgCisgICAgICAg
ICAgICAgICAgaWYgKCFraWxsZWROb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIHdhcyBub3QgZGVmaW5lZCBp
biB0aGlzIGJsb2NrLiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChyZWcpID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gaW5z
ZXJ0IGEgUGhhbnRvbSBpZiB0aGUgbm9kZSBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIHRoZSBsYXN0
CiAgICAgICAgICAgICAgICAgLy8gZXhpdCwgYW5kIHdhcyBib3JuIGJlZm9yZSB0aGUgbGFzdCBl
eGl0LgotICAgICAgICAgICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRF
cG9jaCkKKyAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBjdXJyZW50
RXBvY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBP
cGVyYW5kICIsIG9wZXJhbmQsICIgaGFzIGN1cnJlbnQgZXBvY2ggIiwgY3VycmVudEVwb2NoKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgewot
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBJbnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCksICJcbiIpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAiICAgIEluc2VydGluZyBQaGFudG9t
IG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKKyAgICAgICAgICAgICAgICAgICAgYmxvY2st
PmF0KGxhc3RFeGl0aW5nSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIGV4YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFu
cyB0aGF0IHdlIGhhdmUgdG8KICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIHJlZiBj
b3VudC4KICAgICAgICAgICAgICAgICBraWxsZWROb2RlLT5wb3N0Zml4UmVmKCk7CkBAIC0xNzks
MTQgKzE4MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG5vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAgICAgICBpZiAobm9kZU1heUV4aXQpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIFNldExvY2FsIGRvZXMgZXhpdCwgd2UgbmVl
ZCB0aGUgTW92SGludCBvZiBpdHMgbG9jYWwKICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUg
bGl2ZSB1bnRpbCB0aGUgU2V0TG9jYWwgaXMgZG9uZS4KLSAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQobG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBhbHJlYWR5S2ls
bGVkID0gbG9jYWw7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5S2lsbGVkID0gb3BlcmFuZDsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChsb2NhbCkg
PSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBu
dWxscHRyOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5k
cyhtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksIHByb2Nlc3NLaWxs
ZWRPcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgKaW5kZXggYTU4ZTE3OTY1NjBmYzZkOTRiYjQ2M2QxNDI5ODg2
ZTA3OGYwYWZjYy4uZjVmMDk2YzhlYjU2ZDQ1ZmE5ODliYjQ5MzZmNzJkNDQ4MTk1YTE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsbElmQXBwcm9w
cmlhdGUobV9yZWFkLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSk7
CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3JlYWQsIGhlYXAub3BlcmFuZCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTY4LDcgKzY4LDcg
QEAgcHVibGljOgogICAgICAgICAvLyBXZSBleHBlY3Qgc3RhY2sgd3JpdGVzIHRvIGFscmVhZHkg
YmUgcHJlY2lzZWx5IGNoYXJhY3Rlcml6ZWQgYnkgREZHOjpjbG9iYmVyaXplKCkuCiAgICAgICAg
IGlmIChoZWFwLmtpbmQoKSA9PSBTdGFjaykgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUo
bV91bmNvbmRpdGlvbmFsV3JpdGUsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdy
aXRlLCBoZWFwLm9wZXJhbmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC04NywxMiArODcsMTIgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobG9jYXRpb24uaGVhcCgpLmtpbmQoKSA9PSBTdGFjayk7CiAgICAgICAgIAot
ICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52
YWx1ZTMyKCkpLCBub2RlKTsKKyAgICAgICAgbV9kZWYobG9jYXRpb24uaGVhcCgpLm9wZXJhbmQo
KSwgbm9kZSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgotICAgIHZvaWQgY2FsbElmQXBwcm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3Rv
ciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShj
b25zdCBGdW5jdG9yJiBmdW5jdG9yLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBp
ZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudG9M
b2NhbCgpKSA+PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKSkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAppbmRleCA0NDdlMjRl
MmExMTYzMzdjODNlM2JhYTMxMjczNTc5MmI5MDQ3MjlkLi41YjRmOTkyOTM0MTE3OWMyMDQ5OTUy
YmRjMzg2OTY1MjlmMGZjMzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCkBAIC03Miw3ICs3Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IE9w
ZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9w
bGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGludCBv
cGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CiAgICAgICAgICAgICAgICAgT3B0aW9uYWw8SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxl
VmFsdWVzW2ldOwogICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCA4MDUwNTE2Y2JmZWNjODRm
ZTE5NTg0MjhhMGNmODdjZDU0ZWUxMTdiLi4yMjFjNTAxZGJkMTRjMDQ1NzJhN2ZlMWQxOWJlNmQz
MTk3YzEzZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMTM2NSw2ICsxMzY1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
CiAgICAgICAgIGNhc2UgRXhpdE9LOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKaW5kZXggODcyNzc2MGM2ZWNiZGIzMmVh
ZTYwM2JhY2JkMTAwMzc0ZDgxNGZlNy4uZmQ2MTIzZmE5ZjFkNTI5ZTRjMmVlMmMwZTdlZGY2M2Yw
N2Y3OGQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRT
dGFja1NpbmtpbmdQaGFzZS5jcHAKQEAgLTQyLDExICs0Miw4IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNwYWNlIERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKLX0KLQogY2xhc3MgUHV0U3RhY2tTaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgUHV0
U3RhY2tTaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
UHV0U3RhY2sgc2lua2luZyIpCkBAIC03Myw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
dGhlIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB0byBtZSBpZiB0aGlzIGlzIGltcG9ydGFudCBvciBu
b3QuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDUyOTYKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRh
TG9nKCJHcmFwaCBiZWZvcmUgUHV0U3RhY2sgc2lua2luZzpcbiIpOwogICAgICAgICAgICAgbV9n
cmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDExICs4NSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgQmxvY2tNYXA8T3BlcmFuZHM8Ym9vbD4+IGxpdmVBdFRhaWwobV9ncmFwaCk7CiAgICAgICAg
IAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7Ci0gICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXSA9IE9wZXJhbmRzPGJv
b2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgICAgICBs
aXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxv
Y2tdLmZpbGwoZmFsc2UpOwotICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10uZmlsbChmYWxz
ZSk7CisgICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOworICAgICAgICAgICAgbGl2
ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBj
aGFuZ2VkOwpAQCAtMTA3LDMzICsxMDEsMzQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE9w
ZXJhbmRzPGJvb2w+IGxpdmUgPSBsaXZlQXRUYWlsW2Jsb2NrXTsKICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewog
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkxpdmUgYXQgIiwgbm9kZSwgIjogIiwgbGl2ZSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyLCA0PiByZWFkczsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdp
c3RlciwgND4gd3JpdGVzOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIg
PSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxPcGVyYW5kLCA0PiByZWFkczsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9wZXJh
bmQsIDQ+IHdyaXRlczsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgb3BlcmFuZCwgIiBpcyBsaXZlIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHMuYXBwZW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1
dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2sgfHwgbm9kZS0+b3AoKSA9PSBMb2Fk
VmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0g
S2lsbFN0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gb3AgPSBub2RlLT5vcCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3AgPT0gUHV0U3RhY2sg
fHwgb3AgPT0gVmFyYXJnc0xlbmd0aCB8fCBvcCA9PSBMb2FkVmFyYXJncyB8fCBvcCA9PSBGb3J3
YXJkVmFyYXJncyB8fCBvcCA9PSBLaWxsU3RhY2spOwogICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAg
ICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKIAot
ICAgICAgICAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogd3JpdGVz
KQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHdyaXRlcykKICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogcmVhZHMpCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogcmVhZHMpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTIzNCw3ICsyMjksNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGRlZmVycmVkID0gZGVmZXJyZWRB
dEhlYWRbYmxvY2tdOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBu
b2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldFN0YWNrKSB7CkBAIC0yNjEsNyArMjU2
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM5OAogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzQ29uZmxpY3RpbmcgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9PSBDb25mbGljdGlu
Z0ZsdXNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID09IENvbmZsaWN0aW5nRmx1c2g7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgIWlzQ29uZmxpY3RpbmcpOwpAQCAtMjc1LDE3ICsyNzAsMjAgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbS4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkg
PT0gUHV0U3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsOworICAgICAgICAgICAgICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJh
bmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU2V0dGlu
ZyBmbHVzaCBmb3JtYXQgZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBLaWxsU3Rh
Y2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2luayBh
IFB1dFN0YWNrIHBhc3QgYSBLaWxsU3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJLaWxsaW5nIHN0YWNrIGZvciAiLCBub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1
dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJGb3IgIiwgbm9kZSwgIiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjkzLDE2ICsyOTEsMTggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVz
aDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdy
aXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFy
Z3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9
PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3Ao
KSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiV3JpdGluZyBkZWFkIGZsdXNoIGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQg
Iiwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9w
ZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRl
SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBM
YXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6
eU5vZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCkBAIC0zMTMs
MTMgKzMxMywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNp
ZGVyaW5nICIsIFZpcnR1YWxSZWdpc3RlcihkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAi
IGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwg
IjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0s
ICIgbWVyZ2VzIHRvICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgZGVmZXJy
ZWQub3BlcmFuZEZvckluZGV4KGkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+Iiwg
cG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVy
cmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldID0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZXJnZShkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCBkZWZlcnJl
ZFtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZyhkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTM1MiwxMCArMzUyLDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgCiAgICAgICAgIE9wZXJhbmRzPFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4g
b3BlcmFuZFRvVmFyaWFibGUoCiAgICAgICAgICAgICBPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IGluZGV4VG9PcGVyYW5kOworICAgICAgICBWZWN0b3I8T3BlcmFuZD4gaW5kZXhUb09wZXJhbmQ7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCht
X2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpKTsKLSAg
ICAgICAgICAgIAorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKwogICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJs
ZSgpOwogICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZh
cmlhYmxlOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJp
YWJsZS0+aW5kZXgoKSk7CkBAIC0zNzAsMTIgKzM3MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICAgICAgcHV0U3RhY2tzVG9TaW5r
LmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5k
VG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgog
ICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9w
ZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2ssIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzg2LDcgKzM4Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
CiAgICAgICAgIHNzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5v
ZGUqIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9P
cGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5Nyw3ICszOTcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICAgICAgaWYgKERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBQaGkgZm9y
ICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2Rl
KFNwZWNIZWFwVG9wLCBQaGksIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgp
KTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtYXBwaW5nLmZpbGwo
bnVsbHB0cik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXBw
aW5nLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgU1NBQ2FsY3Vs
YXRvcjo6RGVmKiBkZWYgPSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2
YXJpYWJsZSk7CkBAIC00MjEsMTUgKzQyMSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
bWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gZGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
IGRhdGFMb2coIk1hcHBpbmcgYXQgdG9wIG9mICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIjogIiwg
bWFwcGluZywgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3Vs
YXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5k
W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBo
aURlZi0+dmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwg
b3BlcmFuZCwgIiB0byAiLCBwaGlEZWYtPnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgICAg
IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAg
IH0KQEAgLTQzNywxNSArNDM3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRlZmVycmVkID0g
ZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
ICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVm
ZXJyZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBQdXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gZGF0YS0+b3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChvcGVyYW5kKSA9IGRhdGEtPmZvcm1hdDsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9w
ZXJhbmQpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTQ1MywxNiArNDUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFj
a0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2Nh
bCk7CisgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9w
ZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0
ZShmb3JtYXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCkgIT0gQ29uZmxpY3RpbmdGbHVz
aCwgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgIT0gQ29uZmxpY3RpbmdGbHVz
aCwgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8g
ZGVmZXJyYWwuIE5vIGRlZmVycmFsIG1lYW5zIHRoYXQgdGhlIG1vc3QKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGF1dGhvcml0YXRpdmUgdmFsdWUgZm9yIHRoaXMgc3RhY2sgc2xvdCBpcyB3
aGF0IGlzIHN0b3JlZCBpbiB0aGUgc3RhY2suIFNvLAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8ga2VlcCB0aGUgR2V0U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBp
bmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAg
LTQ3MiwyMCArNDcyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBz
dG9yZWQgYW5kIGdldCByaWQgb2YgdGhlIEdldFN0YWNrLgogICAgICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGZvcm1hdCA9PSBkYXRhLT5mb3JtYXQsIGZvcm1hdCwg
ZGF0YS0+Zm9ybWF0KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFu
ZCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gaW5jb21pbmctPmRlZmF1
bHRFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGNhc2UgS2lsbFN0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
ID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJGb3IgIiwgbm9kZSwgIiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKQEAgLTQ5OSw3ICs0OTksNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgUHV0U3RhY2suCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1dFN0YWNrIGZvciAi
LCBvcGVyYW5kLCAiIGF0ICIsIG5vZGUsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKQEAgLTUxMyw3ICs1
MTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5k
KG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hl
YWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCBGb3J3YXJkVmFyYXJncyBhcmUgdW5jb25k
aXRpb25hbCB3cml0ZXMgdG8gdGhlIHN0YWNrCkBAIC01MjEsMTMgKzUyMSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSB3cml0ZSB0by4gVGhp
cyBtYWtlcyB0aG9zZSBzdGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGJlZm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzLiBUaGlzIG1l
YW5zIHdlIHNob3VsZCBuZXZlciBzaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXRT
dGFja3MgcmlnaHQgdG8gdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3
YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBu
b2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
IH07CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFu
ZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5
Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5v
ZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0g
fQogICAgICAgICAgICAgfQpAQCAtNTM5LDggKzUzOSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlz
Rm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBo
aU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJs
ZS0+aW5kZXgoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRp
bmcgVXBzaWxvbiBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICIt
PiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvckJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5v
cGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG51bGxwdHIsIGlzQ29uY3JldGUoZm9ybWF0KSwgZm9ybWF0KTsKQEAgLTU4NSw3ICs1ODUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
IChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRTdGFjayBz
aW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CmluZGV4IDQzNmU1ZDM5MTRiMzIzNWEwMjQ3ZmM0MTg0NzE2MzExZDY3Njg2NTAuLjA0ZjJjMGNk
Mzk5OGIxODFiOWU5OGJiYTQyNzA0ODgzYjQwZDJkOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKQEAgLTE1OCw3ICsxNTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50R2V0dGVycy5hZGQoY2hp
bGROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudE1hcHBpbmcuYWRkKG5vZGUs
IGNoaWxkTm9kZSk7CkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3Nh
VmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IFBydW5lIGJ5IGxpdmVuZXNzLiBUaGlzIGRvZXNuJ3QgYnV5IHVzIG11Y2ggb3RoZXIgdGhhbiBj
b21waWxlIHRpbWVzLgotICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJs
ZS0+b3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWhlYWROb2RlKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzAwLDcgKzMwMCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+cmVwbGFjZW1lbnQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCBWaXJ0dWFsUmVnaXN0
ZXIodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSksICIgLT4gIiwgbm9kZSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmRbaV0gPSBub2RlOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KQEAgLTMxMywxMSArMzEzLDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUlu
ZGV4W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlE
ZWYtPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICB2YWx1
ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IHBoaURlZi0+dmFsdWUo
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICBwaGlJbnNlcnRpb25Qb2ludCwgU3BlY05vbmUs
IE1vdkhpbnQsIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLAotICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLCBwaGlEZWYt
PnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
aWFibGUtPm9wZXJhbmQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPm9yaWdpbi5leGl0T0sp
CkBAIC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgTW92SGlu
dDogewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2Rl
LT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+dW5saW5rZWRM
b2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4
aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQ5LDE5ICszNDksMTkgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJc0Zs
dXNoZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRTdGFj
aygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCks
IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVt
b3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAi
LCB2YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBjaGlsZCwgIlxuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGNoaWxk
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUt
Pm9wZXJhbmQoKSwgIiAtPiAiLCBjaGlsZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gY2hpbGQ7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9hcmd1bWVudEdldHRlcnMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+bG9jYWwpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTM3MSw4ICszNzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFj
aW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxh
Y2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdp
dGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICJcbiIp
OworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zODUsNyAr
Mzg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50
eXBlZFVzZSk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkt
PmRlZmF1bHRFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSktPmRlZmF1bHRFZGdlKCk7
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDI1LDEyICs0MjUsMTIgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBpcyBub3QgZXhpdE9LLgogICAgICAgICAg
ICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBV
cHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiBwcm9wYWdhdGluZyAiLCB2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICIgdG8gIiwgcGhpTm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRpbmcgVXBzaWxv
biBmb3IgIiwgdmFyaWFibGUtPm9wZXJhbmQoKSwgIiBwcm9wYWdhdGluZyAiLCB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQs
IFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHBoaU5vZGUpLCBFZGdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VLaW5kKSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAppbmRleCAxNWJlNDJhYzNiNjlhZjRkYzU4MzhhMThkZjM5ZDA3OGNhMzE2OTE5
Li45YTMyZDY3YTU4NzQyOTU4NWIzN2Q5YWUxYTZjZWJjNWZjOTYyY2ZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzIyLDYgKzMyMiw3IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBj
YXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2Ug
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGI1YTExYzUxZWYxMGNmN2E2YjIzMTcyZDJkOGJm
OGY2NzVlMDUyYmQuLmJlNTg1ZDVkNDNjOTI3Nzg3OTI5ODNiMDkzM2Y1YTI2Mjg1MDMyYjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBA
IC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChO
b2RlKiBub2RlKQogICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAg
IG5vdGljZU9TUkJpcnRoKGNoaWxkKTsKICAgICAKLSAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9n
KFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkpOworICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92
SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFpbChBYm9ydFJlYXNvbiByZWFzb24pCkBAIC0xODI1LDcg
KzE4MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAg
ICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2Jsb2NrKTsKICAgICAKICAgICBmb3IgKHNpemVf
dCBpID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICBp
bnQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kRm9ySW5kZXgoaSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNB
dEhlYWRbaV07CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBO
byBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCkBAIC0xODM1LDExICsxODM1LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIGlmICgh
bm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJl
Y29yZCBkZWFkIFNldExvY2FsJ3MuCiAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFy
aWFibGUtPmZsdXNoRm9ybWF0KCkpOwotICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKAot
ICAgICAgICAgICAgVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoCi0gICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSwKLSAgICAgICAgICAgICAgICBmb3JtYXQpKTsKKyAgICAgICAgREZHX0FTU0VSVCht
X2ppdC5ncmFwaCgpLCBub2RlLCAhb3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CisgICAgICAgIG1fc3RyZWFtLT5hcHBl
bmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwgdmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpLCBmb3JtYXQpKTsKICAgICB9CiAKICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4o
KTsKQEAgLTE5MTksNyArMTkxNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1l
bnRUeXBlcygpCiAgICAgICAgIGlmIChmb3JtYXQgPT0gRmx1c2hlZEpTVmFsdWUpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKS52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3Vt
ZW50KCkpOwogCiAgICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291
cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAK
QEAgLTczNDEsNTQgKzczMzksNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1
bmN0aW9uTmFtZShOb2RlKiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAKICAgICBKU1ZhbHVl
UmVncyBhcmd1bWVudHNSZWdzOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1l
bnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3Vt
ZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAg
ICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1
bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgYXJndW1lbnRzUmVncyA9
IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgdW5s
b2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQpOwogICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICB9CisgICAgR1BSVGVtcG9yYXJ5IGFyZ0NvdW50
SW5jbHVkaW5nVGhpcyh0aGlzKTsKKyAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BS
ID0gYXJnQ291bnRJbmNsdWRpbmdUaGlzLmdwcigpOwogICAgIHVubG9jayhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CiAKLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3
aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZl
Ci0gICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBp
dCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgLy8gc3RhbmRwb2lu
dC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRv
KiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIpOwogCi0gICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhp
c0dQUiA9Ci0gICAgICAgIEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBhcmd1bWVudHNSZWdzKTsKKyAgICBpbnQzMlJlc3VsdChhcmdDb3VudElu
Y2x1ZGluZ1RoaXNHUFIsIG5vZGUpOyAgCit9CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1t
MzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIp
Owordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCit7
CisgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7ICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2Rl
LT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3Mg
PSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNH
UFIpKTsKKyAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwg
bV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisg
ICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgc3BlY3VsYXRp
b25DaGVjaygKICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2Uo
KSwgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0g
ICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1p
dCkpKTsKIAotICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICBmbHVzaFJlZ2lz
dGVycygpOworCisgICAgbV9qaXQuc3RvcmUzMihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZz
ZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRh
LT5vZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBkYXRhLT5tYW5kYXRvcnlNaW5p
bXVtKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7
CkBAIC03Mzk4LDE3ICs3Mzk3LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3
YXJkVmFyYXJncyhOb2RlKiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lOwotICAgIGlmIChub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0g
bm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICBp
ZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9k
ZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwog
ICAgIGVsc2UKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOwogCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFy
Z3VtZW50Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBsZW5n
dGgodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICBHUFJS
ZWcgbGVuZ3RoR1BSID0gbGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9
IGFyZ3VtZW50Q291bnQuZ3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdGVtcFJlZ3MgPSB0ZW1wLnJl
Z3MoKTsKLSAgICAgICAgCi0gICAgZW1pdEdldExlbmd0aChpbmxpbmVDYWxsRnJhbWUsIGxlbmd0
aEdQUiwgLyogaW5jbHVkZVRoaXMgPSAqLyB0cnVlKTsKKyAgICAKKyAgICBtX2ppdC5tb3ZlKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBsZW5ndGhHUFIpOwogICAgIGlmIChkYXRhLT5vZmZz
ZXQpCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihkYXRhLT5vZmZzZXQpLCBsZW5n
dGhHUFIpOwogICAgICAgICAKQEAgLTc1NjcsNyArNzU2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBhdXRvKiBp
bmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZQogICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewotICAgICAgICBrbm93bkxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICBrbm93bkxlbmd0aCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMSk7CiAgICAgICAgIGxlbmd0aElzS25vd24gPSB0cnVlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGtub3duTGVuZ3RoID0gVUlOVF9NQVg7CkBAIC0xMjQ0Nyw3ICsxMjQ0OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhO
b2RlKiBub2RlKQogICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5v
ZGUtPmFyZ3VtZW50c0lubGluZUNhbGxGcmFtZSgpKQogICAgICAgICBhcmd1bWVudENvdW50UmVn
aXN0ZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICBlbHNl
Ci0gICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0g
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudDsKICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0LmdwcigpKTsKICAg
ICBpbnQzMlJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IGM2NGY5NzhhZGY4NWZiZjI3N2Ji
YTc5MjE2MDY0ZjQyODFiOGQ1YTkuLjAzZDQ4MzViZjRiN2E4ZGUwOTM5ZWZjZmEzNzAyMmI0NjI2
OTA5NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKQEAgLTEzOTMsNiArMTM5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5j
dGlvbk5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5ld1JlZ2V4cChOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVZhcmFy
Z3NMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVD
cmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSopOwpAQCAtMTY2OSwxNSArMTY3MCwxNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BSUmVnLCBHUFJSZWcpOwogICAg
IAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBieXRl
Y29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQor
ICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywg
RGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgeworICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlUmVnLmlz
QXJndW1lbnQoKSB8fCBieXRlY29kZVJlZy52aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCkg
Pj0gMCk7CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0
TG9jYWwoYnl0ZWNvZGVSZWcsIG1hY2hpbmVSZWcsIGZvcm1hdCkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fY3VycmVudE5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwotICAgICAgICByZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+bG9jYWwoKSwgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOworICAgICAgICByZWNvcmRTZXRMb2NhbCh2
YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CiAg
ICAgfQogCiAgICAgR2VuZXJhdGlvbkluZm8mIGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggNjdiMGUw
YjM3MDRjYTU5YTg5MGFjNTljODZkYmQwZDJhMDU2ZGI4MS4uMGFmM2YxNzE4MTU0MTBkOWJlZjY0
YTIwZmQwOTA1ZGRjMDNlNjdmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0xODI4LDcgKzE4MjgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3Rh
dGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAogICAgICAgICAvLyBJZiB0aGUg
Q0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlh
YmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0
ZW1wdCB0byBwcm9jZWVkLgpAQCAtMTkxMiw3ICsxOTEyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBab21iaWVI
aW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9j
YWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3Rl
cigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0zODI0LDYgKzM4MjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJl
YWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY29tcGlsZVZhcmFyZ3NM
ZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFy
Z3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CmluZGV4IDNlNjM4YzliOTQ5ZWI1ZWEyNmEzMTA1ZGRiOGFmZTc2NjIxNjMzNDQuLjdiMWUyNTdk
NjBkNDY4NDVmMWE5NDBmZjZkZmRjOTNhYzg2YzdjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMTkzNiw3ICsxOTM2LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSk7CiAKICAgICAgICAgLy8g
SWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRo
ZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRv
bid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTIwMDcsNyArMjAwNyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
Wm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxp
bmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CisgICAgICAg
IHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkT3BlcmFuZCgpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDQ2NCw2ICs0NDY0LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVW
YXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIExv
YWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhub2RlKTsKICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5
b3V0UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBo
YXNlLmNwcAppbmRleCBiZWVjODZhYzdhN2QzMzNlMzk2NzllMjY3NTU5MDc0ZTQ2NGM5YjgyLi5k
NzYyOGU1YTExN2NlMzNkZTFkMTYxNWY2MDQyNzUyMjA0NzdhMjJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgICAgICAvLyB0cmVhdCBhIHZhcmlhYmxlIGFzIGJlaW5nICJ1c2Vk
IiBpZiB0aGVyZSBleGlzdHMgYW4gYWNjZXNzIHRvIGl0IChTZXRMb2NhbCwgR2V0TG9jYWwsCiAg
ICAgICAgIC8vIEZsdXNoLCBQaGFudG9tTG9jYWwpLgogICAgICAgICAKLSAgICAgICAgQml0VmVj
dG9yIHVzZWRMb2NhbHM7CisgICAgICAgIE9wZXJhbmRzPGJvb2w+IHVzZWRPcGVyYW5kcygwLCBn
cmFwaCgpLm1fbG9jYWxWYXJzLCBncmFwaCgpLm1fdG1wcywgZmFsc2UpOwogICAgICAgICAKICAg
ICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBmcm9tIElSLgog
ICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IGZhbHNlOwpAQCAtNjcsMjMgKzY3
LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMu
c2V0KHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVz
ZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHRydWUpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRM
b2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVz
ZWRPcGVyYW5kcy5zZXRPcGVyYW5kKGRhdGEtPmNvdW50LCB0cnVlKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24gdGhlIGNvbnRpZ3VpdHkgb2Ygc3RhY2sg
bGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50cy4KICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0
KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9m
ZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
T3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkg
KyBpKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gLy8gdGhlIGVsc2UgY2FzZSBzaG91
bGRuJ3QgaGFwcGVuLgogICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkyLDkgKzkxLDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIHN0YWNr
ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFj
ay0+bG9jYWwuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPm9w
ZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHN0YWNrLT5sb2NhbC50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChzdGFjay0+b3BlcmFu
ZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDgsMjEgKzEwNywyMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9ICppdGVyOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewot
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAg
ICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRz
LnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRy
dWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgp
OyBhcmd1bWVudC0tOykgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxS
ZWdpc3RlcigKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGFyZ3VtZW50KS5vZmZzZXQoKSArCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRMb2NhbHMu
c2l6ZSgpKTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRPcGVyYW5k
cy5zaXplKCkpOwogICAgICAgICBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCA9IGNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghdXNlZExvY2Fscy5nZXQoaSkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRPcGVyYW5kcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCF1c2VkT3Bl
cmFuZHMuZ2V0Rm9yT3BlcmFuZEluZGV4KGkpKSB7CiAgICAgICAgICAgICAgICAgYWxsb2NhdGlv
bltpXSA9IFVJTlRfTUFYOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQpAQCAtMTM1LDQ5ICsxMzQsNTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZS0+aXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5vcGVyYW5kKCku
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBsb2NhbCA9IHZhcmlhYmxlLT5s
b2NhbCgpLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIGlmIChsb2NhbCA+PSBhbGxvY2F0aW9uLnNp
emUoKSkKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7
CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZEluZGV4KG9w
ZXJhbmQpOworICAgICAgICAgICAgaWYgKGluZGV4ID49IGFsbG9jYXRpb24uc2l6ZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWxs
b2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltp
bmRleF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0
aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCB2YXJpYWJsZS0+b3BlcmFu
ZCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChTdGFja0FjY2Vzc0RhdGEq
IGRhdGEgOiBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIWRh
dGEtPmxvY2FsLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2Nh
bCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+b3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4o
ZGF0YS0+bG9jYWwudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPmxvY2FsLnRv
TG9jYWwoKV0gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5vcGVyYW5kLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlv
bi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmIChhbGxvY2F0aW9uW2RhdGEtPm9wZXJhbmQudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRh
LT5sb2NhbCk7CisgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24odXNlZE9w
ZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKCFtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpKQogICAgICAgICAgICAg
Y29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24o
YWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAg
Y29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2Nh
dGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJp
YWJsZURhdGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKAotICAgICAgICAgICAgICAg
ICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIg
PSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsK
KwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKICAgICAgICAgICAgICAg
ICBBcmd1bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9u
c1sKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBhcmd1
bWVudF07CkBAIC0yMTUsOCArMjE1LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hp
bmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+
c3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNz
aWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxs
b2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjMxLDE3
ICsyMzEsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdp
c3RlciBzcmMpCisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBPcGVyYW5kczxib29s
PiYgdXNlZE9wZXJhbmRzLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3Jj
OwotICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewotICAgICAgICAgICAgdW5zaWduZWQg
bXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKLSAgICAgICAgICAg
IGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
VmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkp
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKworICAgICAg
ICBzaXplX3Qgb3BlcmFuZEluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5k
KTsKKyAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltvcGVyYW5kSW5k
ZXhdOworICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAg
cmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAppbmRleCBl
YjNkZGJkNzE4NDNkNDlmNjViMzJjZTk2MWZmOWEwNzEyYTFhMDUxLi5iNDhjNmY3ZjE5MDk3NzVk
NzI3OTc5OTFmM2ZiOTgzZGU2MzhhNzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTI4NSwxNyArMjg1
LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IE5vZGUqIHNldExvY2FsID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCA9IG1fbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1f
bm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2Jsb2NrLT5hdChpKTsKIAotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExv
Y2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5vcGVyYW5kKCkgPT0gb3BlcmFuZCkgewogICAg
ICAgICAgICAgICAgICAgICBzZXRMb2NhbCA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092
ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBsb2NhbCkpKQorICAgICAg
ICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFw
KFN0YWNrLCBvcGVyYW5kKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKaW5kZXggNmFjYWZi
ZjNiZjUzNWM5Njk2YmU2NDhhMjA3MGI2ZWU2ZjRmOGJmOS4uZjFiMWZmNjRkZGE1M2NmNDU5Njcw
NGVlYjgzMTVmMTZiZmJlOTA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcApAQCAtNDAsMTQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dl
bmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdChudWxscHRyKTsKLSAgICBq
aXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2bSk7Ci0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IHRodW5rIik7Ci19
Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdChudWxscHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCmluZGV4IDA1YTUwYTU0YjI1ZDUx
ZGJjYjE4NThmZTdhYWRjYTQ4NjgyMDVkOWUuLjhiNWMzZjAxYTQ4NTIwYjdhYWFhYWViYWZmOTNj
M2IyNmNjZDk4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1
bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaApAQCAtMzUs
NyArMzUsNiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Ny
RW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAppbmRleCA2MGZiZjg5OTVm
ZGFkNzgyNTZhMDY3Yjg5YzRlYzVmNTcxM2YxZDdlLi43OTY2NWY4YWI4NWZjMTExNmQ2MzlmYjNk
OGI1NWY2ZWQ5MDI2OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjaGVja09wID0gQ2hlY2tTdHJ1Y3R1cmU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3BlY0NlbGxDaGVjayAmIFNwZWNFbXB0eSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5v
cGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobG9jYWwgLSAoaW5saW5l
Q2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApKSA9PSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBURFogdmFsdWUuIFRoZSBjYWxsIGVudHJ5cG9pbnQgd29u
J3QgaGF2ZSB8dGhpc3wgYXMgVERaLApAQCAtMTY4LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID09IG5vZGUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gZ2V0TG9jYWw7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPT0gbm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZS0+b3BlcmFuZCgpKSA9IGdldExvY2FsOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleEluQmxv
Y2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDQ2LDcg
KzQ0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBt
X2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAKaW5kZXggOWVlNWUwMDc0MDlkZjUyOTRiZmNmNTFiNzc2ZWI4Y2ZjZjQ3
YzUwZS4uYTJkNmNmYzI0OTM0ZTNkYzNjNDZjMGUyNGQ0ZGExY2UxYjBjZjViNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTQ4Myw3ICs0ODMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tpXTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUpKTsKICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKLSAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOworICAgICAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2FkU3RvcmUg
Zm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3Jt
ID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkKQEAgLTUxOSwxMCArNTE5LDEw
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsg
PCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBw
cmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkg
dGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3Nv
cnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWls
YWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2ssIGJs
b2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2
Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByZXZOb2RlLT5vcCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTUzMywxMSArNTMzLDExIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRl
Y2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZXJh
bmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50
TWF5YmUKQEAgLTU0NywxOSArNTQ3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxv
Y2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnBy
ZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2Rl
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBPcGVyYW5k
czxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgICAgICAgICAgT3BlcmFuZHM8
c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNp
emVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoT3Bl
cmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5hY2Nlc3Nl
c1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2OCwyNCArNjY0LDI0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQobm9kZSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5v
dFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPT0gbm90U2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksICEhbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwg
bm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7Cisg
ICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFu
ZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJz
dCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAo
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBp
OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExvY2FsIGZv
ciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlmIHdl
IGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBmb3IgdGhhdCBsb2NhbC4KLSAgICAgICAgICAg
ICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNl
dDsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5s
b2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRN
YXliZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NjgsMjYgKzk2NCwyNiBAQCBw
cml2YXRlOgogICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4gIiwgZWRnZSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
LCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE9w
ZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBpZiAoIWJs
b2NrKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIG51bGwgQmxvY2sgIik7Cisg
ICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gbnVsbCBCbG9jayAiKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxv
Y2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpi
bG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJh
c2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFz
aWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCiAgICAg
ewotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAt
PiAiLCAqZGVzdGluYXRpb25CbG9jayk7CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBC
bG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkK
KyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgTm9kZSog
cHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBsb2Nh
bCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOworICAgICAgICBkYXRhTG9nKHByZXZOb2Rl
LCAiIGZvciAiLCBvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgQmFzaWNC
bG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCAyNmYwMzI5ZDU0MzA0MTU3MjA1ZTc4MTQ5
OGM2NGUwYmU5OTMyMTEwLi45NWNkYzkyZTJjMjQxMGEzNWMwMTMxMzFmZGMzYjdjY2MyODI5ZWY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZS5jcHAKQEAgLTQxLDExICs0MSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNwYWNlIERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwotfQogCiBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFZh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAidmFyYXJncyBmb3J3YXJkaW5nIikKQEAgLTU2LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZm9ybSAhPSBT
U0EpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0
YUxvZygiR3JhcGggYmVmb3JlIHZhcmFyZ3MgZm9yd2FyZGluZzpcbiIpOwogICAgICAgICAgICAg
bV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gV2UgZXhwZWN0IGNhbGxzIGludG8gdGhpcyBmdW5jdGlvbiB0byBiZSByYXJlLiBT
bywgdGhpcyBpcyB3cml0dGVuIGluIGEgc2ltcGxlIE8obikgbWFubmVyLgogICAgICAgICAKICAg
ICAgICAgTm9kZSogY2FuZGlkYXRlID0gYmxvY2stPmF0KGNhbmRpZGF0ZU5vZGVJbmRleCk7Ci0g
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2FuZGlk
YXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBlbGltaW5h
dGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzIGlmIHRoZSBidXR0ZXJm
bHkgaXMgb25seQpAQCAtMTA1LDcgKzEwMyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGF1
dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNl
cyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE3LDkgKzExNSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBjYW5k
aWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoIW5vZGUtPnVubGlua2VkT3BlcmFuZCgpLmlzVG1wKCksICJXZSBkb24n
dCBjdXJyZW50bHkgc3VwcG9ydCBhIHRtcCByZWZlcnJpbmcgdG8gYW4gYXJndW1lbnRzIG9iamVj
dC4iKTsKICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwotICAgICAg
ICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250
YWlucyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrVmFyYXJnczoKQEAgLTE0MCwxMyArMTM5LDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBzYXdFc2NhcGUgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBpZiAoc2F3RXNjYXBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKQogICAgICAgICAg
ICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAtMTU3LDcgKzE1Nyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAgICAgICAg
IGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUtPmNoaWxkMigpID09IGNhbmRpZGF0
ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjcs
NyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0
ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNMb2FkZWRGcm9tKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXZhbGlkR2V0QnlPZmZzZXQpIHsKICAgICAgICAg
ICAgICAgICBmb3IgKE5vZGUqIGJ1dHRlcmZseSA6IGNhbmRpZGF0ZUJ1dHRlcmZsaWVzKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgYnV0dGVyZmx5KSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBCdXR0ZXJmbHkgZXNjYXBlZCBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLAotICAgICAgICAgICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgcmVnLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGlu
ICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgWyZd
IChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCBvcGVyYW5kLCAi
IHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWxl
dmFudExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
bGV2YW50TG9jYWxzW2ldID09IHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNbaV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWxldmFudExvY2Fsc1tpLS1dID0gcmVsZXZhbnRMb2NhbHMubGFzdCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLnJlbW92ZUxhc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAtMjQ3LDcg
KzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIlNlbGVjdGVkIGxhc3RVc2VySW5kZXggPSAiLCBsYXN0VXNlckluZGV4LCAiLCAiLCBibG9j
ay0+YXQobGFzdFVzZXJJbmRleCksICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gV2UncmUg
c3RpbGwgaW4gYnVzaW5lc3MuIERldGVybWluZSBpZiBiZXR3ZWVuIHRoZSBjYW5kaWRhdGUgYW5k
IHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMgYW55CkBAIC0yNjMsMTYgKzI2MywxNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgY2FzZSBab21iaWVIaW50
OgogICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
SW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKLSAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5sb2NhbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVy
YW5kKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yODAsOCAr
MjgwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+bG9jYWwoKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5k
aWRhdGUsIG5vZGUtPm9wZXJhbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMjk3LDEzICsyOTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMy
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoY2FuZGlkYXRlLCByZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9lc0ludGVyZmVyZSA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAg
ICAgICAgIGlmIChkb2VzSW50ZXJmZXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIElu
dGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIH0KQEAgLTMxMSw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gbWFrZSB0aGlzIHdvcmsuCi0gICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIFdpbGwgZG8gZm9yd2FyZGlu
ZyFcbiIpOwogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTM0MSw4ICsz
NDAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNo
YW5nZSBhbnl0aGluZyB3aXRoIHRoZXNlLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50
aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2Fu
ZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gY2Fu
ZGlkYXRlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNh
bmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCmluZGV4IDhlYmZmYjQzNWVkNGRiZjYwMmJkNjJhZWQ0YzM0MzJlYTVhODI5
MDIuLjJhYzJlZTM5YjRjY2FkMzA4MTI1YjRlNmVjYzg4YTg3YzdkMTc5ZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKQEAg
LTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogVmFyaWFi
bGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQotICAgIDogbV9sb2NhbChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQot
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNOb25l
KQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fZmxh
Z3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxzZSkKQEAgLTQ1LDEwICs0NCwxMCBA
QCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgY2xlYXJWb3Rl
cygpOwogfQogCi1WYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwpCi0gICAgOiBtX2xvY2FsKGxvY2FsKQotICAgICwgbV9wcmVkaWN0aW9u
KFNwZWNOb25lKQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFu
ZCBvcGVyYW5kKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVu
dEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAg
ICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAgICwgbV9z
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQpAQCAtODcsNyArODYsNyBAQCBib29s
IFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3Rl
KCkKIHsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgZmFjaWxpdHkgZm9yIGFyZ3VtZW50
cywgeWV0LgogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRzLgotICAg
IGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBJZiB0aGUgdmFyaWFi
bGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0CkBAIC0xMjEs
NyArMTIwLDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnRhbGx5Vm90ZXNGb3JTaG91bGRV
c2VEb3VibGVGb3JtYXQoKQogewogICAgIEFTU0VSVChpc1Jvb3QoKSk7CiAgICAgICAgIAotICAg
IGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZlclVuYm94KCkKKyAgICBpZiAo
b3BlcmFuZCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZlclVuYm94KCkKICAgICAgICAgfHwg
KGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUluZGV4KSkKICAgICAgICAgcmV0dXJu
IERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJsZUZvcm1hdFN0YXRlLCBOb3RVc2lu
Z0RvdWJsZUZvcm1hdCk7CiAgICAgCkBAIC0xNzYsNyArMTc1LDcgQEAgYm9vbCBWYXJpYWJsZUFj
Y2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIC8vIFdlIHB1bnQgZm9yIG1hY2hpbmUgYXJndW1lbnRzLgotICAgIGlmICht
X2xvY2FsLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRoZSBhcmd1bWVudC1hd2FyZSBwcmVk
aWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBhbGwgb2YgYW4gKGlubGluZWQgb3IgbWFjaGluZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCmlu
ZGV4IDFkMzg5MmY5ZWMwOWNiYTIwNDNmYTI1NGU2MDk0MjMyMDE0YTI4NGUuLmJlMmZiNTQwMTM1
MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNmY2VmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaApAQCAtNDgsMTIgKzQ4LDEyIEBAIGNs
YXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NE
YXRhPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFyaWFibGVBY2Nlc3NEYXRhKTsKIHB1
YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCk7
CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICBPcGVyYW5kIG9wZXJhbmQo
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKLSAg
ICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgICAgIEFTU0VSVChtX29wZXJhbmQgPT0gZmluZCgp
LT5tX29wZXJhbmQpOworICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwogICAgIH0KICAgICAKICAg
ICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hpbmVMb2NhbCgpCkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBw
cml2YXRlOgogICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFu
ZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCiAgICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFj
Y2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KIAotICAgIFZpcnR1YWxSZWdpc3RlciBtX2xv
Y2FsOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBTcGVjdWxhdGVk
VHlwZSBtX3ByZWRpY3Rpb247CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9hcmd1bWVudEF3YXJlUHJl
ZGljdGlvbjsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9t
YWNoaW5lTG9jYWw7CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7CiAKICAgICBib29sIG1fc2hvdWxk
TmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuY3BwCmluZGV4IDI4ZTQzN2ZkNTFmZWE0OTY5ZWI0OGVjZjBjMDUwOGYwYTM3ZGY4MzUuLjVi
MmMxZWU5MDliNTQ4ZjM5ODI3MGM0M2JkMzZlZDcyZTNmOWNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcApAQCAtNTksMTEgKzU5LDExIEBA
IHZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAg
ICBvdXQucHJpbnQoIkRlYXRoKCIsIGlkKCksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgTW92SGludEV2ZW50OgotICAgICAgICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwg
IiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAiKSIpOworICAgICAgICBvdXQucHJpbnQoIk1vdkhpbnQo
IiwgaWQoKSwgIiwgIiwgb3BlcmFuZCgpLCAiKSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFNldExvY2FsRXZlbnQ6CiAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICJTZXRMb2Nh
bChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIGJ5dGVjb2Rl
UmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdp
c3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIG9wZXJhbmQoKSwKICAgICAgICAgICAgICIsICIsIGRh
dGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpLCAiKSIpOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQu
aAppbmRleCAyMDYwZDRhMmZkMjcyMjNkZDZmNjk5YzZkYmFkNmQyMjQ2N2M5ODM0Li5jMWY1NGJh
NGZiZGNhYWE1YTFkOWE1ZWRjMWFjNDgxMzhkMzRlM2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaApAQCAtNjgsNiArNjgsMTAgQEAgZW51bSBWYXJp
YWJsZUV2ZW50S2luZCA6IHVpbnQ4X3QgewogfTsKIAogdW5pb24gVmFyaWFibGVSZXByZXNlbnRh
dGlvbiB7CisgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbigpIAorICAgICAgICA6IG9wZXJhbmQo
KSAKKyAgICB7IH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcjsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGZwcjsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpA
QCAtNzYsNyArODAsNyBAQCB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7CiAjZW5k
aWYKLSAgICBpbnQzMl90IHZpcnR1YWxSZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogfTsKIAog
Y2xhc3MgVmFyaWFibGVFdmVudCB7CkBAIC0xNjIsNyArMTY2LDcgQEAgcHVibGljOgogICAgICAg
ICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAg
ICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNl
bnRhdGlvbi52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICBy
ZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBldmVudC5t
X2tpbmQgPSBraW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAg
ICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE4MSwxMyArMTg1LDEzIEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwo
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1h
Y2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlT3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAg
IHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNo
OwogICAgICAgICB3aGljaC52aXJ0dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsKICAgICAg
ICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVz
ZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXBy
ZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVudC5tX2tp
bmQgPSBTZXRMb2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7
CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5NSwxMyArMTk5
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3Rl
ciBieXRlY29kZVJlZykKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVk
SUQgaWQsIE9wZXJhbmQgYnl0ZWNvZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50
IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQu
Yml0cygpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwot
ICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7
CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAgICAgICAg
ZXZlbnQubV9raW5kID0gTW92SGludEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RG
TW92ZSh3aGljaCk7CiAgICAgICAgIGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKHJl
cHJlc2VudGF0aW9uKTsKQEAgLTI2NSwxMyArMjY5LDEzIEBAIHB1YmxpYzoKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3BpbGxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9r
aW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAg
ICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkg
Y29uc3QKKworICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV9raW5kID09IFNldExvY2FsRXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVudCk7Ci0g
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0
dWFsUmVnKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZDsK
ICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3RlcigpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAppbmRleCA0NTI2ZDM5YmIwOTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2Li44
Y2Y3MDgwNDAzYThlZmZkOWIyMjFhMzVhZjhkMjFkZTMyYjVkZGExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTQy
LDcgKzQyLDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudChjb25zdCBWYXJp
YWJsZUV2ZW50JiBldmVudCkKIHsKICAgICBkYXRhTG9nRigic2VxIyV1OiIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzaXplKCkpKTsKICAgICBldmVudC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0g
ICAgZGF0YUxvZ0YoIiAiKTsKKyAgICBkYXRhTG9nTG4oIiAiKTsKIH0KIAogbmFtZXNwYWNlIHsK
QEAgLTExOSwxMCArMTE5LDEyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29u
c3RydWN0KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE1pbmlmaWVkR3JhcGgmIGdyYXBoLAogICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1
ZVJlY292ZXJ5PiYgdmFsdWVSZWNvdmVyaWVzLCBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+
KiB1bmRlZmluZWRPcGVyYW5kU3BhbnMpIGNvbnN0CiB7CisgICAgY29uc3RleHByIGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpERkdKSVQpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOworICAgIHVu
c2lnbmVkIG51bVRtcHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkSW5k
ZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5zaWduZWQg
Zmlyc3RVbmRlZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVmaW5lZElz
QXJndW1lbnQgPSBmYWxzZTsKQEAgLTEzMCwzNyArMTMyLDQyIEBAIHVuc2lnbmVkIFZhcmlhYmxl
RXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRPcGVyYW5k
U3BhbiA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0g
aW52YWxpZEluZGV4KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgZmlyc3RPZmZz
ZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RVbmRlZmlu
ZWQpLm9mZnNldCgpOwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52
aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpIC0gMSkub2Zmc2V0KCk7CisgICAgICAgIGludCBmaXJz
dE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQp
LnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZh
bHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSAtIDEpLnZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpOwogICAgICAgICBpbnQgbWluT2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZzZXQsIGxh
c3RPZmZzZXQpOwogICAgICAgICB1bmRlZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7IGZpcnN0
VW5kZWZpbmVkLCBtaW5PZmZzZXQsIGkgLSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAgICAgZmly
c3RVbmRlZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29yZFVuZGVm
aW5lZE9wZXJhbmQgPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBz
ZXBhcmF0ZSB0aGUgc3BhbiBvZiBhcmd1bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2NhbHMgZXZl
biBpZiB0aGV5IGhhdmUgYWRqYWNlbnQgb3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAgaWYgKGZp
cnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQg
IT0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSkpCisgICAgICAgIGlmIChmaXJzdFVuZGVm
aW5lZCAhPSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVl
UmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAg
Zmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihpKTsKIAogICAgICAgICBpZiAoZmlyc3RVbmRlZmlu
ZWQgPT0gaW52YWxpZEluZGV4KSB7CiAgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGk7Ci0g
ICAgICAgICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMuaXNB
cmd1bWVudChpKTsKKyAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVl
UmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpOwogICAgICAgICB9CiAg
ICAgfTsKIAogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVz
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKS0+
bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCkudG9Mb2NhbCgpICsgMTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9
IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKKyAgICAgICAgbnVtVG1wcyA9IGNv
ZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CisgICAgfSBl
bHNlIHsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpOworICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bVRtcHMo
KTsKKyAgICB9CiAgICAgCiAgICAgLy8gQ3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdyZSBhdCBp
bmRleCA9PSAwIHRoZW4gdGhpcyBtdXN0IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAgLy8gZmFp
bHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwgdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1cC4gVGhl
IHJlY292ZXJpZXMgc2hvdWxkCiAgICAgLy8gcmVmbGVjdCB0aGlzLgogICAgIGlmICghaW5kZXgp
IHsKLSAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgICAgIC8vIFdlIGRv
bid0IGluY2x1ZGUgdG1wcyBoZXJlIGJlY2F1c2UgdGhleSBjYW4ndCBiZSB1c2VkIHlldC4KKyAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcywgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICB2
YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0g
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9y
SW5kZXgoaSkpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmll
cy5vcGVyYW5kRm9ySW5kZXgoaSkudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0xNzEsMTIg
KzE3OCwxMyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAg
ICAgICAgc3RhcnRJbmRleC0tOwogICAgIAogICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEgbW9jay11
cCBvZiB0aGUgREZHJ3Mgc3RhdGUgYW5kIGV4ZWN1dGUgdGhlIGV2ZW50cy4KLSAgICBPcGVyYW5k
czxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG51bVZhcmlhYmxlcyk7CisgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2Vz
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMsIG51bVRtcHMpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgaS0tOykKICAgICAgICAg
b3BlcmFuZFNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgIEhhc2hN
YXA8TWluaWZpZWRJRCwgTWluaWZpZWRHZW5lcmF0aW9uSW5mbz4gZ2VuZXJhdGlvbkluZm9zOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBpbmRleDsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50ID0gYXQoaSk7CisgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGV2ZW50ICIsIGV2ZW50KTsKICAgICAgICAgc3dpdGNo
IChldmVudC5raW5kKCkpIHsKICAgICAgICAgY2FzZSBSZXNldDoKICAgICAgICAgICAgIC8vIG5v
dGhpbmcgdG8gZG8uCkBAIC0xOTgsMjEgKzIwNiwyMyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50
U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhh
c09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVy
YW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3Vy
Y2UoZXZlbnQuaWQoKSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJh
bmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRP
cGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKLSAgICAgICAgICAgIGlm
IChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0g
ICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJl
Z2lzdGVyKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3Rl
cigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNl
cy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNv
dXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9y
bWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQor
CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgc291cmNlczogIiwgb3BlcmFuZFNv
dXJjZXMpOwogICAgIAogICAgIC8vIFN0ZXAgMzogQ29tcHV0ZSB2YWx1ZSByZWNvdmVyaWVzIQot
ICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KE9wZXJhbmRzTGlrZSwgb3BlcmFuZFNvdXJjZXMpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcGVyYW5kU291cmNlcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBWYWx1ZVNvdXJjZSYgc291cmNlID0gb3BlcmFuZFNvdXJjZXNbaV07CiAgICAgICAg
IGlmIChzb3VyY2UuaXNUcml2aWFsbHlSZWNvdmVyYWJsZSgpKSB7CkBAIC0yMzAsNiArMjQwLDcg
QEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIE1p
bmlmaWVkTm9kZSogbm9kZSA9IGdyYXBoLmF0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgTWluaWZp
ZWRHZW5lcmF0aW9uSW5mbyBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChzb3VyY2UuaWQoKSk7
CiAgICAgICAgIGlmICghaW5mby5hbGl2ZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIk9wZXJhbmQgIiwgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBp
cyBkZWFkLiIpOwogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUmVj
b25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICAgICAgICAgIHJlY29yZFVuZGVm
aW5lZE9wZXJhbmQoaSk7CkBAIC0yMzcsNiArMjQ4LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KIAogICAgICAgICBpZiAodHJ5VG9TZXRD
b25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgbm9kZSkpIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5k
Rm9ySW5kZXgoaSksICIgaXMgY29uc3RhbnQuIik7CiAgICAgICAgICAgICBpZiAoc3R5bGUgPT0g
UmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmhhc0NvbnN0YW50KCkgJiYgbm9kZS0+Y29uc3RhbnQoKSA9PSBqc1VuZGVmaW5lZCgpKQog
ICAgICAgICAgICAgICAgICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjY2LDcg
KzI3OCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oaW5mby51LnZpcnR1YWxSZWcpLCBpbmZvLmZvcm1hdCk7CisgICAgICAgICAgICBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soaW5mby51Lm9wZXJhbmQudmlydHVhbFJl
Z2lzdGVyKCksIGluZm8uZm9ybWF0KTsKICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJlY29uc3Ry
dWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3Bh
bihvcGVyYW5kU291cmNlcy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAppbmRleCAwMTU3MzAwN2VkZGRkNzBmMzFkMTdh
YzBkOTlmNzhlYmY1ZWE2ZWJjLi5lOWU0M2FiZmVjNDg1ZmVjN2U2NjMxNTFjMWMyMmVjNTE4OTc0
MTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uaApAQCAtNDIsOSArNDIsMTIgQEAgc3RydWN0IFVuZGVmaW5lZE9wZXJhbmRTcGFu
IHsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9yPFZhcmlh
YmxlRXZlbnQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
cHVibGljOgogICAgIHZvaWQgYXBwZW5kQW5kTG9nKGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50
KQogICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBsb2dFdmVudChldmVu
dCk7CiAgICAgICAgIGFwcGVuZChldmVudCk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDc4MWI3MWU2OTI0MzgyODY0
ODk3ZWZmN2Y5ZGU2OGU0ZWU0ZWJmMWQuLjMyY2JjMTA3NmRlNTlkYWE0YTcyN2RhYzdkNzVmYmRj
YTYwN2RlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKQEAgLTE5MSw2ICsxOTEsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVj
dEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRW
YXJhcmdzOgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgIGNhc2UgQnJhbmNoOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCmlu
ZGV4IDMwODBkYzM0NTA5YzczMzMyNGI4MTQzZDJhOTU0ZjA4ZWRhZjEzZmIuLmMwMDRmYWNjYzFh
ZDA1ZDM2Y2VkYmVkZjk2NzgyYWFiN2RjYjk4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTMxLDggKzMxLDcgQEAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogRm9yT1NSRW50cnlKSVRDb2RlOjpG
b3JPU1JFbnRyeUpJVENvZGUoKQotICAgIDogbV9ieXRlY29kZUluZGV4KFVJTlRfTUFYKQotICAg
ICwgbV9lbnRyeUZhaWx1cmVDb3VudCgwKQorICAgIDogbV9lbnRyeUZhaWx1cmVDb3VudCgwKQog
ewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
aW5kZXggOTQ1NjU3NzU1YTBlY2I3ODFjZmI4OWIxMWMzOWY5OGY3YTlhYmEzZC4uNDVlODFiY2Rk
YTI4ODE3M2ZlMTk5ZTg0YzY3YjlmODhjODAyNmQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jbGVhclN0YWNrRnJhbWUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUklu
Zm86OnJlZ1QwLCBjb2RlLmZyYW1lU2l6ZSgpKTsKIAogICAgICAgICAgICAgICAgICAgICBqaXQu
ZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jaykpOwogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNhdGNoRW50cnlwb2ludEluZGV4IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRv
Q2F0Y2hCeXRlY29kZUluZGV4LmtleXMoKSkgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIENvZGVCbG9jayB0byBoYXZl
IGEgd2VhayBwb2ludGVyIHRvIGl0c2VsZiBiZWNhdXNlCiAgICAgICAgIC8vIHRoYXQgd291bGQg
Y2F1c2UgaXQgdG8gYWx3YXlzIGdldCBjb2xsZWN0ZWQuCi0gICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwg
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICAgICAgbV9vdXQuc3Rv
cmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2so
KSkpLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KSk7CiAKICAgICAgICAgLy8gU3RhY2sgT3ZlcmZsb3cgQ2hlY2suCiAgICAgICAgIHVuc2lnbmVk
IGV4aXRGcmFtZVNpemUgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSAq
IHNpemVvZihSZWdpc3Rlcik7CkBAIC0zNTUsNyArMzU1LDcgQEAgcHVibGljOgogCiAgICAgICAg
ICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5j
bGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5k
czxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAg
ICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKQEAgLTEyODEsNiArMTI4MSw5IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQ2FsbEV2YWw6CiAgICAgICAgICAgICBjb21waWxlQ2FsbEV2YWwo
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAg
ICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1Myw3ICsxOTU2LDcgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KAogICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgp
LT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50
b0xvY2FsKCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29s
dXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCku
dG9Mb2NhbCgpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2Fs
KCkKQEAgLTE5NzIsNyArMTk3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlR2V0U3Rh
Y2soKQogICAgIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3Rh
dGUub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZvcm1hdCk7
CiAgICAgICAgIApAQCAtNzkyNiwxMyArNzkyOSwxMyBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgY29tcGlsZUdldENhbGxlZSgpCiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHNldEpT
VmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVNldENhbGxlZSgpCiAg
ICAgewogICAgICAgICBhdXRvIGNhbGxlZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTc5NDcsNyArNzk1
MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCiAgICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIo
bV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29u
c3RJbnQzMihtX25vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRTY29wZSgpCkBAIC05NTQyLDUxICs5NTQ1LDUxIEBA
IHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVu
Z3RoKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAg
IExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIAorICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKSk7CisKICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IHZtQ2FsbCgKICAgICAg
ICAgICAgIEludDMyLCBvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBqc0FyZ3VtZW50cywKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2Ug
dGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhp
cyBpcyBzYWZlCi0gICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50
ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAg
ICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUg
d2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAgICAgLy8g
cGFzdCB0aGUgc2l6aW5nLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0gICAgICAgIAorCiAgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNs
dWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOwogCi0gICAgICAg
IHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxs
cHRyLAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoLCBsZW5ndGhJbmNsdWRpbmdUaGlz
KSk7CisgICAgICAgIHNldEludDMyKGxlbmd0aEluY2x1ZGluZ1RoaXMpOworICAgIH0KIAorICAg
IHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9u
b2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1Ro
aXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCiAgICAgICAgIHNwZWN1
bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAot
ICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCisgICAgICAgICAgICBtX291dC5iaXRPciht
X291dC5pc1plcm8zMihsZW5ndGhJbmNsdWRpbmdUaGlzKSwgbV9vdXQuYWJvdmUobGVuZ3RoSW5j
bHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKSk7IAorCiAgICAgICAg
IG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNo
aW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9u
IGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9p
bnRlciBpbnN0ZWFkCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhl
ciBzaWxseS4gSWYgb3BlcmF0aW9uTG9hZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0
ZWFkCiAgICAgICAgIC8vIG9mIGEgVmlydHVhbFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRv
IGRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDE2NjAKICAgICAgICAgTFZhbHVlIG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0g
ICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0
KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKKyAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNz
Rm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAogICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoMykpOwogICAgICAgICAKICAgICAgICAgdm1DYWxsKAogICAg
ICAgICAgICAgVm9pZCwgb3BlcmF0aW9uTG9hZFZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksCiAgICAgICAgICAgICBtX291dC5jYXN0VG9JbnQzMihtYWNoaW5lU3RhcnQpLCBqc0Fy
Z3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpLAotICAgICAgICAgICAgbGVu
Z3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICAgICAg
ICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5
TWluaW11bSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncygp
CiAgICAgewotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAgTm9k
ZSogYXJndW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmIChtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1f
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkgewogICAgICAgICAgICAgICAgIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05NTk1LDUwICs5NTk4LDI3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpKQotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9u
b2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgICAg
ICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgIExWYWx1
ZSBsZW5ndGggPSBudWxscHRyOyAKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMg
PSBudWxscHRyOwotICAgICAgICBBcmd1bWVudHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0
QXJndW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIGlmIChhcmd1bWVudHNM
ZW5ndGguaXNLbm93bikgewotICAgICAgICAgICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1
bWVudHNMZW5ndGgua25vd247Ci0gICAgICAgICAgICBpZiAoa25vd25MZW5ndGggPj0gZGF0YS0+
b2Zmc2V0KQotICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0ga25vd25MZW5ndGggLSBkYXRh
LT5vZmZzZXQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAga25vd25MZW5ndGgg
PSAwOwotICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7
Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93
bkxlbmd0aCArIDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBi
dXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCi0gICAgICAgICAgICBpZiAoIWRhdGEtPm9m
ZnNldCkKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHNMZW5ndGgudmFsdWU7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9
IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50
MzIoMCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRh
dGEtPm9mZnNldCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xh
cmdlciwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJn
ZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9v
dXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVz
dWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBt
X291dC5hZGQobGVuZ3RoLCBtX291dC5jb25zdEludDMyKDEpKTsKLSAgICAgICAgfQotCisgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OworICAg
ICAgICBMVmFsdWUgY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpczsgCisgICAgICAg
IGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkgeworICAgICAgICAgICAgTFZhbHVlIGZpeGVk
TGVuZ3RoID0gbV9vdXQuc3ViKGNhbGxlckxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0
SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBtX291dC5zZWxlY3QobV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKGZpeGVkTGVu
Z3RoLCBtX291dC5pbnQzMlplcm8pLCBmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvLCBTZWxl
Y3RQcmVkaWN0YWJpbGl0eTo6UHJlZGljdGFibGUpOworICAgICAgICB9IGVsc2UgCisgICAgICAg
ICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhpczsKKwor
ICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbV9vdXQuc3ViKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1f
b3V0LmludDMyT25lKTsKICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICBtX291dC5hYm92ZShsZW5n
dGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwogICAgICAg
ICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5vZmZzZXQ7CiAgICAgICAgIExWYWx1ZSBzb3VyY2VT
dGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApOwogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEt
Pm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIApAQCAtOTY5Nyw2NSArOTY3NywyMCBAQCBwcml2YXRl
OgogICAgICAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRp
b24gYXMgdGhlIGNvZGUgYWJvdmUsIGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KICAg
ICAgICAgaWYgKCFudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudHNMZW5ndGgudmFsdWU7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlQzMl9NSU4p
KTsKIAotICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUs
IG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAotICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAg
bV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRp
b24pKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xh
cmdlciwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3Ro
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1f
b3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSk7Ci0gICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9y
RXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgIHJldHVybiBt
X291dC5zZWxlY3QobV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKGZpeGVkTGVuZ3RoLCBtX291dC5p
bnQzMlplcm8pLCBmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJaZXJvLCBTZWxlY3RQcmVkaWN0YWJp
bGl0eTo6UHJlZGljdGFibGUpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJh
cmdzV2l0aFNwcmVhZCgpCiAgICAgewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSos
IExWYWx1ZSwgV1RGOjpEZWZhdWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpO
dWxsYWJsZUhhc2hUcmFpdHM8SW5saW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7
Ci0KLSAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVk
IG51bWJlck9mU3RhdGljQXJndW1lbnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4g
c3ByZWFkTGVuZ3RoczsKLQotICAgICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVj
dXJzYWJsZUxhbWJkYShbJl0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAg
ICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAg
ICAgICAgc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBo
YW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJp
dFZlY3RvciA9IHRhcmdldC0+Yml0VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRhcmdldC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYobV9ncmFwaC52YXJBcmdDaGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNB
cmd1bWVudHM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3
QXJyYXlCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyAr
PSB0YXJnZXQtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBB
U1NFUlQodGFyZ2V0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAg
IHNwcmVhZExlbmd0aHMuYXBwZW5kKGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNh
bGxGcmFtZSwgWyZdICgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFk
TGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKTsKLSAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIGNvbGxlY3RBcmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExW
YWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZT
dGF0aWNBcmd1bWVudHMpOwotICAgICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5n
dGhzKQotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJ
bmNsdWRpbmdUaGlzLCBsZW5ndGgpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgK
QEAgLTk3NjYsNyArOTcwMSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0
YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAg
YXV0byBmb3J3YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVh
ZExlbmd0aHMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBz
dG9yZUluZGV4KSAtPiBMVmFsdWUgeworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1
cnNhYmxlTGFtYmRhKFt0aGlzLCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0
LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQt
Pm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJn
ZXQtPmNoaWxkMSgpLm5vZGUoKSwgc3RvcmVJbmRleCk7CiAKQEAgLTk3OTgsOCArOTczMyw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhh
bnRvbUNyZWF0ZVJlc3QpOwogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAg
ICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5s
aW5lQ2FsbEZyYW1lLCB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAg
ICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFk
TGVuZ3Rocy5nZXQoaW5saW5lQ2FsbEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAg
ICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5s
aW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFs
dWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5s
aW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsK
IAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAt
MTIyNTQsOCArMTIxOTAsOCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZy
YW1lLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAg
ICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1f
aGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5z
dG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSks
IHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBt
X291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDAp
KSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hp
Y2tlbl9QYWNrZXRfY2FsbGVlKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tl
dCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAt
MTIzMTYsNyArMTIyNTIsNyBAQCBwcml2YXRlOgogICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVu
Z3RoOwogCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgIGxlbmd0aC5rbm93biA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAgbGVuZ3RoLmtu
b3duID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgICAgIGxlbmd0aC5pc0tub3duID0gdHJ1ZTsK
ICAgICAgICAgICAgIGxlbmd0aC52YWx1ZSA9IG1fb3V0LmNvbnN0SW50MzIobGVuZ3RoLmtub3du
KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEyMzQ2LDcgKzEyMjgyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5jYWxs
ZWVSZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgcmV0dXJuIHdlYWtQ
b2ludGVyKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpOworICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAg
IExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgdW5zaWduZWQgb2Zmc2V0ID0gMCkKQEAgLTE3NjExLDcgKzE3NTQ3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKICAgICAgICAgbV9vdXQuc3RvcmUz
MigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAot
ICAgICAgICAgICAgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAg
ICAgICAgIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkpKTsKICNpZiAhVVNFKEJVSUxUSU5fRlJBTUVfQUREUkVTUykgfHwgIUFTU0VSVF9ESVNBQkxF
RAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJzb2x1dGUoJnZt
KCkudG9wQ2FsbEZyYW1lKSk7CiAjZW5kaWYKQEAgLTE3NzE5LDcgKzE3NjU1LDggQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9y
cy5hbGxvYygKICAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9maWxlLAogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpOwor
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwK
KyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mVG1wcygpKTsK
ICAgICB9CiAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0xNzgyNCwxNSArMTc3NjEsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdERlc2NyaXB0
b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tp
XTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NS
RXhpdExpdmVuZXNzKCkKICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fcGxhbi5tb2RlKCkg
IT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmls
aXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCksIGV4aXRPcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWlsYWJs
ZTogb3BlcmFuZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwgYXZhaWxhYmlsaXR5
ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOwor
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xp
dmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwg
bm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJpbGl0eSA9ICIs
IGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVGb3JB
dmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICBp
ZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQpAQCAtMTgxMzIsMzkg
KzE4MDY5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5hbHJlYWR5UmVnaXN0
ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgfQogICAgIAot
ICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwgcHRy
ZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJh
c2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwg
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJp
YWJsZXNbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7CiAgICAg
fQotICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkK
KyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5bG9h
ZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIGlu
dCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQg
b3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQs
IFRhZ09mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKGludCBvcGVy
YW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihP
cGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBvZmZzZXQpOwog
ICAgIH0KICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5pc0xv
Y2FsKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5k
Lm9mZnNldCgpLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFt
ZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihP
cGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zvcihv
cGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0Zvcihp
bnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAg
ICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAg
ICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4IDkzMzE3NzEwZjZk
MDY4NjA5MTliYzAwMjUzMTNhMTMyMTkwNDQ5MTkuLjA5MWU3ZjNjOWI0OTgzNDA3NmE4ZDZmOTE3
NDJjY2I1Y2FkNWVhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnku
Y3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAgZGF0
YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsKICAgICAKICAgICBm
b3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0t
OykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1ZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkuYXNhblVuc2FmZUpTVmFsdWUoKTsKICAgICAg
ICAgT3B0aW9uYWw8SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVzLmFyZ3VtZW50
KGFyZ3VtZW50KTsKICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFsdWUgJiYgdmFsdWVPblN0
YWNrID09IHJlY29uc3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJndW1lbnQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCmlu
ZGV4IDA5OTU4ZDJjNGY5YTVkODliNWZiYmI2NWY4NmJiNmRhYmNkZjE4ZTMuLjA0Yzg1Nzk5ZTRk
NDY5MjNhMzE4NjcxOGUxOWYyNGJkZmZkYWJhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0LmNwcApAQCAtNDcsMTAgKzQ3LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7
CiAKIE9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcigKICAgICBEYXRhRm9ybWF0
IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJv
ZmlsZSwKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZM
b2NhbHMpCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9m
TG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpCiAgICAgOiBtX3Byb2ZpbGVEYXRhRm9ybWF0
KHByb2ZpbGVEYXRhRm9ybWF0KQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQot
ICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzKQorICAgICwg
bV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzLCBudW1iZXJPZlRtcHMp
CiB7CiB9CiAKQEAgLTExNyw1ICsxMTcsMyBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAppbmRleCBkYTg3Y2NmMzI3M2ZlNGJl
MzYwNjgzYjhhZjNiYmY1MTZkNjIyNWViLi5mZDdmOWYwNWJjNDg5YzFmNmFlY2UwOTdhZDhhNGQx
ZTI3YjgwMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaApAQCAtNjks
NyArNjksNyBAQCBzdHJ1Y3QgT1NSRXhpdEhhbmRsZTsKIHN0cnVjdCBPU1JFeGl0RGVzY3JpcHRv
ciB7CiAgICAgT1NSRXhpdERlc2NyaXB0b3IoCiAgICAgICAgIERhdGFGb3JtYXQgcHJvZmlsZURh
dGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsCi0gICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWdu
ZWQgbnVtYmVyT2ZUbXBzKTsKIAogICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZXhp
dCBjYWxsIG1heSBiZSBhIHZhbHVlIHdlIHdpc2ggdG8gcHJvZmlsZS4KICAgICAvLyBJZiB0aGF0
J3MgdGhlIGNhc2UsIHRoZSBmb3JtYXQgd2lsbCBiZSBub3QgSW52YWxpZCBhbmQgd2UnbGwgaGF2
ZSBhCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAKaW5kZXggNjY0ZDNiOTg4YWY3ZWE4M2Y2ZmI4MmJjYjNhOGMwYTg4MTc2ZWU3Mi4uYTM3ODQx
MGRhOWI4MDE1NzI0YTlkYzE2YzNmZTFhZWMwODA1NWQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5j
bHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaCIKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgi
CiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtMzcsMTAgKzM4LDExIEBACiAjaW5jbHVkZSAi
RlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMU2F2
ZVJlc3RvcmUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVk
ZSAiT3BlcmFuZHNJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IlByb2JlQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAg
LTQ3NCwxNiArNDc2LDUyIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWdu
ZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAKICAgICBzaXplX3Qg
YmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyAgICBpZiAoZXhpdC5t
X2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgeworICAg
ICAgICBhdXRvKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIGV4aXQubV9kZXNjcmlwdG9yLT5tX3Zh
bHVlcy50bXBJbmRleCgwKTsKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBqaXQu
cHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0byBh
ZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgs
IHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+
Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgc2lk
ZVN0YXRlLT50bXBzW2ldID0gdG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKworICAgICAgICAg
ICAgICAgIHZtUHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNp
ZGVTdGF0ZSkpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdp
biogY29kZU9yaWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4
dC5ncHI8Q2FsbEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAg
ICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNv
ZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5s
aW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAg
ICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
ICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgp
OworICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFt
ZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUt
PnJldHVyblBDT2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5k
ZXgsIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgaWYgKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVj
b2RlSW5kZXgoKTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAg
YWRkU2lkZVN0YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOwor
ICAgIH0KKwogICAgIC8vIE5vdyBnZXQgc3RhdGUgb3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBh
bmQgcGxhY2UgaXQgYmFjayBpbnRvIHRoZSBzdGFjay4gVGhlIHZhbHVlcyBhcmUKICAgICAvLyBh
bHJlYWR5IHJlYm94ZWQgc28gd2UganVzdCBtb3ZlIHRoZW0uCiAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMu
dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKwor
ICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGlu
dD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQorICAgICAgICBpZiAo
b3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+
KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpy
ZWdUMCk7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IocmVnKSk7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkp
OwogICAgIH0KICAgICAKICAgICBoYW5kbGVFeGl0Q291bnRzKHZtLCBqaXQsIGV4aXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKaW5kZXggN2Y3Y2QzODMy
NDk2MWE4ZmY0ZTQ3MjU5YTg4NGRlODZkNTY0YjExNy4uMTAyYzFlNmExYmQ5ZWIzYjQ3MTMzNzQ0
Zjg0M2VjNjRkNjNhMThmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUihKU0dsb2JhbE9iamVjdCoKICAg
ICAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9t
IGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxz
IGZyb20KICAgICAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkuc2V0
KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgICAgICBjb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJmbHkp
LnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAKaW5kZXggNzQ5MzNkYzYwNTE1YzVkYTAwZWExOGZjN2Q1ZGIzYWQ5Y2U1
ZTljZi4uZDU3ZmIxZWVhODA0NGEzNGI3OTE3NjhhOTA5NzY5ODk5OGFjMzM5MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1NSwxNSArNjU1LDM3IEBAIExW
YWx1ZSBPdXRwdXQ6Om5vdFplcm82NChMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgdmFs
dWUsIGludDY0WmVybyk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFsdWUs
IExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKQorTFZhbHVlIE91dHB1dDo6c2VsZWN0KExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgU2VsZWN0UHJlZGljdGFiaWxp
dHkgcHJlZGljdGFiaWxpdHkpCiB7CiAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKSB7CiAgICAg
ICAgIGlmICh2YWx1ZS0+YXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHRha2VuOworICAg
ICAgICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBu
b3RUYWtlbjsKKyAgICAgICAgICAgIHJldHVybiByaWdodDsKICAgICB9Ci0gICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCks
IHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOworCisgICAgaWYgKHByZWRpY3RhYmlsaXR5ID09IFNl
bGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSkKKyAgICAgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZh
bHVlLCBsZWZ0LCByaWdodCk7CisKKyAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBuZXdC
bG9jaygpOworICAgIExCYXNpY0Jsb2NrIGxlZnRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsKKyAg
ICBMQmFzaWNCbG9jayByaWdodFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworCisgICAgbV9ibG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBtX3Byb2MsIEIzOjpCcmFuY2gsIG9y
aWdpbigpLCB2YWx1ZSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGxlZnRUYWtlbkJsb2NrLCBw
cmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UmlnaHRMaWtlbHkgPyBGcmVx
dWVuY3lDbGFzczo6Tm9ybWFsIDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBGcmVx
dWVudGVkQmxvY2socmlnaHRUYWtlbkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQcmVk
aWN0YWJpbGl0eTo6TGVmdExpa2VseSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVu
Y3lDbGFzczo6UmFyZSkpOworCisgICAgTFZhbHVlIHBoaSA9IGNvbnRpbnVhdGlvbi0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6UGhpLCBsZWZ0LT50eXBlKCksIG9yaWdpbigpKTsK
KworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2lsb25WYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgbGVmdCwgcGhpKTsKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2Nr
KGNvbnRpbnVhdGlvbikpOworCisgICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVw
c2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcmlnaHQsIHBoaSk7CisgICAgcmlnaHRUYWtl
bkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCks
IEIzOjpGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICBtX2Jsb2NrID0gY29u
dGludWF0aW9uOworICAgIHJldHVybiBwaGk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21pY1hj
aGdBZGQoTFZhbHVlIG9wZXJhbmQsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0aCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5MzYy
YjNiZGNhMGZkNDZhMDNhYTU3MGNhMmUuLjRjMDJiMzQwODUxNDZmN2RmMDI1NjI3ZDVmZjMxYzc4
MTBkOGZiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKICNpbmNsdWRlICJGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMQ29tbW9uVmFsdWVzLmgiCisj
aW5jbHVkZSAiRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5o
IgogI2luY2x1ZGUgIkZUTFN3aXRjaENhc2UuaCIKICNpbmNsdWRlICJGVExUeXBlZFBvaW50ZXIu
aCIKQEAgLTM2NSw3ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHRlc3RJc1plcm9QdHIo
TFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNOdWxsKGJpdEFuZCh2YWx1ZSwg
bWFzaykpOyB9CiAgICAgTFZhbHVlIHRlc3ROb25aZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IG1hc2spIHsgcmV0dXJuIG5vdE51bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KIAotICAgIExW
YWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbik7
CisgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5v
dFRha2VuLCBTZWxlY3RQcmVkaWN0YWJpbGl0eSA9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQ
cmVkaWN0YWJsZSk7CiAgICAgCiAgICAgLy8gVGhlc2UgYXJlIHJlbGF4ZWQgYXRvbWljcyBieSBk
ZWZhdWx0LiBVc2UgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZWRBY2Nlc3Mo
KSB3aXRoIGEKICAgICAvLyBub24tbnVsbCBoZWFwIHRvIG1ha2UgdGhlbSBzZXFfY3N0IGZlbmNl
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGlj
dGFiaWxpdHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFi
aWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hMTg1M2JhOTg1MjJhYWFjNjFiODQ5OTU1Mjc5NGE1MDkzMGM3
ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxl
Y3RQcmVkaWN0YWJpbGl0eS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworbmFtZXNwYWNlIEpTQzo6RlRMIHsKKworZW51bSBjbGFzcyBTZWxlY3RQcmVkaWN0
YWJpbGl0eSA6IHVpbnQ4X3QgeworICAgIE5vdFByZWRpY3RhYmxlLAorICAgIFByZWRpY3RhYmxl
LAorICAgIExlZnRMaWtlbHksCisgICAgUmlnaHRMaWtlbHksCit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA2OTM0YzNmMGQzNzkxZjY0YmE0Mjk2
M2UwNTU2M2RiYmM3ZGRhNWE0Li5jNzI2YWQyN2M4MTVhYzY3YTY3MGQyNTgwNGFhOGNhZTIyYjNh
MGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKQEAg
LTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBpZiAoY2Fs
bFNpdGVJbmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSkpOwogICAgIH0KICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih2bSwg
dXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLCByZXN1bHRHUFIs
IGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0NoZWNrcG9pbnRzLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9D
aGVja3BvaW50cy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmE1ZjUyNzdkZDYzMWFjZDRjY2JlY2QxNGIyNGNj
NWQ0YTM5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9DaGVja3BvaW50cy5yYgpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitjbGFzcyBDaGVja3BvaW50CisgICAgYXR0cl9yZWFkZXIgOnVz
ZXMKKyAgICBhdHRyX3JlYWRlciA6ZGVmcworICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0
cl9yZWFkZXIgOmluZGV4CisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBpbmRleCwgdG1wcykK
KyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBpbmRleCA9IGluZGV4CisgICAgICAgIEB1
c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDp1c2UgfQorICAg
ICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9PSA6ZGVm
aW5lIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcyhuYW1lc3BhY2UpCisgICAgICAgIEVP
RjwtLQorICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9OgorRU9GCisgICAgZW5kCitlbmQK
KworY2xhc3MgQ2hlY2twb2ludHMKKyAgICBkZWYgaW5pdGlhbGl6ZShvcGNvZGUsIHRtcHMsIGNo
ZWNrcG9pbnRzKQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEB0bXBzID0gdG1w
cworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXBfd2l0aF9pbmRleCB7IHwo
bmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhuYW1lLCBpbmRleCwgdG1wcykgfQor
ICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzCisgICAgICAgIEBjaGVja3BvaW50cy5lYWNoIGRv
IHxjaGVja3BvaW50fAorCisgICAgICAgIGVuZAorICAgICAgICBFT0Y8LS0KK0JpdE1hcDxtYXhO
dW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBpdGFsaXplZF9uYW1lfSh1aW50OF90
IGNoZWNrcG9pbnQpCit7CisgICAgc3dpdGNoIChjaGVja3BvaW50KSB7CisKKyAgICB9Cit9CitF
T0YKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5y
YgppbmRleCBkYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNlYmI0ZjBhYjI0NDg1Li5jZmQ5ZGYx
NTExNDdhODZkYTRiYzc1YmU0NmE2NzgyNWUyNTM3NWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBPcGNvZGUKICAg
ICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVyIDptZXRhZGF0YQogICAgIGF0dHJf
cmVhZGVyIDpleHRyYXMKKyAgICBhdHRyX3JlYWRlciA6Y2hlY2twb2ludHMKIAogICAgIG1vZHVs
ZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXplOjpOYXJyb3ciCkBAIC00NSwxMiAr
NDYsMTQgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAogICAgIGVuZAogCi0gICAgZGVmIGlu
aXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFf
aW5pdGlhbGl6ZXJzKQorICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywg
YXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycywgdG1wcywgY2hlY2twb2ludHMp
CiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAgICBAbmFtZSA9IG5hbWUKICAgICAg
ICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBAbWV0YWRhdGEgPSBNZXRhZGF0YS5u
ZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwogICAgICAgICBAYXJncyA9IGFyZ3Mu
bWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwgaW5kZXh8IEFyZ3VtZW50Lm5ldyBh
cmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFyZ3MubmlsPworICAgICAgICBAdG1w
cyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwIHsgfChjaGVj
a3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5uaWw/CiAgICAgZW5k
CiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTE4LDYgKzEyMSw4IEBAIGNsYXNzIE9wY29kZQog
ICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVibGljIEluc3Ry
dWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9CisgICAgI3tjaGVja3BvaW50
VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTEzMiw2ICsxMzcsMTggQEAgRU9G
CiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBvcGNvZGVJRCA9ICN7
bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMKKyAgICAgICAgcmV0
dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJlbnVtIENoZWNrcG9pbnRzIDog
dWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9pbnR8ICIgICAgICAg
ICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9mQ2hlY2twb2ludHMs
IiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAgICBkZWYgdGVtcHMKKyAgICAg
ICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVudW0gVG1wcyA6IHVpbnQ4X3Qg
eyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAgI3t0bXB9LCJ9KS5w
dXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYgZW1pdHRlcgogICAg
ICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJRFR5cGUsIDApCiAg
ICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29kZUlEVHlwZSwgMCkK
QEAgLTIwMCw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wY29kZVNpemUgX19z
aXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5lcmF0b3I+CiAgICAg
c3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7dHlwZWRfYXJnc30j
e21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3BvaW50cy5uaWw/ID8g
Imdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBpZiAoX19zaXplID09
IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25XaWRlT3Bjb2RlMTYo
KTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUzMikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAyMDRhYzc1OWUxM2Vm
ZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRjMjNjYzBlYmVjMTBl
Nzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9u
LnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAKICAgZGVmIGNyZWF0
ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBjb25m
aWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdbOm1l
dGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNvbmZp
Z1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6bWV0
YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpjaGVja3BvaW50c10p
CiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29kZXMsIGNvbmZpZykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5k
ZXggZjYzOTRhYzcxMDcxMjViN2NhYjIxYWQyYjkxMTNjMDc5NTM2YTYwMC4uNmUwYmIxZWMxMzhi
OWVhYjZjODA5NzZkZGJjNGVkYzMwNjk1YjMzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTkwLDIyICs5MCwyMiBAQCBib29sIENh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIAogdW5zaWdu
ZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRo
aXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCk7CisgICAgcmV0dXJuIHRoaXNb
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFnKCk7CiB9
CiAKIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3
Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudF0udW5zYWZlVGFnKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udW5zYWZlVGFnKCk7CiB9CiAKIENhbGxTaXRlSW5k
ZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleDo6ZnJvbUJpdHMoY2FsbFNpdGVBc1Jhd0JpdHMoKSk7CiB9CiAKIFNVUFBS
RVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBj
b25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyh1
bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpICYgKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSA+PiBCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQpKTsKIH0KIAogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCkBAIC0xMTYsOCArMTE2LDggQEAgY29uc3QgSW5zdHJ1Y3Rpb24qIENh
bGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50
VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7Ci0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZShCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odnBjKSkpOwotICAgIHRoaXNb
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7Cisg
ICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSgqdnBjKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGlu
dD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnRhZygpID0gY2FsbFNpdGUuYml0cygp
OwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQo
KSBjb25zdApAQCAtMTM3LDcgKzEzNyw4IEBAIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6
OmN1cnJlbnRWUEMoKSBjb25zdAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9j
aygpLT5ieXRlY29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOwor
ICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0u
dGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMp
OwogfQogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQo
KSBjb25zdApAQCAtMTY2LDcgKzE2Nyw3IEBAIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1lOjpieXRl
Y29kZUluZGV4KCkKICAgICB9CiAjZW5kaWYKICAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0
ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNC
eXRlY29kZU9mZnNldCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5k
ZXgoKTsKIH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTgwLDcg
KzE4MSw3IEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKICAgICAgICAgcmV0
dXJuIGNvZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICBy
ZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZz
ZXQoKSkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUlu
ZGV4KCkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IGNm
Yjc3MTg1NjAzOTkzMzkxMDA0ZmMxMzIxMTgzODQyM2M1ZGM2YTkuLmYxMjRjNDgxMjFiZTA4NDMy
ZjUxM2IyMTBhZjhlMDc5MmRkODYyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTdGFja1Zp
c2l0b3IuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKKyNp
bmNsdWRlIDx3dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaD4KIAogbmFtZXNwYWNlIEpT
QyAgewogCkBAIC00NSwxOSArNDYsMzIgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIHB1YmxpYzoK
ICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKICAgICAgICAgCisjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KQorICAgICAgICAgICAgOiBtX2JpdHMoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkKKyAgICAgICAg
eyAKKyAgICAgICAgICAgIEFTU0VSVCghYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworICAg
ICAgICB9CisjZWxzZQorICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KGNvbnN0IEluc3Ry
dWN0aW9uJiBpbnN0cnVjdGlvbikKKyAgICAgICAgICAgIDogbV9iaXRzKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3Q+KCZpbnN0cnVjdGlvbikpCiAgICAgICAgIHsgfQorI2VuZGlmCiAKLSAgICAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUlu
ZGV4OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRl
eDsgfQorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X2JpdHM7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAgICAg
dWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsg
fQorICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisgICAg
ICAgIHN0YXRpYyBDYWxsU2l0ZUluZGV4IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpIHsgcmV0dXJu
IENhbGxTaXRlSW5kZXgoYml0cyk7IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRz
KCkpOyB9CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENhbGxTaXRlSW5kZXgodWludDMyX3Qg
Yml0cykKKyAgICAgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQogICAgIHByaXZh
dGU6Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50
MzJfdCBtX2JpdHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfTsKICAgICB9OwogCiAgICAg
Y2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBA
IC02NSw3ICs3OSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4Ojpmcm9tQml0cyhiaXRzKSkKKyAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChi
aXRzKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNzgsMjQgKzkyLDI3IEBAIG5hbWVzcGFj
ZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJu
IHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAg
ICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAg
YWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVyblBDOworICAgICAg
ICBhbGlnbmFzKENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBz
aXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9m
KFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJl
Y3QuIik7CiAKLSAgICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsK
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY2FsbGVlID0gY29kZUJsb2NrICsgMTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYXJndW1lbnRDb3VudCA9IGNhbGxlZSArIDE7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQg
KyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdEFyZ3VtZW50ID0gdGhpc0Fy
Z3VtZW50ICsgMTsKKyAgICBlbnVtIGNsYXNzIENhbGxGcmFtZVNsb3QgOiBpbnQgeworICAgICAg
ICBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsCisgICAgICAg
IGNhbGxlZSA9IGNvZGVCbG9jayArIDEsCisgICAgICAgIGFyZ3VtZW50Q291bnQgPSBjYWxsZWUg
KyAxLAorICAgICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50ICsgMSwKKyAgICAgICAg
Zmlyc3RBcmd1bWVudCA9IHRoaXNBcmd1bWVudCArIDEsCiAgICAgfTsKIAorICAgIE9WRVJMT0FE
X01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNs
b3QpCisgICAgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lU
SF9JTlRFR1JBTFMoQ2FsbEZyYW1lU2xvdCkKKwogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJl
bnQgc3RhdGUgb2Ygc2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rpb25zLgogICAgIGNsYXNzIENhbGxGcmFtZSA6IHByaXZh
dGUgUmVnaXN0ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIDE7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IHN0
YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkgKyAxOwogCiAgICAg
ICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lm
aWMgY2lyY3Vtc3RhbmNlcwogICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBj
YWxsZWUgY2FuJ3QgYmUgYSBXYXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMjMsMTAg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFu
ZCBpZiBpdCdzIG5vdCwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNW
YWx1ZSBndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNP
YmplY3QqIGpzQ2FsbGVlKCkgY29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29u
c3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRl
cigpKTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNh
blVuc2FmZVBvaW50ZXIoKSk7IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7
IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpXS5wb2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1
bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBh
ZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2Nr
Kio+KHRoaXMgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9j
ayoqIGFkZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2Rl
QmxvY2sqKj4odGhpcyArIHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSk7IH0KICAgICAgICAgaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2Rl
QmxvY2soKSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJl
Z2lzdGVyT2Zmc2V0KSBjb25zdDsKIApAQCAtMTgyLDE1ICsxOTksMTMgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICBzdGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVn
Z2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAg
ICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQg
ZnJvbSB0aGUgQ29kZUJsb2NrKS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAg
UmVnaXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVy
IGZvciBhIG5vbi1jb25zdGFudAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOwor
ICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAg
ICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8g
QWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMg
bWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1l
bnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAx
OyB9Ci0gICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsg
cmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpOyB9Cisg
ICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJu
IHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0ucGF5
bG9hZCgpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoaW50IGFyZ3VtZW50
KSB7IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCArIGFyZ3VtZW50KTsgfQog
ICAgICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhpbnQgYXJndW1l
bnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudCk7IH0K
IApAQCAtMjM5LDcgKzI1NCw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBKU1ZhbHVl
IGFyZ3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCk7CiAKLSAgICAgICAgc3RhdGlj
IGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVy
biBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCAtIDE7IH0KKyAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KIAogICAgICAgICBzdGF0aWMgQ2FsbEZy
YW1lKiBub0NhbGxlcigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAgICAgYm9vbCBpc0RlcHJl
Y2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpIGNvbnN0CkBAIC0yNTEsMTAgKzI2NiwxMCBAQCBu
YW1lc3BhY2UgSlNDICB7CiAgICAgICAgIGJvb2wgaXNTdGFja092ZXJmbG93RnJhbWUoKSBjb25z
dDsKICAgICAgICAgYm9vbCBpc1dhc21GcmFtZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lz
dGVyKj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0ucGF5bG9hZCgpID0gY291
bnQ7IH0KKyAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291
bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS5wYXlsb2FkKCkgPSBjb3VudDsgfQogICAgICAgICBp
bmxpbmUgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqKTsKICAgICAgICAgaW5saW5lIHZvaWQgc2V0
Q29kZUJsb2NrKENvZGVCbG9jayopOwotICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZh
bHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgSW5zdHJ1Y3Rpb24qPih2YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lk
KiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSB2YWx1ZTsgfQogCiAgICAg
ICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAppbmRleCBhOTdkZWNh
NTNiY2UxNzkyODliMGMzODBkMDRlOGYyYTg2MDQ3N2QxLi5lZTdlYzJhYjEwNGE3YTM0ZDk4YjBm
NDM4ZjY0NGMyZGNhMWM1MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMyLDUwICszMiwzOSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoaW50IGluZGV4KQot
ewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYg
KGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCiBpbmxpbmUgUmVnaXN0
ZXImIENhbGxGcmFtZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiByKHJl
Zy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRS
KGludCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07CisgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZ0
aGlzLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRSZWdpc3RlcihyZWcpKTsKKyAgICByZXR1cm4gdGhp
c1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVj
a2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5v
ZmZzZXQoKSk7CisgICAgQVNTRVJUKCFyZWcuaXNDb25zdGFudCgpKTsKKyAgICByZXR1cm4gdGhp
c1tyZWcub2Zmc2V0KCldOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBDYWxsRnJhbWU6Omd1YXJhbnRl
ZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgp
KTsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsKKyAg
ICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLmpz
VmFsdWUoKTsKIH0KIAogaW5saW5lIEpTT2JqZWN0KiBDYWxsRnJhbWU6OmpzQ2FsbGVlKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4gdGhpc1tD
YWxsRnJhbWVTbG90OjpjYWxsZWVdLm9iamVjdCgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19j
YXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ub2JqZWN0KCk7CiB9CiAKIGlubGluZSBD
b2RlQmxvY2sqIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhp
c1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsKKyAgICBy
ZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJl
Z2lzdGVyOjpjb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2Nr
KiBDYWxsRnJhbWU6OnVuc2FmZUNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNb
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygp
OworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKV0uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIEpTR2xv
YmFsT2JqZWN0KiBDYWxsRnJhbWU6OmxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKSBjb25zdApA
QCAtMTAyLDEyICs5MSwxMiBAQCBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OmlzV2FzbUZyYW1lKCkg
Y29uc3QKIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxl
ZSkKIHsKLSAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNh
bGxlZV0gPSBjYWxsZWU7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNf
Y2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gY2FsbGVlOwogfQogCiBpbmxpbmUg
dm9pZCBDYWxsRnJhbWU6OnNldENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAg
ICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10g
PSBjb2RlQmxvY2s7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldID0gY29kZUJsb2NrOwogfQogCiBpbmxp
bmUgdm9pZCBDYWxsRnJhbWU6OnNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Nj
b3BlKiBzY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwOWMz
YTFiZTRmNThkYWVhODA3ZTNiYWZlZjBkNGJhMDJmZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBUIGdldFRtcChzaXplX3Qgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50NjRfdCkpCisgICAgICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHRtcHNbb2Zmc2V0XSk7CisgICAgICAgIGVsc2UgaWYgY29u
c3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRtcHNbb2Zmc2V0XSkpOwor
ICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IHNpemVvZih1aW50MTZfdCkp
CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQxNl90
Pih0bXBzW29mZnNldF0pKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihUKSA9PSBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50OF90Pih0bXBzW29mZnNldF0pKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICB2b2lk
KiBuZXh0SW5zdHJ1Y3Rpb25KdW1wVGFyZ2V0OworICAgIHVpbnQ2NF90IHRtcHNbbWF4TnVtQ2hl
Y2twb2ludFRtcHNdOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZGFhOTRjODlmOTAwNWE5OTcyZmMwZTNiMDJl
Yjg5M2QyMTFjZGQ5Ny4uOGVmMWMzZDg1MGMyYzhhMDE1NDZmMmM4YTlkZWIzZDg1NDdhNWIzNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIz
LDcgKzEyNCw3IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRl
eCA9IGNhbGxlckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVy
U2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2Nv
cGVSZWdpc3RlcigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBj
YWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJs
b2NrKiBjYWxsZXJVbmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVu
bGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2ln
bmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBh
cmd1bWVudHMsIHVpbnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwogICAgIAorICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0
aCA+PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zm
c2V0OwogICAgIGVsc2UKQEAgLTI0OSw3ICsyNTMsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JW
YXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
LAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBm
aXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50
cy5pc0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUs
MzEgQEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkg
ewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50
cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5n
dGgpOworICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCkt
PmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwg
bGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlU
eXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJs
ZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpT
SW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAg
ICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAg
aWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xv
YmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0
KTsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RF
bGVtZW50RGVzdFtpXSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAg
ICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUt
PnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1l
bnREZXN0W2ldID0gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpA
QCAtMjk3LDggKzMwMSw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9h
ZFZhcmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisg
ICAgICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9m
ZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRz
LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsKQEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGlj
OgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAg
IG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0g
ICAgICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRs
aW5nIGluIGNoZWNrcG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYg
KG1fcmV0dXJuUEMgPT0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2lu
dF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVz
cygpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT52bSgpLmZpbmRDaGVja3BvaW50T1NS
U2lkZVN0YXRlKG1fY2FsbEZyYW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFtX2lzVGVy
bWluYXRpb24pIHsKICAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0aW9uSGFu
ZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsK
ICAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gU3RhY2tWaXNpdG9yOjpEb25lOwpAQCAtNTYxLDYgKzU2OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgaWYgKHNob3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNp
dG9yOjpEb25lOwogCisgICAgICAgIG1fcmV0dXJuUEMgPSBtX2NhbGxGcmFtZS0+cmV0dXJuUEMo
KS52YWx1ZSgpOwogICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICB9
CiAKQEAgLTU5Nyw2ICs2MDYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9u
OwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5k
bGVyOworICAgIG11dGFibGUgY29uc3Qgdm9pZCogbV9yZXR1cm5QQyB7IG51bGxwdHIgfTsKIH07
CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0s
IENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCkBAIC04NjYsNyAr
ODc2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgIH0KIAogICAgIFZNRW50cnlTY29w
ZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNT
YWZlVG9SZWN1cnNlU29mdCgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJz
ZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSkpOwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmpl
Y3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU08KICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2
bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNv
ZnQoKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBh
cmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93
RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaAppbmRleCA4NmMzMjQ2OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2EwLi5mZjFi
NGU4NjEwNGM5NjI1OTc3OWUyNTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4QXJndW1l
bnRzID0gMHgxMDAwMDsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25l
ZCBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiwgVk0mLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2FkVmFyYXJn
cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQz
Ml90IGxlbmd0aCk7CisgICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVl
IGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7
CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWlu
dDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUs
IHVpbnQzMl90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1ZmNlNDhl
Mzk2ZTIyYTg3NTQuLjc1ZGRkMjAzZjczYmUwNTc2ZDZkZDc0OGI2NWNiYWE5YWJiZmM3MzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJh
bWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAg
bV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGlu
ZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnJhbWUu
bV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAg
ICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUt
PnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwog
ICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCmluZGV4IDIyMDA5YzVmZDJiYTIyN2Q0N2NmZTg1NDkzOWY1MmRlZjJkNzFiYzIuLmUwNmNi
NDliMjk1ZGU1ZWM3YzE5ZGIyNGU3MzM4OWJhMzU1ZWRlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2NDcsMjggQEAgcHVibGlj
OgogICAgIH0KICNlbmRpZgogCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICog
c2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVu
dHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9Ci0gICAgdm9pZCBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcg
ZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVn
IGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
dG8pOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXI2NChpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
NjQoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9t
LCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNz
KGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAj
ZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBz
dG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFs
dWUsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2
YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVu
dHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0R2V0Q2FsbGVy
RnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8pCkBAIC02OTYsMTkgKzY5
NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlci4gT24gc29tZSBw
bGF0Zm9ybXMsIHRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgdGhlCiAgICAg
Ly8gImxpbmsgcmVnaXN0ZXIiIGNvbnRhaW5pbmcgdGhlIHJldHVybiBhZGRyZXNzIGluIHRoZSBm
dW5jdGlvbiBwcm9sb2d1ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAg
ICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9t
LCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKKyAg
ICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnku
b2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJv
bG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UKLSAgICB2b2lkIGVtaXRQ
dXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50
IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVBy
b2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAg
ICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9p
bnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICB9CiAK
LSAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0
ZWRJbW0zMiB0YWcsIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhl
YWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0g
cHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAg
ICAgfQogI2VuZGlmCiAgICAgCkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0Zv
cihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKE9wZXJhbmQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7
CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0
dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0
aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9y
KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5p
c1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3OCwzMCArMTE4MCwzMSBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAg
ICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxS
ZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KTsKICAg
ICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0
aWMgQWRkcmVzcyBwYXlsb2FkRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwor
ICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0
byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVG
cmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZp
cnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVy
RnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1l
QW5kUEM6OnNpemVJblJlZ2lzdGVycykpOworICAgICAgICBBU1NFUlQoc2xvdC5vZmZzZXQoKSA+
PSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2Fs
bGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7CiAgICAgfQogCiAgICAg
Ly8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIHN0YXRpYyBBZGRy
ZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1
cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5v
ZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxs
ZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVU
YWdTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgc3Rh
dGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAg
IHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxv
YWRPZmZzZXQpOwogICAgIH0KQEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVP
ZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJlZ2lzdGVy
KDApKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQog
CiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lzdGVyU2V0IHByZXNlcnZl
ZCkKQEAgLTE1MjcsNyArMTUzMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
aW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpOwogICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudDsKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA5NjkwZTA5YzhiNTcyNzBkZWY3
Zjg3YTQ2Y2MyYjU3ZTRmNzYyMDNlLi4zOTVkOTEzM2JjZDk0MDc1M2Y4ODgwYjk4MzdiNWM2NGQ0
YzU2NDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1
ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlm
CiAKICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUu
dmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tp
XS5pc0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2Fs
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmlu
ZGV4IDYyNDM5YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUuLjRjNmFhMzJmNGY1
ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VSVCghZ2V0
TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVy
eSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAg
ICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAgICAgICAg
YWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpA
QCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgp
CiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292ZXJ5JiBj
YWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3Zl
cnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgIHN3aXRjaCAoY2Fs
bGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNl
IEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKaW5kZXggMjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYS4uODczMTVl
Zjg0NzdhYzEyYTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBj
b21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RF
cVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsK
ICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9v
bCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAg
IHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxS
ZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmll
ck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91
bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZh
bHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2gg
cmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVy
IG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVy
KHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFs
UmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7
CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhl
IHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxl
IGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51
bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAg
ICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7
Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVn
cyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAg
aW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBn
ZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0
T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwg
aW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRh
ZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxv
YWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
VGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRM
b2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAg
ICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0
YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJl
Z2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
UmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRT
dG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwg
Ym9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChp
bnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsK
LSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJs
ZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9y
ZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFz
ZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxz
ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVk
SW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQg
ZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBp
bmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwor
ICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50
IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7Cisg
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNv
bnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9w
ZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIs
IGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRy
dWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
OwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3Rl
cklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwog
ICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
UmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50
IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJf
NjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQg
ZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJv
b2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAg
IH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7
CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklE
LCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1w
IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNv
bnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmly
dHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEs
IGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5z
aWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJ
bXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6
ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAt
Njg1LDggKzY3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3Qs
IGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
OwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAg
LTY5NCwyMCArNjg3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJS
ZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUq
IG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2
b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAg
ICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0
Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwot
ICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBv
aW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rlcihp
bnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7
CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBn
ZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBz
cmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7Cisg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03
MzQsNyArNzI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXIt
PmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApA
QCAtNzU0LDEzICs3NDcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5
cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAg
ICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdz
Li4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwpAQCAtODA0LDcgKzc5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRp
b25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjQsNyAr
ODU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7Cisg
ICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdf
RkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRl
eCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZh
YjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyAr
MTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0
aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdl
dCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIg
PSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBh
cmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGlu
c3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5l
cmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRo
OgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjpl
bWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGlu
dCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2Rl
Lm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUg
cmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNT
RVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjpl
bWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJp
bmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJv
ZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVy
YXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
LSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBO
CiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5j
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9w
ZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5l
Z2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0
LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxl
ZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAg
LTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
PEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
LSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioK
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcy
ZmM1N2MwZTVhYzMuLmFmOWVlYjYyNzljY2U0ZDExYjkzNGFlMWYxYjVjNmU0ZDY3MjJmNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYg
Ynl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAog
ICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAg
IEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAg
IHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUu
bV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRl
Y29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5t
X2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdp
c3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zm
c2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBi
eXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVw
ZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAx
OGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYz
MDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNw
cApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAg
ICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSks
ICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8q
IHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCmluZGV4IDIyMTQ5YzliZDFiOGVjMTE4MTJjYmUwYjg1NDFiZWU5M2Ix
MGFiMzQuLmM2NmMxYjExOTAzNjg1MWMyNzJkMGQ4YTI0ZWJlMzllMzExNzY0ZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9k
ZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGlu
dCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgp
OworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50
T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQo
KSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7
CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkp
KTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Myw3ICsxNDQs
NyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU1LDcgKzE1Niw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQg
ZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVn
KSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHJlZykpCiAgICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNl
bmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRD
aGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3Ry
aW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5n
dGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjMsMjYgKzM2
NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJv
ZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxXQVlTX0lO
TElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNf
SU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShp
bnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRS
ZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZp
bmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVy
SUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFn
KGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0ZvcihpbmRleCksIHRh
Zyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVn
aXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBh
eWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA2LDEzNiAr
NDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJl
Z2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJbW0zMih2LnRhZygp
KSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0
TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJl
Z3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0U3RvcmUo
ZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxS
ZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVy
SUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7CiAKICAgICBp
ZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChw
YXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQp
OwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAgZW1pdExvYWRQYXls
b2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9
OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAg
ICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBsb2FkMzIodGFnRm9y
KHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSks
IHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDMyKHBheWxvYWRG
b3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJh
c2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwor
ICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxv
YWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXJJ
RCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnMiwgUmVnaXN0
ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRMb2FkKGluZGV4Miwg
dGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOwor
ICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0TG9hZChyZWcxLCB0
YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50
IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmlu
Q29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQog
ewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIqIGJ5dGVQb2ludGVy
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgIH0gZWxzZQot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOwor
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyksIHZhbHVlKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7
IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkp
OwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihw
YXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3Io
cmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBp
ZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykp
OwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4
SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAg
IHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNDZWxs
KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQg
aW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlm
ICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVy
SUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsK
KyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdp
c3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFu
dC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1t
MzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihJ
bW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0
b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5v
dEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAg
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpT
Q2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1p
dEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0
ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29s
IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGlu
dDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3As
IGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigp
OwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QKICNlbHNlIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0Yg
cmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwpAQCAtNTcx
LDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMp
LCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0
KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQUigpKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNy
YzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1
YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRz
dDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3Rl
cklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZy
b20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
SlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZnJv
bS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Ci19Ci0KIEFMV0FZ
U19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQg
cmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShy
ZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50IHZSZWcp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGlu
dCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZp
bkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShh
ZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3Io
cmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJs
ZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
IHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkg
ewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgpKTsKLSAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5hc0lu
dDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNT
RVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1ZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgp
LCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IocmVnKSwg
dmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVtcCBKSVQ6OmVtaXRQ
YXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA3Y2ZhMDk1ZjAwZDE3ZTE0MTFiZTljZmI4MGY4MDgw
NmY3ODhmNmMxLi42MjYzMmRhODRhZmVmOTc4MjExOTAzYzQ4NmQyMTlhMWU5YTdlNWFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2LDEwICs1NiwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03Nyw3ICs3Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5k
PigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lz
dGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTExMCw3ICsxMTAs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
SklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAg
ICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAgICAgfQogfQogCkBA
IC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEyOSw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3Rh
bmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCkBAIC0x
NTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5tX3By
b3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAogICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdl
IHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9y
IHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYg
Z2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwNCw4
ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAtMjE3LDggKzIxNyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwgPSBicmFu
Y2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ2Vs
bFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTMwNyw4ICszMDcs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8g
UmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpA
QCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1ICszNjAsMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7
CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdh
cyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKICAgICAvLyBjbGVh
ciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ug
b3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTAsMTQgKzM5MCwxNCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgaW50
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpA
QCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVkT3JOdWxs
PigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00NTcs
NyArNDU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnVuZGVmaW5lZE9y
TnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAt
NDcwLDggKzQ3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJh
bmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9
IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBBU1NF
UlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAK
QEAgLTQ4NSwxOCArNDg1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZz
ZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwg
cmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KSwgdGFyZ2V0KTsKIH0KQEAgLTUxMCwyNiArNTEwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVt
cChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUzOSw3
ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVu
dHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5v
ZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
blRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpAQCAtNTQ4LDkgKzU0OCw5
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlw
ZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
MSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9y
aHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01OTIsOCArNTkyLDggQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGludCBzcmMxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBAIC02NTAsOCArNjUwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50IGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogICAgIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CkBAIC02NjQsOCArNjY0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNjg0LDIwICs2ODQsMjAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTcyOCwxMCArNzI4LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJl
c3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9yZTY0KFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZN
OjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlv
bjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NS
IGVudHJ5LCBpbmNsdWRpbmcKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZm
ZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNv
ZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzQ5LDcgKzc0OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAg
c2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9m
aWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAgLTc2NiwxMCArNzY2LDEw
IEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVj
dGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVu
dFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJl
Z1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsK
ICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNp
Z25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVK
dW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwogICAgIHNpemVfdCB0
YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRP
ZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0
T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVt
cFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04
MTEsNyArODExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4
ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsK
LSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0g
Jm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04MzQs
OCArODM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CkBAIC04NjcsOCArODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtOTAzLDcgKzkwMyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKICAgICAvLyBvYmpl
Y3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50
ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApA
QCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFp
bigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC05MjQsNyAr
OTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRh
ZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEpOwogCkBAIC05MzcsNyArOTM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNl
PEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAg
IFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJl
ZyA9IHJlZ1Q0OwpAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChB
ZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
c2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywg
c2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tf
dGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKIH0KIApAQCAtOTg1LDcgKzk4NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtOTk2LDcgKzk5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAyNCwxMCArMTAyNCwxMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0g
Ynl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1
ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRl
Y29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVl
ID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIHJlZ1QxKTsKQEAgLTExMDQsOCArMTEwNCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdSZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
Z2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2Fz
dDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTE1LDEyICsxMTE1LDEyIEBA
IHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4
ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsK
IApAQCAtMTE2MSwxMSArMTE2MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZWxz
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7
CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgog
CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlv
bkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwpAQCAtMTIwNywxMCArMTIwNywxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgdmFsdWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNT
dGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAgICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKIH0KQEAg
LTEyMTksOCArMTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzaXplSW5kZXggPSBieXRl
Y29kZS5tX2xlbmd0aC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVu
Z3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXpl
SW5kZXgsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwKQEAgLTEyMzYsOSArMTIzNiw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93
aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKQEAgLTEyODIsOSArMTI4Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVy
dHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAgIApAQCAt
MTMzMCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJl
bCBzbG93UGF0aCA9IGxhYmVsKCk7CkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKLSAg
ICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEzOTAsOSArMTM5MCw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDE0LDkg
KzE0MTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQo
KTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OwpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24q
IGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAgIGludCB2
YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0
VmlydHVhbFJlZ2lzdGVyOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJv
ZmlsZSwgcmVnVDApOwogCkBAIC0xNTA5LDcgKzE1MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdAogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBi
ZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdU
MjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9n
dWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQogCkBAIC0x
NTIzLDggKzE1MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3Jh
dGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdp
c3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dD
aGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gy
UmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9m
ZnNldCgpLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdz
KHJlZ1QwLCByZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9h
cmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5z
aWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwog
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdU
MCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcgKzE1ODYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNTk2LDcg
KzE1OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMik7CiAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91
bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4
KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVn
cyk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCmluZGV4IGFlNWI2YWQ1NGNhODEzNmVjYWMxYjY0MTFjOTU3MzQzMGU1YzFmN2EuLmM0NjM3
OWE5ZjllY2NhZTc0NGE4ZTdhYzgwODU1MWZlYmYyZmE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0g
bWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtOTQzLDcgKzk0
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAg
IHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICBKU1ZhbHVl
UmVncyByZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggM2I0ODUwZmFiOGQ2ZmFl
OTMwZTllODY5M2M0NGJiZjRhMWU0MzkzZC4uOGNiNTVmYjViN2VmODVmMGFjMTE5ZjIyZWUyYWQx
OTFhYzE5MDQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCkBAIC0xNjU0LDE4ICsxNjU0LDE4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKQogICAgICAgICAgICAgZGF0
YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywg
IlxuIik7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIHVu
c2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsK
LSAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKworICAgICAgICBP
cGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMsIDApOwogICAgICAgICBpbnQgbG9jYWxz
VXNlZEZvckNhbGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
LSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9j
YWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVl
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwpAQCAtMTc4Myw3ICsxNzgzLDcgQEAgY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2Zp
bGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJ
c0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BD
YXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
ayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmls
ZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBy
b2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTA3LDggKzE5MDcs
OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgaW50MzJfdCBzY29wZQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAgYXV0byYg
c2NvcGVTbG90ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJl
ZykpOworICAgIHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgp
OwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNl
KQpAQCAtMjQxNiw3ICsyNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRGcm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAg
IEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBz
Y29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5t
X3Njb3BlKS5qc1ZhbHVlKCkpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29k
ZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBp
cyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3BlLgpAQCAt
MjQ1OSw4ICsyNDU5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHIKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAg
SlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7Cisg
ICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNh
bGxGcmFtZS0+cihieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYg
Z2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBk
b2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGFi
OTlmZDk4N2IwNjFmMmU3NmExN2MyOGJlOGM0ZTcyNjVhMmQ4MTUuLmU3MjlmYzA1OGVjNjhlYzEx
ZjMyZDU3MDc4OWI3N2EwOTc1ZDI2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsK
LSAgICAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5
VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdTaGFwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKQEAgLTIwOCw3ICsyMDgsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZAogICAgIH0KICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKICAgICAgICAgc3RvcmU2NChy
ZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIENSQVNIKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJ
bmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1f
YmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsK
ICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMjc0LDggKzI3NCw4IEBAIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZh
bEluZm8sIE9wIGJ5dGVjCiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAgICAgLy8gc2NyYXRjaDog
cmVnVDIKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJl
Z1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBKSVRQ
dXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBPcCBieXRlYwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGludCBiYXNlOwot
ICAgIGludCBwcm9wZXJ0eTsKLSAgICBpbnQgdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgICAgICBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtMzM3LDM2ICszMzcsMzYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCBy
ZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CkBAIC0z
NzUsMTggKzM3NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5
VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
Lm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgaW50IHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jl
c3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKQEAgLTM5NSw5
ICszOTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpA
QCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0bwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwpAQCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTQ4NSw4ICs0ODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUxMyw5
ICs1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBA
IC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4
KytdOwpAQCAtNTcxLDggKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAg
IGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVj
b2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUg
YWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwg
d2Ugc3RvcmUgb25lIHBvaW50ZXIsCkBAIC02MTUsOCArNjE1LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2wKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
QEAgLTYzOCw3ICs2MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgdW5zaWduZWQgZGVwdGgpCit2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwog
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAg
ICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCkBAIC03NzAs
NyArNzcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkK
K3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CiAgICAgbG9hZFB0cihzdHJ1Y3R1cmVT
bG90LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpA
QCAtNzkwLDcgKzc5MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykKICAgICBsb2FkUHRyKHJlZywgcmVnKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQpCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVn
VDApOwpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUq
IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAs
IG9wZXJhbmQpOwogfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpT
VmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRp
cmVjdFdhdGNocG9pbnRTZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJl
Y3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKIHsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRT
ZXQsIHJlZ1QxKTsKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgVwog
ICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwpAQCAtOTUwLDggKzk1MCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5m
byA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CkBAIC0xMDg2LDggKzEwODYsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rvcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
ICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CkBAIC0x
MDk5LDkgKzEwOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1l
bnRzPigpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7
CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CkBAIC0x
MTEwLDcgKzExMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihh
cmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVy
TW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAg
ICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTEzMyw3ICsxMTMzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZh
bHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2ln
bmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAg
ICAgSnVtcCB2YWx1ZU5vdENlbGw7CkBAIC0xMTUwLDggKzExNTAsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEludGVybmFsRmllbGQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKQEAgLTExNjQsOCArMTE2
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTExNzYsNyArMTE3Niw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdp
c3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUp
CiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExOTksNyAr
MTE5OSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNp
Z25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5s
aW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKQEAgLTE0MjUsNyArMTQyNSw3IEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFj
ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4
IDJjZjkxOThmNDBlZGFhZjUzYTYxZGJmMzM5MGE2YzdkYjI4NmE1YzEuLjU4MjcxM2U2NDA4N2E1
MWY1OTM5YjkwYjk4NTQ1ZGYxMzNkMGM2YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pTSW50ZXJmYWNlSklULmgKQEAgLTQ1LDE4ICs0NSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwo
dW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAg
ICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUo
dW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVy
SUQgc2NyYXRjaCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExv
YWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsKKyAgICAgICAgaW5saW5l
IEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHNjcmF0Y2gpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5s
aW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoaW50IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVS
ZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdp
c3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
IHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9p
ZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSk7CiAKICAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBAIC02NCwz
NiArNjQsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXls
b2FkKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBw
YXlsb2FkKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZp
cnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHBheWxvYWQpOworICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2
aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1
YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJl
Z2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1
YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAg
bG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFs
UmVnaXN0ZXJJbmRleCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAg
ICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIH0KIAotICAgIGlubGluZSBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBk
c3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KTsKLSAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNo
KTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KTsKKyAgICAgICAgbG9hZFB0cih0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRj
aCk7CiAgICAgICAgIEp1bXAgaXNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgc2NyYXRjaCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogICAgICAgICBKdW1wIG5vdEludCA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KTsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2Ny
YXRjaCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3Jh
dGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKICAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0RvdWJsZS5saW5rKHRoaXMpOwotICAg
ICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwor
ICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgICAgICByZXR1cm4gbm90SW50OwogICAgIH0KQEAg
LTEwMSwyMyArMTAxLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6
ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCksIGRzdCk7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRz
dCk7CiAgICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9CiAgICAgCi0g
ICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZElu
dDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIo
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewot
ICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7Cisg
ICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAg
IEp1bXAgbm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKGRzdCk7CiAgICAgICAgIHplcm9FeHRl
bmQzMlRvUHRyKGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIG5vdEludDMyOwogICAgIH0KIAot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRE
b3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIs
IEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAg
IGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAgICBK
dW1wIG5vdE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2gpOwogICAgICAgICBKdW1w
IG5vdEludCA9IGJyYW5jaElmTm90SW50MzIoc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CkBAIC0xMjksMTIgKzEyOSwxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBSZWdpc3RlcklE
IHRvLCBSZWdpc3RlcklEIGZyb20pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNl
SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnks
IFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0
byk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsK
QEAgLTE0MywxMiArMTQzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfQogCi0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2
YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5KSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCmluZGV4IDM4
ODczMDUyZDEyODUyZmM2YmI5MTQyZDQ1NjA3YWU4ZTE5YTY3MGEuLjBiYTczZWY4YzEzNGViYmJk
MWQwNGE0YjE3MjE0ZjRmYTczNTE4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBlbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
bnVtVXNlZFNsb3QKICAgICAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0
ZXIoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXJndW1lbnRDb3VudFJlY292ZXJ5ID0gVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIpOworICAg
ICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgRGF0YUZvcm1hdEludDMyKTsK
ICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENh
c2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0
VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IDRmNTY3ZDA2YWVhNTQ0YWIyNjcxNTVjMTNkZjM2
YTcyNDliNmMzNDMuLjkzM2NhOWJlMTAyZTBlZGY5NGJiNGVhZTgyODIxNDgyMjljODI2ZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBA
IC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1lbnQsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAg
ICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUoc3JjLCBkc3QsIHNjcmF0Y2gp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkQ2VsbEFyZ3VtZW50KGlu
dCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkSlNDZWxsKHNyYywg
ZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkSW50MzJBcmd1bWVudChpbnQgYXJndW1l
bnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1wJiBmYWlsVGFyZ2V0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBmYWlsVGFyZ2V0ID0gZW1pdExvYWRJbnQzMihz
cmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggNTI0MWU1ZjdjYzMzMmE2NGUwZGU2ZGI0NGJk
YWY5ZThlODBmMjJhYS4uYzM3NmRiZTJjZDdkNmRkM2ZhNTQ4N2I1N2I1ODk0N2Y2ZGZiYTMzMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAt
MTAzMiw4ICsxMDMyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBh
YnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdW5zaWdu
ZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApOwot
ICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKTsKKyAgICBqaXQubG9hZDY0KEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdU
MCk7CiAgICAgYXV0byBub3RJbnRlZ2VyID0gaml0LmJyYW5jaElmTm90SW50MzIoR1BSSW5mbzo6
cmVnVDApOwogCiAgICAgLy8gQWJzIEludDMyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMzU3YTQ2ZThlNTc4OTdmMjc4NWNkMzM5ZmNi
ZTJiYzBjOTBjZWRiMi4uNmExYWY5ZjAwMWZjY2UyYjM2Yjc3MWE4MGEzZmJjNWNhOTU2NmJjMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAi
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpA
QCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICAgICBM
TElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBMTElOVF9T
RVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5k
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsg
cmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7
IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0
IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9wZXJhbmQu
b2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVy
YW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1
cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpT
VmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KIAogI2Rl
ZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTU3MSw3
ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAogICAgIGNhbGxlZUZy
YW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwotICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVB
c1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNl
dENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkwLDcgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0
IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZUFuZFNldFRo
aXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVuZ3RoKTsKIAogICAgIGNh
bGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51
bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNh
bGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsK
IAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJh
bWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcyNiw3IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxl
ckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tl
ZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1
ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKICAgICBj
YWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkxMiw3ICsxOTEzLDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgoY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYykpKTsKICNlbHNlCi0gICAgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihw
YykpKTsKKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgoKnBjKTsKICNlbmRpZgogCiAg
ICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAg
LTE5MzAsNyArMTkzMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxl
X2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0
YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUp
IHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9
IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQp
LmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NjEsMTEgKzE5NjIsMTIzIEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKICAgICBMTElO
VF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+CitzdGF0aWMgdm9p
ZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVjb2RlLCBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IHNpZGVTdGF0ZS5nZXRUbXA8SlNWYWx1ZT4oT3Bjb2RlOjphcmdDb3VudCkuYXNV
SW50MzIoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5maWxs
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBidWZmZXIpIHsK
KyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxGcmFtZS0+cihi
eXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpOworICAgIH0pOworICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQoKSkgeworICAg
ICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6b3Bjb2RlSUQg
IT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2Jq
ZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisgICAgZWxzZQor
ICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2RzdCkgPSBy
ZXN1bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hOZXh0SW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+dm0oKS5leGNlcHRpb25Gb3JJbnNwZWN0
aW9uKCkpOworICAgIGlmIChPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgeworICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0cigpOworICAgICAgICBhdXRv
IG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0
KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgbmV4dEJ5dGVj
b2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworI2lmIEVOQUJMRShKSVQpCisgICAg
QVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7Cisg
ICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRC
eXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG5leHRCeXRl
Y29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0
aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQpCit7CisgICAgLy8gU2luY2UgYWxsIG91ciBjYWxs
aW5nIGNoZWNrcG9pbnRzIGRvIHJpZ2h0IG5vdyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0
IHdlIGNhbiBqdXN0IGRvIHRoYXQgaGVyZSBhbmQgcmV0dXJuLgorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2st
PnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0
ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIGF1
dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisg
ICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihwYy0+YXM8T3BDYWxsVmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFy
Z3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAvLyBvcF90YWlsX2NhbGxfdmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlm
IHRoZSB0aGluZyBpdCB3YXMgY2FsbGluZyB3YXMgaW5saW5lZC4KKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gZGlzcGF0Y2hOZXh0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9
CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29z
cl9leGl0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSAvKiBuZWVkZWQgZm9y
IGNDYWxsMiBpbiBDTG9vcCAqLykKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNs
b3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpOworCisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOwor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAg
IGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMt
PmFzPE9wQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENvbnN0cnVjdFZh
cmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5leHQo
KS0+b3Bjb2RlSUQoKSA9PSBvcF9yZXQsICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwgY2Fs
bHMgYXJlIGZvbGxvd2VkIGJ5IGFuIG9wX3JldC4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJnc0No
ZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2FsbFZh
cmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KHJldHVyblRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVybiBk
aXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZt
LCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKLQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwog
ICAgIGlmIChjYWxsRnJhbWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuaAppbmRleCAyZmYyOGIwMDZiYzIyMzMzMGNjNjc4NjVhMTY3OTRhOTBlN2U3
YWFlLi4wNTVmNWM5YTFhOGY5YTVhM2I0NjNlNzU3MWM2NDZhMjA3NTkyZGJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMTM2LDYgKzEzNiw4
IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxlcl9i
ZWdpbik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N1cGVyX3NhbXBs
ZXJfZW5kKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfb3V0X29mX2xp
bmVfanVtcF90YXJnZXQpOwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhy
b3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qLCBQcm90b0NhbGxGcmFtZSopIFdURl9JTlRFUk5B
TDsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29z
cl9leGl0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB1bnVzZWQpOworZXh0
ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRf
ZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIGNh
bGxSZXN1bHQpOwogI2lmIEVOQUJMRShDX0xPT1ApCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF9zdGFja19jaGVja19hdF92bV9lbnRyeShWTSosIFJlZ2lzdGVyKikgV1RGX0lO
VEVSTkFMOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggZTE3MzRkY2Y2MWI0Y2ZjNTUxMmZhMjg1NjAxYmNh
YjMwYzg4ZjJlNC4uMDJhMjJlZjBiM2RmNzNjYjNkYTIwNWVlMGYwZTFlNGZiMzI2ZjIyZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVy
blBvaW50KG9wTmFtZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JFeGl0UmV0dXJuTGFiZWwob3BOYW1l
LCBzaXplKQogCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCi0gICAgbG9hZGkg
QXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRpIExMSW50UmV0dXJu
UENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVByb2ZpbGUob2Zmc2V0LCBjZWxsQW5kSW5k
ZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4MzksMTMgKzE4MzksMTcgQEAgZW5k
KQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
bWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNv
ZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93
UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCittYWNy
byBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QzXSwgdDMKICAgICBidHB6IFZN
OjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgotICAgIGptcCBfbGxpbnRfdGhyb3dfZnJv
bV9zbG93X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0aW9uOgorICAgIGptcCBleGNlcHRpb25U
YXJnZXQKKy5ub0V4Y2VwdGlvbjogICAgCitlbmQKKworbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNv
ZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93
UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCisgICAg
YnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUp
CiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBtb3Zl
IHIxLCBzcApAQCAtMjAwMCw2ICsyMDA0LDM1IEBAIG9wKGxsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogZW5kKQogCiAKK29wKGNoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICBpZiBK
U1ZBTFVFNjQgYW5kIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCisgICAgICAgIG1vdmUgY2Zy
LCBhMAorICAgICAgICBtb3ZlIHIwLCBhMQorICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2F2ZVN0
YXRlRm9yQ0NhbGwoKSBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIGJ5dGVjb2RlSW5k
ZXggZnJvbSBvdXIgc2lkZSBzdGF0ZS4KKyAgICAgICAgY0NhbGwyKF9zbG93X3BhdGhfY2hlY2tw
b2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCkKKyAgICAgICAgcmVzdG9yZVN0YXRlQWZ0
ZXJDQ2FsbCgpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEKKyAgICBlbHNlCisgICAgICAgIG5v
dFN1cHBvcnRlZCgpCisgICAgZW5kCitlbmQpCisKK29wKGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJh
bXBvbGluZSwgbWFjcm8gKCkKKyAgICAjIEZJWE1FOiBXZSBjYW4gcHJvYmFibHkgZGlzcGF0Y2gg
dG8gdGhlIGNoZWNrcG9pbnQgaGFuZGxlciBkaXJlY3RseSBidXQgdGhpcyB3YXMgZWFzaWVyIAor
ICAgICMgYW5kIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGZvciBwZXJmb3JtYW5jZS4KKyAgICBp
ZiBKU1ZBTFVFNjQgYW5kIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCisgICAgICAgIG1vdmUg
Y2ZyLCBhMAorICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2F2ZVN0YXRlRm9yQ0NhbGwoKSBiZWNh
dXNlIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIGJ5dGVjb2RlSW5kZXggZnJvbSBvdXIgc2lkZSBz
dGF0ZS4KKyAgICAgICAgY0NhbGwyKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdCkKKyAg
ICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9u
KF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEK
KyAgICBlbHNlCisgICAgICAgIG5vdFN1cHBvcnRlZCgpCisgICAgZW5kCitlbmQpCisKICMgTGFz
dGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBw
b3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVu
IHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydAogIyBhcyBtdWNoLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQppbmRleCAwMzA4MTFmYWMxMjg4YzQ2NGZlMjhhM2JjYTAxYjUyMmQ0YWNmNDA2Li5j
NGU5NWQ3ZDhiYTA0OTUwYjMyYzkzZTIzY2ZiNjI1NDIyZGU5ODhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQpAQCAtMTQzLDExICsxNDMsMTkgQEAgbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQogICAgIGVuZAog
ZW5kCiAKK21hY3JvIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKKyAgICBtb3ZlIFBDLCBhMQorZW5k
CisKK21hY3JvIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAgIG1vdmUgcjAsIFBDCitlbmQK
KwogbWFjcm8gY2FsbFNsb3dQYXRoKHNsb3dQYXRoKQogICAgIG1vdmUgY2ZyLCBhMAotICAgIG1v
dmUgUEMsIGExCisgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIGNDYWxsMihzbG93UGF0
aCkKLSAgICBtb3ZlIHIwLCBQQworICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQogZW5kCiAK
IG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggM2RkMmViNDhjYmJhNmVm
NWNkOTg4NjM5Yzc5MTFlMjJhNzEzMzE0OC4uNDExZGYyYzY3NTIzMzBiMzdiOTZhYmNlZDg3YTg0
NDZhODc1Njk5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTQyLDYgKzQyLDE0IEBAIG1hY3JvIG5leHRJbnN0
cnVjdGlvbldpZGUzMigpCiAgICAgam1wIFt0MSwgdDAsIFB0clNpemVdLCBCeXRlY29kZVB0clRh
ZwogZW5kCiAKK21hY3JvIHN0b3JlUEMoKQorICAgIHN0b3JlaSBQQywgTExJbnRSZXR1cm5QQ1tj
ZnJdCitlbmQKKworbWFjcm8gbG9hZFBDKCkKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0s
IFBDCitlbmQKKwogbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3Bjb2RlU3RydWN0LCBmaWVsZE5h
bWUsIGRzdCkKICAgICBsb2FkYiBjb25zdGV4cHIgJW9wY29kZVN0cnVjdCVfJWZpZWxkTmFtZSVf
aW5kZXhbUEIsIFBDLCAxXSwgZHN0CiBlbmQKQEAgLTkyLDcgKzEwMCw3IEBAIGVuZAogCiAjIEFm
dGVyIGNhbGxpbmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVnaXN0ZXJz
IGFyZSBub3QgdXNlZC4KIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKHNpemUsIG9wY29kZVN0cnVj
dCwgZGlzcGF0Y2gpCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQ
QworICAgIGxvYWRQQygpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAg
Q29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIGdldChzaXpl
LCBvcGNvZGVTdHJ1Y3QsIG1fZHN0LCB0MSkKQEAgLTM5MCw3ICszOTgsNyBAQCBlbmQKIAogIyBD
YWxsIGEgc2xvdyBwYXRoIGZvciBjYWxsIG9wY29kZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRo
KHNsb3dQYXRoLCBhY3Rpb24pCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zm
c2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAg
bW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTM5OSwyMCArNDA3LDIwIEBAIG1hY3Jv
IGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBjYWxsVHJh
cEhhbmRsZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRh
Z09mZnNldFtjZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQog
ICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCiAgICAgY0NhbGwyKF9sbGludF9zbG93
X3BhdGhfaGFuZGxlX3RyYXBzKQogICAgIGJ0cG56IHIwLCB0aHJvd0hhbmRsZXIKLSAgICBsb2Fk
aSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1
cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAg
ICBjaGVja1N3aXRjaFRvSklUKAogICAgICAgICAxLAogICAgICAgICBtYWNybygpCi0gICAgICAg
ICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICAg
ICAgc3RvcmVQQygpCiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAg
ICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00MjEsNyArNDI5
LDcgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBy
MSwgc3AKICAgICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3Zl
cjoKLSAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMK
KyAgICAgICAgICAgIGxvYWRQQygpCiAgICAgICAgIGVuZCkKIGVuZAogCkBAIC0xNzY4LDYgKzE3
NzYsOCBAQCBtYWNybyBwdXRCeVZhbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgb3NyRXhp
dFBvaW50KQogICAgIGVuZCkKIGVuZAogCisKKwogcHV0QnlWYWxPcChwdXRfYnlfdmFsLCBPcFB1
dEJ5VmFsLCBtYWNybyAoc2l6ZSwgZGlzcGF0Y2gpCiAub3NyUmV0dXJuUG9pbnQ6CiAgICAgZ2V0
dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX3B1dF9ieV92YWwsIHNpemUpCkBAIC0yMDU3
LDcgKzIwNjcsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9w
Y29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBhZGRwIGNmciwgdDMK
ICAgICAgICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2Rl
U3RydWN0LCBtX2FyZ2MsIHQyKQotICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBU
YWdPZmZzZXRbY2ZyXQorICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1
bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAg
ICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5t
X21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCA4NDBmODliODhkNDIwY2MzYjc1
YzgzZDZjNTc4MjQxNTQwMmYzMzY2Li44ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1MDBmZGZiZTY5OTk4
MDdjZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCkBAIC0xMzMs
NiArMTMzLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3ZlcmZsb3dDaGVja05vdE5lZWRlZCgp
IHsgY2xlYXJOZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50LCBjb25zdCBGdW5jdG9yJiBmdW5j
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAgICAgICBlbnN1cmVDYXBhY2l0
eShjb3VudCk7CisgICAgICAgIGlmIChCYXNlOjpoYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fc2l6ZSA9IGNvdW50OworICAgICAgICBmdW5jKHJlaW50ZXJw
cmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7CisgICAgfQorCiBwcml2YXRlOgogICAg
IHZvaWQgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCBuZXdD
YXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKaW5kZXggZjhkOTc5OTU4NzQ1MjI2YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNlODdhMS4uZmZiNzQ1
OWE2YWRjY2JhYjE2ZGE4YTRlZjhiMTcxMWQ4NzJhMWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMTc4OCw2ICsxNzg4LDcgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVyaXZlZENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgZXZhbENvbnRleHRUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBoYXNUYWlsQ2Fs
bHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxDYWxsczsgfQorICAgIHVuc2lnbmVkIGhhc0No
ZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQogICAgIHVuc2ln
bmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CiAgICAgdW5zaWdu
ZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KIApAQCAtMTgyMCw2
ICsxODIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0VHlwZSA6IDI7
CiAgICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOwogICAgIHVuc2lnbmVkIG1fY29kZVR5
cGUgOiAyOworICAgIHVuc2lnbmVkIG1faGFzQ2hlY2twb2ludHMgOiAxOwogCiAgICAgQ29kZUZl
YXR1cmVzIG1fZmVhdHVyZXM7CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAt
MjAxOCw2ICsyMDIwLDcgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5r
ZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJlKgogCiAgICAgLCBtX2RpZE9w
dGltaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0YXRlKSkKICAgICAsIG1fYWdl
KDApCisgICAgLCBtX2hhc0NoZWNrcG9pbnRzKGNhY2hlZENvZGVCbG9jay5oYXNDaGVja3BvaW50
cygpKQogCiAgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9jay5mZWF0dXJlcygpKQogICAg
ICwgbV9wYXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9kZSgpKQpAQCAtMjIwNiw2ICsy
MjA5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBl
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAgICBtX3BhcnNlTW9kZSA9IGNvZGVC
bG9jay5tX3BhcnNlTW9kZTsKICAgICBtX2NvZGVHZW5lcmF0aW9uTW9kZSA9IGNvZGVCbG9jay5t
X2NvZGVHZW5lcmF0aW9uTW9kZTsKICAgICBtX2NvZGVUeXBlID0gY29kZUJsb2NrLm1fY29kZVR5
cGU7CisgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwog
CiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0
KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRh
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCmluZGV4IGYzNThkNDhhNTBkZTczZWFiMzg1Njk5YjNhNmY1MTEzYmJiZTliYmEu
LjliNGQ3ODlmNGE4NmFhNGY0MjhmMTRkMmZhNTcyYTAyYjRkNzAyYjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtOTgsOCAr
OTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBCRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBTRVRfUENfRk9SX1NUVUJTKCkKIAotI2RlZmluZSBHRVQob3BlcmFu
ZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKSkKLSNkZWZpbmUgR0VU
X0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKSkKKyNkZWZpbmUgR0VU
KG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkpCisjZGVmaW5lIEdFVF9D
KG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZCkpCiAKICNkZWZpbmUgUkVUVVJOX1RXTyhm
aXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChm
aXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTExMzksOCArMTEzOSw3IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCk7Ci0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAgICBK
U1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJl
Z2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihHRVRfQyhieXRlY29k
ZS5tX3N5bWJvbFRhYmxlKS5qc1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0g
R0VUX0MoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoaW5p
dGlhbFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpzVERaVmFsdWUo
KSk7CkBAIC0xMTU1LDggKzExNTQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF93
aXRoX3Njb3BlKQogICAgIEpTT2JqZWN0KiBuZXdTY29wZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3
U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQ
VElPTigpOwogCi0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUub2Zm
c2V0KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIGN1cnJlbnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIApAQCAtMTE2NSw3ICsxMTYzLDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNf
ZGVjbF9pbl9ldmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7CiAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3Bl
KCk7CiAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9y
SG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAKICAg
ICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTExNzksNyArMTE3Nyw3IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BS
ZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
KyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Nj
b3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpT
U2NvcGU6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwogICAgIC8vIFByb3h5
IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJlLCBlLmcuIFByb3h5IGluIHdpdGggc3RhdGVtZW50J3Mg
QHVuc2NvcGFibGVzLgogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTQyNCw3ICsxNDIyLDcg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiB7CiAgICAgQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoYnl0ZWNvZGUubV9p
bW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGUubV9pbW11
dGFibGVCdXR0ZXJmbHkuaXNDb25zdGFudCgpKTsKICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSog
aW1tdXRhYmxlQnV0dGVyZmx5ID0gYml0d2lzZV9jYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4o
R0VUX0MoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLmpzVmFsdWUoKS5hc0NlbGwoKSk7
CiAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlOwogCkBAIC0xNDQzLDcgKzE0NDEsNyBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3Qg
YWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBp
dCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAvLyBhIGNvbXBpbGF0
aW9uIHRocmVhZC4KICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9m
ZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAg
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5
KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKaW5kZXggNGJkMTkyYTZjNzdlZmMwMjZlN2E5NWE1Yjdi
ZWM3MTI0MzY3N2U3OC4uNDdiMjQ3NDE4Y2E4OGVmZDFiNzhlNjMxMWI2NzVkMWVmYTVhNWZmMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAK
QEAgLTM1LDYgKzM1LDExIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogSlNPYmplY3QqIGNvbnN0cnVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0
LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAg
cmV0dXJuIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1
Y3Rvck9iamVjdCwgYXJncywgZXJyb3JNZXNzYWdlKTsKK30KKworSlNPYmplY3QqIGNvbnN0cnVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0
LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00NiwxMCArNTEsOSBAQCBKU09i
amVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29u
c3RydWN0b3JPYmplY3QsIGNvbgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0
cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBjb25zdHJ1
Y3Rvck9iamVjdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGds
b2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERh
dGEsIGFyZ3MsIG5ld1RhcmdldCkpOyAgCiB9CiAKLQogSlNPYmplY3QqIGNvbnN0cnVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25z
dHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnN0cnVjdERhdGEuaAppbmRleCBkMGFlMDBiYTExZDdjZWUyNGRmZmFlOTE5MTE5NjdlMDJh
YTZlZGUzLi5mYjYxOTc0YTdkYjM5YzQ5MWY5ZjkzYmFlYjZjYWMxMjYyMWYzYmEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCkBAIC02MCw2ICs2
MCw4IEBAIHN0cnVjdCBDb25zdHJ1Y3REYXRhIHsKIAogLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBz
byB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVz
cyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0
IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUg
SlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgZnVuY3Rpb25PYmpl
Y3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JN
ZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgY29uc3RydWN0b3IsIENvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0
cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0JiwgSlNWYWx1ZSBuZXdUYXJnZXQpOwogCiBBTFdBWVNf
SU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBj
b25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAK
aW5kZXggYTY3OTVkYTFlZGNjZjMxMDIyYWMyZGQ5YWVmYWZkNDNhMDFhNWM4NS4uNGIzNDYxZGUy
MmU3NmY3ZGJlMzE4Mzk0MjQ1YTkzYzU3NTA5ZjM4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCkBAIC0xMzcsMjAgKzEzNywxOSBA
QCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVuc2lnbmVkIGlu
ZGV4KQogICAgIG1fbWFwcGVkQXJndW1lbnRzLmF0KGluZGV4LCBpbnRlcm5hbExlbmd0aCgpKSA9
IHRydWU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX21hcHBlZEFyZ3VtZW50cykgewogICAgICAg
ICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWluKGxlbmd0aCArIG9mZnNldCwgbV9sZW5ndGgpOwog
ICAgICAgICB1bnNpZ25lZCBpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQgPSBmaXJz
dEVsZW1lbnREZXN0IC0gb2Zmc2V0OwogICAgICAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsaW1p
dDsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0ICsgaSkgPSBzdG9yYWdlKClb
aV0uZ2V0KCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gc3Rv
cmFnZSgpW2ldLmdldCgpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAg
ICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBnZXQoZ2xvYmFsT2JqZWN0
LCBpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogdW5z
aWduZWQgRGlyZWN0QXJndW1lbnRzOjptYXBwZWRBcmd1bWVudHNTaXplKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKaW5kZXggMGE2YjFhMDY2
MDkwZTJjYTVmNTZmNTBhOWM1M2EyY2ZjZTc3MmUwYS4uOGQ5NjQyYTJjOTQwNDA4MGI5MTNhYzI3
MGNkMDEzYzM5ZWNkYTgxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OmlzTW9kaWZpZWRBcmd1bWVu
dERlc2NyaXB0b3IoaW5kZXgsIG1fbGVuZ3RoKTsKICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJz
dEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9p
ZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lO
Rk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzLmgKaW5kZXggYjMxYjcwYWJkMDBjZWVhZjVlYmI3ZWUxZDQ2N2RhNDg4NzBkNTFjMS4u
MDc0YzIxNjJkOGRhMTY0NzA2ZjQwMDRiZGFiM2RhZWViMjcyY2JiYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaApAQCAtNTksNyArNTks
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihW
TSYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIGJvb2wgaXNNb2RpZmll
ZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKIAot
ICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
IAogICAgIHVzaW5nIE1vZGlmaWVkQXJndW1lbnRzUHRyID0gQ2FnZWRCYXJyaWVyUHRyPEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1vZGlmaWVkQXJndW1lbnRzUHRyIG1fbW9kaWZp
ZWRBcmd1bWVudHNEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKaW5kZXggMjE4MmE2MmIxMzAzNDNh
ZjU2NzIxNzM2M2EzZjVjMWI4ODYxODFmZi4uZTBhYWJmNWYyZWUxODViN2QxMzMxNjAzN2Q4YzFk
ODg4NDI0Njg1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCkBAIC0yOTcsNyArMjk3LDcgQEAgYm9vbCBHZW5l
cmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVk
IGluZGV4LCB1bnNpZ24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJp
Y0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMzA1LDkgKzMwNSw5IEBAIHZvaWQgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGCiAgICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUq
Pih0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgaWYgKHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaSArIG9mZnNldCkpCi0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdGhpc09iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpXSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0g
Z2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnRE
ZXN0W2ldID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCA0NGM3ZTUyMGYxYzBhMjQw
YThiNjY2NWEyNzRhNTE0NDU5Mzg3NjYwLi42ZDA3NTkxNzExZWVkYmMyOGUwZTRkYTc4NDk4MjJh
YjhkNjZmNWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApA
QCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXIKICAgICAgICAgYXJn
cy5hcHBlbmQoZ2V0KGdsb2JhbE9iamVjdCwgaSkpOwogfQogCi12b2lkIEpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyNjks
NyArMTI2OSw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgICAgICAgICBkb3VibGUg
diA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmF0KHRoaXMsIGkpOwogICAgICAgICAg
ICAgaWYgKHYgIT0gdikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9m
ZnNldF0gPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjk0LDExICsxMjk0LDExIEBAIHZvaWQgSlNBcnJh
eTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3Rvcltp
XTsKICAgICAgICAgaWYgKCF2KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhbGxGcmFt
ZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSB2LmdldCgpOworICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gdi5nZXQoKTsKICAgICB9CiAgICAgCiAgICAg
Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVt
ZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgIGZp
cnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggMzE3OTQ5YzU3MmExMWI3NWFkYzE4
M2FjOWU0MTQ0ZjY2Y2Y2YWI1MC4uMzExNjViNWZmNDkyNTRjYzFhNmM0NzkwMmI3OTEwYWM0YTdk
OWJmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtMTYzLDcg
KzE2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9B
cmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cAppbmRleCBlMzJlOTQ5N2Q0NzgyOTUwMzNkYWE5OWE1OTM2ZGVhMTlhMWM0OWMwLi5lNDkwOTc1
NjE2ZGFkMzkxMTQyMzgyYzk5M2U3OGQxMmMxOTExYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCkBAIC00Niwx
MyArNDYsMTMgQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CiB9CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lk
IEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgaWYgKChpICsgb2Zmc2V0KSA8IHB1YmxpY0xlbmd0aCgpKQotICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChpICsgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVm
aW5lZCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ltbXV0YWJsZUJ1dHRlcmZseS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuaAppbmRleCBhY2I2ODQ4MTkxYTE5MDM1MjJiOWIzZTRkMDBmOTY5
ZTQwYjc4MTVhLi4wN2UxYThhMTBjM2NkYzcxMTdhY2EzZGM1NDNlZDdkZGIwZDQxZjNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVy
Zmx5LmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmlu
ZGV4IGE2ZWIwZWE1ZjZhYWRlYjM3ZDI3Nzk0ZjdjOTEzZjY4MTY4MzQ5N2UuLjE2YWEzNjlmNDg1
MDcwNjFjMDYzNjE1MThhZTE1ZDJiYzY4ZmI2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcApAQCAtMjA0LDYgKzIwNCw3IEBAIHZvaWQgSlNMb2NrOjp3aWxsUmVs
ZWFzZUxvY2soKQogeyAgIAogICAgIFJlZlB0cjxWTT4gdm0gPSBtX3ZtOwogICAgIGlmICh2bSkg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIXZtLT5oYXNDaGVja3BvaW50
T1NSU2lkZVN0YXRlKCksICJSZWxlYXNpbmcgSlNMb2NrIGJ1dCBwZW5kaW5nIGNoZWNrcG9pbnQg
c2lkZSBzdGF0ZSBzdGlsbCBhdmFpbGFibGUiKTsKICAgICAgICAgdm0tPmRyYWluTWljcm90YXNr
cygpOwogCiAgICAgICAgIGlmICghdm0tPnRvcENhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcApp
bmRleCBkYjA1MjU0ODgyNTMzOWE2YjEzMmJhNGU0NDJiMjExZDZkZTM3YmEwLi41OTY4MDhjYWZj
MGIwZjRjODQ3MGJkNzU5ZWQ5ZjQ5MTZjNjY0NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCkBAIC03
NCw3ICs3NCw3IEBAIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAKICAgICBleGVjdXRhYmxlLT5t
X3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBl
eGVjdXRhYmxlLCB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlKTsKIAotICAgIGV4ZWN1dGFibGUt
Pm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBl
eGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
LT5jb25zdGFudFJlZ2lzdGVyKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVsZUVudmly
b25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLmdldCgpKS0+Y2xvbmVT
Y29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CisgICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUs
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpKS5nZXQoKSkt
PmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOwogCiAgICAgcmV0dXJuIGV4ZWN1
dGFibGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4
IDQxMzg3Yzg1MGE5OTVhZDU3NDIxMDUwY2RlODZjYjI1MjFlNTQxMTYuLjkxZWQ3MzllMjVmNDkz
OGVmNTAyNzI3ZGY1MTY4MGQ4NmNhMjA4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCkBAIC01MDksMTEgKzUwOSw5IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0
ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIGlmIChPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6
ZSgpIDwgT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNp
emUpCiAgICAgICAgIE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPSBPcHRpb25zOjpy
ZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZTsKIAotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgLy8gRklYTUU6IE1ha2UgcHJvYmUgT1NSIGV4aXQgd29yayBvbiAz
Mi1iaXQ6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
Nzk1NgogICAgIE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpID0gZmFsc2U7Ci0jZW5kaWYKIAog
ICAgIGlmICghT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpCiAgICAgICAgIE9wdGlvbnM6OmRpc2tD
YWNoZVBhdGgoKSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCAwODFkOTc4YTdiMmE2MjY2YWM1NTJjMzc5ZDM4
NDUwMDVkYzExZjEwLi4zYzc0MGQ0OGY2MjQxYjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5ZGIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVu
dChWTSYgdm0sIHVpbnQzMl90IGkpCiAgICAgICAgIHN0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhd
LmNsZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1l
bnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVj
dCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
LmgKaW5kZXggZjg1ZTQ3ZGZiZWU4Y2E3YzM3MDRmMjllZDRjYjFiNGU5NzIwNDQ1Ny4uZTU4Y2Iy
MmVmZDQ4YzY3NGJmNWIxYjExMjgwYjUxYWJjMGRlMDg0YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz46
OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fdGFibGUtPmxlbmd0aCgpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKaW5kZXggNjRkZGZjYjFhMjU2MGU2ZmUxYjQ1NGU0ZmVlMTQ4OTJhZGMwOGE5
Zi4uOGY2ZTU2NWUyNDdlNWEyMzE5MzMxOTg4Mjg2NzJlMjEwNDg4MTY1NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJvb2xl
YW5PYmplY3QuaCIKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0YWJsZXMuaCIKICNpbmNsdWRlICJC
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTEwMjcsNiArMTAyOCwyMCBAQCB2
b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNl
cnZhdGl2ZVJvb3RzKQogfQogI2VuZGlmCiAKK3ZvaWQgVk06OmFkZENoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZT4mJiBwYXlsb2FkKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2hlY2twb2ludFNpZGVT
dGF0ZS5hZGQoY2FsbEZyYW1lLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9s
ZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBzaWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRTaWRlU3Rh
dGUudGFrZShjYWxsRnJhbWUpOworICAgIHJldHVybiBzaWRlU3RhdGU7Cit9CisKIHZvaWQgbG9n
U2FuaXRpemVTdGFjayhWTSYgdm0pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5pdGl6
ZVN0YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAppbmRleCAyODA4NmM0ZWQ5MTYwNmMyODFiMWExZDViN2ExZGFiMDYwODgwNzBhLi4yNWM0YTUx
NGExOGM2NzBlNjU0MzFhYjk2ODc4ODMzODFkNzFlYzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKQEAgLTEwMyw2ICsxMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEJ1aWx0
aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBD
YWxsRnJhbWU7CitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2Rl
QmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTk0
OSw2ICs5NTAsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKIAorICAgIHZvaWQgYWRkQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZShDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGU+JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4g
ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKik7CisgICAgYm9vbCBoYXNDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja3BvaW50U2lkZVN0YXRl
LnNpemUoKTsgfQorCiAgICAgVk1FbnRyeVNjb3BlKiBlbnRyeVNjb3BlOwogCiAgICAgSlNPYmpl
Y3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CkBAIC0xMjAw
LDYgKzEyMDUsNyBAQCBwcml2YXRlOgogICAgIExvY2sgbV9zY3JhdGNoQnVmZmVyTG9jazsKICAg
ICBWZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IG1fc2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6ZV90IG1f
c2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgeyAwIH07CisgICAgSGFzaE1hcDxDYWxsRnJhbWUqLCBz
dGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNrcG9pbnRT
aWRlU3RhdGU7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5h
YmxlZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJv
bEZsb3dQcm9maWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9W
TUluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3Iu
Y3BwCmluZGV4IDgxYzlmMWY2NzQ3MDc5ZWQ4MzEyNjYyYzA4MzAwYzZjYzM2MjhlMzcuLmUxNDg0
MDBkNDg3ZGZjNjRlNDQwNTRkZGFkYjA4NTg5NzJlMzlhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcApAQCAtMzk3LDggKzM5Nyw4IEBAIHZvaWQgVk1J
bnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgY29uc3Qg
UmVnaXN0ZXIqIGl0OwogICAgIGNvbnN0IFJlZ2lzdGVyKiBlbmQ7CiAKLSAgICBpdCA9IGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBlbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsg
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsKKyAgICBpdCA9IGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKCkgKyAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkpOworICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyAoQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMSk7CiAgICAgd2hpbGUgKGl0ID4gZW5kKSB7CiAgICAg
ICAgIEpTVmFsdWUgdiA9IGl0LT5qc1ZhbHVlKCk7CiAgICAgICAgIGludCByZWdpc3Rlck51bWJl
ciA9IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggZjY4OGE3YzllOTQyNmQ5
ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2Ny4uMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdmMTky
NDczNTJjMGY4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPHVpbnQ2NF90PiYgY29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7
IH0KICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyBy
ZXR1cm4gKm1faW5zdHJ1Y3Rpb25zOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdl
dENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaW5kZXggLSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0
Q29uc3RhbnRUeXBlKGludCBpbmRleCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90
IGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0
Q29uc3RhbnRUeXBlKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSk7Ci0gICAgICAgIHJl
dHVybiBtX2NvbnN0YW50VHlwZXNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07
CisgICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsK
ICAgICB9CiAKICAgICB2b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1
Y3Rpb25TdHJlYW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCmluZGV4IGFiMTc0MDZhZmI3MzRhNzA4ZGYxMWRiYjY4MDE1MThiNzY2
NWZiNDIuLmVlMmIzMjdkMmFmNTQ3MTk2ODc5NjlhYzI1MmE4NGM3ODhlZjZlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAt
MjQyLDYgKzI0Miw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFy
c2VyPExMSW50R2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCisg
ICAgLy8gV2UgbmVlZCB0aGlzIGZvciBhdXRvZ2VuZXJhdGVkIHRlbXBsYXRlcyB1c2VkIGJ5IEpT
IGJ5dGVjb2Rlcy4KKyAgICB2b2lkIHNldFVzZXNDaGVja3BvaW50cygpIGNvbnN0IHsgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7IH0KKwogICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3Rh
Y2smLCBjb25zdCBTdGFjayopIHsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCmluZGV4IGUyYTRjNDI1MzNhMmY0NDdkZDMyMDIw
NWI3NzdiNzhiMDM5YzBiNjguLjIwNjlhZDhiMjRiNzM2OWRjZDlkNWYwYzdmNThlZWM5MmIzNWM3
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAK
QEAgLTc0Myw3ICs3NDMsNyBAQCB2b2lkKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldhc21Ub0pT
RXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcAogICAgIC8vIGZvciBl
eGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJl
Z2lzdGVyIGJlZm9yZSBqdW1waW5nCiAgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJ
ZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCi0gICAgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsK
ICAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggOTI3YTY5ODRhM2JlMDE0
Y2YzZWE3ZDY3ZjAzNDU4NGVlYmViNjBjZS4uNTRmNjM2YWMxYjUwNzVkMWM2NjdiMzhhOTAzMTMy
OTBkNWYzMzNjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7
CiAKICNkZWZpbmUgUkVBRCh2aXJ0dWFsUmVnaXN0ZXIpIFwKICAgICAodmlydHVhbFJlZ2lzdGVy
LmlzQ29uc3RhbnQoKSBcCi0gICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+
Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKSkgXAorICAgICAgICA/IEpTVmFs
dWU6OmRlY29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlcikpIFwK
ICAgICAgICAgOiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKSkKIAogaW5saW5lIGJvb2wg
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2Fz
bTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWJkN2FiNDNk
ZTA2Zjg5M2MxNjRkNTk5YzZjYzRmNWZiMTdiMDViYi4uNGVlN2Y1MWU4MjVlYTY2ZmI3MzFiYjcx
ZWM4NzcwYTc0MzZkMmYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zNzIsNiArMzcyLDcgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNp
Z25hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhy
ZWFkTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRNZXNz
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVBODIyRjkwMDUy
NTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzM4RUJBNDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW51bUNsYXNzT3BlcmF0b3JPdmVybG9h
ZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1MzRGMjkxRUMwRTEwRTAwMTQx
QjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0
aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTU0LDYgKzk1NSw3IEBACiAJCQkJQThBNDcyOTgxNTFBODI1QTAwNDEy
M0ZGIC8qIGR0b2EuaCAqLywKIAkJCQlGRTA1RkFFNjFGREIyMTQzMDAwOTMyMzAgLyogRHVtYlB0
clRyYWl0cy5oICovLAogCQkJCUFENjUzREE4MjAwNkI2QzIwMEQ4MjBENyAvKiBEdW1iVmFsdWVU
cmFpdHMuaCAqLywKKwkJCQk1MzM4RUJBNDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3Bl
cmF0b3JPdmVybG9hZHMuaCAqLywKIAkJCQkxQUVBODhFMTFENkJCQ0Y0MDBFNUFENjQgLyogRW51
bVRyYWl0cy5oICovLAogCQkJCUFEN0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5o
ICovLAogCQkJCUE4QTQ3MjlGMTUxQTgyNUEwMDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNlL1dURi93dGYvQml0
bWFwLmgKaW5kZXggNGM2ZjVkNDQyNjMyYzNlZmMwMDBiZDE4ZTllMzY5NDUyZmFmMWMxMC4uYjQ2
ZGE5ZTg1YWI5YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvQml0bWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKQEAgLTUxLDYg
KzUxLDcgQEAgcHVibGljOgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNv
bnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAg
dm9pZCBpbnZlcnQoKTsKICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNpemVfdCBydW5MZW5n
dGgpIGNvbnN0OwogICAgIHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAwKSBjb25zdDsKICAg
ICBzaXplX3QgaXNFbXB0eSgpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMywxMiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAorICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3I9KGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fYml0bWFwLT5zZXQobV9pbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBCaXRtYXAqIG1fYml0
bWFwOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKQEAgLTExMSw2ICsxMTgsOSBAQCBwdWJsaWM6
CiAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgZmlu
ZEJpdCgwLCB0cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgYml0bWFwU2l6ZSk7IH0KICAgICAKKyAgICBpdGVyYXRvciBvcGVyYXRvcltd
KHNpemVfdCk7CisgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0Owor
CiAgICAgdm9pZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5kQ2xlYXIo
Qml0bWFwJik7CiAgICAgCkBAIC0yMjQsNiArMjM0LDEzIEBAIGlubGluZSB2b2lkIEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQoYml0cy5kYXRhKCks
IDAsIHNpemVvZihiaXRzKSk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBl
bmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46
OmludmVydCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAg
ICAgICBiaXRzW2ldID0gfmJpdHNbaV07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewpAQCAtNDA5
LDYgKzQyNiwxOSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpv
cGVyYXRvciE9KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29y
ZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRv
cltdKHNpemVfdCBpbmRleCkgLT4gaXRlcmF0b3IKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBzaXpl
KCkpOworICAgIHJldHVybiBpdGVyYXRvcigqdGhpcywgaW5kZXgpOworfQorCit0ZW1wbGF0ZTxz
aXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8
Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgLT4g
Y29uc3QgaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT4qPih0aGlzKSlbaW5kZXhdOworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4
IGRhZTRhNzFiMjhkMTMwNDI0YzBiZDczMWJlNDE2NDNmMDUyYjNlYTkuLjJhMzI2MmM5YjhiNmQ1
NmRlM2NhNGRhMDE1Njk2ZDc1MjdhYTRiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC01Niw2
ICs1Niw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBEdW1iUHRyVHJhaXRzLmgKICAg
ICBEdW1iVmFsdWVUcmFpdHMuaAogICAgIEVudW1UcmFpdHMuaAorICAgIEVudW1DbGFzc09wZXJh
dG9yT3ZlcmxvYWRzLmgKICAgICBFeHBlY3RlZC5oCiAgICAgRXhwb3J0TWFjcm9zLmgKICAgICBG
YXN0Qml0VmVjdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJh
dG9yT3ZlcmxvYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fk
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhmZGU3M2Y1YjJkN2Q1NzQ0YTNkMDg1NzdjYzcyNDg3MWU5M2U2MTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJs
b2Fkcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKwor
I2RlZmluZSBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBv
cCwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBj
b25zdGV4cHIgYXV0byBvcGVyYXRvciBvcChlbnVtTmFtZSBlbnVtRW50cnksIFQgdmFsdWUpIC0+
IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpIG9wIHZhbHVlOyBcCisgICAgfSBc
CisgICAgICBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0ZXhwciBhdXRv
IG9wZXJhdG9yIG9wKFQgdmFsdWUsIGVudW1OYW1lIGVudW1FbnRyeSkgLT4gc3RkOjplbmFibGVf
aWZfdDwoZW5hYmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIHZh
bHVlIG9wIHN0YXRpY19jYXN0PFQ+KGVudW1FbnRyeSk7IFwKKyAgICB9IFwKKworI2RlZmluZSBP
VkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFi
bGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgKywgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9S
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAg
ICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAqLCBlbmFi
bGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgLywgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9S
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICUsIGVuYWJsZUV4cHJlc3Npb24pIFwKKwor
I2RlZmluZSBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVH
UkFMUyhlbnVtTmFtZSkgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgc3RkOjppc19pbnRlZ3JhbF92PFQ+KQorCisjZGVmaW5lIE9WRVJMT0FEX1JF
TEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJsZUV4
cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVu
dW1OYW1lLCA9PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICE9LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAg
T1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPCwgZW5hYmxl
RXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4o
ZW51bU5hbWUsIDw9LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID49LCBlbmFi
bGVFeHByZXNzaW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNf
Rk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX1JFTEFUSU9O
QUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdy
YWxfdjxUPikKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oIGIv
U291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCmluZGV4IDg4NWI3YjE3M2IxMWE2MDFiZTI5
YTMzMmFiOWQyYTQxNGQ1NjIxMjIuLjkyMDg5NWZjNDllNzFiZjk2NjkyMjFjMTMxYTE3NDJmYjc1
OGZmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKQEAgLTQ1MCw3ICs0NTAsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAg
IG9wZXJhdG9yIGJvb2woKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICEhKCptX3dvcmQg
JiBtX21hc2spOwogICAgIH0KQEAgLTQ2NCw2ICs0NjQsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICB9CiAKKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRvcnw9KGJv
b2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgPSB2YWx1ZSA6ICp0aGlzOyB9CisgICAg
RmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3ImPShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/
ICp0aGlzIDogKnRoaXMgPSB2YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIHVpbnQzMl90KiBtX3dv
cmQgeyBudWxscHRyIH07CiAgICAgdWludDMyX3QgbV9tYXNrIHsgMCB9OwpAQCAtNTA5LDcgKzUx
MiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAg
fQotICAgIAorCisgICAgLy8gRm9yIHRlbXBsYXRpbmcgYXMgVmVjdG9yPGJvb2w+CisgICAgdm9p
ZCBmaWxsKGJvb2wgdmFsdWUpIHsgdmFsdWUgPyBzZXRBbGwoKSA6IGNsZWFyQWxsKCk7IH0KKyAg
ICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpIHsgcmVzaXplKG5ld1NpemUpOyB9CisKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVu
ZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYml0dmVj
dG9yIGNoYW5nZWQuCkBAIC01ODksNCArNTk2LDUgQEAgcHVibGljOgogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAordXNpbmcgV1RGOjpGYXN0Qml0UmVmZXJlbmNlOwogdXNpbmcgV1RGOjpGYXN0Qml0
VmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmggYi9T
b3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaAppbmRleCA1YTRlOWVmNDQ5NGVmNDZjYTll
NGVlZjc3ZmRjYzBkNjBmYWE0YTExLi4zYTM1YjM4ZjRjMDIzNjc5YWM3Y2ZjOWM0NjU2MDg0YTM5
MTQ4M2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgVHlwZSB1bmFsaWdu
ZWRMb2FkKGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWw8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9jb3B5YWJsZTxUeXBlPjo6dmFsdWUsICIiKTsKICAgICBUeXBlIHJlc3VsdCB7IH07
CiAgICAgbWVtY3B5KCZyZXN1bHQsIHBvaW50ZXIsIHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTQzLDcgKzQzLDcgQEAgaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25z
dCB2b2lkKiBwb2ludGVyKQogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGlubGluZSB2b2lkIHVu
YWxpZ25lZFN0b3JlKHZvaWQqIHBvaW50ZXIsIFR5cGUgdmFsdWUpCiB7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWw8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxUeXBlPjo6dmFsdWUsICIiKTsKICAgICBtZW1j
cHkocG9pbnRlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOwogfQogCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTBkOGU3NWQ3ZWVlMmQ2YWM1OGUw
NjhlZTE4MjY0ZDQ4ZGFmNmQxMy4uYzk4OWQwNGI5Mjg1NWQ1OTZmOWM3MDQxOTAxNTQ5NWMyNjFi
ZWNjMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUgdG8gZXhpdCB0byB0
aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJlbW92ZSBwcm9iZSBPU1IgZXhpdCBv
cHRpb24gc2luY2Ugd2UgYXJlIG5vdCB1c2luZyB0aGF0IGFueW1vcmUuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzOgorCiAyMDE5LTEyLTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBnYXJkZW5pbmcuIE1hcmsgV2Vi
S2l0LkZvY3VzZWRGcmFtZUFmdGVyQ3Jhc2ggYXMgdGltZW91dApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMKaW5kZXggY2RiZjljMGRiZjkzMmUyOGM2ZDVhODIwOGEwYTk4Y2NlZTZhZWQ5Zi4u
NWZiYzIwOWVkZTRkMzQ1YTQ2MDViMDBkMjcxNzIwNDVkMDQ5MmNlNiAxMDA3NTUKLS0tIGEvVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCkBAIC00OTgsNyArNDk4LDYgQEAgTk9fQ0pJVF9PUFRJT05TID0gWyIt
LXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0x
MDAKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZlbD0xIl0KIEIzTzBfT1BUSU9O
UyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFseXNpcz0xMDAiLCAi
LS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0gWyItLXVzZUZUTEpJVD10cnVl
Il0KLVBST0JFX09TUl9FWElUX09QVElPTiA9IFsiLS11c2VQcm9iZU9TUkV4aXQ9dHJ1ZSJdCiBG
T1JDRV9MTElOVF9FWElUX09QVElPTlMgPSBbIi0tZm9yY2VPU1JFeGl0VG9MTEludD10cnVlIl0K
IAogcmVxdWlyZV9yZWxhdGl2ZSAid2Via2l0cnVieS9qc2Mtc3RyZXNzLXRlc3Qtd3JpdGVyLSN7
JHRlc3RXcml0ZXJ9IgpAQCAtNzEzLDcgKzcxMiw3IEBAIGRlZiBydW5GVExOb0NKSVRCM08wKCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVFZhbGlk
YXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC12
YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLXVz
ZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAq
KEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1jaml0LXZhbGlk
YXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2Ft
cGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRM
X09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVROb1B1dFN0YWNrVmFsaWRhdGUoKm9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOSw3ICs3MjgsNyBAQCBkZWYgcnVuRlRMTm9DSklUT1NS
VmFsaWRhdGlvbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRlZiBydW5E
RkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZGZnLWVhZ2Vy
IiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIFBST0JF
X09TUl9FWElUX09QVElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMg
KyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuREZHRWFnZXJO
b0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA3YzVhZjQ0YmIzYzRm
Y2MzNzk4ZmFkNDM2Y2NiMWQ4ODNiNTE5ZmExLi4xYzEwMDBiMjk2MzhjOTU0Yzk4MmEwNThhM2Nk
ODMyMzJmM2I2YzExIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE5LTEyLTE4ICBLZWl0aCBNaWxsZXIgIDxr
ZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJlIGFibGUg
dG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3Vs
ZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanM6IEFkZGVkLgorICAg
ICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxsZWUpOgorICAgICAgICAodGVz
dCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6CisgICAgICAgICogc3RyZXNzL2Fw
cGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanM6IEFkZGVkLgorICAgICAgICAo
ZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxsZWUpOgorICAgICAgICAodGVzdCk6Cisg
ICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6CisgICAgICAgICogc3RyZXNzL2xvYWQtdmFy
YXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanM6CisgICAgICAgIChjaGVj
a0VxdWFsKToKKyAgICAgICAgKiBzdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZl
cmVudC1hcmd1bWVudC1jb3VudC5qczoKKwogMjAxOS0xMi0xMyAgWXVzdWtlIFN1enVraSAgPHlz
dXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBKU0ZpeGVkQXJyYXksIGFu
ZCB1c2UgSlNJbW11dGFibGVCdXR0ZXJmbHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9z
dHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9j
Y2FzaW9uYWxseS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQt
bGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNmMTVh
NmViOGMyN2NjMGFkMmU5ZjU5NTQxZmZlMmM1MGFjMGEyMwotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0
aW9ucy1vY2Nhc2lvbmFsbHkuanMKQEAgLTAsMCArMSwzNiBAQAorCitsZXQgY3VycmVudEFyZ0Nv
dW50OworZnVuY3Rpb24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKKyAgICByZXR1cm4gY3VycmVudEFy
Z0NvdW50OworfQorbm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7CisKK2Z1bmN0aW9uIGNhbGxl
ZSgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7Cisg
ICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwgYXJyYXkpOworfQorbm9JbmxpbmUodGVzdCk7CisK
K2xldCBsZW5ndGhDYWxscyA9IDA7CitjdXJyZW50QXJnQ291bnQgPSAyOworbGV0IGFycmF5ID0g
eyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkgeworICAgIGlmIChsZW5ndGhDYWxscysrICUgMTAg
PT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aHJvd2luZyBhbiBleGNlcHRpb24gaW4g
bGVuZ3RoIik7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudAorfSB9Citmb3IgKGxldCBpID0g
MDsgaSA8IDFlNjsgaSsrKSB7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdChhcnJheSk7CisgICAg
fSBjYXRjaCB7IH0KK30KKworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2FsbHMgPSAw
OwordGVzdChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJvdyBuZXcg
RXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3Ny
LWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9z
ci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJlZTQ1Y2UxYzcy
ODM2NTM4MjcwNWQ5OWQzMDFhZTZiY2I4ZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMv
c3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKQEAgLTAsMCAr
MSwzMSBAQAorCitsZXQgY3VycmVudEFyZ0NvdW50OworZnVuY3Rpb24gZXhwZWN0ZWRBcmdDb3Vu
dCgpIHsKKyAgICByZXR1cm4gY3VycmVudEFyZ0NvdW50OworfQorbm9JbmxpbmUoZXhwZWN0ZWRB
cmdDb3VudCk7CisKK2Z1bmN0aW9uIGNhbGxlZSgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQor
CitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwgYXJy
YXkpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2xldCBsZW5ndGhDYWxscyA9IDA7CitjdXJyZW50
QXJnQ291bnQgPSAyOworbGV0IGFycmF5ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkgeyBs
ZW5ndGhDYWxscysrOyByZXR1cm4gY3VycmVudEFyZ0NvdW50IH0gfQorZm9yIChsZXQgaSA9IDA7
IGkgPCAxZTU7IGkrKykKKyAgICB0ZXN0KGFycmF5KTsKKworCit0ZXN0KGFycmF5KTsKK2N1cnJl
bnRBcmdDb3VudCA9IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAo
bGVuZ3RoQ2FsbHMgIT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1h
bmQtZXhpdC1zdHJpY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxp
bmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCmluZGV4IDM2MThmOGNiYjNkMzIxMTM0MGU2YTA3
MjA3MmYxNDNlNWM0NmMyNDIuLmFhNzMyMzE5MGNmNDlkODhlM2ZmZTkxMmIxZTE2YWE0N2Q1MGY5
NGIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQt
Y2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdz
LXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwpAQCAtMTgsOCArMTgsOCBAQCBm
dW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CiAgICAgaWYgKGEuYiAhPSBiLmIp
CiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1
cyAiICsgYi5iOwotICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCi0gICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIg
dmVyc3VzICIgKyBiLmM7CisgICAgaWYgKGEuYy5sZW5ndGggIT09IGIuYy5sZW5ndGgpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEu
Yy5sZW5ndGggKyAiIHZlcnN1cyAiICsgYi5jLmxlbmd0aDsKICAgICBmb3IgKHZhciBpID0gYS5j
Lmxlbmd0aDsgaS0tOykgewogICAgICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKICAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSAr
ICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcyBi
L0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1l
bnQtY291bnQuanMKaW5kZXggMDQ3ZmIwMWY4ODMxNDVjYzc1NTRmNWNmNzAxYTcwNzRmMjY3ZGVl
ZS4uNTNkNzUyZGVjZDdkMGYzMWJjMmYxZDc4OTkxYzY5MTAxZjA4YmZmMyAxMDA2NDQKLS0tIGEv
SlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVu
dC1jb3VudC5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgt
ZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCkBAIC0xOCw4ICsxOCw4IEBAIG5vSW5saW5lKGJh
cik7CiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICB2YXIgcmVzdWx0ID0g
Zm9vKDQwLCAyKTsKICAgICBpZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25n
IHJlc3VsdCBmb3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRo
cm93IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVz
dWx0KTsKICAgICByZXN1bHQgPSBiYXIoNDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09IDQyKQot
ICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3QgIiAr
IHJlc3VsdDsKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3IgYmFyLCBleHBl
Y3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386118</attachid>
            <date>2019-12-19 10:38:09 -0800</date>
            <delta_ts>2019-12-23 13:34:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191219103747.patch</filename>
            <type>text/plain</type>
            <size>670120</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzQ3YWU3ZWRlZjk3Zjg4Y2RjZmEzZjgzOGZlY2VkMDVmZGYzYzAxLi5jNDkxNDk0ZDExNWQwNTI3
MjM0ODI5NDQzZjY5YTQxOWUyZjFlY2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MzQgQEAKKzIwMTktMTItMTkgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBpZiB0aGVyZSBhcmUgYW55IGFj
dGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBzdGFjayB3ZSB3aWxsIGVtaXQg
YSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRlCisgICAgICAgIG9iamVjdCBr
ZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVjb2RlIHdob3NlCisgICAgICAg
IGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5lZWQgc2lkZSBzdGF0ZSBiZWNh
dXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUgc2V2ZXJhbCBjb3BpZXMgb2Yg
dGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGNhbGwg
YmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1IgYW5kIGV4aXQgYWdhaW4gZnJv
bSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQorICAgICAgICBjaGVja3BvaW50
IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGluZyB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAgICAgIHNpZGUgc3RhdGUgYXMg
d2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzCisgICAg
ICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0byBKU0xvY2sgdGhhdCB0aGVy
ZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGVzIG9uIHRoZSB2
bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBBIGxhcmdlIGFtb3VudCBvZiB0
aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBjb2RlIHRoYXQKKyAgICAgICAg
cmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGEgaW50IGFzIHBvc3NpYmxlLiBJbnN0ZWFk
CisgICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4g
VGhlcmUgYXJlIGFsc28gYQorICAgICAgICBjb3VwbGUgb2YgbmV3IGNsYXNzZXMvZW51bSBhZGRl
ZCB0byBKU0M6CisKKyAgICAgICAgMSkgVGhlcmUgaXMgbm93IGEgY2xhc3MsIE9wZXJhbmQsIHRo
YXQgcmVwcmVzZW50cyB0aGUgY29tYmluYXRpb24KKyAgICAgICAgb2YgYSBWaXJ0dWFsUmVnaXN0
ZXIgYW5kIGEgdGVtcG9yYXJ5LiBUaGlzIGlzIGhhbmR5IGluIHRoZSBERkcgdG8KKyAgICAgICAg
bW9kZWwgT1NSIGV4aXQgdmFsdWVzIGFsbCB0b2dldGhlci4gQWRkaXRpb25hbGx5LCBPcGVyYW5k
czxUPiBoYXMKKyAgICAgICAgYmVlbiB1cGRhdGVkIHRvIHdvcmsgd2l0aCByZXNwZWN0IHRvIE9w
ZXJhbmQgdmFsdWVzLgorCisgICAgICAgIDIpIENhbGxGcmFtZVNsb3QgaXMgbm93IGFuIGVudW0g
Y2xhc3MgaW5zdGVhZCBvZiBhIHN0cnVjdCBvZgorICAgICAgICBjb25zdGV4cHIgdmFsdWVzLiBU
aGlzIGxldHMgdXMgaW1wbGljaXRseSBjb252ZXJ0IENhbGxGcmFtZVNsb3RzCisgICAgICAgIHRv
IFZpcnR1YWxSZWdpc3RlcnMgd2l0aG91dCBhbGxvd2luZyBhbGwgaW50cyB0byBpbXBsaWNpdHkK
KyAgICAgICAgY29udmVydC4KKworICAgICAgICAzKSBGVEw6OlNlbGVjdFByZWRpY3RhYmlsaXR5
IGlzIGEgbmV3IGVudW0gdGhhdCBkZXNjcmliZXMgdG8gdGhlCisgICAgICAgIEZUTCB3aGV0aGVy
IG9yIG5vdCB3ZSB0aGluayBhIHNlbGVjdCBpcyBnb2luZyB0byBiZQorICAgICAgICBwcmVkaWN0
YWJsZS4gU2VsZWN0UHJlZGljdGFiaWxpdHkgaGFzIGZvdXIgb3B0aW9uczogVW5wcmVkaWN0YWJs
ZSwKKyAgICAgICAgUHJlZGljdGFibGUsIExlZnRMaWtlbHksIGFuZCBSaWdodExpa2VseS4gVW5w
cmVkaWN0YWJsZSBtZWFucyB3ZQorICAgICAgICB0aGluayBhIGJyYW5jaCBwcmVkaWN0b3Igd29u
J3QgZG8gYSBnb29kIGpvYiBndWVzc2luZyB0aGlzIHZhbHVlCisgICAgICAgIHNvIHdlIHNob3Vs
ZCBjb21waWxlIHRoZSBzZWxlY3QgdG8gYSBjbW92LiBUaGUgb3RoZXIgb3B0aW9ucyBtZWFuCisg
ICAgICAgIHdlIGVpdGhlciB0aGluayB3ZSBhcmUgZ29pbmcgdG8gcGljayB0aGUgc2FtZSB2YWx1
ZSBldmVyeSB0aW1lIG9yCisgICAgICAgIHRoZXJlJ3MgYSByZWFzb25hYmxlIGNoYW5jZSB0aGUg
YnJhbmNoIHByZWRpY3RvciB3aWxsIGJlIGFibGUgdG8KKyAgICAgICAgZ3Vlc3MgdGhlIHZhbHVl
LgorCisgICAgICAgIEluIG9yZGVyIHRvIHZhbGlkYXRlIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlz
IHBhdGNoIHRoZSB2YXJpb3VzCisgICAgICAgIHZhcmFyZ3MgY2FsbCBvcGNvZGVzIGhhdmUgYmVl
biByZXdvcmtlZCB0byB1c2UgY2hlY2twb2ludHMuIFRoaXMKKyAgICAgICAgYWxzbyBmaXhlZCBh
IGxvbmctc3RhbmRpbmcgaXNzdWUgd2hlcmUgd2UgY291bGQgY2FsbCBsZW5ndGgKKyAgICAgICAg
Z2V0dGVycyB0d2ljZSBpZiB3ZSBPU1IgZXhpdCBkdXJpbmcgZnJvbSBMb2FkVmFyYXJncy4KKwor
ICAgICAgICBMYXN0bHksIHdlIGhhdmUgbm90IGVuYWJsZWQgdGhlIHByb2JlLWJhc2VkIE9TUiBl
eGl0IGZvciBhIGxvbmcKKyAgICAgICAgdGltZSBpbiBwcm9kdWN0aW9uLCB0aHVzIHRoaXMgcGF0
Y2ggcmVtb3ZlcyB0aGF0IGNvZGUgc2luY2UgaXQKKyAgICAgICAgd291bGQgYmUgYSBub24tdHJp
dmlhbCBhbW91bnQgb2Ygd29yayB0byBnZXQgY2hlY2twb2ludHMgd29ya2luZworICAgICAgICB3
aXRoIHByb2JlIE9TUi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmg6CisgICAgICAgICogYXNzZW1ibGVyL1Byb2JlRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6UHJvYmU6OkZyYW1lOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6UHJvYmU6OkZy
YW1lOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKHBvcHVs
YXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAgICAgKGZsb2F0aW5nUG9pbnRPcGVyYW5k
cyk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZVNu
aXBwZXRQYXJhbXMuY3BwOgorICAgICAgICAoSlNDOjpTbG93UGF0aENhbGxHZW5lcmF0b3JXaXRo
QXJndW1lbnRzOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Qnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZSBjb25z
dCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaDoKKyAgICAgICAgKiBieXRl
Y29kZS9CeXRlY29kZUluZGV4LmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZHVt
cCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUluZGV4OjpCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVJbmRleDo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Y2hl
Y2twb2ludCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBjb25z
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVJbmRleDo6cGFjayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmZyb21C
aXRzKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6ZW51bVZh
bHVlc0VxdWFsQXNJbnRlZ3JhbCk6CisgICAgICAgIChKU0M6OnRtcExpdmVuZXNzRm9yQ2hlY2tw
b2ludCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjp2
aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKToKKyAgICAgICAgKEpTQzo6
dmlydHVhbFJlZ2lzdGVySXNMaXZlKToKKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQWx3YXlzTGl2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNM
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzTGl2ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVJbmRl
eEZvckV4aXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2
ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bnVtVG1wcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNLbm93bk5vdElt
bWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNUZW1wb3JhcnlSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRSZWdpc3Rlcik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpyZXBsYWNlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVz
cy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0ZWNvZGVMaXZlbmVzczo6dmlydHVhbFJlZ2lzdGVy
SXNMaXZlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJh
bmRJc0xpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5oOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OklubGluZUNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6c2V0VG1wT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2sgY29uc3QpOgorICAgICAgICAoSlND
OjpDb2RlT3JpZ2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25zdCk6
CisgICAgICAgIChKU0M6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OnVubWFwT3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oOgorICAgICAg
ICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6TGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXkpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFzaCBj
b25zdCk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpvcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxh
enlPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6
ZW1pdFJlcG9ydFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kOjpPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6a2lu
ZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZhbHVlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZDo6dmlydHVhbFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZDo6YXNCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNUbXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZDo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzSGVh
ZGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Bcmd1bWVudCBjb25zdCk6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6OnRvTG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNWYWxpZCBj
b25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmZyb21CaXRzKToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Ok9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om51bWJlck9mTG9j
YWxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om51bWJlck9mVG1wcyBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXBJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmRzOjphcmd1bWVudEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmxvY2FsSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnRtcCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjph
cmd1bWVudCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphcmd1bWVudCBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpsb2Nh
bCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpzaXplRm9yIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmF0Rm9yKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0Rm9y
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZUxvY2Fscyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Omdl
dEZvck9wZXJhbmRJbmRleCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5k
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZEluZGV4IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpoYXNPcGVyYW5k
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6YXQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXQpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmRzOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRG
b3JJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzQXJndW1lbnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNMb2NhbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjp2aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpzZXRPcGVyYW5kRmlyc3RUaW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzPFQ+OjpkdW1wSW5Db250
ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM8VD46OmR1bXAgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFz
Q2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0
SGFzQ2hlY2twb2ludHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3Rh
bnRSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpnZXRD
b25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0NvbnN0
YW50UmVnaXN0ZXJJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlcjo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKToKKyAgICAgICAg
KEpTQzo6VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyOjp+VmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcjo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6On5WYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcjo6Zm9yRWFjaCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFs
dWVSZWNvdmVyeS5jcHA6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OnJlY292ZXIgY29u
c3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaDoKKyAgICAgICAgKiBieXRl
Y29kZS9WaXJ0dWFsUmVnaXN0ZXIuaDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNM
b2NhbCk6CisgICAgICAgIChKU0M6OnZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQpOgorICAgICAg
ICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OlZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OlZpcnR1YWxSZWdpc3Rlcjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxS
ZWdpc3Rlcjo6aXNMb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6
aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNDb25z
dGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6dG9Db25zdGFudElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6b3BlcmFuZElzTG9jYWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpvcGVyYW5kSXNBcmd1bWVudCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1ldGVyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmluaXRpYWxpemVQYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRFcXVhbGl0eU9wSW1wbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6c2V0VXNlc0No
ZWNrcG9pbnRzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlcklEOjpzZXRJbmRleCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1w
QXNPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1bXAg
Y29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEhlYXA6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0FyZ3Vt
ZW50UG9zaXRpb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudFBvc2l0aW9uOjpkdW1w
KToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzVXRp
bGl0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAgKiBk
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6OnBydW5lQnlMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5oOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Y2xvc2VTdGFydGluZ1dp
dGhMb2NhbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2lj
QmxvY2s6OmVuc3VyZVRtcHMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAg
ICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
bG9ja0luc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNl
cik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVuc3VyZVRtcHMpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc0NoZWNrcG9pbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0TG9jYWxPclRtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnNldExvY2FsT3JUbXApOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZpbmRB
cmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmZsdXNoSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZs
dXNoRm9yVGVybWluYWxJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaERpcmVjdCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZEZsdXNoT3JQaGFudG9tTG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwaGFudG9tTG9jYWxEaXJl
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9HcmFwaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OnJlbWFwT3Bl
cmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRT
ZXRMb2NhbDo6RGVsYXllZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6RGVsYXllZFNldExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NGQVBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0T1NSKToKKyAgICAg
ICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVh
ZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BT
UmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hP
clBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6
Y2Fub25pY2FsaXplU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNl
OjpjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRo
cmVhZGluZ1BoYXNlOjpwaGlTdGFja0Zvcik6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0NvbWJpbmVkTGl2
ZW5lc3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFkZEJ5dGVjb2RlTGl2ZW5lc3MpOgorICAg
ICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25E
YXRhOjphZGRDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjphZGRV
bmlxdWVDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpsYXN0
Q2FsbFNpdGUgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Y29tcGlsZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdGb3JB
bGxLaWxscy5oOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE9wZXJhbmRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpmb3JBbGxLaWxsc0luQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpzdWJz
dGl0dXRlR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6Zm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Zm9yQWxsTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUpOgorICAgICAgICAqIGRmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0
cmFjdFN0YXRlOjpvcGVyYW5kKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmVtaXRTdG9y
ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNl
cnZhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVBy
ZXNlcnZhdGlvblBoYXNlOjppc1ZhbGlkRmx1c2hMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aGFuZGxlQmxvY2tGb3JUcnlD
YXRjaCk6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25Q
aGFzZTo6bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKiBkZmcvREZHTW92SGludFJl
bW92YWxQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdGFja0FjY2Vzc0RhdGE6OlN0YWNrQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzQXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFy
Z3VtZW50c0NoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpvcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNVbmxpbmtlZE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnVubGlua2VkT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFz
TG9hZFZhcmFyZ3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpsb2NhbCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRMb2NhbCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRMb2NhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAoSlNDOjpE
Rkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OmpzVmFsdWVG
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVDYWxsZWVTYXZlc0Zvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpERkc6OnNhdmVPckNvcHlDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6Y3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6Y3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OnByaW50T1NSRXhpdCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4
aXQuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpPU1JFeGl0QmFzZTo6aXNFeGl0aW5nVG9DaGVja3BvaW50SGFuZGxlciBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxG
cmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1RhcmdldCk6CisgICAg
ICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdPcEluZm8uaDoKKyAgICAgICAgKEpTQzo6REZHOjpPcEluZm86Ok9wSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6
OnJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
Ojp3cml0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0
b3I6OmRlZik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0
b3I6OmNhbGxJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNv
bnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1
cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJn
dW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OnJlY29yZFNldExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0YWNrTGF5b3V0UGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RhY2tMYXlvdXRQaGFzZTo6YXNzaWduKToKKyAgICAgICAgKiBkZmcv
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhpdFRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmg6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhh
c2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6ZGlz
YWJsZUhvaXN0aW5nQWNyb3NzT1NSRW50cmllcyk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9W
b3RlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnRhbGx5Vm90ZXNG
b3JTaG91bGRVc2VEb3VibGVGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNj
ZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwpOgorICAgICAgICAqIGRmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6
Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bG9jYWwp
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZH
VmFyaWFibGVFdmVudC5oOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6bW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudDo6c3BpbGxSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudDo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudDo6Ynl0ZWNvZGVSZWdpc3RlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxl
RXZlbnRTdHJlYW06OmxvZ0V2ZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50
U3RyZWFtOjpyZWNvbnN0cnVjdCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjphcHBl
bmRBbmRMb2cpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50
cnlKSVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRDYWxsZWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU2V0Q2FsbGVlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpnZXRBcmd1bWVudHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpnZXRDdXJyZW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjp0YWdGb3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9y
KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAg
KiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uTWF0
ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzZWxlY3QpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQu
aDoKKyAgICAgICAgKiBmdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKiBmdGwvRlRM
U2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkZUTDo6Y2FsbE9wZXJhdGlvbik6CisgICAg
ICAgICogZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiOiBBZGRlZC4KKyAgICAgICAgKiBnZW5lcmF0
b3IvT3Bjb2RlLnJiOgorICAgICAgICAqIGdlbmVyYXRvci9TZWN0aW9uLnJiOgorICAgICAgICAq
IGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2Fs
bFNpdGVBc1Jhd0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNh
bGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxsU2l0
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUlu
ZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlT3JpZ2luKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoK
KyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChK
U0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJ
bmRleDo6Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmZyb21CaXRz
KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBD
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OnVuc2FmZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAq
IGludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgIChKU0M6OkNoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlOjpnZXRUbXApOgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVP
ZlZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNl
dHVwVmFyYXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3Io
KSBjb25zdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0UGF5bG9h
ZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1l
U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVRhZ1Nsb3QpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50Q291bnQpOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVy
Lmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWxsZWVKU1ZhbHVlUmVn
cyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphc3N1bWVDYWxsZWVJc0NlbGwp
OgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X21vZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYml0bm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UmlnaHRTaGlmdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29u
c3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6
CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZO
b3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJ
bml0UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
dG9yZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFu
dEludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1w
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
ZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2p1bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVt
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90
b19zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6
CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRC
eVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFJlc29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJs
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAo
SlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0lu
dGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJm
YWNlSklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0
UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKiBqaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjplbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSk6Cisg
ICAgICAgICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lh
bGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lh
bGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxp
emVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3VtZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6YWJzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmdlbmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFy
Z3NTZXR1cCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAg
IChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRj
aE5leHRJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhfY2hlY2tw
b2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpz
bG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGlu
dF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdMaXN0Lmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAgICAgKiBy
dW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpo
YXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpV
bmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxDb2RlQmxv
Y2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbnN0
cnVjdERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAg
ICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVu
dHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAg
ICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHA6CisgICAgICAgIChKU0M6OkpT
SW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKToKKyAgICAgICAgKiBydW50aW1l
L01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OmNv
cHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRP
U1JTaWRlU3RhdGUpOgorICAgICAgICAoSlNDOjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNr
cG9pbnRPU1JTaWRlU3RhdGUgY29uc3QpOgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAq
IHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0
aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uQ29kZUJsb2NrOjpnZXRDb25zdGFudFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OnNldFVzZXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9u
KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorCiAyMDE5LTEyLTE3ICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0g
anNjX2NvbnRleHRfZXZhbHVhdGVfaW5fb2JqZWN0IHNob3VsZCB0YWtlIHRoZSBBUEkgbG9jayBi
ZWZvcmUgY2FsbGluZyBzZXRHbG9iYWxTY29wZUV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAyMTRiZDA1NGFhNDdi
MGI1ZmY0MzRlMzgwZjJhMzRlMTllNzM1ZGJlLi5kZTUyYTRmMTYyYjgzYzg4Zjc2NTRlNzk3NjVm
NzFjNTkyMDc4NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE5LTEyLTE5ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIERGRy9GVEwgc2hvdWxkIGJl
IGFibGUgdG8gZXhpdCB0byB0aGUgbWlkZGxlIG9mIGEgYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlw
ZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgorICAgICAg
ICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKiB3dGYv
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRz
Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6
OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpG
YXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVy
ZW5jZTo6b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZpbGwpOgor
ICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYvVW5hbGln
bmVkQWNjZXNzLmg6CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAgICAoV1RG
Ojp1bmFsaWduZWRTdG9yZSk6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50U2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2RjY2Uw
ZjgxZWQ0NGM3NGQ2MGVhNWEwYzYyOGQ4YmZhZDkzMzA4Zi4uY2NlZjFhZmQ0NWRhMTkzMDFjODZh
OWY3NTcyMmJhZGEzN2M4MzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtNTI1LDYgKzUyNSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUFERVJTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVj
b2RlL09wY29kZS5oCiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAgYnl0ZWNvZGUvT3Bl
cmFuZHMuaAogICAgIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9Q
dXRCeUlkRmxhZ3MuaAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5k
ZXggZjhjMWI0YWU1NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFi
MTg5M2ViOTJkZDAyZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcg
QEAgJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9K
RUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9n
ZW5lcmF0b3IvQXJndW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24u
cmIKKyQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJ
UikvZ2VuZXJhdG9yL0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQo
UFJPSkVDVF9ESVIpL2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGRiY2U1YmFjZWRjMDVjM2RjMGVhOGIwNDMzNDZkMTUxZDBkZWY0NDEu
LmIyNjRmNGVkZDM5NjI2OTA1ZTFiMjJhODJlMWU0MTUyMzU1Njc0ZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAw
NzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4
RUMgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmNwcCAqLzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1
bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
ICovOyB9OworCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMzhF
QkEzMjNBQjA0QjgwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVCQTIyM0FCMDRBMzAw
MzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJCTUzNDFGQzcyMURB
QzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcg
LyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBG
MTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUz
NDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAv
KiBQcm9taXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMzU5Nyw2ICszNTk5LDggQEAKIAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQy
IC8qIEIzRXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVl
LmNwcDsgcGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBK
YXZhU2NyaXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFw
IjsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkEyMjNB
QjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBwYXRoID0gZnRs
L0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYxMSw2ICszNjE1LDkgQEAKIAkJNTM0QzQ1N0Ex
QkM3MDNEQzAwNzQ3NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpT
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjRE
IC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsg
cGF0aCA9IEl0ZXJhdG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUu
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2
NCAvKiBBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vz
c0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAw
MjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUw
MzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MjEsNiArNTUyOCw3IEBACiAJCQkJMEY0
ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZD
RUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNF
RkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywKKwkJCQk1MzM4RUJB
MjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLywKIAkJCQkw
RjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLywKIAkJCQkw
RjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJMEYy
NUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01
OTQ3LDYgKzU5NTUsNyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJh
bWUuaCAqLywKIAkJCQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3Vy
ZS5oICovLAogCQkJCUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVz
LmggKi8sCisJCQkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3Rh
Y2suY3BwICovLAogCQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmgg
Ki8sCiAJCQkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmgg
Ki8sCkBAIC04NTc2LDcgKzg1ODUsOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAv
KiBHbG9iYWxPcGVyYXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0
NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUz
NEQ5QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NG
OUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUz
NEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJ
CQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUz
MDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0
ODYxRDAyN0M4ODAwMzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLApAQCAtODU4Nyw2
ICs4NTk4LDcgQEAKIAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVj
dC5qcyAqLywKIAkJCQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBl
LmpzICovLAogCQkJCTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0
SXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8q
IFNldFByb3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3Ry
aW5nQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLApAQCAtOTA4Nyw2ICs5MDk5LDcgQEAKIAkJCQlG
RTFCRDAyMTFFNzIwMjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFQzE2MDMyMjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyog
Q2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMg
LyogQ2xvbmVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNE
MDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDMyLDYgKzk0NDUs
NyBAQAogCQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcg
LyogRlRMUmVjb3ZlcnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUFDMTgwNEMx
M0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEVC
QTMyM0FCMDRCODAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1Bh
dGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkg
LyogRlRMU25pcHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1
NmQ4YTA3ZGJmY2RlZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEy
MTNjZDY2ODI3NjRiMmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5
LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUp
OwogICAgIH0KIAotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJu
QWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUo
dW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewot
ICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAg
IGNvbnN0IHZvaWQqIHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1l
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBj
YWIzNjhkYzdjZDBmM2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBm
NTgzYWNhZWEzYTBmMTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1Byb2JlRnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGdldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVv
ZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4K
LSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAg
ICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwog
ICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQo
aW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdl
dDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJl
Z2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZv
aWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4o
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlciksIHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVl
KQorICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90
IG9mZnNldCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNl
dCwgdmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
ID0gSlNWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJh
NzFlYzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2
YzZkYTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2
MywyMCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlv
biYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hh
ciogbmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+
IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10
eXBlZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGlu
dDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJh
bmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIz
T3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+
IEludDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNs
dHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1
ZSkgQjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVl
cyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0
aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRz
KQogewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4o
MC4pIH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5
cGU+KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVz
dGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZs
b2F0aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0
aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3Bl
cmFuZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBw
b3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJh
bmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAppbmRleCA2MDA2MmY5ZDQ4MDZmNzkyM2JkMzkzZDNhNzU5MmViOGI1MDU4ODM4Li5lYWJkYzgx
MGFiNGRiZDI2M2Y0OGI1YWZmYjA0NzRiMjQ1ODA3NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQog
CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgp
LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7
CiAKICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewog
ICAgICAgICAgICAgYXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZT4oKTsKQEAgLTE3OTcsNyArMTc5Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRs
aW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
U25pcHBldFBhcmFtcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZVNuaXBwZXRQYXJhbXMuY3BwCmluZGV4IGExNzRlMjQ3M2Y3NTMwY2M3NzcxNTNjNjNiMTMx
MzMwZWU1OGY1ODguLjQ1MmMwZWYxYmUzMGIyMWU2MzQ4MWRiNzUwMjg4Y2QzMmEyMDA4OGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBl
dFBhcmFtcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2VTbmlwcGV0UGFyYW1zLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAg
aml0LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0
ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKIAogICAgICAg
ICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2
YzRjZDU2ZWY2YTk4Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1
Y2FlNWMwZWUzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFz
ZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24s
CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKIHsKLSAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSku
ZGF0YSgpKTsKKyAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRl
bXBsYXRlIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFi
ZWw8V2FzbTo6R2VuZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0
ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdp
c3Rlck5hbWUoaW50IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVn
aXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVy
biBjb25zdGFudE5hbWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3Rl
cihyKSk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJs
b2NrPgpAQCAtOTgsMTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9m
TGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRl
bXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0
YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
Y29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1
ZSA9IGJsb2NrKCktPmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZh
bHVlLCAiKCIsIFZpcnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9
IGJsb2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwg
IigiLCByZWcsICIpIik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMz
NSw3IEBAIHZvaWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAot
Q1N0cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NT
dHJpbmcgQnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgp
IGNvbnN0CiB7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsK
ICAgICBhdXRvIHZhbHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShp
bmRleCksIGJsb2NrLT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1
ZTg3YzVhODgyNTEwNzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5
ZmNhMTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2
KSB7IG1fb3V0LnByaW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcg
cmVnaXN0ZXJOYW1lKGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rl
ck5hbWUoVmlydHVhbFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZM
aW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAg
ICBCeXRlY29kZUR1bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0
cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0
ZXJOYW1lKGludCByKSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShW
aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zm
c2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAog
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29u
c3Q7CisgICAgdmlydHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNv
bnN0OwogCiAgICAgQmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZh
dGU6CiAgICAgdXNpbmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5
dGVjb2RlRHVtcGVyOwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBj
b25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0
YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJp
bmcgZm9ybWF0Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYx
YmE5MDQwMWE3MTE3ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgx
NGEyMDExMWM4N2M1MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiB2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3Bv
aW50KCkpCisgICAgICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlSW5kZXguaAppbmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRm
Li4xMGZiYTQ0MDU4ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFt
OwpAQCAtMzcsMjQgKzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAg
IEJ5dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCku
YXNCaXRzKCkpCisgICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygp
KQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRl
Y29kZU9mZnNldCkKLSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0K
IAotICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAg
dWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNp
dCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9p
bnQgPSAwKQorICAgICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVj
a3BvaW50KSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0
aWNfYXNzZXJ0KGhhc09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hl
Y2twb2ludHMgc2hvdWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDMyX3QgY2hlY2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0
Q29uc3RleHByKG51bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVp
bnQ4X3QgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9p
bnRNYXNrOyB9CisgICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRC
aXRzOyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNo
KG1fb2Zmc2V0KTsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6Omlu
dEhhc2gobV9wYWNrZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRW
YWx1ZSgpIHsgcmV0dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVk
VmFsdWUoKTsgfQogCiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3Qg
Yml0cyk7CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBt
X29mZnNldCAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAm
JiBtX3BhY2tlZEJpdHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9w
ZXJhdG9yID09KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0Jp
dHMoKSA9PSBvdGhlci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0
ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAK
QEAgLTY5LDEzICs3OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDMyX3QgaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsKIAotICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAg
IHN0YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hl
Y2twb2ludCk7CisKKyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07
CiB9OwogCitpbmxpbmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRl
Y29kZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQg
PCBudW1iZXJPZkNoZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hl
Y2twb2ludFNoaWZ0KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAg
cmV0dXJuIGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30K
KwogaW5saW5lIEJ5dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3Qg
Yml0cykKIHsKICAgICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQg
PSBiaXRzOworICAgIHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
LnJiCmluZGV4IDcxYmY2YjA2Y2M3ZWY0OTBmN2IzNmFhM2UyMDA2NTE3Nzg3YWZmYTQuLjY4MGNk
ZDkxODYwZjMwMWFmMThkZGViZmEyMjY0ZmEwZTdkNzIwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBl
cyBbCiAgICAgOldhdGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIsCiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFBy
b2ZpbGUsCiAgICAgOkFycmF5UHJvZmlsZSwKQEAgLTc5MSw2ICs3OTEsMTMgQEAgb3AgOmNhbGxf
dmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJv
ZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczog
eworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQsCisgICAgfSwKKyAgICBjaGVja3BvaW50czog
eworICAgICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBu
aWwsCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCkBAIC04MDUsNiArODEyLDEzIEBA
IG9wIDp0YWlsX2NhbGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVBy
b2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAg
IH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudDogdW5zaWduZWQKKyAgICB9LAorICAg
IGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAg
ICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMsCkBAIC04NDUsNiArODU5LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRh
ZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3Vu
dDogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWlu
aW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpy
ZXQsCkBAIC05OTIsNyArMTAxMyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApA
QCAtMTIzOCw2ICsxMjU5LDggQEAgb3AgOmxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKIG9w
IDpsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25z
dHJ1Y3RfdHJhbXBvbGluZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2Nh
bGxfdHJhbXBvbGluZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOmhh
bmRsZVVuY2F1Z2h0RXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkx
OGUxZDIxMzRhNjBiNmNmZjEwMTE0M2FiNTU0MzNiOGI0M2Y0NDAuLjdkYTIyYzJkMmNjN2JmYzEx
ZDFmOGY4ZDdkYmU2ZDNjOTE2Y2U1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEs
NCArMjAxLDM5IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1U
eXBlMSwgdHlwZW5hbWUgRW51bVR5cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFs
QXNJbnRlZ3JhbChFbnVtVHlwZTEgdjEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRU
eXBlMSA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7Cisg
ICAgdXNpbmcgSW50VHlwZTIgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlw
ZTI+Ojp0eXBlOworICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJ
bnRUeXBlMikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0
YXRpY19jYXN0PEludFR5cGUxPih2Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW50VHlwZTI+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitC
aXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25z
dCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorewor
ICAgIEJpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hl
Y2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3Bv
aW50KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9w
X2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVz
RXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJn
czo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6
YXJnQ291bnQsIE9wVGFpbENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGws
IE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdy
YWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnQsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnQp
KTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwpCisg
ICAgICAgICAgICByZXN1bHQuc2V0KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oCmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUz
M2Q5ZTdkMmYyYzkuLjNlNWVkYzBhNjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJh
c2ljQmxvY2suaCIKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAg
IEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1w
cz4gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5k
ZXgpOworCiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlu
bGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRW
ZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25z
dCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
SW5saW5lcy5oCmluZGV4IDNkMTJlMTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAu
LmRlNmNhOGRjOTEwOWI3ODk2N2YxMDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaApAQCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5l
IGJvb2wgdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgcmV0dXJuICFWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJl
dHVybiAhcmVnLmlzTG9jYWwoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFs
d2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lu
bGluZSBib29sIHZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVk
IGxvY2FsID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25l
ZCBsb2NhbCA9IHJlZy50b0xvY2FsKCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5s
aW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVy
YW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJ
c0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUo
b3V0LCBvcGVyYW5kKTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9w
ZXJhbmQpIHx8IHZpcnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBv
cGVyYW5kKTsKIH0KIAogaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCmluZGV4IDg2OWY1M2YzZmNkMGQwNzYxMDlhMWZkYTVmOTQ3ZjUyMGZlNTE0
ZGQuLjYwMmRkNTI1YTFiZDJjMTYzZGI4Y2YxM2IzNWNjNjM2ZWExZWI1Y2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYu
aCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA3LDcg
KzQwOCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNsb25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAg
Y2xvbmVkU3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAg
ICAgIH0KLSAgICAgICAgcmVwbGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQo
KSwgY2xvbmVkU3ltYm9sVGFibGUpOworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRT
eW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsK
ICAgICB9CiAKICAgICBib29sIHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9
IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwg
bV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVz
KCk7CkBAIC02NDEsNyArNjQyLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAg
ICAgIGlmIChieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1
cmVWYXIpIHsKICAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9w
ZXJ0eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAg
aWYgKGJ5dGVjb2RlLm1fdmFyICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50
KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQo
KSkpOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nh
c3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29w
ZURlcHRoLnN5bWJvbFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBp
ZGVudC5pbXBsKCkpOwpAQCAtNzA5LDggKzcxMCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IFByb2ZpbGVUeXBlQnl0ZWNvZGVMb2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBp
bnQgc3ltYm9sVGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGgu
c3ltYm9sVGFibGUoKS5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0
PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVE
ZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAg
ICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2Zp
bGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGlu
ZyB5ZXQuCkBAIC0xMDg2LDYgKzEwODYsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5z
aXRpb24oVk0mIHZtLCBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVj
b2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlm
IChleGl0SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0
aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0g
aW5zdHJ1Y3Rpb24ubmV4dCgpLmluZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7
Cit9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKQEAgLTE4MTEsMTAgKzE4MjAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNo
TGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZl
T3BlcmFuZHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1
dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxp
dmVPcGVyYW5kcy5zaXplKCkpOworICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQocHJvZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQot
ICAgICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJh
bmRzW2ldLm9mZnNldCgpOworICAgICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9v
cGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOwogCkBAIC0yNzEzLDcgKzI3MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFs
dWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAg
ICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3Ig
KGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAg
ICAgICAgICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFu
ZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAg
IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CmluZGV4IDE0Njc0MmViMDQ4YTFkMTY2ZjAxNzkxZDU2Y2U1ODE1MGY1MzQyNjYuLjI1MDY3MjYz
ZTI0NzZkYTFiMmRmNmQ1ZDJmOGU4MDQzMTVmMzAzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTE2MSw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAg
aW50IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9
CiAKICAgICBpbnQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGlu
dCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRz
KCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJh
bWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQpAQCAtMjI5LDIwICsyMzAsMjAgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29s
IGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5v
dEltbWVkaWF0ZShpbnQgaW5kZXgpCisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNS
ZWdpc3RlcigpLm9mZnNldCgpICYmICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9
PSB0aGlzUmVnaXN0ZXIoKSAmJiAhaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAg
ICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5p
c0NlbGwoKTsKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlT
X0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBpbmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiBy
ZWcub2Zmc2V0KCkgPj0gbV9udW1WYXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1
aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwpAQCAtNTgxLDEwICs1ODIsOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50
UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAg
ICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBp
bmRleCkgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdLmdldCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0
Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb25bcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9u
RGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTc3NCw2ICs3NzQsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlv
blJlc3VsdChDb21waWxhdGlvblJlc3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JF
eGl0Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZv
aWQgY291bnRPU1JFeGl0KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3NCw3ICs4NzUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVt
cFRhYmxlczsKICAgICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzOwogCi0gICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNo
UHJvZmlsZXM7CiAKICAgICAgICAgRGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2Rl
Q2FjaGU7CiAgICAgfTsKQEAgLTk0MSwxMCArOTQyLDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+
JiBjb25zdGFudHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVs
RXhlY3V0YWJsZSk7CiAKLSAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFs
dWUgdmFsdWUpCisgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywg
SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChpbmRleCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQo
Km1fdm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYg
c3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJl
Z2lzdGVycy5zaXplKCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1
MTM0ZDBmMzliZDc1MWM3MzE4ZWJjMDQzMS4uZjk4MjlhMjg2ZjhhYWJmNGQzMzJmZmYxZTcxZWEz
YzgzZjliYzYwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCkBAIC0xNjAsNyArMTYwLDkgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRl
SGFzaChJbmxpbmVDYWxsRnJhbWUqIHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhj
b25zdCBGdW5jdGlvbiYpOworICAgIHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rp
b24mKSBjb25zdDsKKworICAgIGlubGluZSBib29sIGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVD
aGVja3BvaW50KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRo
aXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0
b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggZTRhNTc1
YjAzYTdkMWI1OTlhZDBkNTZjZWRkZGFmNGJhMDUwMmYzYS4uNDdjNjU3YzhkZjkwMzgzYWY2NWVi
NWMzYjhhOGIwNTk0ZDBjNGRhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTI2LDEyICsyNiwxNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNs
dWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBDb2Rl
QmxvY2s7CiAKKy8vIE5vdGU6IEZ1bGwgYnl0ZWNvZGUgbGl2ZW5lc3MgZG9lcyBub3QgdHJhY2sg
YW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiB0ZW1wcy4KKy8vIElmIHlvdSB3
YW50IHRtcCBsaXZlbmVzcyBmb3IgYSBjaGVja3BvaW50IGFzayB0bXBMaXZlbmVzc0ZvckNoZWNr
cG9pbnQuCiBjbGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00NywxNSArNTEsMTUgQEAgcHVibGljOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJh
bmRJc0xpdmUoaW50IG9wZXJhbmQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5l
c3NDYWxjdWxhdGlvblBvaW50IHBvaW50KSBjb25zdAorICAgIGJvb2wgdmlydHVhbFJlZ2lzdGVy
SXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwg
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IHBvaW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5
c0xpdmVJc0xpdmUoZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgcG9pbnQpLCBvcGVyYW5kKTsK
KyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShyZWcpIHx8IHZpcnR1
YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJ
bmRleCwgcG9pbnQpLCByZWcpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKICAgICAKLSAgICAvLyBGSVhNRTogVXNlIEZh
c3RCaXRWZWN0b3IncyB2aWV3IG1lY2hhbnNpbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KKyAgICAv
LyBGSVhNRTogVXNlIEZhc3RCaXRWZWN0b3IncyB2aWV3IG1lY2hhbmlzbSB0byBtYWtlIHRoZW0g
Y29tcGFjdC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA0NDI3PFBhc3RlPgogICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9iZWZvcmVVc2VWZWN0b3I7CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2FmdGVyVXNlVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCmluZGV4IDk3NTA4YmJmMGM0
NWNiOTdhNDc4NTE1OTcwNDE3MWRkZjZkZDFkYTMuLmEwYWE3YzA5MjQ0Zjk5NTZiZWYxZmI5ODM4
YjU2MmMxNDg5OTk0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVDYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lLmgKQEAgLTE3OSw3ICsxNzksOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lIHsKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKICAg
ICBDb2RlT3JpZ2luIGRpcmVjdENhbGxlcjsKIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5zaWdu
ZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGluY2x1ZGUgZml4
dXBzLgorICAgIHVuc2lnbmVkIHRtcE9mZnNldCA6IDEwOwogICAgIHNpZ25lZCBzdGFja09mZnNl
dCA6IDI4OwogICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAg
IGJvb2wgaXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNh
bGxlZS9zY29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMg
dmFyaWFibGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCkBAIC0x
OTEsNyArMTkyLDkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgLy8gSW5saW5lQ2Fs
bEZyYW1lJ3MgZmllbGRzLiBUaGlzIGNvbnN0cnVjdG9yIGlzIGhlcmUganVzdCB0byByZWR1Y2Ug
Y29uZnVzaW9uIGlmCiAgICAgLy8gd2UgZm9yZ290IHRvIGluaXRpYWxpemUgZXhwbGljaXRseS4K
ICAgICBJbmxpbmVDYWxsRnJhbWUoKQotICAgICAgICA6IHN0YWNrT2Zmc2V0KDApCisgICAgICAg
IDogYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoMCkKKyAgICAgICAgLCB0bXBPZmZzZXQoMCkK
KyAgICAgICAgLCBzdGFja09mZnNldCgwKQogICAgICAgICAsIGtpbmQoQ2FsbCkKICAgICAgICAg
LCBpc0Nsb3N1cmVDYWxsKGZhbHNlKQogICAgIHsKQEAgLTIxOSw2ICsyMjIsMTIgQEAgc3RydWN0
IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHNp
Z25lZD4oc3RhY2tPZmZzZXQpID09IG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBzZXRUbXBP
ZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgdG1wT2Zmc2V0ID0gb2Zmc2V0
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG1wT2Zmc2V0
KSA9PSBvZmZzZXQpOworICAgIH0KKwogICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKTsgfQogICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFt
ZTo6cmV0dXJuUENPZmZzZXQoKTsgfQogCkBAIC0yNDcsOSArMjU2LDkgQEAgaW5saW5lIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb25z
dCBDb2RlT3JpZ2kKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKLS8vIFRoaXMg
ZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0
IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFt
ZQorLy8gVGhlc2UgZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdp
biBiZWNhdXNlIGl0IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElu
bGluZUNhbGxGcmFtZQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQg
Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQor
aW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKSBjb25zdAogewogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOwog
ICAgIHdoaWxlICh0cnVlKSB7CkBAIC0yNjEsMTEgKzI3MCwzOCBAQCBpbmxpbmUgdm9pZCBDb2Rl
T3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiAgICAg
fQogfQogCi1BTFdBWVNfSU5MSU5FIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitpbmxpbmUg
Ym9vbCBDb2RlT3JpZ2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNv
bnN0Cit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICB3YWxrVXBJbmxpbmVTdGFjayhb
Jl0gKENvZGVPcmlnaW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpLmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFu
ZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQorewor
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkg
PyBPcGVyYW5kKFRtcE9wZXJhbmQsIG9wZXJhbmQudmFsdWUoKSArIGlubGluZUNhbGxGcmFtZS0+
dG1wT2Zmc2V0KSA6IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0OworICAgIHJldHVybiBvcGVyYW5kOworfQorCitBTFdBWVNfSU5MSU5FIE9w
ZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQoreworICAgIHJldHVybiByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZy
YW1lLCBPcGVyYW5kKHJlZykpOworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgdW5tYXBPcGVy
YW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7
CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihyZWcub2Zmc2V0KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKLSAgICByZXR1
cm4gcmVnOworICAgICAgICByZXR1cm4gb3BlcmFuZC5pc1RtcCgpID8gT3BlcmFuZChUbXBPcGVy
YW5kLCBvcGVyYW5kLnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVy
YW5kKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0KTsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVu
bWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIHJlZykKK3sKKyAgICByZXR1cm4gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3Bl
cmFuZChyZWcpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4
IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLmUwM2ZhMzkzOTU5NTU1
MmViZjM4ZjdiNGFiMmRkNTc3MGE1MGY1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNp
bmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3ICs1
MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNjks
NyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJhbmQu
dmFsdWUoKSArIG1fb3BlcmFuZC5raW5kKCk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCgpIGNvbnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkwLDcg
KzkxLDcgQEAgcHVibGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXggbV9i
eXRlY29kZUluZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3BlcmFu
ZCBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlIYXNo
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9N
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1NTc4
OWRmZmRlNjdmMzk2Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4YmMw
NjcwNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3IEBA
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsKICAg
ICByZXN1bHQudS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVzdWx0
LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwotICAg
IHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOwor
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFsdWVS
ZWcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7Ci0g
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7CisgICAg
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2Rl
T2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEsNyBA
QCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFsdWUg
dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZz
ZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKaW5k
ZXggNWQ4MWM0YzkwMGIwOGE0ZGVkODNhNzRkZmE1YTJkY2YzMzVlYzg4ZC4uMzZkMzY5ZjBjMDBm
YmQ0NGM4NTVhMzg5ZTA2NTA4NGJjNzhlNTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
CkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldDsKLSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kOwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWViMzcz
NDU5NDQ2ZGM3NGNkMTIwMjc1NjI1NzYuLjQyMTMxMTdkYjc2ZjZlZDdlZWI5MzlkMzc3NDNhMWFh
NDYwZmUxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsMTExICszNSwyMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHM7CiAKLWVudW0gT3BlcmFuZEtpbmQgeyBBcmd1
bWVudE9wZXJhbmQsIExvY2FsT3BlcmFuZCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heE51bUNo
ZWNrcG9pbnRUbXBzID0gNDsKKworLy8gQSBUbXBPcGVyYW5kIGlzIG9uZSB0aGF0IGV4aXN0cyBm
b3IgZXhpdGluZyB0byBhIGNoZWNrcG9pbnQgYnV0IGRvZXMgbm90IGV4aXN0IGJldHdlZW4gYnl0
ZWNvZGVzLgorZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5k
LCBUbXBPcGVyYW5kIH07CisKK2NsYXNzIE9wZXJhbmQgeworcHVibGljOgorICAgIE9wZXJhbmQo
KSA9IGRlZmF1bHQ7CisgICAgT3BlcmFuZChjb25zdCBPcGVyYW5kJikgPSBkZWZhdWx0OworCisg
ICAgT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgOiBtX2tpbmQob3Bl
cmFuZC5pc0xvY2FsKCkgPyBMb2NhbE9wZXJhbmQgOiBBcmd1bWVudE9wZXJhbmQpCisgICAgICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgeyB9CisKKyAgICBPcGVyYW5kKE9w
ZXJhbmRLaW5kIGtpbmQsIGludCBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAg
ICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorICAgIHsgCisgICAgICAgIEFTU0VSVChraW5kID09
IFRtcE9wZXJhbmQgfHwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9jYWwoKSA9PSAoa2lu
ZCA9PSBMb2NhbE9wZXJhbmQpKTsKKyAgICB9CisKKyAgICBPcGVyYW5kS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYW5kOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobV9raW5kICE9IFRtcE9wZXJhbmQpOworICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCk7CisgICAgfQorICAgIHVpbnQ2NF90IGFzQml0
cygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oKnRoaXMpOyB9CisgICAg
c3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1Rt
cCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBUbXBPcGVyYW5kOyB9CisgICAgYm9vbCBpc0Fy
Z3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEFyZ3VtZW50T3BlcmFuZDsgfQorICAg
IGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBMb2NhbE9wZXJhbmQgJiYg
dmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSAhPSBUbXBPcGVyYW5kICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVh
ZGVyKCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVu
dCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisg
ICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2lu
ZCBtX2tpbmQgeyBBcmd1bWVudE9wZXJhbmQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVh
bFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5F
IGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgp
OworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIo
KTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYg
KGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJv
bUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nh
c3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXpl
b2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVu
dW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6
IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0
ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3Rvciwg
VmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9
IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVy
ZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxz
dGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3BlcmFuZHMo
KSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRz
LCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251bUFyZ3Vt
ZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAg
IHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxz
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBzaXplID0g
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBl
eHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBj
b25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFy
Z3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRp
YWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAg
ICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChp
bml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVz
Lmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFs
dWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJh
bmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNv
bnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAg
ICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1f
dmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVy
T2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAg
ICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIHNpemVf
dCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0g
ICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgp
IC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBj
b25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBy
ZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAg
fQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAg
ICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQoaWR4IDwg
bnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAog
ICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAg
ICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1w
SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQo
c2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4
KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAg
fQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJn
dW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0g
ICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgp
XTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9j
YWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsg
fQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVf
dCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1
bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygpOworICAgICAg
ICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBM
b2NhbE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAg
VCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpCiAgICAg
ewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBz
d2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDoKKyAgICAgICAg
ICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6CiAgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7
CisgICAgICAgIGNhc2UgTG9jYWxPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlk
eCk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIHRtcCgwKTsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+Ci0gICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICBDb25z
dFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQp
IHsKKyAgICAgICAgY2FzZSBUbXBPcGVyYW5kOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgp
OworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDoKICAgICAgICAgICAgIHJldHVybiBhcmd1
bWVudChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBMb2Nh
bE9wZXJhbmQ6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdG1wKDAp
OwogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKworICAg
IHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBU
KCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlm
IChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxz
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1i
ZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3Qg
b2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRt
cHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAg
ICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3ZhbHVlc1tu
ZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07
CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJlZFZhbHVl
ICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2Fsczsg
KytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxzICsg
aSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVM
b2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lkIGVuc3Vy
ZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0g
ICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0g
b2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Cisg
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVuc3VyZWRW
YWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9u
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7ICsr
aSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZh
bHVlKQpAQCAtMTY0LDg0ICsyNzgsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4ID49
IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRMb2Nh
bChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChpbnQg
b3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIGdldEZv
ck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8T3Bl
cmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAgc2l6ZV90
IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAg
ICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgp
KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gbG9j
YWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBvcGVy
YW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAgICBzaXpl
X3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
b3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3Au
aXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAgfQogICAg
IAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Cisg
ICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAgVCYg
b3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5cGUgb3Bl
cmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAg
cmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1w
KG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQp
IGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMq
Pih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihj
b25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgQ29u
c3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAgIENv
bnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0gICAgYm9v
bCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwg
bnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAgICAgICBp
ZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51bWJl
ck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZpcnR1
YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVy
YW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5k
LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFuZCkg
PSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0T3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNvbnN0IFQm
IGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAg
VCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBjb25z
dCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQot
Ci0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXgg
PCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9ySW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFJlZlR5
cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
T3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpLm9m
ZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKKyAg
ICAgICAgcmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVy
YW5kRmlyc3RUaW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgc2V0QXJndW1l
bnRGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRM
b2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2YWx1ZSk7
Ci0gICAgfQotICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAtMjU3LDYgKzM2
Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFyZ3VtZW50cygp
ID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQobnVtYmVyT2ZM
b2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJl
ck9mVG1wcygpID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBtX3ZhbHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUsOSArMzcyLDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAg
CiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxULCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7
CisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVu
dHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1w
cy4KKyAgICBTdG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxp
bmVzLmgKaW5kZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1NjZmZC4uMGIx
Y2MxZjJkMTk3YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAsNiArMzAsMTQg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgb3V0LnByaW50
KCJ0bXAiLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVn
aXN0ZXIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAogewpAQCAtNDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAi
OiIsIGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBm
b3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7ICsrdG1w
SW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29u
dGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpAQCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkpOwogICAg
IH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBz
KCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAi
OiIsIHRtcCh0bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAppbmRleCBkNWRkZWU4ZDU2MDc3MDMyM2IxZmQ1ZjFhY2NjY2MwNTAyYzEyNjU0Li43ZTkzMjYy
ZGZiMDk1OWRlYzJhOTI0MWZmOGM2MTFmMzNiOTJiNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTcyLDYgKzcy
LDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hl
Y2twb2ludHMoZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgpKQogICAg
ICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwgbV9tZXRh
ZGF0YShVbmxpbmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCBhZDFmOTBiNzBi
ZWI5ODE3ZjMyYmI4MGM1NDdhZTRiYWI2NjU1MWE1Li4zMDgyYjBhMjYzYzMwNjU1MjU0YWQ4NmY5
N2ZhMjMyMGRjNTBiNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtMTQxLDYgKzE0MSw5IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7
IH0KICAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZv
KCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXNDaGVja3BvaW50
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lkIHNldEhhc0No
ZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAgLy8gU3BlY2lh
bCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAgdm9pZCBz
ZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVS
ZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OCw5ICsyMDEsOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50
UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQog
ICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJT
ZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29uc3RhbnRJ
ZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MTksNiArNDIxLDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBtX2FnZSA6IDM7
CiAgICAgc3RhdGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsKKyAgICBib29s
IG1faGFzQ2hlY2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9s
b2NrOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAppbmRleCBiYmI4YTRiMjQ1MzEwNDAzYTdmY2VmMmIyMWUxMTgzM2VmYjkwMzY3Li5l
YjkxNzk0NTMwZGYxYTMyOTJkY2RiZWQzMTY0ZTljNzkwOWE2OWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjggKzE3NiwyOCBA
QCBpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUluZGV4KFJh
cmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGUtPm1f
Ynl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQgOiBwdWJs
aWMgVmFsdWVQcm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAgIFZpcnR1YWxS
ZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciB7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAg
ewogICAgICAgICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZmIHRoYW4gd2Ug
bmVlZC4gV2UgY291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAgICAgICAgLy8g
dG8gYmUgbW9yZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQ
dHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZD46Om1hbGxvYyhtX3NpemUgKiBzaXplb2YoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCkpOworICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFs
dWVQcm9maWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClb
aV0pIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAgIH0KIAotICAgIH5WYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKCkKKyAgICB+VmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3NpemU7ICsraSkKLSAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0aW9uPgpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgTWFsbG9jUHRyPFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQ+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXI+IG1fYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAK
aW5kZXggYzVjYTRkZTFlNGIzNjExMjE0YzM1YWIxZWEzMmRjMWNiZjQ1ZjNlOS4uYjEzOTQ3ZjBl
MThkZjA2M2E4OGIzZjIyN2NkY2RiZmVmZmVkYzMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMzUsMjIgKzM1LDIyIEBAIEpT
VmFsdWUgVmFsdWVSZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKSkuanNWYWx1ZSgpOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAg
ICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOwogICAgIGNhc2UgSW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUyKCkp
OwogICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVy
biBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94
ZWRTdHJpY3RJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2
aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOwogICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJsZSgpKSk7
CisgICAgICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxS
ZWdpc3RlcigpKS51bmJveGVkRG91YmxlKCkpKTsKICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCkpLnVuYm94ZWRDZWxsKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyKCkpLnVuYm94ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5K
U1N0YWNrOgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogI2Vsc2UKLSAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
LnVuYm94ZWRCb29sZWFuKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CiAjZW5kaWYKICAgICBjYXNl
IENvbnN0YW50OgogICAgICAgICByZXR1cm4gY29uc3RhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCmluZGV4IGQ4ZjE4YzNmZTg1NTk0ZjMy
YTI5M2FmZDg5MDkyMjM2MTM2MmVhNjMuLjVlNDNiYzcyYmJjYzRmZjk3YTY4ZjgzZGE4MzA5NGU1
OGRhM2IzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVJlY292ZXJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmly
dHVhbFJlZ2lzdGVyLmgKaW5kZXggMzYxOTUyOTQyZDJiODZiYWIxMmY2Y2NjN2NjMWJhMDIxZjVh
ZDA0OC4uZmQxNzAwNzE3YzNiZmYzYmFmMGMzYjAwMzE3NmZlNjY1OTI0ZGY0YiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaApAQCAtMzEs
MTIgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNM
b2NhbChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwoaW50
IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPCAwOwogfQogCi1pbmxpbmUgYm9vbCBv
cGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3Rl
cklzQXJndW1lbnQoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPj0gMDsKIH0K
QEAgLTQ5LDI1ICs0OSwzMiBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW50LCBpbnQpOwogCisgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsKKwogICAgIFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlcklEKik7CiAgICAg
VmlydHVhbFJlZ2lzdGVyKFJlZlB0cjxSZWdpc3RlcklEPik7CiAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIoKQotICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHNfaW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKKyAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQog
ICAgIHsgfQogCiAgICAgZXhwbGljaXQgVmlydHVhbFJlZ2lzdGVyKGludCB2aXJ0dWFsUmVnaXN0
ZXIpCiAgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQogICAgIHsg
fQogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVy
ICE9IHNfaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzTG9jYWwoKSBjb25z
dCB7IHJldHVybiBvcGVyYW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29s
IGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1YWxS
ZWdpc3Rlcik7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdCBzbG90KQorICAg
ICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHN0YXRpY19jYXN0PGludD4oc2xvdCkpCisgICAgeyB9
CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIg
IT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAg
IGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1l
bnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KLSAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9
CisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIg
Pj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0
IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdp
c3Rlcik7IH0KICAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQo
KSk7IHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBp
bnQgdG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0dXJu
IG1fdmlydHVhbFJlZ2lzdGVyIC0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAg
IGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAg
IGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsgfQogICAgIGlu
dCBvZmZzZXRJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgKiBzaXpl
b2YoUmVnaXN0ZXIpOyB9CiAKQEAgLTEwNiw5ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OwotCiAgICAgc3RhdGljIGludCBsb2NhbFRvT3BlcmFuZChpbnQg
bG9jYWwpIHsgcmV0dXJuIC0xIC0gbG9jYWw7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xv
Y2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50
IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBmODBhN2M0
ZjYwODE5NTVlMWUyNGNlMjA1NGMwMTNhZGNiZDc4N2UzLi44ZDJhN2ZiODI0NzU4ZmQwNGFiMDNi
NzAyMDgyYmRiZjYzMTZiZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTE4Nyw3ICsxMTg3LDcg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1ldGVy
KCkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAgICAgbV9wYXJhbWV0ZXJzLmdyb3cobV9w
YXJhbWV0ZXJzLnNpemUoKSArIDEpOwogICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9y
KHJlZyk7Ci0gICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZy5vZmZzZXQoKSk7CisgICAgcGFyYW1l
dGVyLnNldEluZGV4KHJlZyk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwogICAg
IHJldHVybiAmcGFyYW1ldGVyOwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMoRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBibG9jayBrbm93cyBhYm91dCBh
bGwgb2Ygb3VyIHBhcmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzCiAgICAg
Ly8gbmVlZGluZyBkZXN0cnVjdHVyaW5nIGFyZSBub3RlZC4KLSAgICBtX3RoaXNSZWdpc3Rlci5z
ZXRJbmRleChpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsgLy8gdGhpcworICAg
IG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KFZpcnR1YWxSZWdpc3Rlcihpbml0aWFsaXplTmV4dFBh
cmFtZXRlcigpLT5pbmRleCgpKSk7IC8vIHRoaXMKIAogICAgIGJvb2wgbm9uU2ltcGxlQXJndW1l
bnRzID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyArK2kpIHsKQEAgLTE2MzcsMTEgKzE2MzcsMTEgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEVxdWFsaXR5T3BJbXBsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwg
UmUKIAogICAgIGlmIChtX2xhc3RJbnN0cnVjdGlvbi0+aXM8T3BUeXBlb2Y+KCkpIHsKICAgICAg
ICAgYXV0byBvcCA9IG1fbGFzdEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKTsKLSAgICAgICAg
aWYgKHNyYzEtPmluZGV4KCkgPT0gb3AubV9kc3Qub2Zmc2V0KCkKKyAgICAgICAgaWYgKHNyYzEt
PnZpcnR1YWxSZWdpc3RlcigpID09IG9wLm1fZHN0CiAgICAgICAgICAgICAmJiBzcmMxLT5pc1Rl
bXBvcmFyeSgpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjMi0+aW5kZXgoKSkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKSktPnRyeUdldFZhbHVlKCk7CisgICAgICAgICAgICAm
JiBzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgICYmIG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQo
KS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNTdHJp
bmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkp
LmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAidW5kZWZp
bmVkIikgewogICAgICAgICAgICAgICAgIHJld2luZCgpOwogICAgICAgICAgICAgICAgIE9wSXNV
bmRlZmluZWQ6OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKQEAgLTMyMjksNiArMzIyOSw4
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIEFTU0VS
VChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKTsKICAgICBWYXJhcmdzT3A6OmVtaXQodGhpcywgZHN0
LCBmdW5jLCB0aGlzUmVnaXN0ZXIsIGFyZ3VtZW50cyA/IGFyZ3VtZW50cyA6IFZpcnR1YWxSZWdp
c3RlcigwKSwgZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBpZiAo
VmFyYXJnc09wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisg
ICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0dXJu
IGRzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDkzYjEzZjZkYTgxOWUzMWZlMDdhMDQ1ZmZlZjBl
ZjI2Y2I1MWU2ZjkuLjQyZGI5N2Q2NjQzNjY3MTM4M2EwY2U0NmFkM2M2ZmVjMDY2NjQ2NTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKQEAgLTEwMDcsNiArMTAwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIHNob3VsZEVtaXRDb250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJldHVy
biBtX2NvZGVHZW5lcmF0aW9uTW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNvbnRy
b2xGbG93UHJvZmlsZXIpOyB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAgICB2
b2lkIHNldFVzZXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRz
KCk7IH0KIAogICAgICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAppbmRleCAzNTYyMGExMTE2MTFj
NWUwYjgxMDFjZDQ1NTRjMDZiYzgwMzAzNzgwLi5mODE5YjEyM2Q0ZDg5YmEwNTk5MDhhYWFkYzUw
ZjYyOWRiM2U0OTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL1JlZ2lzdGVySUQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L1JlZ2lzdGVySUQuaApAQCAtNjksMTIgKzY5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEluZGV4KGludCBpbmRleCkKKyAgICAg
ICAgdm9pZCBzZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpCiAgICAgICAgIHsKICNpZm5k
ZWYgTkRFQlVHCiAgICAgICAgICAgICBtX2RpZFNldEluZGV4ID0gdHJ1ZTsKICNlbmRpZgotICAg
ICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpOworICAg
ICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSBpbmRleDsKICAgICAgICAgfQogCiAgICAgICAg
IHZvaWQgc2V0VGVtcG9yYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RIZWFwLmNwcAppbmRleCBiODNmZWUwZDNjMDlkMTQ5N2FhN2VhMWRlM2UwNDkwNjJmMjI2
YzE0Li5lNjQwNzFiMWFhMGUzNDg5NDQzNDM5ZmYyOGZjYTI1MWI2MmI5NjVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCkBAIC00MCw2ICs0MCwx
NCBAQCB2b2lkIEFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogICAgICAgICBvdXQucHJpbnQodmFsdWUoKSk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RIZWFw
OjpQYXlsb2FkOjpkdW1wQXNPcGVyYW5kKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
aWYgKGlzVG9wKCkpCisgICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgZWxzZQorICAgICAg
ICBvdXQucHJpbnQoT3BlcmFuZDo6ZnJvbUJpdHModmFsdWUoKSkpOworfQorCiB2b2lkIEFic3Ry
YWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChr
aW5kKCkpOwpAQCAtNDksNiArNTcsMTMgQEAgdm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCIoIiwgRE9NSklUOjpIZWFwUmFu
Z2U6OmZyb21SYXcocGF5bG9hZCgpLnZhbHVlMzIoKSksICIpIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykgeworICAgICAgICBvdXQucHJpbnQoIigi
KTsKKyAgICAgICAgcGF5bG9hZCgpLmR1bXBBc09wZXJhbmQob3V0KTsKKyAgICAgICAgb3V0LnBy
aW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBvdXQucHJpbnQoIigiLCBw
YXlsb2FkKCksICIpIik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SGVhcC5oCmluZGV4IGJmOTkzNzc5NzA0NzAyZDhkNWIyMGI2YzJmNmY3Mzk1YWZlNmI4Njgu
LjNjNGNlM2Q1ZDAyZGMzYTgxZjNhYTQyNGNmYzNmZDFjNDQ3YzUyOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaApAQCAtMjgsNiArMjgsNyBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiRE9NSklUSGVhcFJhbmdlLmgiCisjaW5jbHVk
ZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTEy
MywxMCArMTI0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbV92YWx1ZShiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisKKyAgICAgICAgUGF5bG9h
ZChPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCi0gICAgICAg
ICAgICAsIG1fdmFsdWUob3BlcmFuZC5vZmZzZXQoKSkKKyAgICAgICAgICAgICwgbV92YWx1ZShv
cGVyYW5kLmFzQml0cygpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBQYXlsb2Fk
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICAgICAgOiBQYXlsb2FkKE9wZXJhbmQo
b3BlcmFuZCkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4Myw2ICsxODks
NyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgICAgICB2b2lkIGR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0m
KSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2lzVG9wOwpA
QCAtMjA0LDYgKzIxMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kICE9
IEludmFsaWRBYnN0cmFjdEhlYXAgJiYga2luZCAhPSBXb3JsZCAmJiBraW5kICE9IEhlYXAgJiYg
a2luZCAhPSBTaWRlU3RhdGUpOwogICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKGtpbmQsIHBheWxv
YWQpOworICAgICAgICBBU1NFUlQodGhpcy0+a2luZCgpID09IGtpbmQgJiYgdGhpcy0+cGF5bG9h
ZCgpID09IHBheWxvYWQpOwogICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAtMjE5LDYgKzIyNywxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVChraW5kKCkgIT0gV29ybGQgJiYga2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhl
YXApOwogICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwoKTsKICAgICB9CisgICAgT3BlcmFuZCBv
cGVyYW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2sgJiYg
IXBheWxvYWQoKS5pc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OmZyb21CaXRzKHBh
eWxvYWQoKS52YWx1ZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwIHN1cGVydHlw
ZSgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IDY0YWNiNTQwZDQwYWUxNzk4
ZjdjMjIzNmQ4MWRmZTFjODQwOGQ1MzAuLjVkOWUxN2M5MGEyYzViNTE4MmIzNjU2MTI4NzYxZDg1
MzcxODQ1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTM4MSw3ICszODEsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDogewogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5v
cGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5v
cGVyYW5kKCkpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJl
YWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUu
aXNUeXBlKHR5cGVGaWx0ZXJGb3IodmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1hdCgpKSkp
OwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTM5Miw3ICszOTIsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVyYW5k
KTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFkeSBiZSBj
aGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlzVHlwZSh0
eXBlRmlsdGVyRm9yKGRhdGEtPmZvcm1hdCkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkp
CkBAIC00MDIsMTIgKzQwMiwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5v
cGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAg
IG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRz
IGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnREZWZpbml0ZWx5L1NldEFyZ3VtZW50TWF5YmUgbWVh
bnMKICAgICAgICAgLy8gdGhhdCBzb21lb25lIHNldCB0aGUgYXJndW1lbnQgdmFsdWVzIG91dC1v
Zi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8gYQogICAg
ICAgICAvLyBub24tY2xlYXIgdmFsdWUuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPm9wZXJhbmQoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CkBAIC00NTgsNiArNDU4LDEyIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNh
c2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0
VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAg
ICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFyZ3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3VudCBi
ZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9lcywgaXQgc2hvdWxkIHR1cm4KQEAgLTQ3Niw3ICs0
ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KGRhdGEtPmNvdW50KS5zZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQgLSAxOyBpLS07KQotICAgICAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydCArIGkpLm1ha2VIZWFwVG9wKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjM1OCw3ICsyMzY0LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXg7CiAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRJbmRleENoZWNrZWQuc2FmZUdldChhcmd1bWVudEluZGV4KSAhPSBD
aGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3N0YXRlLm9wZXJhbmQoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJ
bmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCmluZGV4
IGQ3MzI0N2I5M2M1ZGM3ODZiNjE3YWE1YWFkYzJiMGY2MTUyODZiNWYuLjg5YzA4ZmEwODBjZWEz
MmZkOWM1OTFmMzBmMWU3ZGQ0NmYxZDEyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92
YXJpYWJsZXNbaV0tPmZpbmQoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpOwogCiAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiAiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGFmMmVkYTRhZDg4ZTliOTdh
YWQ1ZjRmOTM5MjM3NjIxOTUyYWVmODQuLjE1NTE4NmQwYmY4MjI1ZjE5MTU1ZmM4MzNiMzMwMDBh
N2Y1ZDk5ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtMzU4LDkgKzM1OCwxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0Fy
cmF5V2l0aFNwcmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9kZS0+
Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFyZ3VtZW50c0NoaWxk
KCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkt
Pm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJy
YXlCdWZmZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTQ5MywxMCAr
NDk2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGhlYXAub3BlcmFuZCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhlIHJlZ2lzdGVyIG1heSBub3QgcG9pbnQgdG8gYW4gYXJndW1lbnQg
b3IgbG9jYWwsIGZvciBleGFtcGxlIGlmIHdlIGFyZSBsb29raW5nIGF0IFNldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNIZWFk
ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5v
cGVyYW5kKHJlZykgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVyYW5k
LmlzSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlz
QmxvY2sub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgfQpAQCAt
NTYwLDE2ICs1NjMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9i
YmVyZWRCeUJsb2NrIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVk
QnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzQ2xvYmJlcmVkQnlCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSk7CkBAIC02MjcsNyArNjMwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwgTm9PcENsb2JiZXJpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChBYnN0cmFjdEhlYXAgaGVhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXls
b2FkKCkudmFsdWUzMigpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9w
ZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04MDYsNyArODA5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzYWZlVG9HZXRTdGFjayA9IGluZGV4ID49IG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhZmVUb0dldFN0YWNrICY9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
IC0gMTsKQEAgLTg0NSw5ICs4NDgsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRp
ZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBWYXJhcmdzTGVuZ3RoIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhpdE9LLgor
ICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdp
bi5leGl0T0spOworICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUt
Pm9yaWdpbi53aXRoRXhpdE9LKHRydWUpOworCisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5z
ZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgb3JpZ2luLCAvKiBhZGRUaGlzID0gKi8g
dHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtODYyLDEwICs4NzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhp
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3Vu
dC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCksIEVkZ2Uo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2Fu
RXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCkBAIC04
NzQsMTQgKzg5MSwxNSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3Rv
cmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3Rh
cnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xv
Y2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmln
aW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZy5vZmZzZXQoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9k
ZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50
YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHJlZyksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUp
KTsKQEAgLTkzNSw3ICs5NTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVBcmd1bWVu
dENvdW50ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAg
LTk4Myw3ICsxMDAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENv
dW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50
Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9h
ZEluZGV4IDwgZnJhbWVBcmd1bWVudENvdW50OyArK2xvYWRJbmRleCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVz
aGVkSlNWYWx1ZSk7CkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAg
ICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwpA
QCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8
PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxp
bWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJnc0RhdGEtPmxp
bWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXggNjI2MTEyM2Ni
ZmVjM2ViYTE5NWQwOWI5MzEwMjZmMjZjNzI1ODQ3Ni4uYThkMzg0NjVjZTQ4YTlkOGY1NDIwMGJj
NzQ5NmNiNzRhZThkNjZkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQor
Ym9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJl
dHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCByZWcuaXNIZWFk
ZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAg
ICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00
NiwxOSArNTAsMTkgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCiAgICAgLy8gV2UgZG8gbm90IGluY2x1ZGUgZml4dXBzIGhlcmUgc2luY2UgaXQg
aXMgbm90IHJlbGF0ZWQgdG8gfGFyZ3VtZW50c3wsIHJlc3QgcGFyYW1ldGVycywgYW5kIHZhcmFy
Z3MuCi0gICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRTdGFydCA9CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArIENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCk7CiAgICAgcmV0dXJuIHJlZyA+PSBhcmd1bWVudFN0YXJ0ICYm
IHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9CiAKLWJvb2wgYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3RlciByZWcpCiti
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBPcGVyYW5kIG9w
ZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIHJlZyk7CisgICAgcmV0dXJuIGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRz
QXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3Vt
ZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbikKKyAgICBJbnNlcnRp
b25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgs
IE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7CiAgICAgR3JhcGgmIGdyYXBoID0g
aW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3MywxNCBAQCBOb2RlKiBlbWl0Q29k
ZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbURp
cmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50
cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgotICAgICAgICB8fCBhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwKKyAgICAgICAgfHwgYXJndW1l
bnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSk7CiAKKyAgICBpZiAo
YXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisgICAgICAgIHJldHVybiBlbWl0Q29k
ZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBhcmd1bWVudHMtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMpOworCiAgICAgaWYgKGFyZ3Vt
ZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgIHVuc2ln
bmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwogICAgICAgICBCaXRWZWN0b3IqIGJp
dFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAgICAgIE5vZGUqIGN1cnJlbnRT
dW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRz
LT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsxMTAsNyBAQCBOb2RlKiBlbWl0Q29k
ZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09
IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZm
ZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAg
ICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5k
PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG5vZGVJ
bmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CiAgICAgfQogICAgIAogICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIwLDcgQEAgTm9kZSogZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAKICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAhYWRkVGhpczsKICAg
ICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAg
ICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAgICAg
ICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRz
QXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhTdWIs
IG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAgICAgICBFZGdlKGFyZ3VtZW50
Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9y
VXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDEgKyBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9y
aWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgKyAhYWRkVGhpcyksIEludDMy
VXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAgICAgICAgLy8g
VGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRo
aXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQgaGVyZS4KICAgICAgICAgcmVz
dWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBub2RlSW5kZXgsIFNw
ZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAgICAgICAgRWRnZShyZXN1bHQs
IEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JV
c2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQzMlVzZSkpOworICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBq
c051bWJlcihhZGRUaGlzKSwgSW50MzJVc2UpKTsKICAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHQo
Tm9kZVJlc3VsdEludDMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCmluZGV4IDlhNzcxOGZiYmY1NDdiMmY2YWUxMDFk
YWYzNzRhMDZhMmMzZGRmMTIuLjc0ZjkzOWU4MTYyMmQ0MDI0NmUyMzU1ZDUwOThhOWVkMmE4NTIx
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGls
aXRpZXMuaApAQCAtMzEsMTEgKzMxLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSos
IFZpcnR1YWxSZWdpc3Rlcik7Ci1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSog
Y2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCk7CiAKIE5vZGUqIGVtaXRDb2RlVG9HZXRB
cmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMs
IHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbik7CisgICAgSW5zZXJ0aW9uU2V0JiwgTm9k
ZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIGJvb2wgYWRkVGhp
cyA9IGZhbHNlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCmluZGV4IDk2ZGFj
MzlhNDQ0ZmZiZDNjZTU0M2Y1N2YzNmNkNjFkZWNjMjhiZDQuLjg5N2M3MGRmZmJhMDY2YjY0OWNh
ZmRjYzFlZjA5MzM3NjgxMDRkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCkBAIC0xMzksOCArMTM5LDcgQEAgcHVibGljOgog
ICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9i
bG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IH0KICAgICB1bnNpZ25lZCBu
dW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1i
ZXJPZkxvY2FscygpOyB9Ci0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkg
eyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KLSAgICBB
YnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBt
X2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFs
dWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4KTsgfQogICAg
IEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+
dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCmluZGV4IDc3NDNlN2QwMWYxY2Fk
NzgxZDg0YWIwM2QzYzA5Yzc3ZjgwMjliYTUuLmMyYjU1YWE1YzRhNTIyOWIxYjFhNDQzMWMxODdh
ZGVmNDZjM2RiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6
cHJ1bmVIZWFwKCkKIAogdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyhHcmFw
aCYgZ3JhcGgsIENvZGVPcmlnaW4gd2hlcmUpCiB7Ci0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5
PiBsb2NhbHNDb3B5KG1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksIG1fbG9jYWxzLm51bWJl
ck9mTG9jYWxzKCksIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CisgICAgT3BlcmFuZHM8
QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KE9wZXJhbmRzTGlrZSwgbV9sb2NhbHMsIEF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUoKSk7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAg
ICAgICAgIHdoZXJlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAg
ICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgbG9jYWxzQ29weS5vcGVyYW5kKHJl
ZykgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAgICAgICAgIH0pOwogICAgIG1fbG9jYWxzID0g
V1RGTW92ZShsb2NhbHNDb3B5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5oCmluZGV4IDUzNTUyNTYwMjNkZGNmMjgwZGM1OTViMzNhN2M3ZmRlYzU0
ZTY0ZjAuLjgwYzEyYmYxODAyNWE1NjEwNTk2ZGEyNGUyM2MwMjVmMmFiZTRmMjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaApAQCAtNjYsOSAr
NjYsOSBAQCBzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKICAgICB9CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzRnVuY3RvciwgdHlwZW5hbWUgQWRkRnVuY3Rvcj4KLSAgICB2b2lkIGNs
b3NlU3RhcnRpbmdXaXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSGFzRnVuY3Rv
ciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCisgICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0
aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3Rv
ciYgYWRkKQogICAgIHsKLSAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9j
YWxzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1f
bG9jYWxzLm9wZXJhbmQob3ApOwogICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5oYXNOb2RlKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXggMDU4NDQ5NjNlNjEwZWQyOTNjNTYwZmFiZmQzODlh
OWYzOTc4MGEwNy4uZTIxYjI4YjUyMjFmMTU2MThiODA2NGEzYTdiMmQ3ODY5MTM4NDIxZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCkBAIC0zMiw3ICsz
Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotQmFzaWNCbG9jazo6
QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKK0Jhc2ljQmxv
Y2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1B
cmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywgZmxvYXQgZXhl
Y3V0aW9uQ291bnQpCiAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCiAgICAgLCBp
bmRleChOb0Jsb2NrKQogICAgICwgY2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkKFN0cnVj
dHVyZXNBcmVXYXRjaGVkKQpAQCAtNDgsMTEgKzQ4LDExIEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxv
Y2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVu
c2lnCiAgICAgLCBpc0xpbmtlZChmYWxzZSkKICNlbmRpZgogICAgICwgaXNSZWFjaGFibGUoZmFs
c2UpCi0gICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAg
LCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJn
dW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQo
bnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAs
IHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAs
IHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAs
IHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIHZh
bHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0
aW9uQ291bnQpCiB7CiB9CkBAIC03MCw2ICs3MCwxNSBAQCB2b2lkIEJhc2ljQmxvY2s6OmVuc3Vy
ZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFs
dWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxU
b3AoKSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1U
bXBzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAg
IHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0SGVh
ZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBzKG5l
d051bVRtcHMpOworICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVUbXBz
KG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Cit9CisKIHZvaWQgQmFzaWNC
bG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBO
b2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IGI1YWRmMDkxMmQwOTQyYmU5N2U5ODdjZGM4OWY0
YWUzNGQwYzBiYzguLjFkZDM4Yzc5MDhkYzZmNGQxYjA4NWJjOGUwNjI1NDgwZGI0NDk3Y2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00NiwxMSArNDYs
MTIgQEAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBC
YXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKLSAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMs
IHVuc2lnbmVkIG51bUxvY2FscywKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2lu
LCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVt
VG1wcywKICAgICAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwogICAgIH5CYXNpY0Jsb2NrKCk7
CiAgICAgCiAgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKTsKKyAg
ICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcyk7CiAgICAgCiAgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5kZXggNzUwOGUyMTlkYzdjNTgzZGI5
ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOS4uMDA4Y2Y1MjI2OTU3YzlhODM1ODVjNWU1ZTJjMTI1ZjJm
OGNlNGIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0lu
c2VydGlvblNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0lu
c2VydGlvblNldC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBCbG9ja0luc2VydGlvblNldDo6
aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+JiYgYmxvY2spCiAKIEJhc2ljQmxv
Y2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRp
b25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mTG9jYWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7CisgICAgUmVmPEJhc2ljQmxvY2s+
IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCksIGV4ZWN1dGlvbkNvdW50KSk7CiAg
ICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKICAgICBhdXRvKiByZXN1bHQgPSBibG9jay5w
dHIoKTsKICAgICBpbnNlcnQoaW5kZXgsIFdURk1vdmUoYmxvY2spKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggN2U0YTlmZTYyMzNi
NzQ0OWU4Mjg2NjJjMWU0OTlkYzllODQ0MDhiNy4uMDEzNDIxMjc0NzYwMTEyMzRjMTRhMTFhZmFj
ZmM0MjUyOTE1OTg5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKQEAgLTExMSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9j
b25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkpKQogICAgICAgICAsIG1fbnVtQXJn
dW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwgbV9udW1Mb2Nh
bHMobV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQorICAgICAgICAsIG1fbnVtVG1wcyht
X2NvZGVCbG9jay0+bnVtVG1wcygpKQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAg
ICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9w
KDApCkBAIC0xMzksNiArMTQwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmJs
b2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAKKyAgICB2b2lkIGVu
c3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1wcykKKyAgICB7CisgICAgICAgIFZFUkJPU0VfTE9H
KCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20gIiwgbV9udW1U
bXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOworICAgICAgICBpZiAobmV3TnVtVG1wcyA8
PSBtX251bVRtcHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbnVtVG1wcyA9IG5l
d051bVRtcHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlVG1wcyhuZXdO
dW1UbXBzKTsKKyAgICB9CisKKwogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZU1pbk1heChW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7CkBAIC0yNzAsMjUgKzI4MiwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Js
b2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwog
ICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2Nrcywg
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICB2b2lkIHByb2dyZXNzQ2hlY2twb2ludCgpCisgICAgeworICAgICAgICBtX2N1cnJl
bnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIG1fY3VycmVu
dEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCdz
IGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAg
IGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwor
ICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50
KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fdmFy
aWFibGVBY2Nlc3NEYXRhLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1Nl
dCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9k
ZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVj
dChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25z
dGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgIC8vIElzIHRoaXMgYW4gYXJn
dW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVu
dChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKIAotICAgICAgICAvLyBNdXN0IGJlIGEgbG9j
YWwuCi0gICAgICAgIHJldHVybiBnZXRMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIGdl
dExvY2FsT3JUbXAob3BlcmFuZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQpAQCAtMjk4LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1
bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGNv
bnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0pIHsK
ICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29k
ZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxv
Y2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVy
YW5kKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNp
emUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4
ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkg
PCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM1OCw5ICszNzgsMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24u
CiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsKLSAgICBOb2RlKiBzZXREaXJlY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBO
b3JtYWxTZXQpCisKKyAgICBOb2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgYWRkVG9H
cmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKIAogICAgICAgICAv
LyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNo
YW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CkBAIC0zNzQsNyArMzk1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUodGhpcyk7CiAg
ICAgfQotICAgIAorCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytp
KQpAQCAtMzkyLDE4ICs0MTMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwot
ICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5v
ZGUtPmxvY2FsKCkpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9j
dXJyZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9uKGxv
Y2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Qo
cHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQg
aW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxv
Y2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLQotICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAg
ICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOworICAgICAg
ICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChv
cGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGlu
ayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0cnkg
dG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZv
cgpAQCAtNDI4LDIwICs0NDgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9
IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KHZhcmlhYmxlKSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxv
Y2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2Rl
KiBzZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisg
ICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwg
T3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0
KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9j
YWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1
cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVk
IGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2V0TW9k
ZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewotICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiog
YXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9w
ZXJhbmQudmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxsRnJhbWUoKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5kLCAiIGJ1dCBj
dXJyZW50IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBibG9jayBoYXM6
ICIsIG1fcHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAiIHRtcHMuIik7CisgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFr
ZWRTZXQgJiYgIW9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1bWVudFBv
c2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChy
ZWcpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICAgICAg
Zmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBlbHNl
IGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9jb2RlQmxv
Y2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNT
Y29wZVJlZ2lzdGVyKCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpCiAg
ICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUxLDcgKzQ3
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVja0Fy
cmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgQmFkSW5k
ZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAg
IHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNDgzLDIwICs1MDksMjEgQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkg
PSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0QXJndW1l
bnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUq
IHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVyYW5kIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewog
ICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2Vt
YW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBy
ZWcudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50
cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEocmVn
KTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9yICd0aGlz
Jy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFrZSBzdXJl
IHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwgbV9ncmFw
aC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVk
aWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQpOworICAg
ICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09
IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01MzIsMTQgKzU1OSwxNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkgLSBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICBy
ZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0g
ICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oT3Bl
cmFuZCBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkp
CiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChvcGVy
YW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckxvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JM
b2NhbChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NTAsOSArNTc5LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1Z2dlckVuYWJsZWQoKSk7CiAgICAg
ICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1
cC5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBP
cGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUs
IHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwog
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFw
T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBtX2dyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51bVBhcmFtZXRlcnMoKTsKIApAQCAt
NTc1LDYgKzYwNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gbV9n
cmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIC8vIE5vdGU6IFdl
IGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNhdXNlIHRtcHMgYXJlIG5vdCByZXF1
aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICBjb25zdCBh
dXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYnl0ZWNv
ZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludChvcmln
aW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2Nh
bCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9jYWxdKQpAQCAtNTg0LDI3ICs2MTQs
MjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2go
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaChPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24o
b3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBm
bHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9z
aXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPEZsdXNoPihvcGVy
YW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBu
b2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBh
ZGRGbHVzaE9yUGhhbnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiog
YXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0
YW50KCkpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8ICFvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGU7CiAgICAgICAgIApAQCAtNjE0LDI2ICs2NDQsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAg
ICAgICAgbm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJsZSkpOwotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBu
b2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50
UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIHBoYW50
b21Mb2NhbERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHBoYW50b21M
b2NhbERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhh
bnRvbUxvY2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24ob3Bl
cmFuZCkpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRyeSogaW5saW5l
U3RhY2tFbnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElu
bGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsg
fTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwg
T3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVz
aEltcGwoaW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZsdXNoRGlyZWN0
KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsKLSAgICAgICAg
YXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OwotICAgICAgICBhdXRvIGFkZFBoYW50b21M
b2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykg
eyBwaGFudG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVj
dCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0
KG9wZXJhbmQpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAo
SW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2NhbERpcmVjdChv
cGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVudENvZGVPcmln
aW4oKSwgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAgICAgfQogCkBA
IC03NjEsNiArNzkwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNoaWxkMSksIEVk
Z2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVz
dWx0KTsKICAgICB9CisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BlcmFuZCBv
cGVyYW5kLCBOb2RlKiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQob3AgPT0gTW92SGlu
dCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFuZC5raW5kKCkp
LCBPcEluZm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAgTm9kZSogYWRk
VG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIEVkZ2UgY2hp
bGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgewog
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCkBAIC0xMDkxLDggKzExMjUs
MTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0
byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7Ci0gICAgLy8gVGhl
IG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBpbiB0aGUgZnVuY3Rp
b24uCisgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNl
ZCBieSB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUxv
Y2FsczsKKyAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1wcyB1c2VkIGZvciBmb3J3YXJkaW5n
IGRhdGEgdG8gYW4gT1NSIGV4aXQgdG8gY2hlY2twb2ludC4KKyAgICB1bnNpZ25lZCBtX251bVRt
cHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lz
dGVyKSkgdGhhdCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGFyZ3VtZW50cyB0
byBvdXRnb2luZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRoaXMKICAgICAvLyBudW1iZXIgaW5j
bHVkZXMgdGhlIENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGluaXRpYWxpemUgZm9yIHRoZSBjYWxs
ZWUKQEAgLTExNTksMTQgKzExOTUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIH5J
bmxpbmVTdGFja0VudHJ5KCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAorICAgICAgICBPcGVyYW5k
IHJlbWFwT3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
bmQ7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE9wZXJhbmQoVG1wT3BlcmFuZCwgb3BlcmFuZC52YWx1ZSgpICsgbV9pbmxpbmVDYWxs
RnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghb3Bl
cmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIG1faW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQogICAgIH07CiAgICAgCkBAIC0xMTc1
LDEzICsxMjE0LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayBtX2ljQ29u
dGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgewotICAgICAgICBD
b2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwot
ICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKLSAgICAg
ICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQotICAgICAgICBEZWxheWVkU2V0TG9j
YWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9k
ZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0
IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQpAQCAtMTE5
NCw4ICsxMjI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX29w
ZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldEFy
Z3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVl
LCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWxPclRtcCht
X29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwogICAgICAgICB9CisKKyAg
ICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAgT3BlcmFuZCBtX29wZXJhbmQ7Cisg
ICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07CisgICAgICAgIFNldE1vZGUgbV9zZXRN
b2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRM
b2NhbFF1ZXVlOwpAQCAtMTIwOCw3ICsxMjQ3LDcgQEAgcHJpdmF0ZToKIEJhc2ljQmxvY2sqIEJ5
dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwotICAgIFJlZjxCYXNpY0Js
b2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBtX251
bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sg
PSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMs
IG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9
IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBi
ZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1f
aW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCkpCkBAIC0xMjIwLDcg
KzEyNTksNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxl
QmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29k
ZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2Nr
ID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVu
dHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0
ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykp
OwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTE0MjMsNyArMTQ2Miw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBD
YWxsVmFyaWFudCBjCiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
IT0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSB0YXJn
ZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZhcmFyZ3MsIHdlIGRvIG5vdCBrbm93IGhvdyBtYW55IGFy
Z3VtZW50cyBhcmUgYWN0dWFsbHkgZmlsbGVkIGJ5IExvYWRWYXJhcmdzLiBWYXJhcmdzIElubGlu
ZUNhbGxGcmFtZSdzCi0gICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBp
cyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IExvYWRW
YXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKKyAg
ICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVy
IG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgeGtMb2FkVmFyYXJncy4gV2UgImNv
bnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJlCiAgICAgICAgICAgICAvLyBh
IGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50by4KICAgICAgICAgICAgIGlmIChjYWxsRnJhbWUtPmlz
VmFyYXJncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OSw3ICsxNDg4LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgLy8gV2UgbXVzdCBzZXQgdGhlIGNh
bGxlZSB0byB0aGUgcmlnaHQgdmFsdWUKICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1faW5saW5l
Q2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50cnkt
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIGNh
bGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOworICAgICAgICAgICAgICAgIHNldERpcmVjdChyZW1h
cE9wZXJhbmQoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAKQEAgLTE2MTQs
MTYgKzE2NTMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1i
ZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAg
IGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9m
U3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9m
ZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0
ZXJzOworICAgIE9wZXJhbmQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIo
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9m
ZnNldEFmdGVyRml4dXApKS52YWx1ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMpOwogICAgIAogICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2FsbEZy
YW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAgZW5z
dXJlVG1wcygobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpICsgY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAg
ICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0
aW9ucy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0
ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3Vs
dCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3Rl
cigpOwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7
CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKQEAgLTE2MzYsNyArMTY3Nyw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJT
dGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVT
dGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwg
cmVzdWx0LAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAg
ICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMg
aXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29k
ZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CkBAIC0xNjcxLDkgKzE3MTIsOSBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2lu
IGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdo
ZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQg
bG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFr
ZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFu
ZCBsb2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVy
YW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICBhZGRU
b0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNldCgpKSwgdmFsdWUpOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldCksIHZh
bHVlKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2Fs
IHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb0dldCwgdmFsdWUsIEltbWVkaWF0ZU5h
a2VkU2V0IH0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTcxNywxNiArMTc1OCwx
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAvLyBJbiBzdWNoIGNhc2VzLCB3
ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4KICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zmc2V0
QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkgewogICAgICAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdp
c3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNh
bGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5k
ZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXRE
aXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOworICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50
Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRl
eCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1Nl
dC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9T
ZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOworICAgICAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHVuZGVmaW5lZCk7CiAg
ICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJl
bnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRT
ZXQgfSk7CiAgICAgICAgIH0KIApAQCAtMTg5MywxMiArMTkzNCwxMiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1
YWxSZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlhbnQsIGNhbGxU
YXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAgICAgICAKICAgICAgICAgaW50IHJlbWFwcGVk
UmVnaXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQp
KS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxv
Y2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgpKTsK
ICAgICAgICAgCiAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgaW50IHJlbWFwcGVkQXJn
dW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVu
dFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFk
ZCgpOwogICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3Vt
ZW50U3RhcnQgKyAxKTsKQEAgLTE5MDYsMTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVn
aXN0ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OwogICAgICAgICBk
YXRhLT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBkYXRh
LT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50
c0FyZ3VtZW50KSk7CisKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50OworICAgICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRk
VG9HcmFwaChHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICBlbHNl
IGlmIChpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudCA9IGdldERpcmVjdChyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lKCksIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1f
Z3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBP
cEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAgICAg
IGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3BlcmFu
ZChUbXBPcGVyYW5kLCBPcENhbGxWYXJhcmdzOjphcmdDb3VudCkpOworICAgICAgICAgICAgc2V0
RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhkYXRh
KSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc0NoZWNrcG9pbnQoKTsKKworICAg
ICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXRMb2NhbE9y
VG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVwIGFs
aXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3VtZW50
c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQgYSBQ
aGFudG9tIGZvcgpAQCAtMTkyMiwxNCArMTk3NiwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rl
cgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29u
cyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNTQS4K
ICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNvdW50
KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2UgdGhl
IGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAgLy8g
bWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5pdGVs
eSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3RseSBq
dXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3go
dHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNldEFy
Z3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2Fs
KCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudENv
dW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFy
dCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVuc2ln
bmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTUzLDcgKzIwMDcsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZp
cnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBO
b2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRhdG9y
eU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcElu
Zm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRzOwog
ICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTMsNyArMjEwNyw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpD
YWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAg
ICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0ZXJP
ZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZFUkJP
U0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAgICBz
ZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNo
KTsKIApAQCAtNTEwMiw3ICs1MTU2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4o
KTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkpOwot
ICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ry
b25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5t
X3JlZ2V4cC5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4
cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpzQ29u
c3RhbnQoanNOdW1iZXIoMCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfcmVn
ZXhwKTsKICAgICAgICAgfQpAQCAtNTExMiw3ICs1MTY2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAg
ICBOb2RlKiBsZW5ndGg7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnRzTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtIDE7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3RMZW5ndGg7CiAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8PSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1Nr
aXApCiAgICAgICAgICAgICAgICAgICAgIHJlc3RMZW5ndGggPSBqc051bWJlcigwKTsKQEAgLTYx
NzgsNyArNjIzMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+c2l6
ZSgpIHx8IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkgJiYgbV9jdXJyZW50QmxvY2stPnNpemUoKSA9
PSAxICYmIG1fY3VycmVudEJsb2NrLT5hdCgwKS0+b3AoKSA9PSBDb3VudEV4ZWN1dGlvbikpOwog
Ci0gICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spLm1fYnVmZmVyOwogCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRv
IGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVh
ZC4KQEAgLTYxOTUsNyArNjI0OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9j
ayk7CiAKLSAgICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHByb2ZpbGUuY29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSkKQEAgLTYyMjMsMTQgKzYyNzcsMTQgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIG1fZXhpdE9LID0g
ZmFsc2U7IAogCiAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscyA9IDA7Ci0gICAg
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CisgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IGFkZFRvR3JhcGgoRXh0cmFjdENhdGNoTG9jYWwsIE9wSW5mbyhudW1iZXJPZkxvY2Fs
cyksIE9wSW5mbyhsb2NhbFByZWRpY3Rpb25zW251bWJlck9mTG9jYWxzXSkpOwogICAgICAgICAg
ICAgICAgICsrbnVtYmVyT2ZMb2NhbHM7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZI
aW50LCBPcEluZm8ocHJvZmlsZS5tX29wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICBsb2NhbHNUb1NldC51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIob3BlcmFuZCwg
dmFsdWUpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG51bWJlck9mTG9jYWxz
KQpAQCAtNjM1OCw3ICs2NDEyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXFQdHI+KCk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVy
KSk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRl
Y29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spLm1faGFzSnVtcGVkKSB7CkBAIC02ODI2LDggKzY4ODAsOCBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKICAgICAgICAg
ICAgIEFTU0VSVChieXRlY29kZS5tX3N5bWJvbFRhYmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29k
ZS5tX2luaXRpYWxWYWx1ZS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUq
IHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUub2Zmc2V0KCkpKTsK
LSAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9pbml0aWFsVmFsdWUub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1i
b2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7CisgICAgICAgICAgICBG
cm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVl
KSk7CiAgICAgICAgICAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAg
ICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9ubWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0
aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwgT3BJbmZvKGluaXRpYWxWYWx1ZSksIHNjb3Bl
KTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbGV4aWNhbEVudmlyb25tZW50KTsK
QEAgLTY4NTcsNyArNjkxMSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBsb2FkcyBmcm9tIHRoZSBzY29wZSByZWdpc3Rl
ciBsYXRlciwgYXMgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBERkcgZnJvbSB0cmFja2luZyB0aGUK
ICAgICAgICAgICAgIC8vIGJ5dGVjb2RlLWxldmVsIGxpdmVuZXNzIG9mIHRoZSBzY29wZSByZWdp
c3Rlci4KICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0U2NvcGU+KCk7Ci0gICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgTm9kZSogY2FsbGVl
ID0gZ2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQ7
CiAgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWND
YXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCptX3ZtKSkKICAgICAgICAgICAgICAgICByZXN1bHQg
PSB3ZWFrSlNDb25zdGFudChmdW5jdGlvbi0+c2NvcGUoKSk7CkBAIC03Mjc1LDggKzczMjksMTAg
QEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAg
ICAgICAgIC8vIFRoZSBvd25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxy
ZWFkeSBoYXZlIGEgYmFycmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmlu
aXNoZXMuCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAg
ICBtX2lubGluZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxs
RnJhbWUgPyBtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9j
YWxsZXItPm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFt
ZS0+c2V0U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPT0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpZiAo
Y2FsbGVlKSB7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnkg
PSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc2MzgsNyArNzY5NCw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5vcGVy
YW5kKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC03NjU4LDI0ICs3NzE0LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNj
ZXNzb3ItPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVu
ZXNzUHJlc2VydmluZ09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
Tm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSB2
YXJpYWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJh
bWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcGVyYW5kIGFyZ3VtZW50ID0gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwg
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQuaXNBcmd1bWVu
dCgpICYmICFhcmd1bWVudC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRzID0gbV9pbmxpbmVD
YWxsRnJhbWVUb0FyZ3VtZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0FyZ3VtZW50KCldLT5h
ZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNO
b25lLCBvcCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgRmx1
c2gsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIFBoYW50b21Mb2Nh
bCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAg
IGZsdXNoRm9yVGVybWluYWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1c2hEaXJlY3QsIGFk
ZFBoYW50b21Mb2NhbERpcmVjdCk7CkBAIC03NzQwLDYgKzc3OTYsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mQXJndW1lbnRzKCkpOwogICAgIH0KIAorICAgIG1fZ3JhcGgubV90bXBzID0gbV9udW1U
bXBzOwogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBo
Lm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAppbmRleCA4ZTliYjRhY2JlNTUwMmRkYTdiMzc0Nzg0
YjVhODVmZmRlNzAzYmZkLi4zZGM3NTY4ZjFlZTJjNjk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2MjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTcwLDIy
ICsxNzAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAg
ICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9
IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAg
ICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07
CiAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6
ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6
ICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5nICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
IiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgIFdpZGVuaW5nICIsIG9wZXJhbmQsICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxvY2st
PnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0
YXJnZXQubWVyZ2VPU1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVlKCksIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2Jj
MTZiNjdkNjAyYmE2NDI2YWYwZjIzODIuLjU3NzBmMDk4OTQyYzg5NmI3YWNmODIzZmNhYjk0NDRh
MjI0Y2NlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNw
ZWNpYWxDYXNlQXJndW1lbnRzKCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5k
PigpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAg
cHJvcGFnYXRlUGhpczxUbXBPcGVyYW5kPigpOwogICAgICAgICBjb21wdXRlSXNGbHVzaGVkKCk7
CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwpAQCAtMjEx
LDEwICsyMTIsMjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5v
ZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwo
KS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1
bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxM
b2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkp
OworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7CisgICAgICAg
IGNhc2UgQXJndW1lbnRPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2Nh
bEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LnRvQXJndW1lbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIExvY2FsT3BlcmFuZDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8
TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUbXBPcGVy
YW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxUbXBPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
Tm9kZVR5cGUgbm9kZVR5cGUsIE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYgKzI0
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAg
ICAgIEFTU0VSVChvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAg
b3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjcwLDE1ICsyODIsMjUgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkK
ICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1l
bnQoKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9k
ZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgp
LnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZs
dXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFi
bGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmd1bWVudE9wZXJhbmQ6IHsK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUs
IEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
TG9jYWxPcGVyYW5kOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+
b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFRtcE9wZXJhbmQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQ
aGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIFRtcE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJp
YWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQo
bm9kZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
ZXRPcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSwgbm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpCkBAIC0yODksNiArMzExLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIGNsZWFyVmFyaWFibGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKICAg
ICAgICAgY2xlYXJWYXJpYWJsZXM8TG9jYWxPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlh
YmxlczxUbXBPcGVyYW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFs
bCBwaGkgcmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0
aGF0CiAgICAgICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQs
IGJ1dCBkb2Vzbid0IGFzc3VtZSB0aGF0IHRoZSByZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJv
cGFnYXRlUGhpcygpCiAgICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYg
cGhpU3RhY2sgPSBvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhp
U3RhY2sgOiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAx
Mjg+JiBwaGlTdGFjayA9IHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpOwogICAgICAgICAKICAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHku
CiAgICAgICAgIG1fYmxvY2sgPSAwOwpAQCAtNDY2LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgogICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCAxMjg+JiBwaGlTdGFja0ZvcigpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQg
PT0gQXJndW1lbnRPcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFj
azsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgc3dpdGNoIChvcGVy
YW5kS2luZCkgeworICAgICAgICBjYXNlIEFyZ3VtZW50T3BlcmFuZDogcmV0dXJuIG1fYXJndW1l
bnRQaGlTdGFjazsKKyAgICAgICAgY2FzZSBMb2NhbE9wZXJhbmQ6IHJldHVybiBtX2xvY2FsUGhp
U3RhY2s7CisgICAgICAgIGNhc2UgVG1wT3BlcmFuZDogcmV0dXJuIG1fdG1wUGhpU3RhY2s7Cisg
ICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21wdXRlSXNGbHVzaGVkKCkKQEAgLTUyMSw2ICs1NDcsNyBAQCBwcml2
YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnks
IDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+
IG1fbG9jYWxQaGlTdGFjazsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX3RtcFBo
aVN0YWNrOwogICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4IDIz
ODFjNmI4ZjhmNGJhNzYzNGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UuLjRjY2UxNzQ4ODNlMjA0MTBk
NjIyM2E2ZjQxNzJlZGRlNjk4YWFlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCkBAIC0xNDcsOCArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXls
b2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaGVhcC5wYXlsb2FkKCkudmFsdWUo
KSA9PSBoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgbV9hYnN0cmFjdEhl
YXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAg
IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpOwog
ICAgICAgICAgICAgaWYgKGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICBt
X2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE3Miw3ICsx
NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVyQ29uc2VydmF0aXZl
bHkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChwYWly
LmtleS5oZWFwKCkua2luZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVhcCgpLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFs
dWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBhaXIua2V5KQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIyNiw4ICsyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQWJz
dHJhY3RIZWFwIGFic3RyYWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAgICAgICAgICAgIGlm
IChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAgIEFT
U0VSVChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBheWxv
YWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
YWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSwgbnVsbHB0cik7CiAgICAgICAgICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5vZGUs
IDB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0OSw4ICsyNDcsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKLSAgICAgICAgICAg
IEFTU0VSVChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24uaGVh
cCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVl
MzIoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01h
cC5maW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQogICAgICAgICAgICAg
ICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAgICAgICAgICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk4LDcgKzI5NSw3IEBAIHByaXZh
dGU6CiAgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBvbmx5IGxpdmUgaW4g
bV9mYWxsYmFja1N0YWNrTWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5LCBUT1AgYWx3YXlz
IGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhIHVu
aXF1ZSB2YWx1ZS4KLSAgICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVE
YXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxpbnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKKyAgICBIYXNo
TWFwPGludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNo
PGludDY0X3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2NF90
Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOwog
CiAgICAgTWFwIG1faGVhcE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAppbmRleCBmZDBiNmQ3NGRhNjc3YmM0NTA4Y2FjNDlmYzRlZTFjOThkYTRl
N2FkLi40ZDVhMmEwYWFhMWE3NDNiZmJlNjk0YjQzOThjZmY3ZjViZGYxMDU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0zMDYsNiArMzA2
LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25z
dHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxf
dHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90
cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2Fs
bF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgog
ICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgY2FzZSBvcF9jYWxsX3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDg5YmM2NDFmNTI2YmI1
M2ZmMDM3ZjczY2Y5NTBiYWM2NDZkNDk5NTQuLjgyZjNjYTY0MTg0ZjkxOTM2NTAzOWIxMzIyMTdk
ZDk5ZWE5NzEwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CkBAIC0xMTEsOSArMTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAvLyBzY2Fu
IHdvdWxkIHJlYWQuIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBmb3IgKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFt
ZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChT
dGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkp
OwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAKICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIHNwZWNpZmljYWxseSBhY2NvdW50IHdoaWNoIG5vZGVzIGNhbiByZWFkIGZy
b20gdGhlIHNjb3BlCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAtNDk3LDcgKzQ5Nyw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgRmx1
c2g6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Cisg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAg
ICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBAIC03NjQsMTIgKzc2NCwx
MiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFk
RnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2Ms
IEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tM
b2MsIEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFNl
dENhbGxlZToKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6IHsKQEAgLTc4MCw3ICs3
ODAsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIH0KIAogICAgIGNhc2UgU2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CkBAIC03ODgs
MzYgKzc4OCw0MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0
YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2Ms
IEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlKSk7Cisg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKKyAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5v
cGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9k
ZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFj
dEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgp
KSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAgICAgICAg
QWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7
CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+b3BlcmFuZCk7CiAgICAgICAgIHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFw
IGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFi
c3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCk7
CiAgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBy
ZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CisgICAgICAgIHJldHVybjsgIAorICAgIH0KKwog
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdy
aXRlKEhlYXApOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFy
YXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3Vu
dC5vZmZzZXQoKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyNiw5ICs4MzMsOSBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkp
OworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0
YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApp
bmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0NmMwNTRm
MGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgc3Rh
dGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eU1h
cCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAog
ICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAgIHJlZywK
ICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUwOWY5MzAw
MDdlMzU2YWMwNTVlYTY2YmZlN2FkYi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEzMzJmZDUy
NDk2NTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
CkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdp
bihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2Rl
T3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAg
ICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjph
ZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0LDEzICs2
NCwxMyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2lu
KTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNT
RVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxs
U2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjpsYXN0Q2Fs
bFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNpemUoKSk7
Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lucy5zaXpl
KCkgLSAxKSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW5z
LnNpemUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjph
ZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CmluZGV4IDNiMTY1ZjJjNDAyMTAwM2QwNDFjY2E2ZDlhZTBjZmU3YWU4MjcxM2YuLjE4NTM2NmQw
NGUyNjNlZTllZDk2NGM4NmE3ZWQ5NTI0YTk1YmI5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zODMsNyAr
MzgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwg
aW4gc3VjaCBzdGF0aWNhbGx5LW91dC1vZi1ib3VuZHMgYWNjZXNzZXM7IHdlIGp1c3QgbG9zZSBD
RkEgdW5sZXNzCiAgICAgICAgICAgICAgICAgLy8gR0NTRSByZW1vdmVzIHRoZSBhY2Nlc3MgZW50
aXJlbHkuCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc3RhdGUubnVtYmVy
T2ZBcmd1bWVudHMoKSAtIDEpCkBAIC00MDQsNyArNDA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4ICsgMSksIEZs
dXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSAmJiBpbmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0U3RhY2soZGF0YSk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA4NTQxMjMxNDc0
MWU2ZjExMjYxZjJlOTdjNDlmZTY0NGRhZTdiYWY3Li5mMzhjODNmZGQzMGMyZjUzYjNkNTA5M2Y0
MGIyYzcwZTk1MzEwNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
CkBAIC0yOTQsNiArMjk0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
KQogICAgIGNhc2UgSW5CeVZhbDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0
YW5jZU9mQ3VzdG9tOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJh
cmdzOgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXg6CiAgICAgY2FzZSBOdW1iZXJU
b1N0cmluZ1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAKaW5kZXggMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIyNzJkNDc5OTk4YjUz
OS4uNDVmYmM0MzlkNTNiYTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcApAQCAtOTAsNyArOTAsNiBAQCBzdGF0aWMgQ29t
cGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0
dWJzIHRoYXQgdGhlIERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50
IHRvCiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBm
aW5hbGl6YXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZtLmdldENUSVN0dWIoYXJpdHlG
aXh1cEdlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3Ip
OwogICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
OwogICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhZWUxZjAwNzNiMGY0YmJj
YzQ3MzRlYjY0MWU0NjQ4YzMwNTVhMjQ0Li5jYTMzZGIyMjdkNGI5Mjc3M2ZhODZkNzJlZTNkNGQx
Yjg1YmY5ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKQEAgLTI0MzIsNiArMjQzMiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5z
dXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4K
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CkBAIC0yNDY0LDggKzI0NzIsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAg
ICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAg
ICAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0Ogog
ICAgICAgICBjYXNlIE5ld1Byb21pc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZvckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zv
ckFsbEtpbGxzLmgKaW5kZXggMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRjZmRlMjhi
OS4uOTMzYTJiZGUyMmUxNjZjMmFlYjZkNGFjMWJiZTljZTFlNWNlZDU2YiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtMzIsNiArMzIsMTAgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2UgRm9yQWxsS2lsbHNJ
bnRlcm5hbCB7Citjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIC8vIFV0aWxp
dGllcyBmb3IgZmluZGluZyB0aGUgbGFzdCBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUgaW4g
REZHIFNTQS4gVGhpcyBhY2NvdW50cyBmb3IgbGl2ZW5lc3MgZHVlCiAvLyB0byBPU1IgZXhpdC4g
VGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGVudW1lcmF0aW5nIG92ZXIgYWxsIG9mIHRoZSBwcm9n
cmFtIHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSwKIC8vIGJ5IGV4cGxvcmluZyBhbGwgYmxv
Y2tzIHdoZXJlIHRoZSBub2RlIGlzIGxpdmUgYXQgdGFpbCBhbmQgdGhlbiBleHBsb3JpbmcgYWxs
IHByb2dyYW0gcG9pbnRzIHdoZXJlIHRoZQpAQCAtNTMsMTMgKzU3LDEzIEBAIHZvaWQgZm9yQWxs
S2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2Rl
QWZ0ZXIsIGNvbnN0CiAgICAgCiAgICAgQ29kZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRlci0+b3Jp
Z2luLmZvckV4aXQ7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3RlZDsKKyAg
ICBPcGVyYW5kIGFscmVhZHlOb3RlZDsKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0aGluZyB0
aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVlLgogICAg
IGlmIChub2RlQWZ0ZXItPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZWcgPSBub2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYgKGdyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlcikpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVn
KTsKLSAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gbm9kZUFmdGVyLT51bmxpbmtlZE9wZXJhbmQoKTsKKyAgICAgICAgaWYgKGdyYXBoLmlz
TGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgYWZ0ZXIpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG9w
ZXJhbmQpOworICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTcwLDggKzc0LDI0IEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAg
ICAgLy8gb3RoZXIgbG9vcCwgYmVsb3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5lQ2FsbEZyYW1l
ID0gYmVmb3JlLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxpbmVDYWxsRnJh
bWUgPT0gYWZ0ZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0
ID0gYmVmb3JlSW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCA6IDA7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFzZWxpbmVD
b2RlQmxvY2tGb3IoYmVmb3JlSW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFmdGVyLmJ5
dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmUu
Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hl
Y2twb2ludCgpKTsKKworICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NG
b3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAg
ICAgICAgYXV0byBsaXZlQWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9j
aywgYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGludCB0bXBPZmZzZXQgPSBi
ZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6
IDA7CisgICAgICAgICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVm
b3JlLmZpbHRlcihsaXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hT
ZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihPcGVyYW5k
KFRtcE9wZXJhbmQsIHRtcCArIHRtcE9mZnNldCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAvLyBObyBsb2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxp
bmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAg
ICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNz
Rm9yKGNvZGVCbG9jayk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVCZWZvcmUg
PSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5l
c3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVj
dG9yJiBsaXZlQWZ0ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJ
bmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CkBAIC04MiwxNyAr
MTAyLDIxIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFmdGVy
LmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9zcyBhIGNo
ZWNrcG9pbnQgYnV0IGJlZm9yZSBhbmQgYWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5lQ2FsbEZy
YW1lLiIpOworCiAgICAgLy8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRpdmUgd2F5
OiBpdCBpcyBraWxsZWQgaWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVyLgotICAg
IEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShhZnRlcik7
Ci0gICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVjdG9yIGxp
dmVBZnRlciA9IGdyYXBoLmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShhZnRlcik7CisgICAg
dW5zaWduZWQgbnVtTG9jYWxzID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpOworICAgIGdyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZSgKICAgICAgICAgYmVmb3JlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsK
LSAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0gKE9wZXJh
bmQgb3BlcmFuZCkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5vdGVkKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJl
Zy50b0xvY2FsKCkpKQorICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1Rt
cCgpID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7Cisg
ICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3Bl
cmFuZCk7CiAgICAgICAgIH0pOwogfQogICAgIApAQCAtMTA1LDcgKzEyOSw4IEBAIHZvaWQgZm9y
QWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IHNlZW5JbkNsb3N1cmVGbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNh
bGxlZEZ1bmN0b3JGbGFnID0gMjsKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gZmxhZ3M7
Ci0gICAgCisKKyAgICBBU1NFUlQobm9kZUluZGV4KTsKICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CiAgICAgCiAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAtMTIwLDE1
ICsxNDUsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAg
ICAgfQogICAgICAgICB9KTsKIAotICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7Ci0gICAgaWYg
KG5vZGVJbmRleCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwor
ICAgIE5vZGUqIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAgIGZvckFs
bEtpbGxlZE9wZXJhbmRzKAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQp
IHsKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAot
ICAgICAgICAgICAgICAgIHJlZywKKyAgICAgICAgICAgICAgICBvcGVyYW5kLAogICAgICAgICAg
ICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmbGFncy5nZXQobm9kZSkgJiBzZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAgICAgICAg
ICB9LApAQCAtMTU5LDYgKzE4Miw3IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIC8v
IFN0YXJ0IGF0IHRoZSBzZWNvbmQgbm9kZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBleHBlY3Rl
ZCB0byBvbmx5IGluc3BlY3Qgbm9kZXMgZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0aGUgYmxv
Y2sgdXAgdG8gbm9kZUluZGV4IChleGNsdXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMgemVybyB0
aGVuIHRoZSBmdW5jdG9yIGhhcyBub3RoaW5nIHRvIGRvLgogICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gMTsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAg
ICAgICAgZGF0YUxvZ0xuSWYoRm9yQWxsS2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxvY2FsIGF2
YWlsYWJpbGl0eSBhdCBpbmRleDogIiwgbm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxhYmlsaXR5
Lm1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgK
ICAgICAgICAgICAgIGdyYXBoLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSwgYmxv
Y2ssIG5vZGVJbmRleCwKICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCBiMzIwZjcwN2M5NWYxMjM5Mzg1MWJjM2Iy
YjJiNDJiOTU2ZGQwYmY1Li4wNzFkZTIzOTJiOWM1YzkyODZkZTljNzg3OGZlOWFmMDBjMGI0ZTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDggKzMwOCw4
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4
U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgqdGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYg
KHZhcmlhYmxlQWNjZXNzRGF0YSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAiKCIsIFZh
cmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAg
ICAgICAgICAgICBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsK
ICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJtYWNoaW5lOiIsIG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIs
IE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0YWNrQWNj
ZXNzRGF0YSgpKSB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2FsKTsKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgaWYgKGRhdGEt
Pm1hY2hpbmVMb2NhbC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJt
YWNoaW5lOiIsIGRhdGEtPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwg
ZGF0YS0+Zm9ybWF0KTsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkg
Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICBp
ZiAobm9kZS0+aGFzVW5saW5rZWRPcGVyYW5kKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwg
bm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JMZW5ndGhI
aW50KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQgPSAiLCBu
b2RlLT52ZWN0b3JMZW5ndGhIaW50KCkpOwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNWYWx1ZSgp
KQpAQCAtNTE1LDkgKzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAgICAgICBv
dXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIHBo
aU5vZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT5vcCgp
ID09IFBoaSk7CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYg
cGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwi
LCBwaGlOb2RlLT5sb2NhbCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2Rl
LT5vcGVyYW5kKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAg
ICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgi
QCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhp
Tm9kZS0+Y2hpbGQyKCkpIHsKQEAgLTg4NCw3ICs4ODUsNyBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0
dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2Nr
LCBWYQogICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlm
IChub2RlLT5sb2NhbCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAg
ICAgIGlmIChub2RlLT5vcGVyYW5kKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkp
CiAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC04OTMsOSArODk0LDkgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0
ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywg
VmEKICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJs
ZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdWJz
dGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAgICAgICAg
ICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2Rl
ID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVy
YW5kKCkpOwogICAgICAgICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAg
ICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpKSA9IG5ld0dldExvY2FsOworICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dldExvY2Fs
OwogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0xMTMzLDM2ICsxMTM0LDU2IEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBo
OjpraWxsc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICByZXR1cm4g
a2lsbHNGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9CiAKLWJv
b2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCBv
cGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0
YUxvZygiQ2hlY2tpbmcgb2Ygb3BlcmFuZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAg
ICBib29sIGlzQ2FsbGVyT3JpZ2luID0gZmFsc2U7CisKICAgICBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luUHRyID0gJmNvZGVPcmlnaW47Ci0gICAgZm9yICg7OykgewotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQo
KSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkpOworICAgIGF1dG8qIGlubGluZUNhbGxG
cmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgIC8vIFdlIG5lZWQg
dG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0
aGUKKyAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgor
ICAgIGZvciAoOyBjb2RlT3JpZ2luUHRyOyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2FsbEZyYW1l
ID8gJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyIDogbnVsbHB0cikgeworICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgdG1wT2Zmc2V0
ID0gaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAg
ICAgICAgICAgdW5zaWduZWQgb3BlcmFuZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9w
ZXJhbmQudmFsdWUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVlKCkgPj0g
MCk7CisgICAgICAgICAgICAvLyBUaGlzIHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0byBzb21l
b25lIHdlIGlubGluZWQuCisgICAgICAgICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1wT2Zmc2V0
ICsgbWF4TnVtQ2hlY2twb2ludFRtcHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
KGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVtVG1wcygp
IHx8IG9wZXJhbmRJbmRleCA8IHRtcE9mZnNldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgYXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNv
ZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBiaXRNYXAuZ2V0KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CisgICAgICAgIH0KKwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAt
IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAKLSAgICAg
ICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1l
KCk7Ci0gICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tP
ZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CisgICAgICAgIGlm
IChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3Rh
Y2tPZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAgICAgICAg
ICAgICBpZiAocmVnLmlzQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlZy5vZmZzZXQoKSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKIAog
CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAotICAg
ICAgICAgICAgICAgICAgICAmJiByZWcub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSB7CisgICAgICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJMb29rcyBsaWtlIGEgY2FsbGVlLlxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQotICAgICAgICAg
ICAgICAgICAgICAmJiByZWcub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCkgeworICAgICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCkgewogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkxvb2tzIGxpa2UgdGhlIGFyZ3VtZW50IGNvdW50LlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Niw0MiArMTE5Nyw0MSBA
QCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gbGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW5QdHIt
PmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5lc3Mub3BlcmFu
ZElzTGl2ZShyZWcub2Zmc2V0KCksIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3ND
YWxjdWxhdGlvblBvaW50KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVy
bmluZyB0cnVlLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBmdWxsTGl2ZW5lc3MudmlydHVhbFJlZ2lzdGVySXNMaXZlKHJlZywgYnl0ZWNvZGVJbmRl
eCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlz
Q2FsbGVyT3JpZ2luKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFs
d2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFudCBpZiBpdCB3YXNuJ3QgZm9yIG91cgog
ICAgICAgICAvLyBvcF9jYWxsX3ZhcmFyZ3MgaW5saW5pbmcuCi0gICAgICAgIGlmIChyZWcuaXNB
cmd1bWVudCgpCisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgcmVnLmlzQXJndW1lbnQo
KQogICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Bcmd1bWVudCgpKSA8
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKSkgewogICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQXJndW1lbnQgaXMgbGl2
ZS5cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRv
IGV4aXQgdG8gdGhlCi0gICAgICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRo
ZSB0YWlsIGNhbGwuCi0gICAgICAgIGNvZGVPcmlnaW5QdHIgPSAmaW5saW5lQ2FsbEZyYW1lLT5k
aXJlY3RDYWxsZXI7CiAgICAgICAgIGlzQ2FsbGVyT3JpZ2luID0gdHJ1ZTsKICAgICB9CisKKyAg
ICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRy
dWUuXG4iKTsKKyAgICByZXR1cm4gdHJ1ZTsgICAgCiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotQml0VmVjdG9yIEdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29k
ZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCitCaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0FuZFRtcHNM
aXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgQml0VmVjdG9yIHJl
c3VsdDsKLSAgICByZXN1bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCkpOwotICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIHVu
c2lnbmVkIG51bUxvY2FscyA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKTsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShudW1Mb2NhbHMgKyBibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mVG1wcygpKTsKKyAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUlu
Qnl0ZWNvZGUoCiAgICAgICAgIGNvZGVPcmlnaW4sCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lz
dGVyIHJlZykgewotICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwotICAgICAgICAg
ICAgcmVzdWx0LnF1aWNrU2V0KHJlZy50b0xvY2FsKCkpOworICAgICAgICBbJl0gKE9wZXJhbmQg
b3BlcmFuZCkgeworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgp
ID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAg
ICAgICAgICByZXN1bHQucXVpY2tTZXQob2Zmc2V0KTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTE2MzUsOCArMTY1NSw4IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVu
CiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBvcGVyYW5kTm9kZTsgbm9kZTspIHsKICAgICAgICAg
aWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAobV9mb3Jt
ICE9IFNTQSAmJiBub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAg
IGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOworICAgICAgICAgICAg
aWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCk7
CiAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9yb290VG9Bcmd1bWVudHMu
ZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50RGVmaW5pdGVseSBub2RlcyBhdCBvdGhlciBl
bnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEKQEAgLTE2NTYsNyArMTY3Niw3IEBAIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5v
ZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IGZhYjljZjAyYTI1OTc2ZWY0N2QxNzkw
NWJhZDljZTAzZTM4MmJjZTUuLmY3YTFkODIxNGMzMDJkN2Q5NmFjMmE3N2EwMTg2NmE5ZDExOWY1
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTg0MCwxMyArODQwLDEz
IEBAIHB1YmxpYzoKICAgICAvLyBRdWlja2x5IHF1ZXJ5IGlmIGEgc2luZ2xlIGxvY2FsIGlzIGxp
dmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcKICAgICAv
LyBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIGlmIHlvdSB3aWxsIG9ubHkgcXVlcnkgb25lIGxvY2Fs
LiBCdXQsIGlmIHlvdSB3YW50IHRvIGtub3cgYWxsIG9mIHRoZQogICAgIC8vIGxvY2FscyBsaXZl
LCB0aGVuIGNhbGxpbmcgdGhpcyBmb3IgZWFjaCBsb2NhbCBpcyBtdWNoIHNsb3dlciB0aGFuIGZv
ckFsbExpdmVJbkJ5dGVjb2RlKCkuCi0gICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxS
ZWdpc3RlciwgQ29kZU9yaWdpbik7CisgICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQs
IENvZGVPcmlnaW4pOwogICAgIAotICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFy
Z3VtZW50IGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUg
eW91CisgICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGFu
ZCB0bXBzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKICAg
ICAvLyBhbnkgYXJndW1lbnRzIGJlY2F1c2UgdGhvc2UgYXJlIGFsbCBwcmVzdW1lZCBsaXZlLiBZ
b3UgY2FuIGNhbGwgZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSB0bwogICAgIC8vIGFsc28gZ2V0IHRo
ZSBhcmd1bWVudHMuIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiBjYWxsaW5nIGlzTGl2ZUluQnl0
ZWNvZGUoKSBmb3IgZWFjaCBsb2NhbC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHZvaWQgZm9yQWxsTG9jYWxzQW5kVG1wc0xp
dmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKICAgICB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIG5vdCByZWR1bmRhbnRseSByZXBvcnRp
bmcgYXJndW1lbnRzLiBOZWNlc3NhcnkgYmVjYXVzZSBpbiBjYXNlIG9mIGEgdmFyYXJncwogICAg
ICAgICAvLyBjYWxsLCBvbmx5IHRoZSBjYWxsZWUga25vd3MgdGhhdCBhcmd1bWVudHMgYXJlIGxp
dmUgd2hpbGUgaW4gdGhlIGNhc2Ugb2YgYSBub24tdmFyYXJncwpAQCAtODgxLDYgKzg4MSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtyZWxhdGl2
ZUxvY2FsXSkKICAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwogICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpLmNoZWNr
cG9pbnQoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVRtcHMoKSk7
CisgICAgICAgICAgICAgICAgYXV0byBsaXZlVG1wcyA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2lu
dCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAg
ICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFu
ZChUbXBPcGVyYW5kLCB0bXApKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBub24tYXJn
dW1lbnQgbG9jYWxzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKKyAg
ICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMgYW5kIHRtcHMgbGl2ZSBy
aWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgogICAgIC8vIHlvdSB3YW50IHRvIGNv
bXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28gZGlmZmVyZW50IENvZGVPcmln
aW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsKKyAg
ICBCaXRWZWN0b3IgbG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwogCiAg
ICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlv
blBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzQ2FsbGVyT3JpZ2luKQogICAgIHsKQEAg
LTkzOCwxMiArOTQ2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExpdmVuZXNzQ2FsY3Vs
YXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAgIH0KICAgICAKLSAgICAvLyBUZWxscyB5b3UgYWxs
IG9mIHRoZSBhcmd1bWVudHMgYW5kIGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2lu
LiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzTGl2ZUlu
Qnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUu
CisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgb3BlcmFuZHMgbGl2ZSBhdCB0aGUgZ2l2ZW4g
Q29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCisgICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExv
Y2Fsc09yVG1wc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5
cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9p
ZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShj
b2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5
dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOwogICAgICAgICAKICAgICAgICAgLy8gUmVwb3J0
IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJn
dW1lbnQtLTspCkBAIC0xMTE0LDYgKzExMjIsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNrd2FyZHNDRkc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJh
Y2t3YXJkc0RvbWluYXRvcnM+IG1fYmFja3dhcmRzRG9taW5hdG9yczsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM+IG1fY29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXM7CisgICAgdW5zaWduZWQgbV90bXBzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwog
ICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRl
clNsb3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcAppbmRleCA5OWFlZmZjZGMwNWExMWM0NWIwNTc0MTI1MGY0ZDJhZWI0
ZTIyOGNkLi4yMDJkMjI1MDUzZmE5ZGZiZTVjMjNjNjRiY2Y4YmUzODRlM2U3NjU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmNwcApAQCAtNDUsOCArNDUsOCBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogSW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBn
cmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiAgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFw
aC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCi0gICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQotICAgICwgbV9ibG9j
aygwKQorICAgICwgbV92YXJpYWJsZXMoT3BlcmFuZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkKQorICAgICwgbV9ibG9jayhudWxscHRyKQogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKaW5kZXgg
YmY1ZWFkMThlYzE2NDdlZTE2NzY2ODgzNTc0MDFmYTdmZWM3MTI5OS4uMTg2NWU2YTFlZmZjM2Rh
YWVmZTU4NGNhODYyYzQ5YmMzNjg1ODUwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaApAQCAtMTY3LDEzICsxNjcsMTEgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXNbaW5kZXhdKTsK
ICAgICB9CiAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIEFi
c3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMub3BlcmFuZEluZGV4KG9wZXJhbmQpKTsKICAgICB9
CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkgeyByZXR1cm4gdGhpcy0+b3BlcmFuZChvcGVyYW5kLm9mZnNldCgpKTsgfQotICAgIAogICAg
IEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVy
biB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLmxvY2FsSW5kZXgoaW5kZXgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggM2Q4NDNjZTU4ZjIwYjQx
MTYzMzlmY2RhOTU4OGFlYmE2YjdhOGMyZS4uNTNkYjljZDE0Y2FjNmI2ZTY2ODJlZmRmNGJhNzk0
ODk3Y2E1ZDVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKQEAgLTg1LDggKzg1LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5l
cmF0b3IpOwotICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbDxK
SVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JF
eGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAg
ICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVKdW1wczsKQEAgLTk3
LDEzICs5NSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAKICAgICAgICAg
aml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VQcm9i
ZU9TUkV4aXQoKSkgewotICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBqdW1wKCk7Ci0gICAgICAg
ICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsodGFyZ2V0LCBv
c3JFeGl0VGh1bmtMYWJlbCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKKyAgICAgICAg
aW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CiAgICAgfQogfQogCkBAIC01
OTUsMTEgKzU4NywxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeShCYXNpY0Js
b2NrJiBiYXNpY0Jsb2NrLCBKSVRDb21waWxlcjo6TGFiZWwgYmxvYwogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpICE9IHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSkgeworCisgICAgICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5vcGVyYW5kKCkuaXNU
bXAoKSk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0
ZXIoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKICAgICAgICAgICAgICAgICBlbnRy
eS0+bV9yZXNodWZmbGluZ3MuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICBPU1JFbnRyeVJl
c2h1ZmZsaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkub2Zm
c2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgKaW5kZXggNjhjYTk4ZGY2ZjVjNGI3YjYzNzJjYzE1ODE4ZWMyNTcyODJmODlkOS4uNTBmMWQ4
OTNkYTMwMjEwMmI5NWU3OGFjNjA0MzlkODYyMzZmM2NhNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQog
ICAgIHsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFn
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwg
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICB9CiAKICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCmluZGV4IDQyZjY4YWRhMzI0Nzhh
MTE3MWNlYWQwZjkzZTA4YWMyNWNhNjMxMzQuLjQ1ZWNiNDZhYTI0NDNiYTFiOTU1NzE2YmMxZjQy
YTcwOGExYTA0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAt
NjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5z
aWduZWQgaW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZs
dXNoTG9jYXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbWVhbnQg
dG8gYmUgZmFzdC4gV2UganVzdCB1c2UgaXQgZm9yIGFzc2VydGlvbnMuIElmIHdlIGdvdCBsaXZl
bmVzcyB3cm9uZywKICAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gZmFsc2Ug
Zm9yIGEgRmx1c2ggdGhhdCB3ZSBpbnNlcnQuCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgYXV0byBmbHVzaElzRGVmaW5pdGVseUludmFsaWQgPSBbJl0gKEJhc2ljQmxvY2sqIGJs
b2NrLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gZmFsc2U7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmRleDsgaS0tOyApIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpICYmIGJsb2Nr
LT5hdChpKS0+bG9jYWwoKSA9PSBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2Nr
LT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJhbmQo
KSA9PSBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgaGFuZGxlQmxvY2tGb3JUcnlDYXRjaChCYXNpY0Jsb2Nr
KiBibG9jaywgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQpCiAgICAgewogICAgICAgICBIYW5k
bGVySW5mbyogY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgICAgICBGYXN0
Qml0VmVjdG9yIGxpdmVBdENhdGNoSGVhZDsKLSAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6
ZShtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7Cisg
ICAgICAgIE9wZXJhbmRzPGJvb2w+IGxpdmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpKTsKIAogICAgICAgICBIYW5kbGVySW5mbyogY2Fj
aGVkSGFuZGxlclJlc3VsdDsKICAgICAgICAgQ29kZU9yaWdpbiBjYWNoZWRDb2RlT3JpZ2luOwpA
QCAtMTMzLDExICsxMzIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gb3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGlmIChIYW5kbGVySW5mbyog
aGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eFRvQ2hlY2spKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFs
bCgpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KGhhbmRsZXItPnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5k
ZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0g
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0FuZFRtcHNM
aXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZy
YW1lKSwgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
dmVBdENhdGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICAgY2FjaGVkSGFuZGxlclJlc3VsdCA9IGhhbmRs
ZXI7CkBAIC0xNTYsMTIgKzE1NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2Fj
aGVkSGFuZGxlclJlc3VsdDsKICAgICAgICAgfTsKIAotICAgICAgICBPcGVyYW5kczxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZBcmd1bWVudHMoKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxv
Y2FscygpLCBudWxscHRyKTsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4g
Y3VycmVudEJsb2NrQWNjZXNzRGF0YShPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gZmx1c2hFdmVyeXRoaW5nID0gWyZdIChOb2Rl
T3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXgpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyKTsKLSAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChvcGVy
YW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8fCBv
cGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
IHx8IGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQpKSB7CiAKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzVmFsaWRGbHVzaExvY2F0aW9uKGJsb2NrLCBpbmRleCwgb3BlcmFuZCkp
OwogCkBAIC0xNzgsNiArMTc3LDggQEAgcHVibGljOgogCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9j
YWxzKCk7IGxvY2FsKyspCiAgICAgICAgICAgICAgICAgZmx1c2godmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG1wID0gMDsgdG1wIDwg
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZlRtcHMoKTsgKyt0bXApCisgICAgICAgICAg
ICAgICAgZmx1c2goT3BlcmFuZChUbXBPcGVyYW5kLCB0bXApKTsKICAgICAgICAgICAgIGZsdXNo
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAg
ICAgIH07CiAKQEAgLTE5Miw5ICsxOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50TWF5YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFu
ZC5pc0xvY2FsKCkgJiYgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3Bl
cmFuZC5pc0FyZ3VtZW50KCkpIHsKLQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG5vZGUtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkgfHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzVmFsaWRGbHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJh
bmQpKTsKIAogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAg
LTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
IChub2RlLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRC
bG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw5ICsy
MTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAg
QVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCAhb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0Nv
bnN0YW50KCkpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0
YS5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YS5sYXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAppbmRleCA3M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEw
ZmVmYjAwZWJlZDg3Li5mZmY5NmJmY2Y2MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxs
KEVwb2NoKCkpOwogICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAg
ICAgICAgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7
CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAg
ICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwo
KSk7CisgICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRS
ZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2Fs
ID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2No
IHx8IGxvY2FsRXBvY2ggPT0gY3VycmVudEVwb2NoKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBv
Y2goKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVy
YW5kKCkpID0gRXBvY2goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUg
KzExNiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewogICAgICAg
ICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCBibG9jay0+YXQobm9kZUluZGV4IC0gMSksIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAgICAgICAgICBbJl0gKE9w
ZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBhIGJpdCBzbG9wcHkgLSBpdCBtaWdodCBjbGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBp
ZgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBu
ZWVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCEhbV9zdGF0ZS5vcGVyYW5kKHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFt
X3N0YXRlLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAi
OiAiLCByZWcsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KHJlZykgPSBjdXJyZW50RXBvY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVu
dEVwb2NoOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJl
NjU1ZjUyNTFmOTZmNDA0ZTMzYjQ2Li5iODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcw
Yzc4YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAs
MTMgQEAgc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBT
dGFja0FjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQp
Ci0gICAgICAgIDogbG9jYWwobG9jYWwpCisgICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3Bl
cmFuZCwgRmx1c2hGb3JtYXQgZm9ybWF0KQorICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAg
ICAgICAgLCBmb3JtYXQoZm9ybWF0KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsOworICAgIE9wZXJhbmQgb3BlcmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bWFjaGluZUxvY2FsOwogICAgIEZsdXNoRm9ybWF0IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5
MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJv
dW5kczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJh
cmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxWYXJh
cmdzOgpAQCAtOTIzLDkgKzkyNCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkg
ewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFy
Z3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAg
ICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOwogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
ICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOwor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkMigpOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgog
ICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgpAQCAtOTczLDkgKzk3Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvLmFzPFZhcmlhYmxlQWNjZXNzRGF0YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAg
VmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1
cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQoKTsKICAgICB9CiAgICAgCiAgICAgVmly
dHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbCgpCkBAIC05ODMsNyArOTg2LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAg
IH0KICAgICAKLSAgICBib29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5r
ZWRPcGVyYW5kKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNl
IEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpAQCAtOTk2LDEwICs5OTksMTAgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkK
KyAgICBPcGVyYW5kIHVubGlua2VkT3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFz
VW5saW5rZWRMb2NhbCgpKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5m
by5hczxpbnQzMl90PigpKTsKKyAgICAgICAgQVNTRVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsK
KyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OmZyb21CaXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90Pigp
KTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3
ICsxMzUzLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9y
d2FyZFZhcmFyZ3M7CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkg
PT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AoKSA9PSBWYXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAK
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggMjRjNzMzZDM4NzAyNzlmNGE1NmI0ZTY4OGJmMGJm
MDZhYzI0YzFkNC4uZTNlOWMzMmY4ZDA4MTNhNmFkYTIyYWFjY2QzNzQ0MmQ0ZWJkOWQzZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAog
ICAgIFwKKyAgICAvKiBUaGVzZSBhcmUgdXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8g
dHJhY2sgKi9cCiAgICAgbWFjcm8oUHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhLaWxsU3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywg
Tm9kZVJlc3VsdEpTKSBcCkBAIC0yMDIsNiArMjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxP
dXRPZkJvdW5kcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KFZhcmFyZ3NMZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAg
ICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndh
cmRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3Qs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAKaW5kZXggMzI4MGY4N2E2MjY3ZGYwMzRjODRlMzMxODUzMGM3NDE5ZTU1ZTk3ZS4uNDI0
N2RlYWVjN2NiYmNlNjA4M2FhODczMmI5YzI3N2Y1ZWZkMjhkZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCkBAIC0zNSwxMSArMzUsOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotfQogCiBjbGFzcyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
cHVibGljOgogICAgIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQog
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03
NSw4ICs3Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAg
ICAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBi
bG9jay0+YXQoMCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVh
bFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsK
KyAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKG9wZXJhbmQsICIgIik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBkYXRhTG9nTG4oIiIpOwogICAgICAgICB9OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5n
aW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZh
aWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9
IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxv
Y2stPmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIwLDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNj
ZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3Nl
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3Ip
OwogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3Vj
Y2Vzc29yKTsKQEAgLTIwOCwyOCArMjA2LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlD
YWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRG
bHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGlj
dGluZ0ZsdXNoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxh
YmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRh
LT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGlu
dDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkTG9jYWwoKSkuc2V0Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXRO
b2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgWm9tYmllSGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
LnNldE5vZGVVbmF2YWlsYWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0Miwx
NSArMjQwLDE4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRl
Tm9kZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAg
ICAgCisKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAg
ICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGlu
ZUNvdW50KSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+
Y291bnQpID0gQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hp
bmVDb3VudCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykg
ewotICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQotICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5t
YWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChkYXRhLT5zdGFydCArIGkpID0KKyAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBp
KSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAg
QEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAg
ICAgICAgICAvLyBSZWNvcmQgaG93IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3Vt
ZW50IGNvdW50LgogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAg
ICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5z
ZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVu
dENvdW50KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5z
ZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxl
ZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7ICsraSkgewogICAgICAgICAgICAg
QXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgK
LSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQo
UHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRQTG9jLCBub2RlLCBpKSwgYXJndW1lbnQpOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4
IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTViMGM3Yzk0Yjg0M2U4OTBkYzcuLmVlNWY3ZjNkNjhlMmVh
MGViMWRkZWYxMzlmZjkzOWI2YWQ4OWQ5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCkBAIC0zMjIsNyArMzIyLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y28KICAgICAKICAgICAvLyA3KSBGaXggdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSB0aGUgcmlnaHQg
Y29kZSBibG9jay4KICAgICAKLSAgICAqYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPihwaXZvdCAt
IDEgLSBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spID0gY29kZUJsb2NrOworICAgICpiaXR3aXNl
X2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayArIDEp
KSA9IGNvZGVCbG9jazsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAg
ICAgICBkYXRhTG9nRigiICAgIE9TUiByZXR1cm5pbmcgZGF0YSBidWZmZXIgJXAuXG4iLCBzY3Jh
dGNoKTsKQEAgLTM4MiwxMCArMzgyLDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGCiAKICAg
ICBhdXRvIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlz
PE9wQ2F0Y2g+KCkpOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9
IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5t
X2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZl
ciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2Nr
KS5tX2J1ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxK
U1ZhbHVlKj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIGlmICghVmly
dHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kKS5pc0xvY2FsKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGRhdGFCdWZmZXJbaW5kZXhdID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCmluZGV4
IGRjNzZiY2JhZWQ0MWVlZTA2M2RmZGJlYTg0NTA2NjU1M2QwY2I0ZDYuLjYwOTY4NjYzYjY0YzJi
Njg1NGU0NjE2MWY5NDk5NDY1N2UxYWVmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCkBAIC0x
MDIsMTAgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgIGxvY2Fsc1tsb2NhbF0gPSBuZXdSb290LT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBv
cmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
KSk7CisgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJl
Z2lzdGVyKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9k
ZSgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBP
cEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgp
LnZpcnR1YWxSZWdpc3RlcigpKSwKICAgICAgICAgICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0p
KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApp
bmRleCAxOGM2NDE0NzkzNDI0NjliNDFjYThmOThmMzA4YjNhNGM5MzNiYTk4Li4wNWRlOTU4Y2Fl
ZWYxYjhmMDllMzJkMDk3YThmZTMyZDY3NzQyMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFzc2VtYmx5
SGVscGVycy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNp
bmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKQEAgLTQ3LDg5NSAr
NDgsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFByb2JlIGJh
c2VkIE9TUiBFeGl0LgotCi11c2luZyBDUFVTdGF0ZSA9IFByb2JlOjpDUFVTdGF0ZTsKLXVzaW5n
IENvbnRleHQgPSBQcm9iZTo6Q29udGV4dDsKLXVzaW5nIEZyYW1lID0gUHJvYmU6OkZyYW1lOwot
Ci1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKFByb2JlOjpDb250ZXh0JiwgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgY29uc3QgT1NSRXhpdEJhc2UmKTsKLXN0YXRpYyB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChQcm9iZTo6Q29udGV4dCYsIFZNJiwgQ29kZUJsb2Nr
KiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYpOwotc3RhdGljIHZvaWQg
cHJpbnRPU1JFeGl0KENvbnRleHQmLCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4
aXQmKTsKLQotc3RhdGljIEpTVmFsdWUganNWYWx1ZUZvcihDUFVTdGF0ZSYgY3B1LCBKU1ZhbHVl
U291cmNlIHNvdXJjZSkKLXsKLSAgICBpZiAoc291cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAg
IEpTVmFsdWUgcmVzdWx0OwotICAgICAgICBzdGQ6Om1lbWNweSgmcmVzdWx0LCBjcHUuZ3ByPHVp
bnQ4X3QqPihzb3VyY2UuYmFzZSgpKSArIHNvdXJjZS5vZmZzZXQoKSwgc2l6ZW9mKEpTVmFsdWUp
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGNwdS5ncHI8RW5jb2RlZEpTVmFsdWU+KHNvdXJjZS5n
cHIoKSkpOwotI2Vsc2UKLSAgICBpZiAoc291cmNlLmhhc0tub3duVGFnKCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlKHNvdXJjZS50YWcoKSwgY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9h
ZEdQUigpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90Pihzb3VyY2UudGFn
R1BSKCkpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSNlbmRpZgot
fQotCi0jaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLS8vIEJhc2Vk
IG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGlj
IHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayog
Y29kZUJsb2NrKQotewotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNl
dChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7
Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAg
ICBVQ1BVUmVnaXN0ZXIqIHBoeXNpY2FsU3RhY2tGcmFtZSA9IGNvbnRleHQuZnA8VUNQVVJlZ2lz
dGVyKj4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsr
KSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7
Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFRoZSBjYWxsZWUgc2F2ZWQgdmFsdWVzIGNv
bWUgZnJvbSB0aGUgb3JpZ2luYWwgc3RhY2ssIG5vdCB0aGUgcmVjb3ZlcmVkIHN0YWNrLgotICAg
ICAgICAvLyBIZW5jZSwgd2UgcmVhZCB0aGUgdmFsdWVzIGRpcmVjdGx5IGZyb20gdGhlIHBoeXNp
Y2FsIHN0YWNrIG1lbW9yeSBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIGdvaW5nIHRocm91Z2ggY29u
dGV4dC5zdGFjaygpLgotICAgICAgICBBU1NFUlQoIShlbnRyeS5vZmZzZXQoKSAlIHNpemVvZihV
Q1BVUmVnaXN0ZXIpKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9
IHBoeXNpY2FsU3RhY2tGcmFtZVtlbnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIp
XTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVDYWxs
ZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGF1dG8mIHN0YWNrID0gY29udGV4
dC5zdGFjaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAg
dW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250
U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHN0YWNrLnNldChjb250ZXh0LmZwKCksIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0Lmdw
cjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgfQotfQotCi0vLyBCYXNl
ZCBvbiBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0m
IHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBh
bGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMo
KTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVT
YXZlcy0+c2l6ZSgpOwotCi0gICAgVk1FbnRyeVJlY29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5
UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwotICAgIFVDUFVSZWdpc3RlciogY2FsbGVlU2F2ZUJ1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNQVVJlZ2lzdGVyKj4oZW50cnlSZWNvcmQtPmNhbGxl
ZVNhdmVSZWdpc3RlcnNCdWZmZXIpOwotCi0gICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVz
LgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAg
ICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAg
ICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgc2l6ZV90IHVpbnRwdHJPZmZzZXQgPSBlbnRyeS5vZmZz
ZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNH
UFIoKSkKLSAgICAgICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IGNhbGxl
ZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF07Ci0gICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgICAgICBjb250ZXh0LmZwcihlbnRyeS5yZWcoKS5mcHIoKSkgPSBiaXR3
aXNlX2Nhc3Q8ZG91YmxlPihjYWxsZWVTYXZlQnVmZmVyW3VpbnRwdHJPZmZzZXRdKTsKLSNlbHNl
Ci0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3Vw
cG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNo
aXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vu
ZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGlj
IHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250
ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAg
YXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRy
eVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAgdm9pZCogY2Fs
bGVlU2F2ZUJ1ZmZlciA9IGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyOwot
Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQg
cmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250Q29w
eVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxl
ZVNhdmVCdWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVu
dHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNv
bnRleHQuZnByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZnByKCkpKTsKLSNlbHNlCi0gICAg
ICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBj
YWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1
cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNh
dmVPckNvcHlDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNh
dmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBWaXJ0dWFsUmVn
aXN0ZXIgb2Zmc2V0VmlydHVhbFJlZ2lzdGVyLCBib29sIHdhc0NhbGxlZFZpYVRhaWxDYWxsKQot
ewotICAgIEZyYW1lIGZyYW1lKGNvbnRleHQuZnAoKSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBB
U1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxs
ZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVy
U2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVn
aXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVy
Q291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgUmVnaXN0ZXJTZXQgYmFzZWxpbmVD
YWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykg
ewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwot
ICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVpbnRwdHJfdCBzYXZlZFJlZ2lzdGVyVmFsdWU7Ci0K
LSAgICAgICAgaWYgKHdhc0NhbGxlZFZpYVRhaWxDYWxsICYmIGJhc2VsaW5lQ2FsbGVlU2F2ZXMu
Z2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGZyYW1l
LmdldDx1aW50cHRyX3Q+KGVudHJ5Lm9mZnNldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpOwot
Ci0gICAgICAgIGZyYW1lLnNldChvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0SW5CeXRlcygp
ICsgZW50cnkub2Zmc2V0KCksIHNhdmVkUmVnaXN0ZXJWYWx1ZSk7Ci0gICAgfQotfQotI2Vsc2Ug
Ly8gbm90IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgdm9p
ZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGlj
IHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRp
YyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKiwgVmlydHVhbFJlZ2lzdGVyLCBib29s
KSB7IH0KLQotI2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAot
Ci1zdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQm
IGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0g
ICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlz
RGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUp
OwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7Ci0gICAgdW5zaWdu
ZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKLSAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3Vs
dCA9IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAotICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCksIGxlbmd0aCwgY2FwYWNpdHkp
OwotCi0gICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNhbGxlZSk7Ci0KLSAgICB2b2lkKiBmcmFt
ZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNl
LCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykK
LSAgICAgICAgcmVzdWx0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIGZyYW1lLmFyZ3VtZW50KGkp
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZUNsb25l
ZEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0q
PigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5s
aW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IENs
b25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCi0gICAgICAgIHZtLCBnbG9iYWxPYmplY3QtPmNs
b25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBjYWxsZWUsIGxlbmd0aCk7Ci0KLSAgICB2b2lkKiBm
cmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVC
YXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0t
OykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGksIGZyYW1l
LmFyZ3VtZW50KGkpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBlbWl0
UmVzdG9yZUFyZ3VtZW50cyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
REZHOjpKSVRDb2RlKiBkZmdKSVRDb2RlLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYg
b3BlcmFuZHMpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNr
KCkpOwotCi0gICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1
bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgotICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRl
eF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4
KTsKLQotICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkCi0gICAgICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAh
PSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBNaW5pZmllZElEIGlkID0gcmVjb3Zlcnkubm9kZUlEKCk7Ci0gICAgICAg
IGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZmluZChpZCk7Ci0gICAgICAg
IGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZW5kKCkpIHsKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgZnJhbWUub3BlcmFuZChpdGVyLT52YWx1ZSkp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0gICAgICAgICAgICBkZmdKSVRDb2RlLT5taW5pZmll
ZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgpOwotCi0gICAgICAgIGludCBzdGFja09mZnNl
dDsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0
ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3RhY2tPZmZzZXQgPSAwOwotCi0gICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKLSAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihmcmFtZS5vcGVyYW5k
KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS5hc0NlbGwoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKLQotICAgICAgICBp
bnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0g
ZnJhbWUub3BlcmFuZDxpbnQzMl90PihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQsIFBheWxvYWRPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmd1
bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
LQotICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09iamVjdDsKLSAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZURpcmVjdEFy
Z3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNh
bGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
bG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNP
YmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9j
aywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOwotCi0gICAgICAg
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKLSAgICB9Ci19Ci0K
LS8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0aW9ucyB0aGF0
IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9zdCBsaWtlbHkgbmVlZGVkIChsb3dl
ciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51bSB2YWx1ZSku
Ci0vLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2aW91cyBsb3dl
ciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQotLy8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
IHZhbHVlIGJlbG93KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHsKLSAg
ICBOb25lLAotICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0gICAgVmFsdWVQcm9maWxlVXBkYXRl
LAotICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhlcgotfTsKLQotdm9pZCBPU1JFeGl0
OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250
ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7
Ci0gICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7Ci0gICAgYXV0
byYgY3B1ID0gY29udGV4dC5jcHU7Ci0KLSAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpIHsKLSAg
ICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28sIHRoZXJlJ3Mg
bm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKLSAgICAgICAgLy8gY29kZSBydW5uaW5nIHRoYXQgZXhw
ZWN0cyBubyBHQy4KLSAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7Ci0gICAg
fQotCi0gICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGNhbGxGcmFtZSA9
IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAgICBjb250ZXh0LmZwKCkgPSBjYWxsRnJhbWU7
Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotCi0gICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFi
bGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3Vs
ZG4ndAotICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUg
ZGVmZXJHQyh2bS5oZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJ
bmRleDsKLSAgICBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdElu
ZGV4XTsKLQotICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQg
PT0gR2VuZXJpY1Vud2luZCk7Ci0gICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEh
c2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwotCi0gICAg
aWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAgICAgICAgRXh0cmFJbml0aWFsaXph
dGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDo6Tm9uZTsKLQotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGJs
b2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAotICAgICAgICAv
LyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZvciB1
c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4aXQgcmFtcCBjb2RlLgotCi0gICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lQWx0
ZXJuYXRpdmUoKTsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2Vs
aW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5
KiByZWNvdmVyeSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAh
PSBVSU5UX01BWCkgewotICAgICAgICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3BlY3Vs
YXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07Ci0gICAgICAgICAgICBleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpCi0g
ICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAg
ICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCEh
ZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIGlmIChleGl0Lm1fdmFsdWVQcm9m
aWxlKQotICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4
KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1
ZVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hl
IHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgewotICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7Ci0g
ICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVD
b2RlQmxvY2spOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJs
b2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAg
ICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0
cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9s
ZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVz
aG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hv
bGQgPiAwKTsKLSAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0
ZWRUaHJlc2hvbGQpOwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVP
cmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9w
dGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAgICAgICAgdm9pZCoganVtcFRhcmdl
dDsKLSAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAg
ICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxv
Y2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24g
PSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwot
ICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7
ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29k
ZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgQVNTRVJUKGNv
ZGVMb2NhdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1
ZSByZWNvdmVyaWVzLgotICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsK
LSAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRPcGVyYW5kU3Bh
bnM7Ci0gICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3Qo
Y29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcsIGV4
aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3BhbnMpOwotICAg
ICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291
bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUg
PSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVDb2Rl
QmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyksIHJlY292ZXJ5
LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hvbGQs
IGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQpKTsKLQotICAgICAgICBpZiAo
VU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7Ci0gICAgICAgICAgICBQcm9maWxlcjo6RGF0
YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKLSAgICAgICAgICAg
IFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwotCi0gICAgICAgICAgICBQcm9maWxl
cjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAg
ICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNv
ZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9raW5k
LCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBl
eGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJFeGl0OwotICAgICAgICAgICAg
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAg
ICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBleGl0
LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwg
T3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJE
RkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlc1xuIiwK
LSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbiku
ZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0
b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhp
Z25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0YXRl
LmdldCgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUuYmFz
ZWxpbmVDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2Vs
aW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+
JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAgICBWZWN0b3I8VW5kZWZpbmVkT3Bl
cmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5kZWZpbmVkT3Bl
cmFuZFNwYW5zOwotCi0gICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSAr
IGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAgICAvLyBUaGUgb25seSByZWFzb24g
Zm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdh
eSB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGRvIHsKLSAgICAgICAgYXV0byBleHRyYUluaXRpYWxp
emF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4aXRT
dGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOwotCi0gICAgICAgIGlmIChleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lKQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZl
bDogU3BlY3VsYXRpb25SZWNvdmVyeQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gc3BlY3Vs
YXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5kIHZhbHVlIHBy
b2ZpbGluZwotICAgICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQgcmVjb3ZlcnMu
IEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5Ci0gICAgICAgIC8v
IHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVOTElL
RUxZLgotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0ZS5y
ZWNvdmVyeTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5KSkgewotICAgICAgICAgICAg
c3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZl
QWRkOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3By
PHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5
LT5zcmMoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShj
cHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1Lmdw
cihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNlbGY6
Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19jYXN0
PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+IDEpIF4gMHg4
MDAwMDAwMFU7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShj
cHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1Lmdw
cihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVk
aWF0ZToKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gKGNwdS5n
cHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgpKTsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVj
b3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5
LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgp
KSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNw
ZWN1bGF0aW9uUmVjb3ZlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdp
biBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUKLSAgICAgICAg
SlNWYWx1ZSBwcm9maWxlZFZhbHVlOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJj
ZSkgewotICAgICAgICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1f
anNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBwcm9m
aWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1
ZVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBl
eHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKLSAgICAgICAgaWYg
KEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkgewot
ICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAg
QVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4
aW5nVHlwZSk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4KCkp
LnB0cigpOwotICAgICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlzPE9w
R2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2Zp
bGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxl
bmd0aDsKLSAgICAgICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7
Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFycmF5
TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgotICAgICAgICBp
ZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKLSAgICAgICAgICAg
IC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZl
IGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2UgbXVzdCBy
ZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAgcmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQp
OwotICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JDYXRj
aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkKLSAg
ICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7Ci0KLSAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBw
cmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBleGl0KTsKLQotICAgIH0gd2hp
bGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9uLgotCi0gICAgRnJhbWUgZnJh
bWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1
aW50cHRyX3Q+KCkgJiAweDcpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQVNTRVJUKGNw
dS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok51
bWJlclRhZyk7Ci0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bm90Q2VsbE1h
c2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICAvLyBE
byBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8g
dGhlIHN0YWNrLgotICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVmb3Jl
IHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNlIHRo
ZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSByZWdp
c3RlcnMuCi0KLSAgICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0gc3Rh
dGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKCkpOwotICAgIHNpemVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMuc2l6
ZSgpOwotICAgIHNpemVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRlZmluZWRPcGVy
YW5kU3BhbnMuc2l6ZSgpOwotCi0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFuSW5kZXggPSAw
OwotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5k
czsKLSAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICBuZXh0VW5kZWZp
bmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFu
SW5kZXhdLmZpcnN0SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZpbmVk
KCk7Ci0gICAgZm9yIChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5kZWZp
bmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkgewotICAgICAgICBhdXRvJiBzcGFuID0gdW5k
ZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9
IHNwYW4ubWluT2Zmc2V0OwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0ICsg
c3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKLQotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSBmaXJz
dE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQpCi0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkgewotICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4
KGluZGV4KTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVuZGVmaW5lZE9w
ZXJhbmRJbmRleCkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRTcGFu
c1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0gMTsKLSAgICAg
ICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNw
YW5zKQotICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmlu
ZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0g
bnVtYmVyT2ZPcGVyYW5kczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlu
dCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3ByKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90
PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQ
UigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94
ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFs
dWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEJvb2xl
YW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFu
KGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotCi0gICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJh
bWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwot
I2Vsc2UKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNh
bGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUo
KS5wYXlsb2FkKCkpKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIoKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNlIFVuYm94
ZWRJbnQ1MkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1Zh
bHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6OmludDUyU2hp
ZnRBbW91bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZl
VW5ib3hlZEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5i
b3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1l
LT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZFN0cmljdElu
dDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJv
eGVkRG91YmxlSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnByKHJlY292ZXJ5
LmZwcigpKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91YmxlRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3Jl
YXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0g
ICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVzdG9y
ZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGlu
ZSBKSVQgdXNlcy4KLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgY29kZUJsb2Nr
KTsKLSAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2spOwot
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJUYWcp
OwotICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBzdGF0aWNfY2Fz
dDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLQotICAgIC8vIE5vdyB0
aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyBy
ZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3ZlcmllcyBkb24n
dCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBh
c3N1bWUgdGhhdCB0aGV5IG9ubHkKLSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBs
b2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sg
aXMgc2Vuc2libGUuCi0gICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhh
dCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0
cwotICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3
b3VsZG4ndCBkbyB0aGF0LgotCi0gICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250ZXh0
LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFkanVzdCB0aGUg
b2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBr
bm93Ci0gICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8g
dGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMg
Y2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAg
Ly8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBh
bm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0
aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBw
ZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0g
ICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVy
LiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBh
Z2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJl
IGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQK
LSAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3Vs
ZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0
aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBw
ZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAg
IC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NS
IGVudHJ5IGlzCi0gICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAg
ICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJl
c3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3Vs
dCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8g
ZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAg
Ly8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2Ug
aXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBP
U1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2Fs
bCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhh
cHBlbnMKLSAgICAvLyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywg
dGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBh
bmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3
aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2gg
ZG9lcyBhIHByZXR0eQotICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBC
dXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVj
dWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8g
U28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlz
IHNpZ25pZmljYW50bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3Nl
cyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBi
ZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUK
LSAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAg
ICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0KLSAgICBpZiAoVU5M
SUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZOZWVkVG9SZW9w
dGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRpbWl6
ZU5vdykpCi0gICAgICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGluZUNvZGVCbG9j
aywgY29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNvbnRl
eHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQo
Y29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotfQotCi1z
dGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVC
bG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0
KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5m
cCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2
ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0Ci0gICAgLy8g
aW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAg
IGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBv
dXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2Rl
T3JpZ2luOwotICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9y
aWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7
Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2RlT3Jp
Z2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIElubGluZUNhbGxGcmFt
ZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxs
ZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0cnVlQ2Fs
bGVyQ2FsbEtpbmQpOwotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgpOwotCi0g
ICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOwotCi0gICAgICAgIGlmICghdHJ1ZUNh
bGxlcikgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOwot
ICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6
cmV0dXJuUENPZmZzZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG9s
ZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7
Ci0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5s
aW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAg
ICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRyVGFn
PihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlm
Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSwgcmV0dXJuUEMpOwotICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5nZXQ8
dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwg
b3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBj
YWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNM
TEludCk7Ci0KLSAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkK
LSAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHRydWVD
YWxsZXItPmlubGluZUNhbGxGcmFtZSgpLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0KLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9
IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAr
IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gdGFnQ29kZVB0cihqdW1w
VGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgp
LCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dm9p
ZCo+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2ssIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbmxpbmUg
Y2FsbCBmcmFtZSdzIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLSAgICAgICAgLy8gSWYgdGhpcyBp
bmxpbmVkIGZyYW1lIGlzIGEgdGFpbCBjYWxsIHRoYXQgd2lsbCByZXR1cm4gYmFjayB0byB0aGUg
b3JpZ2luYWwgY2FsbGVyLCB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIGNvcHkgdGhlIHByaW9yIGNv
bnRlbnRzIG9mIHRoZSB0YWcgcmVnaXN0ZXJzIGFscmVhZHkgc2F2ZWQgZm9yIHRoZSBvdXRlciBm
cmFtZSB0byB0aGlzIGZyYW1lLgotICAgICAgICBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoY29u
dGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KSwgIXRydWVDYWxsZXIpOwotCi0gICAgICAgIGlmIChjYWxsZXJJc0xMSW50
KSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxl
ciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgZnJhbWUuc2V0PGNv
bnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJs
b2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKS5vZmZzZXQsIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGlu
ZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKS5v
ZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwg
UGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyk7Ci0gICAgICAgIEFTU0VSVChjYWxsZXJGcmFtZSk7Ci0gICAgICAgIGZyYW1lLnNldDx2b2lk
Kj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpLCBjYWxsZXJGcmFtZSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUsIEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7
Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAot
ICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsK
LSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMp
OwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0
PHVpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zm
c2V0LCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpOwotI2VuZGlmIC8vIFVTRShK
U1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMg
dGhlIDMyLWJpdCBwYXJ0Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRv
cGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNhbGxzCi0gICAg
aWYgKGNvZGVPcmlnaW4pIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSku
Yml0cygpOwotI2Vsc2UKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
b3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkpLmJpdHMoKTsKLSNlbmRpZgotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQz
Ml90PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0
cyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ29udGV4
dCYgY29udGV4dCwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jaywgT1NSRXhpdCYgZXhpdCkKLXsKLSAgICBPU1JFeGl0U3RhdGUqIGV4aXRT
dGF0ZSA9IGV4aXQuZXhpdFN0YXRlLmdldCgpOwotCi0gICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgp
OyAvLyBUaGUgb3B0aW1pemluZyBjb21waWxlciBleHBlY3RzIHRoYXQgdGhlIE9TUiBleGl0IG1l
Y2hhbmlzbSB3aWxsIGV4ZWN1dGUgdGhpcyBmZW5jZS4KLSAgICB2bS5oZWFwLndyaXRlQmFycmll
cihiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAvLyBXZSBiYXJyaWVyIGFsbCBpbmxpbmVkIGZy
YW1lcyAtLSBhbmQgbm90IGp1c3QgdGhlIGN1cnJlbnQgaW5saW5lIHN0YWNrIC0tCi0gICAgLy8g
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoaWNoIGlubGluZWQgZnVuY3Rpb24gb3ducyB0aGUgdmFs
dWUgcHJvZmlsZSB0aGF0Ci0gICAgLy8gd2UnbGwgdXBkYXRlIHdoZW4gd2UgZXhpdC4gSW4gdGhl
IGNhc2Ugb2YgImYoKSB7IGEoKTsgYigpOyB9IiwgaWYgYm90aAotICAgIC8vIGEgYW5kIGIgYXJl
IGlubGluZWQsIHdlIG1pZ2h0IGV4aXQgaW5zaWRlIGIgZHVlIHRvIGEgYmFkIHZhbHVlIGxvYWRl
ZAotICAgIC8vIGZyb20gYS4KLSAgICAvLyBGSVhNRTogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBzaG91bGQgcmVtZW1iZXIgd2hpY2ggQ29kZUJsb2NrIG93bnMKLSAgICAvLyB0aGUgdmFs
dWUgcHJvZmlsZS4KLSAgICBJbmxpbmVDYWxsRnJhbWVTZXQqIGlubGluZUNhbGxGcmFtZXMgPSBj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlubGluZUNhbGxGcmFtZXMuZ2V0KCk7
Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJhbWVzKQotICAgICAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQo
KSk7Ci0gICAgfQotCi0gICAgYXV0byogZXhpdElubGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChleGl0SW5saW5lQ2FsbEZyYW1lKQot
ICAgICAgICBjb250ZXh0LmZwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdElubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAg
dm9pZCoganVtcFRhcmdldCA9IGV4aXRTdGF0ZS0+anVtcFRhcmdldDsKLSAgICBBU1NFUlQoanVt
cFRhcmdldCk7Ci0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAg
ICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxs
RnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggPSBjb250ZXh0LmZw
PENhbGxGcmFtZSo+KCk7Ci0gICAgfQotCi0gICAgdm0udG9wQ2FsbEZyYW1lID0gY29udGV4dC5m
cDxDYWxsRnJhbWUqPigpOwotCi0gICAgaWYgKGV4aXRTdGF0ZS0+aXNKdW1wVG9MTEludCkgewot
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNv
ZGVCbG9jayk7Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1
cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChi
eXRlY29kZUluZGV4KS5wdHIoKTsKLQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0
ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9j
a0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
Y29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSAgICAg
ICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkpOwotI2Vs
c2UKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlvbik7Ci0jZW5kaWYKLQotICAgICAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtLnRhcmdldElu
dGVycHJldGVyUENGb3JUaHJvdyA9ICZjdXJyZW50SW5zdHJ1Y3Rpb247Ci0gICAgfQotCi0gICAg
Y29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGp1bXBUYXJnZXQpOwot
fQotCi1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3Qg
b3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0JiBleGl0KQotewotICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZl
ID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEV4aXRLaW5kIGtpbmQgPSBleGl0Lm1f
a2luZDsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpOwotCi0gICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBp
biAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCBvc3JFeGl0SW5kZXgs
ICIgKCIsIGJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGtpbmQpLCAiKSB3
aXRoICIpOwotICAgIGlmIChhbHRlcm5hdGl2ZSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAg
ICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVy
KCksCi0gICAgICAgICAgICAiLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICIsIGFsdGVy
bmF0aXZlLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLAotICAgICAgICAgICAgIiwgb3B0
aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPm9wdGltaXphdGlvbkRlbGF5
Q291bnRlcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YUxvZygibm8gYWx0ZXJuYXRpdmUg
Y29kZSBibG9jayAoaS5lLiB3ZSd2ZSBiZWVuIGpldHRpc29uZWQpIik7Ci0gICAgZGF0YUxvZygi
LCBvc3JFeGl0Q291bnRlciA9ICIsIGNvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSwgIlxuIik7
Ci0gICAgZGF0YUxvZygiICAgIEdQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAg
ICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9n
KCIgIiwgY29udGV4dC5ncHJOYW1lKGdwciksICI6IiwgUmF3UG9pbnRlcihjb250ZXh0Lmdwcjx2
b2lkKj4oZ3ByKSkpOwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRhdGFMb2coIiAg
ICBGUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
RlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBGUFJSZWcgZnByID0g
RlBSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZnBy
TmFtZShmcHIpLCAiOiIpOwotICAgICAgICB1aW50NjRfdCBiaXRzID0gY29udGV4dC5mcHI8dWlu
dDY0X3Q+KGZwcik7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNvbnRleHQuZnByKGZwcik7Ci0g
ICAgICAgIGRhdGFMb2dGKCIlbGx4OiVsZiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYml0cyks
IHZhbHVlKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLX0KLQotLy8gSklUIGJhc2VkIE9T
UiBFeGl0LgotCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUs
IFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNv
dmVyeUluZGV4KQogICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0
LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljLCBqaXQtPm1fb3JpZ2luLndhc0hvaXN0ZWQpCiAgICAg
LCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKQEAgLTk1OCwxNSArNzAsMTggQEAgQ29k
ZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JS
ZXBhdGNoKCkgY29uc3QKIAogdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2Fs
bEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3Bl
cmFuZHMpCiB7Ci0gICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRB
cmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgor
ICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgVmlydHVhbFJlZ2lzdGVyPiBhbHJlYWR5QWxsb2NhdGVk
QXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4K
ICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2lu
ZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNb
aW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChp
bmRleCk7CiAKICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpcmVjdEFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZAogICAgICAgICAgICAgJiYgcmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKQogICAgICAgICAgICAgY29u
dGludWU7CiAKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvcklu
ZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCiAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKICAg
ICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKICAg
ICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewpAQCAt
OTg3LDcgKzEwMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAg
ICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLAorICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTk5
Nyw3ICsxMTIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVs
cGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAg
ICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksCisgICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSwKICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92
ZSgKQEAgLTEwMjMsNyArMTM4LDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50
cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKICAgICAgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAg
aml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAotICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRz
LmFkZChpZCwgb3BlcmFuZCk7CisgICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRk
KGlkLCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiB9CiAKQEAgLTE0NjYsMTYg
KzU4MSw4NCBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBW
TSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRp
b25IYW5kbGVyKCkpCiAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAorICAgIGlmIChleGl0Lm1fY29kZU9y
aWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBNYXliZSB3ZSBzaG91bGRuJ3QgdXNlIGEgcHJvYmUgYnV0IGZpbGxpbmcgYWxsIHRo
ZSBzaWRlIHN0YXRlIG9iamVjdHMgaXMgdHJpY2t5IG90aGVyd2lzZS4uLgorICAgICAgICBWZWN0
b3I8VmFsdWVSZWNvdmVyeT4gdmFsdWVzKG9wZXJhbmRzLm51bWJlck9mVG1wcygpKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kcy5udW1iZXJPZlRtcHMoKTsgKytpKQor
ICAgICAgICAgICAgdmFsdWVzW2ldID0gb3BlcmFuZHMudG1wKGkpOworCisgICAgICAgIFZNKiB2
bVB0ciA9ICZ2bTsKKyAgICAgICAgYXV0byogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5k
cy50bXBJbmRleCgwKTsKKyAgICAgICAgaml0LnByb2JlKFs9LCB2YWx1ZXMgPSBXVEZNb3ZlKHZh
bHVlcyldIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0byBhZGRT
aWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNp
emVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0
ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBhdXRv
JiByZWNvdmVyeSA9IHZhbHVlc1tpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0IHRoZSBGVEwgZG9lcyBhbmQgbWF0ZXJpYWxpemUg
YWxsIHRoZSBKU1ZhbHVlcyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBz
W2ldID0gSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlz
cGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFu
SW5HUFI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odG1wU2NyYXRjaFtpICsgdG1wT2Zmc2V0XSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNl
IENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBP
ZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RG
TW92ZShzaWRlU3RhdGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IENv
ZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IGNvbnRleHQuZ3ByPENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdp
biAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Cisg
ICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxD
YWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2Fs
bEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRl
Y29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAg
ICAgICAgIGFkZFNpZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAg
ICB9KTsKKyAgICB9CisKICAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5k
IHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgogCiAgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4
KTsKLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGlj
X2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRp
Y19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IGE3ZTU4NzhjMDcx
NzA4YTFkYTc2YzBiMGViNTRkNTRmMWEwNGViOGUuLjllOWJjZWE0ODFjMWQ2ODc3OTcyZjI1OWQ2
MmMxYTIzMDBiMmIxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCkBA
IC0xNTAsOCArMTUwLDYgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2Ugewog
CiAgICAgZnJpZW5kIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21waWxlT1NSRXhpdChD
YWxsRnJhbWUqKTsKIAotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVPU1JFeGl0KFByb2JlOjpDb250
ZXh0Jik7Ci0KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNo
YWJsZUp1bXBMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8T1NSRXhpdFB0clRh
Zz4gbV9jb2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgK
aW5kZXggMzEwOTYzZDg0NDM2YzUzMzI3ODRmMGEyOTJhNDljYmUxYjgyYTU5Yi4uMDAzYjYxOGNk
NDQwZTQwMGFiYWFjZWMwYWZiYzNjMTI0MzVkYjk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdEJhc2UuaApAQCAtNzAsNiArNzAsMTEgQEAgc3RydWN0IE9TUkV4aXRC
YXNlIHsKICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBHZW5lcmljVW53aW5kOwogICAgIH0KIAor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0V4aXRpbmdUb0NoZWNrcG9pbnRIYW5kbGVyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNo
ZWNrcG9pbnQoKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdK
SVRUeXBlIGppdFR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IDJmZjNlYThiNWZiYjZmM2Yy
NzIxZDUwMjQ0NTYyOThiMDg0ZDUxMTUuLmMzMjU1ZDliNDY4YzVmMDQ1ZjBiNzRhNDQ1MDZlYjYy
Y2U4NTBkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShE
RkdfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgor
I2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewpAQCAtMTQzLDYgKzE0Niw5IEBAIHZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5CiB7CiAgICAg
Y2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1
bms7CiAKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICBy
ZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpOworCiAg
ICAgdm9pZCoganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBAIC0yMzgs
NyArMjQ0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVk
IHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQuYmFzZWxp
bmVDb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
aykpOworICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0
LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2lu
OwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAm
JiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4t
PmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CkBAIC0z
MDUsMzMgKzMxMSwzNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKLSAgICAgICAgaml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2RlQmxvY2stPmJ5
dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsK
KyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRp
b25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwog
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
IGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNv
IHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFt
ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGlu
c3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwpCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0
YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3Rs
eSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAvLyBEb24ndCBuZWVkIHRv
IHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwg
Y2FsbHMKICAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleCgpKS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNv
ZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKICNlbHNlCi0gICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0
cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0
d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9y
RXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25z
KGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpLmJp
dHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICBqaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJs
eUhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgfQog
fQogCkBAIC0zODYsNyArMzkzLDExIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIGlmIChl
eGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBkZXN0aW5hdGlvbjsKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KQorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRy
VGFnPihjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUpOworICAgICAgICBlbHNlIAorICAg
ICAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJlZ1QyKTsKQEAgLTQwMiwxMCArNDEzLDE4
IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogI2VuZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBk
ZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4g
Y29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5t
X2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlv
bik7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gZGVzdGluYXRpb247CisgICAgICAgIGlmIChleGl0SW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFn
PihjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0
SW5kZXgpID09IGV4aXRJbmRleCk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGNvZGVCbG9j
a0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGV4aXRJbmRleCk7CisgICAgICAgIH0KIAotICAg
ICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgQVNTRVJUKGRlc3RpbmF0aW9uKTsKKworICAg
ICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAogICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9y
RXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFz
c2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5jcHAKaW5kZXggMjE2YzViYWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRiMDNkYzE5OS4uN2Rh
NmFmZDVjMjIxYzk3ZmY5M2Y0MDBjYjM0OTQ0NTRkNGQ0OTI0MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwCkBAIC0yMTA3LDcgKzIxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYg
KG1faGVhcC5mb2xsb3coYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBl
ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IG9wZXJhbmQg
PSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChp
KTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2Fu
RXhpdCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24t
PmRlZmF1bHRFZGdlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcEluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXgg
ZjM5YzE0YjlmMGE0NDg3ODlkNzcyZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0
YmY1ZWE2MGE2ZTY2NTIwZmUwNTE0NGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcEluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
SW5mby5oCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9w
SW5mbyhJbnRlZ3JhbFR5cGUgdmFsdWUpCiAgICAgICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1
aW50NjRfdD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlKSkpIHsgfQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9w
ZXJhbmQgb3ApIDogbV92YWx1ZShvcC5hc0JpdHMoKSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KICAgICBleHBsaWNpdCBPcEluZm8oVCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggNTBjYTAwYjAwYjk0ODhhMTAzMjg3MjYy
OGE5ZTJlZTg3M2YyYzM3OS4uY2YwOWQ4NzM5NzRhODU2MzNhMmVkYjY4Nzc2OTJkYjEwNzY4NDA3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0y
OTQ2LDE1ICsyOTQ2LDE2IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUlu
ZGV4T2ZWYWx1ZURvdWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVu
dHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlN
aW5pbXVtKQogeworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1l
bnREZXN0IH07CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1
ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0g
ICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rlcihm
aXJzdEVsZW1lbnREZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZh
cmFyZ3MoZ2xvYmFsT2JqZWN0LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIo
Zmlyc3RFbGVtZW50KSksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGggLSAxKTsKICAgICAKLSAg
ICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCi0g
ICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgp
OworICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aCAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVt
OyArK2kpCisgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZp
bmVkKCk7CiB9CiAKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50
MzJfdCBhLCBpbnQzMl90IGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRj
OTE1N2RiMzZhYjVhMGM2YWRjMi4uMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVl
MDliYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5z
ZXJ0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcApAQCAtNDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKLX0KLQogY2xhc3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBo
YW50b21JbnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJwaGFudG9tIGluc2VydGlvbiIpCkBAIC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gU2V0TG9jYWxzIGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVz
IHRvIGluc2VydCB0b28gZmV3IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG51bGxwdHIsIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJi
b3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFw
aCBiZWZvcmUgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVt
cCgpOwogICAgICAgICB9CkBAIC03Miw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAg
ICAgICAgIGhhbmRsZUJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246
XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIg
KzEwMCwyMiBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0g
MDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZI
aW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgWm9tYmllSGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgot
ICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51
bGxwdHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMTM0LDM4ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAg
ICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlVwZGF0aW5nIGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9j
aCk7CiAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVw
b2NoKGN1cnJlbnRFcG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5
S2lsbGVkOworICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAg
ICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6
ICIsIHJlZywgIlxuIik7CisgICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiICAgIEtpbGxlZCBvcGVyYW5kOiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAg
IC8vIEFscmVhZHkgaGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChy
ZWcgPT0gYWxyZWFkeUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJl
YWR5S2lsbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIg
ICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVy
YW5kKHJlZyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAg
ICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAg
ICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVk
IGluIHRoaXMgYmxvY2suIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRy
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBp
bnNlcnQgYSBQaGFudG9tIGlmIHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxh
c3QKICAgICAgICAgICAgICAgICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0
IGV4aXQuCi0gICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVu
dEVwb2NoKQorICAgICAgICAgICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJl
bnRFcG9jaCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAg
IE9wZXJhbmQgIiwgb3BlcmFuZCwgIiBoYXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIEluc2VydGluZyBQaGFudG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50
b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9j
ay0+YXQobGFzdEV4aXRpbmdJbmRleCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1l
YW5zIHRoYXQgd2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVm
IGNvdW50LgogICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3
OSwxNCArMTgwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBu
ZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBi
ZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzS2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlL
aWxsZWQgPSBsb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2Fs
KSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJh
bmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tp
bGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCBhNThlMTc5NjU2MGZjNmQ5NGJiNDYzZDE0Mjk4
ODZlMDc4ZjBhZmNjLi5mNWYwOTZjOGViNTZkNDVmYTk4OWJiNDkzNmY3MmQ0NDgxOTVhMTY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2Ji
ZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHBy
b3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
KTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFk
eSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAg
ICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0
ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZh
bHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFs
V3JpdGUsIGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAg
Ci0gICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgp
LnZhbHVlMzIoKSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFu
ZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5j
dG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAg
IGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50
b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2Uy
NGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5
NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5k
bGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDgwNTA1MTZjYmZlY2M4
NGZlMTk1ODQyOGEwY2Y4N2NkNTRlZTExN2IuLjIyMWM1MDFkYmQxNGMwNDU3MmE3ZmUxZDE5YmU2
ZDMxOTdjMTNmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzY1LDYgKzEzNjUsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGlu
dDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAg
ICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMy
ZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5mZDYxMjNmYTlmMWQ1MjllNGMyZWUyYzBlN2VkZjYz
ZjA3Zjc4ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQ
dXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAv
LyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9y
IG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRh
dGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBt
X2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAg
ICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAg
ICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8
Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAg
IGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFti
bG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZh
bHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3Bl
cmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBs
aXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29s
IGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
T3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFs
UmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxl
ciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3Bl
cmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIg
PSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUg
YXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAg
YXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExv
YWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9w
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFj
ayB8fCBvcCA9PSBWYXJhcmdzTGVuZ3RoIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZv
cndhcmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAg
ICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwog
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0
ZXMpCisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQog
ICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJl
ZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIs
IG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsy
NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0
aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlk
YXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBub2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3Ao
KSA9PSBQdXRTdGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3Bl
cmFuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0
aW5nIGZsdXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxT
dGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5r
IGEgUHV0U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2Vk
T3BlcmFuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZs
dXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8g
d3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgp
ID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5v
cCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFu
ZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3Jp
dGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIs
IExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBM
YXp5Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMx
MywxMyArMzEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29u
c2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSks
ICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3Ip
LCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtp
XSwgIiBtZXJnZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZl
cnJlZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4i
LCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVm
ZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVy
cmVkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiBvcGVyYW5kVG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rl
cj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFu
ZDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0
SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwot
ICAgICAgICAgICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1Zhcmlh
YmxlKCk7CiAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0g
dmFyaWFibGU7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZh
cmlhYmxlLT5pbmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1Np
bmsuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6
CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUu
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAg
ICAKICAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAo
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4g
Tm9kZSogewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFu
ZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAo
REZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBm
b3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5v
ZGUoU3BlY0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0
KCkpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmls
bChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1h
cHBpbmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3Bl
cmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ss
IHZhcmlhYmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAi
LCBtYXBwaW5nLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxj
dWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkg
ewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJh
bmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwg
cGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
REZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAi
LCBvcGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAg
ICAgfQpAQCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQg
PSBkZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAg
ICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJE
ZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSog
ZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAi
IGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQo
b3BlcmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0
YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAg
ICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxv
Y2FsKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQu
b3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNy
ZXRlKGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0Zs
dXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0Zs
dXNoLCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBu
byBkZWZlcnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlz
IHdoYXQgaXMgc3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBrZWVwIHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcu
b3BlcmFuZChkYXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFw
cGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtNDcyLDIwICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZl
IHN0b3JlZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0
LCBkYXRhLT5mb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVy
YW5kKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVm
YXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHko
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSkgPSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDog
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3Rh
Y2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9y
ICIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcg
KzUxMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
SGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNv
bmRpdGlvbmFsIHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBU
aGlzIG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMg
bWVhbnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1
dFN0YWNrcyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZv
cndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAg
ICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVI
YW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExh
enlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5
Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fSB9CiAgICAgICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBo
aXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3Zhcmlh
YmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVh
dGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
Ii0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2td
Lm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNr
IHNpbmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAKaW5kZXggNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MC4uMDRmMmMw
Y2QzOTk4YjE4MWI5ZTk4YmJhNDI3MDQ4ODNiNDBkMmQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZh
cmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChj
aGlsZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9k
ZSwgY2hpbGROb2RlKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtz
c2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Ly8gUHJ1bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFu
IGNvbXBpbGUgdGltZXMuCi0gICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAg
ICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlh
YmxlLT5vcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmICghaGVhZE5vZGUpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVudCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpKSwgIiAtPiAiLCBub2RlLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtMzEzLDExICszMTMsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NB
SW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBo
aURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gcGhpRGVmLT52YWx1
ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9u
ZSwgTW92SGludCwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksCi0gICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURl
Zi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJpYWJsZS0+b3BlcmFuZCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3JpZ2luLmV4aXRP
SykKQEAgLTMzNyw3ICszMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZI
aW50OiB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5v
ZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtl
ZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4u
ZXhpdE9LID0gZmFsc2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDksMTkgKzM0OSwxOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYgTm9kZUlz
Rmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0
YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0Rh
dGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwo
KSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5y
ZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6
ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hp
bGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJs
ZS0+b3BlcmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBub2RlOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtMzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBs
YWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVw
bGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIg
d2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM4NSw3
ICszODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KS0+ZGVmYXVsdEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2
YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2Uo
KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MjUsMTIgKzQyNSwxMiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCiAgICAgICAg
ICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0
KTsKIAotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5n
IFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNp
bG9uIGZvciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9y
T3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2lu
dCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCmluZGV4IDE1YmU0MmFjM2I2OWFmNGRjNTgzOGExOGRmMzlkMDc4Y2EzMTY5
MTkuLjlhMzJkNjdhNTg3NDI5NTg1YjM3ZDlhZTFhNmNlYmM1ZmM5NjJjZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zMjIsNiArMzIyLDcg
QEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGlu
ZWRDYWxsZXI6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoK
ICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggYjVhMTFjNTFlZjEwY2Y3YTZiMjMxNzJkMmQ4
YmY4ZjY3NWUwNTJiZC4uYmU1ODVkNWQ0M2M5Mjc3ODc5Mjk4M2IwOTMzZjVhMjYyODUwMzJiOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
QEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50
KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAg
ICAgbm90aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRM
b2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojpt
b3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKEFib3J0UmVhc29uIHJlYXNvbikKQEAgLTE4MjUs
NyArMTgyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQog
ICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAoc2l6
ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
IGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChp
KTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxl
c0F0SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7IC8v
IE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4MzUsMTEgKzE4MzUsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAgaWYg
KCFub2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8g
cmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2
YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2co
Ci0gICAgICAgICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpLAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOworICAgICAgICBERkdfQVNTRVJU
KG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAgICAgICAgbV9zdHJlYW0tPmFw
cGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdp
bigpOwpAQCAtMTkxOSw3ICsxOTE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1
bWVudFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgp
LnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJn
dW1lbnQoKSk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVT
b3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAg
IApAQCAtNzM0MSw1NCArNzMzOSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0
RnVuY3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9kZSkKIHsKICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFs
dWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1
bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJn
dW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgfQor
ICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFy
Z3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBhcmd1bWVudHNSZWdz
ID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB1
bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwot
ICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwot
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBHUFJUZW1wb3JhcnkgYXJnQ291
bnRJbmNsdWRpbmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNH
UFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5sb2NrKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdl
IHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNh
ZmUKLSAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0
IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAvLyBzdGFuZHBv
aW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmlu
dG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdU
aGlzR1BSID0KLSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGludDMyUmVzdWx0KGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQ
Uik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkK
K3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
KworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVn
cyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhp
c0dQUikpOworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgp
LCBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywK
KyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBzcGVjdWxh
dGlvbkNoZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRn
ZSgpLCBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwK
LSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxp
bWl0KSkpOwogCi0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9m
ZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRh
dGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1p
bmltdW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2Rl
KTsKQEAgLTczOTgsMTcgKzczOTcsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZv
cndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWU7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUg
PSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAg
IGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
CiAgICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
YXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxl
bmd0aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQ
UlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BS
ID0gYXJndW1lbnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAu
cmVncygpOwotICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVu
Z3RoR1BSLCAvKiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAgIAorICAgIG1faml0Lm1vdmUo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAgICAgaWYgKGRhdGEtPm9m
ZnNldCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxl
bmd0aEdQUik7CiAgICAgICAgIApAQCAtNzU2Nyw3ICs3NTY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGF1dG8q
IGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUo
KTsKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCiAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgIGtub3duTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIGtub3duTGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxKTsKICAgICAgICAgbGVuZ3RoSXNLbm93biA9IHRydWU7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAga25vd25MZW5ndGggPSBVSU5UX01BWDsKQEAgLTEyNDQ3LDcgKzEyNDQ4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KE5vZGUqIG5vZGUpCiAgICAgaWYgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
bm9kZS0+YXJndW1lbnRzSW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgIGFyZ3VtZW50Q291bnRS
ZWdpc3RlciA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIGVs
c2UKLSAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOworICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIg
PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50OwogICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHQuZ3ByKCkpOwog
ICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggYzY0Zjk3OGFkZjg1ZmJmMjc3
YmJhNzkyMTYwNjRmNDI4MWI4ZDVhOS4uMDNkNDgzNWJmNGI3YThkZTA5MzllZmNmYTM3MDIyYjQ2
MjY5MDk0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaApAQCAtMTM5Myw2ICsxMzkzLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVNldEZ1
bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlVmFy
YXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjY5LDE1ICsxNjcwLDE2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7CiAg
ICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5
dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQp
CisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVn
LCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VSVCghYnl0ZWNvZGVSZWcu
aXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQo
KSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojpz
ZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50Tm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5sb2NhbCgpLCB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAgIHJlY29yZFNldExvY2Fs
KHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsK
ICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA2N2Iw
ZTBiMzcwNGNhNTlhODkwYWM1OWM4NmRiZDBkMmEwNTZkYjgxLi4wYWYzZjE3MTgxNTQxMGQ5YmVm
NjRhMjBmZDA5MDVkZGMwM2U2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRo
ZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFy
aWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBh
dHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJp
ZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRM
b2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNv
cmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lz
dGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTM4MjQsNiArMzgyNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBi
cmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJn
c0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFy
YXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKaW5kZXggM2U2MzhjOWI5NDllYjVlYTI2YTMxMDVkZGI4YWZlNzY2MjE2MzM0NC4uN2IxZTI1
N2Q2MGQ0Njg0NWYxYTk0MGZmNmRmZGM5M2FjODZjN2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xOTM2LDcgKzE5MzYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAogICAgICAgICAv
LyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQg
dGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4g
ZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVu
bGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAg
ICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1
YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDY0LDYgKzQ0NjQsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY29tcGls
ZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCmluZGV4IGJlZWM4NmFjN2E3ZDMzM2UzOTY3OWUyNjc1NTkwNzRlNDY0YzliODIu
LmQ3NjI4ZTVhMTE3Y2UzM2RlMWQxNjE1ZjYwNDI3NTIyMDQ3N2EyMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcApAQCAtNTEsNyAr
NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFibGUgYXMgYmVpbmcgInVz
ZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExvY2FsLCBHZXRMb2NhbCwK
ICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAgIAotICAgICAgICBCaXRW
ZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gdXNlZE9wZXJhbmRzKDAs
IGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxzZSk7CiAgICAgICAgIAog
ICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIu
CiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CkBAIC02NywyMyAr
NjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAg
ICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
dXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgdHJ1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdXNl
ZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
dXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFj
ayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgogICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZz
ZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQu
b2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQo
KSArIGkpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNo
b3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1
cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTIsOSArOTEsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBj
YXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogc3Rh
Y2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay0+
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxvY2FsLnRvTG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHN0YWNrLT5vcGVy
YW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0ZXI7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAotICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFu
ZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwg
dHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXpl
KCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVh
bFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnQpLm9mZnNldCgpICsKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZExvY2Fs
cy5zaXplKCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZE9wZXJh
bmRzLnNpemUoKSk7CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsID0gY29kZUJs
b2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCF1c2VkTG9jYWxzLmdldChpKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdXNlZE9wZXJhbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXVzZWRP
cGVyYW5kcy5nZXRGb3JPcGVyYW5kSW5kZXgoaSkpIHsKICAgICAgICAgICAgICAgICBhbGxvY2F0
aW9uW2ldID0gVUlOVF9NQVg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CkBAIC0xMzUsNDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIXZhcmlh
YmxlLT5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgewotICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5sb2NhbCgpOwor
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUtPm9wZXJhbmQo
KS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGxvY2FsID0gdmFyaWFibGUt
PmxvY2FsKCkudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYgKGxvY2FsID49IGFsbG9jYXRpb24u
c2l6ZSgpKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUtPm9wZXJhbmQo
KTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgo
b3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gYWxsb2NhdGlvbi5zaXplKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChh
bGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIGlmIChhbGxvY2F0aW9u
W2luZGV4XSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9j
YXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIHZhcmlhYmxlLT5vcGVy
YW5kKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIGlmICgh
ZGF0YS0+bG9jYWwuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxv
Y2FsID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5vcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90
PihkYXRhLT5sb2NhbC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+bG9jYWwu
dG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgeworICAgICAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2NhbCgpKSA+PSBhbGxvY2F0
aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCldID09IFVJTlRfTUFYKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKGFsbG9jYXRpb24sIGRh
dGEtPmxvY2FsKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbih1c2Vk
T3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAg
ICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2ln
bihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CisgICAgICAgICAg
ICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxv
Y2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CiAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIElubGluZVZhcmlhYmxlRGF0YSBkYXRhID0gbV9ncmFwaC5tX2lubGluZVZh
cmlhYmxlRGF0YVtpXTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCi0gICAgICAgICAgICAg
ICAgICAgIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ciA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkp
OworCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0tOykgewogICAgICAgICAgICAg
ICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRp
b25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9zaXRpb25TdGFydCArIGFy
Z3VtZW50XTsKQEAgLTIxNSw4ICsyMTUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFy
Z3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRh
LT5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBh
c3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBh
bGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMzEs
MTcgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZpcnR1YWxSZWdp
c3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHNyYykKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IE9wZXJhbmRzPGJv
b2w+JiB1c2VkT3BlcmFuZHMsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBz
cmM7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2FsKCldOwotICAgICAgICAg
ICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworCisgICAg
ICAgIHNpemVfdCBvcGVyYW5kSW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZEluZGV4KG9wZXJh
bmQpOworICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW29wZXJhbmRJ
bmRleF07CisgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCmluZGV4
IGViM2RkYmQ3MTg0M2Q0OWY2NWIzMmNlOTYxZmY5YTA3MTJhMWEwNTEuLmI0OGM2ZjdmMTkwOTc3
NWQ3Mjc5Nzk5MWYzZmI5ODNkZTYzOGE3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApAQCAtMjg1LDE3ICsy
ODUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRyOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGxvY2FsID0gbV9ub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
bV9ub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fYmxvY2stPmF0KGkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwgJiYgbm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHNldExvY2FsID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2Vz
T3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIGxvY2FsKSkpCisgICAg
ICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhl
YXAoU3RhY2ssIG9wZXJhbmQpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCA2YWNh
ZmJmM2JmNTM1Yzk2OTZiZTY0OGEyMDcwYjZlZTZmNGY4YmY5Li5mMWIxZmY2NGRkYTUzY2Y0NTk2
NzA0ZWViODMxNWYxNmJmYmU5MDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwCkBAIC00MCwxNCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5r
R2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwotICAg
IGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwgJnZtKTsKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsK
LX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KG51bGxw
dHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKaW5kZXggMDVhNTBhNTRiMjVk
NTFkYmNiMTg1OGZlN2FhZGNhNDg2ODIwNWQ5ZS4uOGI1YzNmMDFhNDg1MjBiN2FhYWFhZWJhZmY5
M2MzYjI2Y2NkOTg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCkBAIC0z
NSw3ICszNSw2IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
c3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDYwZmJmODk5
NWZkYWQ3ODI1NmEwNjdiODljNGVjNWY1NzEzZjFkN2UuLjc5NjY1ZjhhYjg1ZmMxMTE2ZDYzOWZi
M2Q4YjU1ZjZlZDkwMjY4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNoZWNrT3AgPSBDaGVja1N0cnVjdHVyZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcGVjQ2VsbENoZWNrICYgU3BlY0VtcHR5KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
Pm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsb2NhbCAtIChpbmxp
bmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkpID09IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhlIGNhbGwgZW50cnlwb2ludCB3
b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCkBAIC0xNjgsOCArMTY4LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9PSBub2RlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlh
YmxlLT5vcGVyYW5kKCkpID0gZ2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2NhbCgqYmxvY2ssIGluZGV4SW5C
bG9jaywgdmFyaWFibGUsIGdldExvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC00NDYs
NyArNDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9
IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAppbmRleCA5ZWU1ZTAwNzQwOWRmNTI5NGJmY2Y1MWI3NzZlYjhjZmNm
NDdjNTBlLi5hMmQ2Y2ZjMjQ5MzRlM2RjM2M0NmMwZTI0ZDRkYTFjZTFiMGNmNWI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtNDgzLDcgKzQ4Myw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5waGlzW2ldOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOwog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQaGkpOwotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAg
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUp
OyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9y
ZSBmb3JtIGFyZSBpbnZhbGlkLgogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQpAQCAtNTE5LDEwICs1MTks
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJsb2NrLT5wcmVkZWNlc3NvcnNba107CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRlY2Vzc29yc1trXSks
IHByZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHBy
ZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBo
aSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vz
c29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZh
aWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jaywg
YmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHBy
ZXZOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJldk5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAtNTMzLDExICs1MzMsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJl
ZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Bl
cmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnRNYXliZQpAQCAtNTQ3LDE5ICs1NDcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBi
bG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnBy
ZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5v
ZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE9wZXJh
bmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgICAgICAgICBPcGVyYW5k
czxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICAgICAgT3BlcmFuZHM8
c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucyhP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmFjY2Vz
c2VzU3RhY2sobV9ncmFwaCkpOwpAQCAtNjY4LDI0ICs2NjQsMjQgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291bnRzLmdldChub2RlKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0g
bm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayks
IGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9PSBub3RTZXQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgISFub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2sp
LCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+
Y2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsK
KyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVy
YW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZp
cnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpICE9IG5vdFNldCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3Bl
cmFuZCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBzZWNvbmQgR2V0TG9jYWwg
Zm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2sgaWYg
d2UgaGFkIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGZvciB0aGF0IGxvY2FsLgotICAgICAgICAg
ICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90
U2V0OwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAg
IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dE1heWJlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk2OCwyNiArOTY0LDI2IEBA
IHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBlZGdlKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
T3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIGlmICgh
YmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gbnVsbCBCbG9jayAiKTsK
KyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBudWxsIEJsb2NrICIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBC
bG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwg
KmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywg
QmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBC
YXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKICAg
ICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAi
IC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGlu
IEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2Rl
KQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2Rl
KiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIGxv
Y2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAgIGRhdGFMb2cocHJldk5v
ZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBCYXNp
Y0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDI2ZjAzMjlkNTQzMDQxNTcyMDVlNzgx
NDk4YzY0ZTBiZTk5MzIxMTAuLjk1Y2RjOTJlMmMyNDEwYTM1YzAxMzEzMWZkYzNiN2NjYzI4Mjll
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAg
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3Jh
cGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtICE9
IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5nOlxuIik7CiAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJhcmUu
IFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBtYW5uZXIuCiAgICAgICAgIAog
ICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2FuZGlkYXRlTm9kZUluZGV4KTsK
LSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBjYW5k
aWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGVsaW1p
bmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1bWVudHMgaWYgdGhlIGJ1dHRl
cmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
YXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51
c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBl
IGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IGNh
bmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkuaXNUbXAoKSwgIldlIGRv
bid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0byBhbiBhcmd1bWVudHMgb2Jq
ZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZExv
Y2FsKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fscy5hcHBlbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxzLmNv
bnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgpAQCAtMTQwLDEzICsxMzks
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGlmIChzYXdFc2NhcGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpCiAgICAgICAg
ICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0xNTcsNyArMTU3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICAg
ICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hpbGQyKCkgPT0gY2FuZGlk
YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2
Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlk
YXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xvYWRlZEZyb20oKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjYsNyArMjI2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRHZXRCeU9mZnNldCkgewogICAgICAg
ICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlkYXRlQnV0dGVyZmxpZXMpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBidXR0ZXJmbHkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJ1dHRlcmZseSBlc2NhcGVk
IGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAgICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQg
aW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBb
Jl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsaW5nICIsIG9wZXJhbmQs
ICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMp
LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
bGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fscy5sYXN0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVtb3ZlTGFzdCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBAIC0yNDcs
NyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RVc2VySW5kZXgsICIsICIsIGJs
b2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSdy
ZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdlZW4gdGhlIGNhbmRpZGF0ZSBh
bmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2MywxNiArMjYzLDE2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAgICAgICAgICBpZiAoYXJn
dW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPmxvY2FsKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9w
ZXJhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4MCw4
ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5sb2NhbCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNh
bmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2Ug
YXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFuZCgpKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
SW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExLDcgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtlIHRoaXMgd29yay4KLSAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgV2lsbCBkbyBmb3J3YXJk
aW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIApAQCAtMzQxLDgg
KzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
Y2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5kaWRhdGUpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRl
bnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBj
YW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBj
YW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0g
Y2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2MmFlZDRjMzQzMmVhNWE4
MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNjODhhODdjN2QxNzlkOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcApA
QCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBWYXJp
YWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgOiBtX2xvY2FsKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkp
Ci0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9m
bGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQpAQCAtNDUsMTAgKzQ0LDEw
IEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICBjbGVhclZv
dGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1
YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwobG9jYWwpCi0gICAgLCBtX3ByZWRpY3Rp
b24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShPcGVy
YW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3Vt
ZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAg
ICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3goZmFsc2UpCiAgICAgLCBt
X3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBAIC04Nyw3ICs4Niw3IEBAIGJv
b2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1Zv
dGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNpbGl0eSBmb3IgYXJndW1l
bnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZvciBhcmd1bWVudHMuCi0g
ICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVu
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIC8vIElmIHRoZSB2YXJp
YWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0aGlzIGRvZXNuJ3QKQEAgLTEy
MSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3Vs
ZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgpKTsKICAgICAgICAgCi0g
ICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQorICAgIGlm
IChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQogICAgICAgICB8
fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgpKQogICAgICAgICByZXR1
cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9ybWF0U3RhdGUsIE5vdFVz
aW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3ICsxNzUsNyBAQCBib29sIFZhcmlhYmxl
QWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBhcmd1bWVudHMuCi0gICAgaWYg
KG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlIGFyZ3VtZW50LWF3YXJlIHBy
ZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5saW5lZCBvciBtYWNoaW5lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgK
aW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRhMjg0ZS4uYmUyZmI1NDAx
MzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC00OCwxMiArNDgsMTIgQEAg
Y2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vz
c0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJsZUFjY2Vzc0RhdGEpOwog
cHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgIFZhcmlhYmxlQWNjZXNzRGF0
YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5k
KTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFu
ZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwpOwot
ICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmFuZCA9PSBmaW5k
KCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7CiAgICAgfQogICAgIAog
ICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAgLTIwOCwxMCArMjA4LDEwIEBA
IHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwg
YW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUg
YWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1f
bG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2FsOwogICAgIFNwZWN1bGF0
ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlwZSBtX2FyZ3VtZW50QXdhcmVQ
cmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBt
X21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsKIAogICAgIGJvb2wgbV9zaG91
bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudC5jcHAKaW5kZXggMjhlNDM3ZmQ1MWZlYTQ5NjllYjQ4ZWNmMGMwNTA4ZjBhMzdkZjgzNS4u
NWIyYzFlZTkwOWI1NDhmMzk4MjcwYzQzYmQzNmVkNzJlM2Y5Y2ZiYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkBAIC01OSwxMSArNTksMTEg
QEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAg
ICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAi
LCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7CisgICAgICAgIG91dC5wcmludCgiTW92SGlu
dCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIlNldExv
Y2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6IiwgYnl0ZWNv
ZGVSZWdpc3RlcigpLAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJl
Z2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAogICAgICAgICAgICAgIiwgIiwg
ZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dC5oCmluZGV4IDIwNjBkNGEyZmQyNzIyM2RkNmY2OTljNmRiYWQ2ZDIyNDY3Yzk4MzQuLmMxZjU0
YmE0ZmJkY2FhYTVhMWQ5YTVlZGMxYWM0ODEzOGQzNGUzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC02OCw2ICs2OCwxMCBAQCBlbnVtIFZh
cmlhYmxlRXZlbnRLaW5kIDogdWludDhfdCB7CiB9OwogCiB1bmlvbiBWYXJpYWJsZVJlcHJlc2Vu
dGF0aW9uIHsKKyAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uKCkgCisgICAgICAgIDogb3BlcmFu
ZCgpIAorICAgIHsgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CkBAIC03Niw3ICs4MCw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gewogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgIH0gcGFpcjsKICNl
bmRpZgotICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiB9Owog
CiBjbGFzcyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Miw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAg
ICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJl
c2VudGF0aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgICAg
IHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIGV2ZW50
Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAg
ICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTgxLDEzICsxODUsMTMg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2Nh
bCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIg
bWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVP
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAg
ICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hp
Y2g7CiAgICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVnLm9mZnNldCgpOwogICAg
ICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXBy
ZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAgIHJl
cHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAgICAgICAgIGV2ZW50Lm1f
a2luZCA9IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1h
dDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAtMTk1LDEzICsx
OTksMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQogICAgIAotICAg
IHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgVmlydHVhbFJlZ2lz
dGVyIGJ5dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZp
ZWRJRCBpZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAgICAgIFZhcmlhYmxlRXZl
bnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBp
ZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247
Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQo
KTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlUmVnOwogICAgICAg
ICBldmVudC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBX
VEZNb3ZlKHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRhdGlvbiA9IFdURk1vdmUo
cmVwcmVzZW50YXRpb24pOwpAQCAtMjY1LDEzICsyNjksMTMgQEAgcHVibGljOgogICAgIFZpcnR1
YWxSZWdpc3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7Ci0gICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAg
ICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKTsKICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnaXN0ZXIo
KSBjb25zdAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0gTW92SGludEV2ZW50KTsK
LSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9uLmdldCgpLnZp
cnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5k
OwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZ2lzdGVyKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwCmluZGV4IDQ1MjZkMzliYjA5NGM0Yjg2NmU2N2VkM2UyZWUxYjQ4OTZhYmI3MjYu
LjhjZjcwODA0MDNhOGVmZmQ5YjIyMWEzNWFmOGQyMWRlMzJiNWRkYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApAQCAt
NDIsNyArNDIsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OmxvZ0V2ZW50KGNvbnN0IFZh
cmlhYmxlRXZlbnQmIGV2ZW50KQogewogICAgIGRhdGFMb2dGKCJzZXEjJXU6Iiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNpemUoKSkpOwogICAgIGV2ZW50LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsK
LSAgICBkYXRhTG9nRigiICIpOworICAgIGRhdGFMb2dMbigiICIpOwogfQogCiBuYW1lc3BhY2Ug
ewpAQCAtMTE5LDEwICsxMTksMTIgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVj
b25zdHJ1Y3QoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCiAgICAgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmRzPFZh
bHVlUmVjb3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMsIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bh
bj4qIHVuZGVmaW5lZE9wZXJhbmRTcGFucykgY29uc3QKIHsKKyAgICBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkRGR0pJVCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9j
ay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CisgICAg
dW5zaWduZWQgbnVtVG1wczsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGludmFsaWRJ
bmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICB1bnNpZ25l
ZCBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICBib29sIGZpcnN0VW5kZWZpbmVk
SXNBcmd1bWVudCA9IGZhbHNlOwpAQCAtMTMwLDM3ICsxMzIsNDIgQEAgdW5zaWduZWQgVmFyaWFi
bGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgYXV0byBmbHVzaFVuZGVmaW5lZE9wZXJh
bmRTcGFuID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9
PSBpbnZhbGlkSW5kZXgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGludCBmaXJzdE9m
ZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChmaXJzdFVuZGVm
aW5lZCkub2Zmc2V0KCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVz
LnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkgLSAxKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IGZp
cnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChmaXJzdFVuZGVmaW5l
ZCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CisgICAgICAgIGludCBsYXN0T2Zmc2V0ID0g
dmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpIC0gMSkudmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCk7CiAgICAgICAgIGludCBtaW5PZmZzZXQgPSBzdGQ6Om1pbihmaXJzdE9mZnNldCwg
bGFzdE9mZnNldCk7CiAgICAgICAgIHVuZGVmaW5lZE9wZXJhbmRTcGFucy0+YXBwZW5kKHsgZmly
c3RVbmRlZmluZWQsIG1pbk9mZnNldCwgaSAtIGZpcnN0VW5kZWZpbmVkIH0pOwogICAgICAgICBm
aXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICB9OwogICAgIGF1dG8gcmVjb3JkVW5k
ZWZpbmVkT3BlcmFuZCA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICAvLyBXZSB3YW50IHRv
IHNlcGFyYXRlIHRoZSBzcGFuIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSBzcGFuIG9mIGxvY2FscyBl
dmVuIGlmIHRoZXkgaGF2ZSBhZGphY2VudCBvcGVyYW5kcyBpbmRleGVzLgotICAgICAgICBpZiAo
Zmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVu
dCAhPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKSkKKyAgICAgICAgaWYgKGZpcnN0VW5k
ZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFs
dWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAg
ICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKGkpOwogCiAgICAgICAgIGlmIChmaXJzdFVuZGVm
aW5lZCA9PSBpbnZhbGlkSW5kZXgpIHsKICAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkID0gaTsK
LSAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5p
c0FyZ3VtZW50KGkpOworICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFs
dWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCk7CiAgICAgICAgIH0K
ICAgICB9OwogCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBudW1WYXJpYWJs
ZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUp
LT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwotICAgIGVsc2UKKyAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgbnVtVmFyaWFibGVz
ID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOworICAgICAgICBudW1UbXBzID0g
Y29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKKyAgICB9
IGVsc2UgewogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCk7CisgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1w
cygpOworICAgIH0KICAgICAKICAgICAvLyBDcmF6eSBzcGVjaWFsIGNhc2U6IGlmIHdlJ3JlIGF0
IGluZGV4ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1lbnQgY2hlY2sKICAgICAvLyBm
YWlsdXJlLCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJlIGFscmVhZHkgc2V0IHVwLiBU
aGUgcmVjb3ZlcmllcyBzaG91bGQKICAgICAvLyByZWZsZWN0IHRoaXMuCiAgICAgaWYgKCFpbmRl
eCkgewotICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICAgICAgLy8gV2Ug
ZG9uJ3QgaW5jbHVkZSB0bXBzIGhlcmUgYmVjYXVzZSB0aGV5IGNhbid0IGJlIHVzZWQgeWV0Lgor
ICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCAwKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRG
b3JJbmRleChpKSksIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVy
aWVzLm9wZXJhbmRGb3JJbmRleChpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdEpTKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVtVmFyaWFibGVzOwogICAgIH0KQEAgLTE3MSwx
MiArMTc4LDEzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAog
ICAgICAgICBzdGFydEluZGV4LS07CiAgICAgCiAgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2Nr
LXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJh
bmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbnVtVmFyaWFibGVzKTsKKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJj
ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyBpLS07KQogICAgICAg
ICBvcGVyYW5kU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgSGFz
aE1hcDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGluZGV4OyArK2kpIHsKICAg
ICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsKKyAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZXZlbnQgIiwgZXZlbnQpOwogICAgICAgICBzd2l0
Y2ggKGV2ZW50LmtpbmQoKSkgewogICAgICAgICBjYXNlIFJlc2V0OgogICAgICAgICAgICAgLy8g
bm90aGluZyB0byBkby4KQEAgLTE5OCwyMSArMjA2LDIzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZl
bnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMu
aGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgIG9w
ZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNv
dXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3Bl
cmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNl
dE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50OgotICAgICAgICAgICAg
aWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkK
LSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2Rl
UmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lz
dGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3Vy
Y2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5k
U291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFG
b3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCBzb3VyY2VzOiAiLCBvcGVyYW5k
U291cmNlcyk7CiAgICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMh
Ci0gICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFsdWVSZWNvdmVyaWVzID0g
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKICAgICAg
ICAgaWYgKHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKQEAgLTIzMCw2ICsyNDAs
NyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAg
TWluaWZpZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlkKCkpOwogICAgICAgICBNaW5p
ZmllZEdlbmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5mb3MuZ2V0KHNvdXJjZS5pZCgp
KTsKICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkpLCAi
IGlzIGRlYWQuIik7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292
ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBS
ZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgICAgICAgICAgcmVjb3JkVW5k
ZWZpbmVkT3BlcmFuZChpKTsKQEAgLTIzNyw2ICsyNDgsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0cnlUb1Nl
dENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBub2RlKSkgeworICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVSZWNvdmVyaWVzLm9wZXJh
bmRGb3JJbmRleChpKSwgIiBpcyBjb25zdGFudC4iKTsKICAgICAgICAgICAgIGlmIChzdHlsZSA9
PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpIHsKICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBub2RlLT5jb25zdGFudCgpID09IGpzVW5kZWZpbmVkKCkp
CiAgICAgICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQoaSk7CkBAIC0yNjYs
NyArMjc4LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9Ci0gICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihpbmZvLnUudmlydHVhbFJlZyksIGluZm8uZm9ybWF0KTsKKyAgICAgICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhpbmZvLnUub3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKSwgaW5mby5mb3JtYXQpOwogICAgIH0KICAgICBpZiAoc3R5bGUgPT0gUmVjb25z
dHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRT
cGFuKG9wZXJhbmRTb3VyY2VzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCmluZGV4IDAxNTczMDA3ZWRkZGQ3MGYzMWQx
N2FjMGQ5OWY3OGViZjVlYTZlYmMuLmU5ZTQzYWJmZWM0ODVmZWM3ZTY2MzE1MWMxYzIyZWM1MTg5
NzQxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5oCkBAIC00Miw5ICs0MiwxMiBAQCBzdHJ1Y3QgVW5kZWZpbmVkT3BlcmFuZFNw
YW4gewogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6IHB1YmxpYyBWZWN0b3I8VmFy
aWFibGVFdmVudD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3QgVmFyaWFibGVFdmVudCYgZXZl
bnQpCiAgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGxvZ0V2ZW50KGV2
ZW50KTsKICAgICAgICAgYXBwZW5kKGV2ZW50KTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggNzgxYjcxZTY5MjQzODI4
NjQ4OTdlZmY3ZjlkZTY4ZTRlZTRlYmYxZC4uMzJjYmMxMDc2ZGU1OWRhYTRhNzI3ZGFjN2Q3NWZi
ZGNhNjA3ZGU3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcApAQCAtMTkxLDYgKzE5MSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBj
YXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3Ry
dWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBCcmFuY2g6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAK
aW5kZXggMzA4MGRjMzQ1MDljNzMzMzI0YjgxNDNkMmE5NTRmMDhlZGFmMTNmYi4uYzAwNGZhY2Nj
MWFkMDVkMzZjZWRiZWRmOTY3ODJhYWI3ZGNiOTgzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcApAQCAtMzEsOCArMzEsNyBA
QAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBGb3JPU1JFbnRyeUpJVENvZGU6
OkZvck9TUkVudHJ5SklUQ29kZSgpCi0gICAgOiBtX2J5dGVjb2RlSW5kZXgoVUlOVF9NQVgpCi0g
ICAgLCBtX2VudHJ5RmFpbHVyZUNvdW50KDApCisgICAgOiBtX2VudHJ5RmFpbHVyZUNvdW50KDAp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAppbmRleCA5NDU2NTc3NTVhMGVjYjc4MWNmYjg5YjExYzM5Zjk4ZjdhOWFiYTNkLi40NWU4MWJj
ZGRhMjg4MTczZmUxOTllODRjNjdiOWY4OGM4MDI2ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNsZWFyU3RhY2tGcmFtZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BS
SW5mbzo6cmVnVDAsIGNvZGUuZnJhbWVTaXplKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4
VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHVibGlj
OgogICAgICAgICAKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgQ29kZUJsb2NrIHRvIGhh
dmUgYSB3ZWFrIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UKICAgICAgICAgLy8gdGhhdCB3b3Vs
ZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkp
LCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgICAgICBtX291dC5z
dG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGNvZGVCbG9j
aygpKSksIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
aykpKTsKIAogICAgICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVjay4KICAgICAgICAgdW5zaWdu
ZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBwdWJsaWM6CiAKICAgICAg
ICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
LmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7CisgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0
eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAg
ICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwpAQCAtMTI4MSw2ICsxMjgxLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBDYWxsRXZhbDoKICAgICAgICAgICAgIGNvbXBpbGVDYWxsRXZh
bCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAg
ICAgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTUzLDcgKzE5NTYsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4oCiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5
KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgp
LnRvTG9jYWwoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJz
b2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIo
KS50b0xvY2FsKCkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9j
YWwoKQpAQCAtMTk3Miw3ICsxOTc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVHZXRT
dGFjaygpCiAgICAgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUu
b3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBtX25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9ybWF0KSwgZGF0YS0+Zm9ybWF0
KTsKICAgICAgICAgCkBAIC03OTI2LDEzICs3OTI5LDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBjb21waWxlR2V0Q2FsbGVlKCkKICAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlU2V0Q2FsbGVlKCkK
ICAgICB7CiAgICAgICAgIGF1dG8gY2FsbGVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpOworICAgICAgICBtX291dC5zdG9yZVB0cihjYWxsZWUsIHBheWxvYWRGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtNzk0Nyw3ICs3
OTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVNldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQz
MihtX25vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5j
b25zdEludDMyKG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBheWxvYWRG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKCkKQEAgLTk1NDIsNTEgKzk1NDUsNTEg
QEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NM
ZW5ndGgoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAg
ICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgCisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5h
cmd1bWVudHNDaGlsZCgpKTsKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAogICAg
ICAgICAgICAgSW50MzIsIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGpzQXJndW1lbnRzLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRh
LT5vZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5j
ZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBU
aGlzIGlzIHNhZmUKLSAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBp
bnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0g
ICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVy
ZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgICAgICAv
LyBwYXN0IHRoZSBzaXppbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDE0NDgKLSAgICAgICAgCisKICAgICAgICAgTFZhbHVlIGxlbmd0aElu
Y2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CiAKLSAgICAg
ICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsCi0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGgsIGxlbmd0aEluY2x1ZGluZ1Ro
aXMpKTsKKyAgICAgICAgc2V0SW50MzIobGVuZ3RoSW5jbHVkaW5nVGhpcyk7CisgICAgfQogCisg
ICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZSht
X25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKICAgICAgICAgc3Bl
Y3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
Ci0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25z
dEludDMyKGRhdGEtPmxpbWl0KSkpOwotICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJpdE9y
KG1fb3V0LmlzWmVybzMyKGxlbmd0aEluY2x1ZGluZ1RoaXMpLCBtX291dC5hYm92ZShsZW5ndGhJ
bmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpKTsgCisKICAgICAg
ICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1h
Y2hpbmVDb3VudCkpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRp
b24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBw
b2ludGVyIGluc3RlYWQKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0
aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25Mb2FkVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGlu
c3RlYWQKICAgICAgICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxkbid0IGhhdmUg
dG8gZG8gdGhpcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTY2MAogICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9vdXQubFNocigK
LSAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZz
ZXQoKSkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJl
c3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCiAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cigzKSk7CiAgICAgICAgIAogICAgICAgICB2bUNhbGwoCiAg
ICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwKICAgICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpz
QXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBs
ZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgICAg
ICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRv
cnlNaW5pbXVtKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdz
KCkKICAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgaWYgKG1f
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0g
bV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3By
ZWFkKSB7CiAgICAgICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1OTUsNTAgKzk1OTgsMjcgQEAgcHJpdmF0
ZToKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICAg
ICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBt
X25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAg
ICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IG51bGxwdHI7IAotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG51bGxwdHI7Ci0gICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBn
ZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50
c0xlbmd0aC5pc0tub3duKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFy
Z3VtZW50c0xlbmd0aC5rbm93bjsKLSAgICAgICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBkYXRh
LT5vZmZzZXQpCi0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIGRh
dGEtPm9mZnNldDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICBsZW5ndGggPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKGtu
b3duTGVuZ3RoICsgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUs
IGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KLSAgICAgICAgICAgIGlmICghZGF0YS0+
b2Zmc2V0KQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2Vy
ID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJ
bnQzMigwKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+b2Zmc2V0KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsK
LSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
TGFyZ2VyLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxh
cmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3Ro
LnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKLSAgICAgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBt
X291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhS
ZXN1bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9
IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOwotICAgICAgICB9Ci0KKyAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5vZmZzZXQ7Cisg
ICAgICAgIExWYWx1ZSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzOyAKKyAgICAg
ICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CisgICAgICAgICAgICBMVmFsdWUgZml4
ZWRMZW5ndGggPSBtX291dC5zdWIoY2FsbGVyTGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29u
c3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOworICAgICAgICAgICAgbGVuZ3RoSW5j
bHVkaW5nVGhpcyA9IG1fb3V0LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRM
ZW5ndGgsIG1fb3V0LmludDMyWmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNl
bGVjdFByZWRpY3RhYmlsaXR5OjpQcmVkaWN0YWJsZSk7CisgICAgICAgIH0gZWxzZSAKKyAgICAg
ICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBjYWxsZXJMZW5ndGhJbmNsdWRpbmdUaGlzOwor
CisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywg
bV9vdXQuaW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdz
T3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxl
bmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRG
b3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0
YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05Njk3LDY1ICs5Njc3LDIwIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJh
dGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgog
ICAgICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJu
IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVDMyX01J
TikpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsK
LSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTFZhbHVlIGZpeGVkTGVuZ3RoID0gbV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1
ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCi0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVh
dGlvbikpOwotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
TGFyZ2VyLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5n
dGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwg
bV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBzbWFsbGVy
T3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IG1fb3V0LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgsIG1fb3V0
LmludDMyWmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFByZWRpY3Rh
YmlsaXR5OjpQcmVkaWN0YWJsZSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZh
cmFyZ3NXaXRoU3ByZWFkKCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1l
KiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6
Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3Ro
czsKLQotICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUo
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZl
ciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCAy
PiBzcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSBy
ZWN1cnNhYmxlTGFtYmRhKFsmXShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7Ci0g
ICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAgICAgICAg
ICAgICAgICBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0g
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICAgICAgICAgIEJpdFZlY3Rvciog
Yml0VmVjdG9yID0gdGFyZ2V0LT5iaXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZihtX2dyYXBoLnZhckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRp
Y0FyZ3VtZW50czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21O
ZXdBcnJheUJ1ZmZlcikgewotICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRz
ICs9IHRhcmdldC0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEFTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAg
ICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5l
Q2FsbEZyYW1lLCBbJl0gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJl
YWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXApOwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgY29sbGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAgICAgICAg
TFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJP
ZlN0YXRpY0FyZ3VtZW50cyk7Ci0gICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExl
bmd0aHMpCi0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0
aEluY2x1ZGluZ1RoaXMsIGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRl
KApAQCAtOTc2Niw3ICs5NzAxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0
U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAg
ICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVkU3By
ZWFkTGVuZ3RocywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVl
IHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJl
Y3Vyc2FibGVMYW1iZGEoW3RoaXMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJn
ZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdl
dC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRh
cmdldC0+Y2hpbGQxKCkubm9kZSgpLCBzdG9yZUluZGV4KTsKIApAQCAtOTc5OCw4ICs5NzMzLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCk7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0g
ICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChp
bmxpbmVDYWxsRnJhbWUsIHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAg
ICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJl
YWRMZW5ndGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Cisg
ICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChp
bmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0aEZyb21J
bmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkp
OwogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBA
IC0xMjI1NCw4ICsxMjE5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxs
RnJhbWUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAg
ICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBhY2tldCwg
bV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAg
IG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
MCkpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsK
KyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dD
aGlja2VuX1BhY2tldF9jYWxsZWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFj
a2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBA
IC0xMjMxNiw3ICsxMjI1Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBs
ZW5ndGg7CiAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICBsZW5ndGgu
a25vd24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSB0cnVl
OwogICAgICAgICAgICAgbGVuZ3RoLnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5ndGgua25v
d24pOwogICAgICAgICB9IGVsc2UgewpAQCAtMTIzNDYsNyArMTIyODIsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJhbWUtPmNh
bGxlZVJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gd2Vh
a1BvaW50ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAgICAgCiAg
ICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MTEsNyArMTc1NDcsNyBAQCBwcml2YXRl
OgogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAgICBtX291dC5zdG9y
ZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
Ci0gICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAg
ICAgICAgICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCAhQVNTRVJUX0RJU0FC
TEVECiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgm
dm0oKS50b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc3MTksNyArMTc2NTUsOCBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0
b3JzLmFsbG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsCiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAot
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSk7
CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fscygp
LAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZUbXBzKCkp
OwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3ODI0LDE1ICsxNzc2MSwx
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBleGl0RGVzY3Jp
cHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxz
W2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExP
U1JFeGl0TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9wbGFuLm1vZGUo
KSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFi
aWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZhaWxh
YmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiLCBhdmFpbGFiaWxp
dHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlz
TGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2Nh
bCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxhYmlsaXR5ID0g
IiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAg
IGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCkBAIC0xODEzMiwz
OSArMTgwNjksMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmFscmVhZHlSZWdp
c3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsKICAgICB9CiAgICAg
Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kLCBw
dHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUg
YmFzZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmRd
LCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZh
cmlhYmxlc1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwgb2Zmc2V0KTsKICAg
ICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5k
KQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJh
bmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBQYXls
b2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFzZSwg
aW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFu
ZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFu
ZCwgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50IG9w
ZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9y
KE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIG9mZnNldCk7
CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlz
TG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJh
bmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FsbEZy
YW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9p
bnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9y
KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9y
KGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOwor
ICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0K
ICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggOTMzMTc3MTBm
NmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5ODM0MDc2YThkNmY5
MTc0MmNjYjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgICAgICBk
YXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOwogICAgIAogICAg
IGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50
LS07KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNhblVuc2FmZUpTVmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOwogICAg
ICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2YWx1ZXMuYXJndW1l
bnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1ZSAmJiB2YWx1ZU9u
U3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1bWVudCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAK
aW5kZXggMDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThlMy4uMDRjODU3OTll
NGQ0NjkyM2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIERG
RzsKIAogT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAogICAgIERhdGFGb3Jt
YXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQ
cm9maWxlLAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJP
ZkxvY2FscykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJvZmlsZURhdGFGb3Jt
YXQocHJvZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUp
Ci0gICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCisgICAg
LCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMsIG51bWJlck9mVG1w
cykKIHsKIH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5h
bFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0CiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRhODdjY2YzMjczZmU0
YmUzNjA2ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2YWVjZTA5N2FkOGE0
ZDFlMjdiODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCkBAIC02
OSw3ICs2OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9TUkV4aXREZXNjcmlw
dG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZvcm1hdCBwcm9maWxl
RGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKTsKKyAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzLCB1bnNp
Z25lZCBudW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBl
eGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgogICAgIC8vIElmIHRo
YXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3ZSdsbCBo
YXZlIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVy
LmNwcAppbmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgxNzZlZTcyLi5hMzc4
NDEwZGE5YjgwMTU3MjRhOWRjMTZjM2ZlMWFlYzA4MDU1ZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNp
bmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQu
aCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEgQEAKICNpbmNsdWRl
ICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExT
YXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNs
dWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiUHJvYmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApA
QCAtNDc0LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNp
Z25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAogICAgIHNpemVf
dCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJs
b2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAorICAgIGlmIChleGl0
Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7Cisg
ICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgZXhpdC5tX2Rlc2NyaXB0b3ItPm1f
dmFsdWVzLnRtcEluZGV4KDApOworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGpp
dC5wcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRv
IGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRl
eCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRl
LT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAgICAgICAgICBz
aWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworCisgICAgICAg
ICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUo
c2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3Jp
Z2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250
ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYg
Y29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZy
YW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJ
bmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAg
ICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7
CisgICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVy
IGFuZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8v
IGFscmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVl
cy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwor
CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8
aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisgICAgICAgIGlm
IChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGlu
dD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
KSk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCA3ZjdjZDM4
MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFiZDllYjNiNDcxMzM3
NDRmODQzZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0Kgog
ICAgICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZy
b20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2Vs
bHMgZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5z
ZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZs
eSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVkYjNhZDlj
ZTVlOWNmLi5kNTdmYjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2NTUsMzcgQEAg
TFZhbHVlIE91dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2
YWx1ZSwgaW50NjRaZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1
ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0OjpzZWxlY3Qo
TFZhbHVlIHZhbHVlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQcmVkaWN0YWJp
bGl0eSBwcmVkaWN0YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAg
ICAgICAgaWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFrZW47Cisg
ICAgICAgICAgICByZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJu
IG5vdFRha2VuOworICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4o
KSwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFiaWxpdHkgPT0g
U2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwg
dmFsdWUsIGxlZnQsIHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG5l
d0Jsb2NrKCk7CisgICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOwor
ICAgIExCYXNpY0Jsb2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisKKyAgICBtX2Js
b2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6OkJyYW5jaCwg
b3JpZ2luKCksIHZhbHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRha2VuQmxvY2ss
IHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExpa2VseSA/IEZy
ZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFBy
ZWRpY3RhYmlsaXR5OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1
ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0aW9uLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwgb3JpZ2luKCkp
OworCisgICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxv
Y2soY29udGludWF0aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6
VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAgICByaWdodFRh
a2VuQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4o
KSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1fYmxvY2sgPSBj
b250aW51YXRpb247CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWlj
WGNoZ0FkZChMVmFsdWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRlZjdlMDYwZjkz
NjJiM2JkY2EwZmQ0NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2MjdkNWZmMzFj
NzgxMGQ4ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw2
ICszOSw3IEBACiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIK
KyNpbmNsdWRlICJGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRl
LmgiCiAjaW5jbHVkZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRl
ci5oIgpAQCAtMzY1LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0
cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVl
LCBtYXNrKSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAg
TFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2Vu
KTsKKyAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUg
bm90VGFrZW4sIFNlbGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5v
dFByZWRpY3RhYmxlKTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5
IGRlZmF1bHQuIFVzZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2Vz
cygpIHdpdGggYQogICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVu
Y2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVk
aWN0YWJpbGl0eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0
YWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2MDJhY2ZmZTQwNDQ1NTUxMDBlYjQ1ZDhmNmEwMzA5ZjM1
ODExZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNl
bGVjdFByZWRpY3RhYmlsaXR5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShG
VExfSklUKQorCituYW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNlbGVjdFByZWRp
Y3RhYmlsaXR5IDogdWludDhfdCB7CisgICAgLy8gVXNlIHRoaXMgd2hlbiB3ZSBleHBlY3QgaXQg
dG8gYmUgdmVyeSB1bmxpa2VseSB0aGUgYnJhbmNoIHByZWRpY3RvciB3aWxsIGJlIGFibGUgdG8g
Z3Vlc3Mgd2hpY2ggc2lkZSBvZiB0aGUgc2VsZWN0IHdpbGwgYmUgY2hvc2VuLiBUaGlzIHRlbGxz
IEIzIHRvIHRyeSB0byBlbWl0IHRoZSBzZWxlY3QgYXMgYSBjb25kaXRpb25hbCBtb3ZlLCB3aGlj
aCAodXN1YWxseSkgaXMgbm90IHNwZWN1bGF0ZWQgYnkgdGhlIENQVS4KKyAgICBOb3RQcmVkaWN0
YWJsZSwKKyAgICAvLyBVc2UgdGhpcyB3aGVuIGl0J3MgcG9zc2libGUgYSBicmFuY2ggcHJlZGlj
dG9yIHdpbGwgZG8gYSBnb29kIGpvYiBndWVzc2luZyB0aGUgc2VsZWN0ZWQgdmFsdWUgYnV0IHdl
IGRvbid0IGtub3cgYSBwcmlvcmkgd2hpY2ggc2lkZSBpcyBtb3JlIGxpa2VseS4KKyAgICBQcmVk
aWN0YWJsZSwKKyAgICAvLyBVc2UgdGhlc2Ugd2hlbiB3ZSBhcmUgdmVyeSBzdXJlIG9uZSBvZiB0
aGUgdHdvIHNpZGVzIGlzIHN1YnN0YW50aWFsbHkgbW9yZSBsaWtlbHkgdGhhbiB0aGUgb3RoZXIu
CisgICAgTGVmdExpa2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IDY5MzRjM2YwZDM3OTFmNjRiYTQyOTYz
ZTA1NTYzZGJiYzdkZGE1YTQuLmM3MjZhZDI3YzgxNWFjNjdhNjcwZDI1ODA0YWE4Y2FlMjJiM2Ew
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxs
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaApAQCAt
MTAwLDcgKzEwMCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlmIChjYWxs
U2l0ZUluZGV4KSB7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKHZtLCB1
c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwg
YXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0No
ZWNrcG9pbnRzLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YTVmNTI3N2RkNjMxYWNkNGNjYmVjZDE0YjI0Y2M1
ZDRhMzlhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL0NoZWNrcG9pbnRzLnJiCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2NsYXNzIENoZWNrcG9pbnQKKyAgICBhdHRyX3JlYWRlciA6dXNl
cworICAgIGF0dHJfcmVhZGVyIDpkZWZzCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRy
X3JlYWRlciA6aW5kZXgKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIGluZGV4LCB0bXBzKQor
ICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGluZGV4ID0gaW5kZXgKKyAgICAgICAgQHVz
ZXMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0gOnVzZSB9CisgICAg
ICAgIEBkZWZzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDpkZWZp
bmUgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzKG5hbWVzcGFjZSkKKyAgICAgICAgRU9G
PC0tCisgICAgY2FzZSAje25hbWVzcGFjZX06OiN7bmFtZX06CitFT0YKKyAgICBlbmQKK2VuZAor
CitjbGFzcyBDaGVja3BvaW50cworICAgIGRlZiBpbml0aWFsaXplKG9wY29kZSwgdG1wcywgY2hl
Y2twb2ludHMpCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQHRtcHMgPSB0bXBz
CisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcF93aXRoX2luZGV4IHsgfChu
YW1lLCB0bXBzKSwgaW5kZXh8IENoZWNrcG9pbnQubmV3KG5hbWUsIGluZGV4LCB0bXBzKSB9Cisg
ICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MKKyAgICAgICAgQGNoZWNrcG9pbnRzLmVhY2ggZG8g
fGNoZWNrcG9pbnR8CisKKyAgICAgICAgZW5kCisgICAgICAgIEVPRjwtLQorQml0TWFwPG1heE51
bVRtcHM+IHRtcExpdmVuZXNzRm9yI3tAb3Bjb2RlLmNhcGl0YWxpemVkX25hbWV9KHVpbnQ4X3Qg
Y2hlY2twb2ludCkKK3sKKyAgICBzd2l0Y2ggKGNoZWNrcG9pbnQpIHsKKworICAgIH0KK30KK0VP
RgorICAgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL09wY29kZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJi
CmluZGV4IGRhYjg2ODZjYTMzYTEwMmM5YmZhMWRmMTgwM2ViYjRmMGFiMjQ0ODUuLmNmZDlkZjE1
MTE0N2E4NmRhNGJjNzViZTQ2YTY3ODI1ZTI1Mzc1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIE9wY29kZQogICAg
IGF0dHJfcmVhZGVyIDphcmdzCiAgICAgYXR0cl9yZWFkZXIgOm1ldGFkYXRhCiAgICAgYXR0cl9y
ZWFkZXIgOmV4dHJhcworICAgIGF0dHJfcmVhZGVyIDpjaGVja3BvaW50cwogCiAgICAgbW9kdWxl
IFNpemUKICAgICAgICAgTmFycm93ID0gIk9wY29kZVNpemU6Ok5hcnJvdyIKQEAgLTQ1LDEyICs0
NiwxNCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgdGlkCiAgICAgZW5kCiAKLSAgICBkZWYgaW5p
dGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9p
bml0aWFsaXplcnMpCisgICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBh
cmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0bXBzLCBjaGVja3BvaW50cykK
ICAgICAgICAgQHNlY3Rpb24gPSBzZWN0aW9uCiAgICAgICAgIEBuYW1lID0gbmFtZQogICAgICAg
ICBAZXh0cmFzID0gZXh0cmFzIHx8IHt9CiAgICAgICAgIEBtZXRhZGF0YSA9IE1ldGFkYXRhLm5l
dyBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzCiAgICAgICAgIEBhcmdzID0gYXJncy5t
YXAud2l0aF9pbmRleCB7IHwoYXJnX25hbWUsIHR5cGUpLCBpbmRleHwgQXJndW1lbnQubmV3IGFy
Z19uYW1lLCB0eXBlLCBpbmRleCArIDEgfSB1bmxlc3MgYXJncy5uaWw/CisgICAgICAgIEB0bXBz
ID0gdG1wcworICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXAgeyB8KGNoZWNr
cG9pbnQsIF8pfCBjaGVja3BvaW50IH0gdW5sZXNzIGNoZWNrcG9pbnRzLm5pbD8KICAgICBlbmQK
IAogICAgIGRlZiBjcmVhdGVfaWQhCkBAIC0xMTgsNiArMTIxLDggQEAgY2xhc3MgT3Bjb2RlCiAg
ICAgICAgIDw8LUVPRgogc3RydWN0ICN7Y2FwaXRhbGl6ZWRfbmFtZX0gOiBwdWJsaWMgSW5zdHJ1
Y3Rpb24gewogICAgICN7b3Bjb2RlSUR9CisgICAgI3t0ZW1wc30KKyAgICAje2NoZWNrcG9pbnRW
YWx1ZXN9CiAKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQpAQCAtMTMyLDYgKzEzNywxOCBAQCBFT0YK
ICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJRFR5cGV9IG9wY29kZUlEID0gI3tu
YW1lfTsiCiAgICAgZW5kCiAKKyAgICBkZWYgY2hlY2twb2ludFZhbHVlcworICAgICAgICByZXR1
cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAgICBbImVudW0gQ2hlY2twb2ludHMgOiB1
aW50OF90IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8Y2hlY2twb2ludHwgIiAgICAgICAg
I3tjaGVja3BvaW50fSwiIH0pLmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZDaGVja3BvaW50cywi
LCAiICAgIH07Il0pLmpvaW4oIlxuIikKKyAgICBlbmQKKworICAgIGRlZiB0ZW1wcworICAgICAg
ICByZXR1cm4gaWYgQHRtcHMubmlsPworCisgICAgICAgIFsiZW51bSBUbXBzIDogdWludDhfdCB7
Il0uY29uY2F0KEB0bXBzLm1hcCB7fCh0bXAsIHR5cGUpfCAiICAgICAgICAje3RtcH0sIn0pLnB1
c2goIiAgICB9OyIpLmpvaW4oIlxuIikKKyAgICBlbmQKKwogICAgIGRlZiBlbWl0dGVyCiAgICAg
ICAgIG9wX3dpZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYsIG9wY29kZUlEVHlwZSwgMCkKICAg
ICAgICAgb3Bfd2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUzMiwgb3Bjb2RlSURUeXBlLCAwKQpA
QCAtMjAwLDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3Bjb2RlU2l6ZSBfX3Np
emUsIGJvb2wgcmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRlY29kZUdlbmVyYXRvcj4KICAgICBz
dGF0aWMgYm9vbCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRvciogZ2VuI3t0eXBlZF9hcmdzfSN7
bWV0YWRhdGFfcGFyYW19KQogICAgIHsKKyAgICAgICAgI3shQGNoZWNrcG9pbnRzLm5pbD8gPyAi
Z2VuLT5zZXRVc2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAgICAgICAgIGlmIChfX3NpemUgPT0g
T3Bjb2RlU2l6ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2VuLT5hbGlnbldpZGVPcGNvZGUxNigp
OwogICAgICAgICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTMyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4IDIwNGFjNzU5ZTEzZWZm
MTUxZjhjZDE3N2YzYmYxYjcwZTA3NzljYWEuLjY2ODU1YmE2NTAwODBlNGMyM2NjMGViZWMxMGU3
OTQ5Y2RlNzY4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
U2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24u
cmIKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgogICBlbmQKIAogICBkZWYgY3JlYXRl
X29wY29kZShuYW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNvbmZp
Z1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6bWV0
YWRhdGFfaW5pdGlhbGl6ZXJzXSkKKyAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmln
WzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRh
ZGF0YV9pbml0aWFsaXplcnNdLCBjb25maWdbOnRtcHNdLCBjb25maWdbOmNoZWNrcG9pbnRzXSkK
ICAgZW5kCiAKICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFtZSwgb3Bjb2RlcywgY29uZmlnKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRl
eCBmNjM5NGFjNzEwNzEyNWI3Y2FiMjFhZDJiOTExM2MwNzk1MzZhNjAwLi42ZTBiYjFlYzEzOGI5
ZWFiNmM4MDk3NmRkYmM0ZWRjMzA2OTViMzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtOTAsMjIgKzkwLDIyIEBAIGJvb2wgQ2Fs
bEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogCiB1bnNpZ25l
ZCBDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhp
c1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKTsKKyAgICByZXR1cm4gdGhpc1tz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50YWcoKTsKIH0K
IAogU1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlQXNSYXdC
aXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50XS51bnNhZmVUYWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS51bnNhZmVUYWcoKTsKIH0KIAogQ2FsbFNpdGVJbmRl
eCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBD
YWxsU2l0ZUluZGV4Ojpmcm9tQml0cyhjYWxsU2l0ZUFzUmF3Qml0cygpKTsKIH0KIAogU1VQUFJF
U1NfQVNBTiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxs
U2l0ZUFzUmF3Qml0cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXg6OmZyb21CaXRzKHVu
c2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkgJiAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpID4+IEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCkpOwogfQogCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTExNiw4ICsxMTYsOCBAQCBjb25zdCBJbnN0cnVjdGlvbiogQ2Fs
bEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRW
UEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2cGMpKSk7Ci0gICAgdGhpc1tD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKKyAg
ICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKCp2cGMpOworICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50
PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KV0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7
CiB9CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgp
IGNvbnN0CkBAIC0xMzcsNyArMTM3LDggQEAgY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6
Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhjb25zdCBJ
bnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUoY29kZUJsb2Nr
KCktPmJ5dGVjb2RlSW5kZXgodnBjKSk7Ci0gICAgdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50XS50YWcoKSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGNhbGxTaXRlLmJpdHMoKSk7Cisg
ICAgdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS50
YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKKyAgICBBU1NFUlQoY3VycmVudFZQQygpID09IHZwYyk7
CiB9CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgp
IGNvbnN0CkBAIC0xNjYsNyArMTY3LDcgQEAgQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVj
b2RlSW5kZXgoKQogICAgIH0KICNlbmRpZgogICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRl
Y29kZU9mZnNldCgpKTsKLSAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5
dGVjb2RlT2Zmc2V0KCkpOworICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRl
eCgpOwogfQogCiBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCkBAIC0xODAsNyAr
MTgxLDcgQEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1
cm4gY29kZUJsb2NrKCktPmNvZGVPcmlnaW4oaW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJl
dHVybiBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNl
dCgpKSk7CisgICAgcmV0dXJuIENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5k
ZXgoKSk7CiB9CiAKIFJlZ2lzdGVyKiBDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggY2Zi
NzcxODU2MDM5OTMzOTEwMDRmYzEzMjExODM4NDIzYzVkYzZhOS4uZjEyNGM0ODEyMWJlMDg0MzJm
NTEzYjIxMGFmOGUwNzkyZGQ4NjJhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlN0YWNrVmlz
aXRvci5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oPgogCiBuYW1lc3BhY2UgSlND
ICB7CiAKQEAgLTQ1LDE5ICs0NiwzMiBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgcHVibGljOgog
ICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogICAgICAgICAKKyNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CisgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQorICAgICAgICB7
IAorICAgICAgICAgICAgQVNTRVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisgICAg
ICAgIH0KKyNlbHNlCisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoY29uc3QgSW5zdHJ1
Y3Rpb24mIGluc3RydWN0aW9uKQorICAgICAgICAgICAgOiBtX2JpdHMocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4oJmluc3RydWN0aW9uKSkKICAgICAgICAgeyB9CisjZW5kaWYKIAotICAgICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5k
ZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4
OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1f
Yml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1
aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9
CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KKyAgICAg
ICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cykgeyByZXR1cm4g
Q2FsbFNpdGVJbmRleChiaXRzKTsgfQogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KGJpdHMo
KSk7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBi
aXRzKQorICAgICAgICAgICAgOiBtX2JpdHMoYml0cykKKyAgICAgICAgeyB9CiAgICAgcHJpdmF0
ZToKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVpbnQz
Ml90IG1fYml0cyB7IEJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSB9OwogICAgIH07CiAKICAgICBj
bGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAg
LTY1LDcgKzc5LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBEaXNwb3NhYmxlQ2FsbFNp
dGVJbmRleCgpID0gZGVmYXVsdDsKIAogICAgICAgICBleHBsaWNpdCBEaXNwb3NhYmxlQ2FsbFNp
dGVJbmRleCh1aW50MzJfdCBiaXRzKQotICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXg6OmZyb21CaXRzKGJpdHMpKQorICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KGJp
dHMpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC03OCwyNCArOTIsMjcgQEAgbmFtZXNwYWNl
IEpTQyAgewogICAgIC8vIGFybTY0XzMyIGV4cGVjdHMgY2FsbGVyIGZyYW1lIGFuZCByZXR1cm4g
cGMgdG8gdXNlIDggYnl0ZXMgCiAgICAgc3RydWN0IENhbGxlckZyYW1lQW5kUEMgewogICAgICAg
ICBhbGlnbmFzKENQVVJlZ2lzdGVyKSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lOwotICAgICAgICBh
bGlnbmFzKENQVVJlZ2lzdGVyKSBjb25zdCBJbnN0cnVjdGlvbiogcmV0dXJuUEM7CisgICAgICAg
IGFsaWduYXMoQ1BVUmVnaXN0ZXIpIHZvaWQqIHJldHVyblBDOwogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBzaXplSW5SZWdpc3RlcnMgPSAyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSAvIHNp
emVvZihSZWdpc3Rlcik7CiAgICAgfTsKICAgICBzdGF0aWNfYXNzZXJ0KENhbGxlckZyYW1lQW5k
UEM6OnNpemVJblJlZ2lzdGVycyA9PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2Yo
UmVnaXN0ZXIpLCAiQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzIGlzIGluY29ycmVj
dC4iKTsKIAotICAgIHN0cnVjdCBDYWxsRnJhbWVTbG90IHsKLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgY29kZUJsb2NrID0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxOwotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBhcmd1bWVudENvdW50ID0gY2FsbGVlICsgMTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRDb3VudCAr
IDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0aGlzQXJn
dW1lbnQgKyAxOworICAgIGVudW0gY2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7CisgICAgICAg
IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKKyAgICAgICAg
Y2FsbGVlID0gY29kZUJsb2NrICsgMSwKKyAgICAgICAgYXJndW1lbnRDb3VudCA9IGNhbGxlZSAr
IDEsCisgICAgICAgIHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnQgKyAxLAorICAgICAgICBm
aXJzdEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsgMSwKICAgICB9OwogCisgICAgT1ZFUkxPQURf
TUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoQ2FsbEZyYW1lU2xv
dCkKKyAgICBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRI
X0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQorCiAgICAgLy8gUmVwcmVzZW50cyB0aGUgY3VycmVu
dCBzdGF0ZSBvZiBzY3JpcHQgZXhlY3V0aW9uLgogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gbW9zdCBmdW5jdGlvbnMuCiAgICAgY2xhc3MgQ2FsbEZyYW1lIDogcHJpdmF0
ZSBSZWdpc3RlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgPSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgMTsK
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSArIDE7CiAKICAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdmVyeSBzcGVjaWZp
YyBjaXJjdW1zdGFuY2VzCiAgICAgICAgIC8vIHdoZW4geW91J3ZlIGd1YXJhbnRlZWQgdGhlIGNh
bGxlZSBjYW4ndCBiZSBhIFdhc20gY2FsbGVlLCBhbmQgY2FuCkBAIC0xMDYsMTAgKzEyMywxMCBA
QCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgY2VsbCwgYW5k
IGlmIGl0J3Mgbm90LCB3ZSB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgIGlubGluZSBKU1Zh
bHVlIGd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBKU09i
amVjdCoganNDYWxsZWUoKSBjb25zdDsKLSAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25z
dCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5wb2ludGVy
KCkpOyB9Ci0gICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBj
b25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2Fu
VW5zYWZlUG9pbnRlcigpKTsgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsg
cmV0dXJuIENhbGxlZUJpdHModGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSldLnBvaW50ZXIoKSk7IH0KKyAgICAgICAgU1VQUFJFU1NfQVNBTiBDYWxsZWVCaXRzIHVu
c2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tzdGF0aWNfY2FzdDxp
bnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CiAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Q7Ci0gICAgICAgIENvZGVCbG9jayoqIGFk
ZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sq
Kj4odGhpcyArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7IH0KKyAgICAgICAgQ29kZUJsb2Nr
KiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PENvZGVC
bG9jayoqPih0aGlzICsgc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsgfQogICAgICAgICBpbmxpbmUgU1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sqIHVuc2FmZUNvZGVC
bG9jaygpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNTY29wZSogc2NvcGUoaW50IHNjb3BlUmVn
aXN0ZXJPZmZzZXQpIGNvbnN0OwogCkBAIC0xODIsMTUgKzE5OSwxMyBAQCBuYW1lc3BhY2UgSlND
ICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdn
ZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxlZSogZ2xvYmFsQ2FsbGVlKTsKIAogICAg
ICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZyYW1lIChvciBjb25zdGFudCBm
cm9tIHRoZSBDb2RlQmxvY2spLgotICAgICAgICBSZWdpc3RlciYgcihpbnQpOwogICAgICAgICBS
ZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIg
Zm9yIGEgbm9uLWNvbnN0YW50Ci0gICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKGludCk7Cisg
ICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBrbm93biBub24tY29uc3RhbnQKICAgICAg
ICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBB
Y2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNhcHR1cmUsIGFyZ3VtZW50cyBt
YXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCiAgICAgICAgIHNpemVfdCBhcmd1bWVu
dENvdW50KCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSAtIDE7
IH0KLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyBy
ZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5wYXlsb2FkKCk7IH0KKyAg
ICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4g
dGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpXS5wYXls
b2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldChpbnQgYXJndW1lbnQp
IHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICsgYXJndW1lbnQpOyB9CiAg
ICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGludCBhcmd1bWVu
dCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3VtZW50KTsgfQog
CkBAIC0yMzksNyArMjU0LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAgIEpTVmFsdWUg
YXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKIAotICAgICAgICBzdGF0aWMg
aW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJu
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogCiAgICAgICAgIHN0YXRpYyBDYWxsRnJh
bWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICAgICBib29sIGlzRGVwcmVj
YXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QKQEAgLTI1MSwxMCArMjY2LDEwIEBAIG5h
bWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0YWNrT3ZlcmZsb3dGcmFtZSgpIGNvbnN0
OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0
ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS5wYXlsb2FkKCkgPSBjb3Vu
dDsgfQorICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3Vu
dCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCldLnBheWxvYWQoKSA9IGNvdW50OyB9CiAgICAgICAgIGlu
bGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwogICAgICAgICBpbmxpbmUgdm9pZCBzZXRD
b2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9pZCogdmFs
dWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQq
IHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZhbHVlOyB9CiAKICAgICAg
ICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCmluZGV4IGE5N2RlY2E1
M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEuLmVlN2VjMmFiMTA0YTdhMzRkOThiMGY0
MzhmNjQ0YzJkY2ExYzUxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAtMzIsNTAgKzMyLDM5IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6cihpbnQgaW5kZXgpCi17
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKLSAgICBpZiAo
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0KIGlubGluZSBSZWdpc3Rl
ciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHIocmVn
Lm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIo
aW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKKyAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJnRo
aXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOworICAgIHJldHVybiB0aGlz
W3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNr
ZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9m
ZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOworICAgIHJldHVybiB0aGlz
W3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1ZhbHVlIENhbGxGcmFtZTo6Z3VhcmFudGVl
ZEpTVmFsdWVDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkp
OwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uanNWYWx1ZSgpOworICAg
IHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0uanNW
YWx1ZSgpOwogfQogCiBpbmxpbmUgSlNPYmplY3QqIENhbGxGcmFtZTo6anNDYWxsZWUoKSBjb25z
dAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOwotICAgIHJldHVybiB0aGlzW0Nh
bGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5vYmplY3QoKTsKIH0KIAogaW5saW5lIENv
ZGVCbG9jayogQ2FsbEZyYW1lOjpjb2RlQmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0aGlz
W0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOworICAgIHJl
dHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVn
aXN0ZXI6OmNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUgU1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sq
IENhbGxGcmFtZTo6dW5zYWZlQ29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjphc2FuVW5zYWZlQ29kZUJsb2NrKCk7
CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUgSlNHbG9i
YWxPYmplY3QqIENhbGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdChWTSYgdm0pIGNvbnN0CkBA
IC0xMDIsMTIgKzkxLDEyIEBAIGlubGluZSBib29sIENhbGxGcmFtZTo6aXNXYXNtRnJhbWUoKSBj
b25zdAogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNldENhbGxlZShKU09iamVjdCogY2FsbGVl
KQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlXSA9IGNhbGxlZTsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19j
YXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBjYWxsZWU7CiB9CiAKIGlubGluZSB2
b2lkIENhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAg
IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXSA9
IGNvZGVCbG9jazsKKyAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0gPSBjb2RlQmxvY2s7CiB9CiAKIGlubGlu
ZSB2b2lkIENhbGxGcmFtZTo6c2V0U2NvcGUoaW50IHNjb3BlUmVnaXN0ZXJPZmZzZXQsIEpTU2Nv
cGUqIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjA5YzNh
MWJlNGY1OGRhZWE4MDdlM2JhZmVmMGQ0YmEwMmZmNDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFQgZ2V0VG1wKHNpemVfdCBvZmZzZXQpIAorICAgIHsKKyAgICAgICAgaWYg
Y29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkKKyAgICAgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VD4odG1wc1tvZmZzZXRdKTsKKyAgICAgICAgZWxzZSBpZiBjb25z
dGV4cHIgKHNpemVvZihUKSA9PSBzaXplb2YodWludDMyX3QpKQorICAgICAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50MzJfdD4odG1wc1tvZmZzZXRdKSk7Cisg
ICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnQxNl90KSkK
KyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+
KHRtcHNbb2Zmc2V0XSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50OF90KSk7CisgICAgICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRtcHNbb2Zmc2V0XSkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIHZvaWQq
IG5leHRJbnN0cnVjdGlvbkp1bXBUYXJnZXQ7CisgICAgdWludDY0X3QgdG1wc1ttYXhOdW1DaGVj
a3BvaW50VG1wc107Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBkYWE5NGM4OWY5MDA1YTk5NzJmYzBlM2IwMmVi
ODkzZDIxMWNkZDk3Li44ZWYxYzNkODUwYzJjOGEwMTU0NmYyYzhhOWRlYjNkODU0N2E1YjM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZXMuaCIKICNpbmNsdWRlICJD
YWxsRnJhbWVDbG9zdXJlLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCkBAIC0xMjMs
NyArMTI0LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsZXJDYWxsU2l0ZUluZGV4
ID0gY2FsbGVyRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBKU1Njb3BlKiBjYWxsZXJT
Y29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29w
ZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGNh
bGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+dW5jaGVja2VkUihjYWxsZXJDb2RlQmxvY2st
PnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgVW5saW5rZWRDb2RlQmxv
Y2sqIGNhbGxlclVubGlua2VkQ29kZUJsb2NrID0gY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpOwogCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0gY2FsbGVyVW5s
aW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpIHx8IGNhbGxlclVubGlua2VkQ29kZUJs
b2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7CkBAIC0yMTMsNiArMjE0LDkgQEAgdW5zaWdu
ZWQgc2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFy
Z3VtZW50cywgdWludDMyX3QKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
MCk7CiAgICAgCisgICAgaWYgKGxlbmd0aCA+IG1heEFyZ3VtZW50cykKKyAgICAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisKICAgICBpZiAobGVuZ3Ro
ID49IGZpcnN0VmFyQXJnT2Zmc2V0KQogICAgICAgICBsZW5ndGggLT0gZmlyc3RWYXJBcmdPZmZz
ZXQ7CiAgICAgZWxzZQpAQCAtMjQ5LDcgKzI1Myw3IEBAIHVuc2lnbmVkIHNpemVGcmFtZUZvclZh
cmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQz
Ml90IGxlbmd0aCkKK3ZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90
IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRz
LmlzQ2VsbCgpKSB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1cm47CkBAIC0yNjEsMzEgKzI2NSwz
MSBAQCB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaQogICAgIHN3aXRjaCAoY2VsbC0+dHlwZSgpKSB7
CiAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRz
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1l
bnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBTY29wZWRBcmd1bWVudHNUeXBlOgogICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKS0+Y29w
eVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKS0+
Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBs
ZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5
cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8SlNJ
bW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwg
Zmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47IAogICAg
IGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy5pc09iamVjdCgpKTsKICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgICAgICBp
ZiAoaXNKU0FycmF5KG9iamVjdCkpIHsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRzKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7Cisg
ICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9i
YWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBpOwogICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgbGVuZ3RoICYmIG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQp
OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0g
b2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVs
ZW1lbnREZXN0W2ldID0gb2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAg
ICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB2YWx1ZTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVu
dERlc3RbaV0gPSB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfSB9CkBA
IC0yOTcsOCArMzAxLDcgQEAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbEYKICAgICAKICAgICBsb2Fk
VmFyYXJncygKICAgICAgICAgZ2xvYmFsT2JqZWN0LAotICAgICAgICBjYWxsRnJhbWUsCi0gICAg
ICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSwKKyAg
ICAgICAgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yKGNhbGxlZUZyYW1lT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSkpLAogICAgICAgICBhcmd1bWVudHMs
IG9mZnNldCwgbGVuZ3RoKTsKICAgICAKICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKGxlbmd0aCArIDEpOwpAQCAtNTM4LDggKzU0MSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CiAKICAgICAgICAg
bV9oYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKLSAg
ICAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBleGNlcHRpb24gaGFuZGxp
bmcgaW4gY2hlY2twb2ludHMuCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICBpZiAo
bV9yZXR1cm5QQyA9PSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50
X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPnZtKCkuZmluZENoZWNrcG9pbnRPU1JT
aWRlU3RhdGUobV9jYWxsRnJhbWUpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIW1faXNUZXJt
aW5hdGlvbikgewogICAgICAgICAgICAgICAgIG1faGFuZGxlciA9IGZpbmRFeGNlcHRpb25IYW5k
bGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwog
ICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkRvbmU7CkBAIC01NjEsNiArNTY5LDcgQEAgcHVibGljOgogICAgICAg
ICBpZiAoc2hvdWxkU3RvcFVud2luZGluZykKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkRvbmU7CiAKKyAgICAgICAgbV9yZXR1cm5QQyA9IG1fY2FsbEZyYW1lLT5yZXR1cm5QQygp
LnZhbHVlKCk7CiAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0K
IApAQCAtNTk3LDYgKzYwNiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247
CiAgICAgQ29kZUJsb2NrKiYgbV9jb2RlQmxvY2s7CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRs
ZXI7CisgICAgbXV0YWJsZSBjb25zdCB2b2lkKiBtX3JldHVyblBDIHsgbnVsbHB0ciB9OwogfTsK
IAogTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwg
Q2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKQEAgLTg2Niw3ICs4
NzYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmplY3QqCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3Bl
IGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1Nh
ZmVUb1JlY3Vyc2VTb2Z0KCkpKQorICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNl
U29mdCgpIHx8IGFyZ3Muc2l6ZSgpID4gbWF4QXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGNo
ZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKSk7CiAKICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkzNSw3ICs5NDUsNyBAQCBKU09iamVj
dCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTTwogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZt
LCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29m
dCgpKSkgeworICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFy
Z3Muc2l6ZSgpID4gbWF4QXJndW1lbnRzKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oCmluZGV4IDg2YzMyNDY5MjA0ZTlhZTU5MTFmZWNlYTkwMmFlOTdjYWI1NWQzYTAuLmZmMWI0
ZTg2MTA0Yzk2MjU5Nzc5ZTI1Mjc5MjJhZjMzNDdjZjI5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCkBAIC0xNzEsNyArMTcxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhBcmd1bWVu
dHMgPSAweDEwMDAwOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBWTSYsIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1V
c2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIHVuc2lnbmVk
IHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
LCBWTSYsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzKTsKLSAgICB2b2lkIGxvYWRWYXJhcmdz
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMy
X3QgbGVuZ3RoKTsKKyAgICB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsK
ICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50
MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwg
dWludDMyX3QgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggZDcxYTU5NzFkZGM4ZjBmNWVhNjc4ZDVmY2U0OGUz
OTZlMjJhODc1NC4uNzVkZGQyMDNmNzNiZTA1NzZkNmRkNzQ4YjY1Y2JhYTlhYmJmYzczMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFt
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaWdpbgogICAgICAgICBt
X2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgICAgICBtX2ZyYW1lLm1faW5saW5l
Q2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgbV9mcmFtZS5t
X2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAg
ICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKaW5kZXggMjIwMDljNWZkMmJhMjI3ZDQ3Y2ZlODU0OTM5ZjUyZGVmMmQ3MWJjMi4uZTA2Y2I0
OWIyOTVkZTVlYzdjMTlkYjI0ZTczMzg5YmEzNTVlZGVhNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC02NDcsMjggKzY0NywyOCBAQCBwdWJsaWM6
CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJl
Z2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50
cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KLSAgICB2b2lkIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBm
cm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlcjMyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcg
ZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0
byk7CiAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlcjY0KGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2
NChWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQ2NChBZGRyZXNzKGZyb20s
IGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDY0KEFkZHJlc3Mo
ZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KICNl
bmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KEdQUlJlZyBmcm9tLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIoR1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0
b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
KTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1
ZSwgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZh
bHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50
cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
dmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICB2b2lkIGVtaXRHZXRDYWxsZXJG
cmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJJRCB0bykKQEAgLTY5NiwxOSArNjk2
LDE5IEBAIHB1YmxpYzoKICAgICAvLyBjYWxsZXIncyBmcmFtZSBwb2ludGVyLiBPbiBzb21lIHBs
YXRmb3JtcywgdGhlIGNhbGxlZSBpcyByZXNwb25zaWJsZSBmb3IgcHVzaGluZyB0aGUKICAgICAv
LyAibGluayByZWdpc3RlciIgY29udGFpbmluZyB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhlIGZ1
bmN0aW9uIHByb2xvZ3VlLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAg
IHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20s
IFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKGZyb20sIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkpOworICAg
ICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5v
ZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9s
b2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKICAgICB9CiAjZWxzZQotICAgIHZvaWQgZW1pdFB1
dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBpbnQg
ZW50cnkpCisgICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJv
bG9ndWUoR1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAg
IHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2lu
dGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgIH0KIAot
ICAgIHZvaWQgZW1pdFB1dFRhZ1RvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoVHJ1c3Rl
ZEltbTMyIHRhZywgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRhZ1RvQ2FsbEZyYW1lSGVh
ZGVyQmVmb3JlUHJvbG9ndWUoVHJ1c3RlZEltbTMyIHRhZywgVmlydHVhbFJlZ2lzdGVyIGVudHJ5
KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIodGFnLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBw
cm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgc3RvcmVQdHIodGFnLCBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAg
ICB9CiAjZW5kaWYKICAgICAKQEAgLTExNDgsOSArMTE0OCwxMCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9y
KGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsK
KyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE2Myw5ICsxMTY0LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1
cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCk7CiAgICAgfQotICAgIHN0YXRp
YyBBZGRyZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3Io
T3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlz
VG1wKCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkp
OwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBAIC0xMTc4LDMwICsxMTgwLDMxIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAg
ICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpOwogICAg
IH0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRp
YyBBZGRyZXNzIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7Cisg
ICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRG
b3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRv
IG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZy
YW1lU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoVmly
dHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewotICAgICAgICBBU1NFUlQoc2xvdCA+PSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVB
bmRQQzo6c2l6ZUluUmVnaXN0ZXJzKSk7CisgICAgICAgIEFTU0VSVChzbG90Lm9mZnNldCgpID49
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBDYWxs
ZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpLm9mZnNldCgpKTsKICAgICB9CiAKICAgICAv
LyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCiAgICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1bWVudCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9m
ZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRh
Z1Nsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVl
RnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBzdGF0
aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBB
ZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAg
ewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoUGF5bG9h
ZE9mZnNldCk7CiAgICAgfQpAQCAtMTIxOCw3ICsxMjIxLDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIEFkZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJGcmFtZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gY2FsbGVlRnJhbWVTbG90KDApLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChWaXJ0dWFsUmVnaXN0ZXIo
MCkpLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoUmVnaXN0ZXJTZXQgcHJlc2VydmVk
KQpAQCAtMTUyNyw3ICsxNTMwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKCFp
bmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSk7CiAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIHJldHVybiBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50OwogICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCmluZGV4IDk2OTBlMDljOGI1NzI3MGRlZjdm
ODdhNDZjYzJiNTdlNGY3NjIwM2UuLjM5NWQ5MTMzYmNkOTQwNzUzZjg4ODBiOTgzN2I1YzY0ZDRj
NTY0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuY3BwCkBAIC02MSw3ICs2MSw3IEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVm
ZmxlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhCiAjZW5kaWYK
IAogICAgIEFTU0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRhLmNhbGxlZS52
aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwotICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgZGF0YS5jYWxsZWUpOworICAgIGFkZE5ldyhDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIGRhdGEuY2FsbGVlKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGF0YS5hcmdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVCghZGF0YS5hcmdzW2ld
LmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5hcmdzW2ldLnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKaW5k
ZXggNjI0MzliZGYzNDQzYjg3YmU5OTk2MDJmZDljM2ViYzk2YWY2YTlmNS4uNGM2YWEzMmY0ZjU4
NzYzODMxMDkzOGYwMGY5MmMwOTk4ZDY2Zjk0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaApAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKICAgICAgICAgQVNTRVJUKCFnZXRO
ZXcoanNWYWx1ZVJlZ3MpKTsKLSAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5
IHsgZ2V0TmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSB9OworICAg
ICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSB9OwogICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkpOwogICAgICAgICBh
ZGROZXcoanNWYWx1ZVJlZ3MsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsKICAgICB9CkBA
IC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXNzdW1lQ2FsbGVlSXNDZWxsKCkK
ICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgQ2FjaGVkUmVjb3ZlcnkmIGNh
bGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVy
eSA9ICpnZXROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgc3dpdGNoIChjYWxs
ZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2Ug
SW5QYWlyOgogICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAppbmRleCAyODAzMmEyMWFhY2I5YTJkOTMyMjg1ZmUxZjk2NWFkZTNlMjdhODBhLi44NzMxNWVm
ODQ3N2FjMTJhNzNjNTcwYWVmOTEyNTBjNTY5YTRmMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKQEAgLTMzMSwxNiArMzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNv
bXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVx
VHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9Owog
ICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwotICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOworICAgICAgICBib29sIGlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICB2b2lk
IGVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAgICAg
dm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUp
OworICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3Rl
cklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJl
Z2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVy
TW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3Vs
ZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKICAgICAgICAgLy8gdmFs
dWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCBy
ZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIg
b2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
dW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKLSAgICAg
ICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsK
KyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUg
dmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUg
Zm9yCkBAIC00MDQsMzIgKzQwNCwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBlbnVt
IEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIAotICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsK
LSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdz
IHNyYyk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKIAotICAgICAgICBp
bnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAgZG91YmxlIGdl
dE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgaW50MzJfdCBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CisgICAgICAgIGRvdWJsZSBnZXRP
cGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBp
bnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CisgICAgICAgIGJvb2wgZ2V0T3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsKIAotICAgICAgICB2b2lkIGVtaXRMb2FkVGFn
KGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9h
ZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRU
YWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdExv
YWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAogICAgICAg
ICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3Rl
cklEIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJ
RCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRh
ZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVn
aXN0ZXJJRCBwYXlsb2FkMik7CisgICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKLSAgICAgICAgdm9pZCBl
bWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFN0
b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAg
ICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBi
b29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2UpOwot
ICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQs
IGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUo
VmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdp
c3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
KFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNl
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNl
KTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0ZWRJ
bW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBl
bWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGlu
ZGV4SXNDZWxsID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woVmlydHVhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7Cisg
ICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklE
IHZhbHVlKTsKIAotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQg
dmlydHVhbFJlZ2lzdGVySW5kZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKKyAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEIHRhZyk7CiAKICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoY29u
c3QgSWRlbnRpZmllciopOwogCkBAIC00MzgsMTcgKzQzOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwgT3Bl
cmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwg
Ym9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1
ZSk7CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHZvaWQgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAgICAgICAgIHZvaWQgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7
Ci0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVy
SUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwg
VmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7Ci0gICAgICAgIHZvaWQgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7CiAg
ICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBS
ZWdpc3RlcklEIGZyb20gPSByZWdUMCk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQg
ZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82
NCAqLyA9IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcGF5bG9hZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxs
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICAgICAgdm9pZCBl
bWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKICAgICAgICAg
fQpAQCAtNDU2LDI5ICs0NDksMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXAgZW1p
dEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVnKTsK
KyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50KFJlZ2lzdGVySUQs
IFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAgICAgICAgIFBhdGNoYWJsZUp1bXAg
ZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90TnVtYmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gp
OwogCi0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlVlJlZywgY29u
c3QgSWRlbnRpZmllciopOworICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVJlZywgY29uc3QgSWRlbnRpZmllciopOwogCiAjZW5kaWYgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwg
aW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZElt
cGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChK
SVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBAIC02
ODUsOCArNjc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwg
aW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAt
Njk0LDIwICs2ODcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJl
ZyBwYXlsb2FkKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSog
b3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwogI2VuZGlmCi0gICAgICAgIHZv
aWQgZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CisgICAg
ICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQq
KTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKGlu
dCBkc3QpOworICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsK
IAotICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZy
b20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICBKU1ZhbHVlIGdl
dENvbnN0YW50T3BlcmFuZChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dEludChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNy
Yyk7CisgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7
CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKKyAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
UHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KICAgICAgICAg
dm9pZCBlbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKQEAgLTcz
NCw3ICs3MjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghaXRlci0+
ZnJvbS5pc1NldCgpKTsKICAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotICAgICAgICB2
b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICB2b2lkIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAogICAgICAgICAgICAgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCkBA
IC03NTQsMTMgKzc0NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlw
ZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CkBAIC04MDQsNyArNzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFp
dHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTg2NCw3ICs4
NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAgICAg
ICB2b2lkIHByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXMoaW50IHNyYzEsIGludCBzcmMyKTsKKyAg
ICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBzcmMx
LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTQU1QTElOR19G
TEFHUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4
IDM0NTg3NDRmYmNkZDUzYWNmOWE0MzMyOGJjNDk0YjBmZWRjYjg5M2YuLjNhMzJjMzI2MTg5ZmFi
MTk3ZDdjZjlmOTFkNWY2YjRiMzEwMjAyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2piZWxvd2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWdu
ZWQ+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMTcyLDEzICsx
NzIsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChpbnQg
b3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRo
ZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlh
dGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQpAQCAtMjMwLDEzICsyMzAsMTMgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDApOwpAQCAtMjU2LDEzICsyNTYsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9
IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIGVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChkc3QsIG9wMSwgb3AyLCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDApOwpAQCAtMjg0LDEzICsyODQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5z
dHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRp
b24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRp
b24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKIAogICAgIC8vIFdlIGdlbmVy
YXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6
CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdAogdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7Ci0gICAgaW50
IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsK
QEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5t
X3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC00MTUsOSArNDE1LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE1vZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSBy
ZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NF
UlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtNDkxLDkgKzQ5MSw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogdm9pZCBKSVQ6OmVt
aXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGluZ1BvbGljeSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOwpAQCAtNTM4LDggKzUzOCw4IEBAIHZvaWQgSklUOjplbWl0Qml0Qmlu
YXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxpCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEJpdG5vdD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01OTksOSArNTk5LDkgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yOjpTaGlmdFR5cGUgc25pcHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwot
ICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CkBAIC02NzQsOCArNjc0LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4K
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rp
b24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3Bl
cmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIC8vIEFyaXRoTmVn
YXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3Qu
CkBAIC03MjQsOSArNzI0LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVk
RnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC03OTksNyArNzk5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29u
c3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFy
dCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAt
ODQ1LDkgKzg0NSw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwot
ICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CkBAIC05MDYsOSArOTA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKgog
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+
KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBv
cDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9y
aHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggYmYyMzA2YmNlNGQ1NmYxMDlhMDM2MThiMzQwNzJm
YzU3YzBlNWFjMy4uYWY5ZWViNjI3OWNjZTRkMTFiOTM0YWUxZjFiNWM2ZTRkNjcyMmY3NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBi
eXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYsNyArNjYsNyBAQCBKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwogCiAg
ICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZy
YW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAg
SnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAgICAg
c3RvcmUzMihyZWdUMCwgbWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUuYWRk
cmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKQEAgLTg1LDkgKzg1LDkgQEAgc3RkOjplbmFi
bGVfaWZfdDwKICwgdm9pZD4KIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50cy5vZmZzZXQoKTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5t
X2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0
ZWNvZGUubV90aGlzVmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1f
Zmlyc3RGcmVlLm9mZnNldCgpOyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0dWFsIHJlZ2lz
dGVyIGlmIHdlIG5ldmVyIHVzZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RWYXJBcmdPZmZz
ZXQgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIHJlZ1QxKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZAogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5
dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBi
eXRlY29kZS5tX2NhbGxlZTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBk
YXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggYjdkMGNhMjM1OGJlNTI1MDE4
YTNmNGU5NjE2ZDljYjg0OGZmZjUyMS4uZTA3YTgzM2Q0Yzg1M2I5YzdhMDJkZThiNzQ2MDFkZjMw
NjZiYWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3Bw
CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZyYW1lKSwg
IiBmb3IgY29kZSBibG9jayAiLCBjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBDUkFTSCgpOwor
ICAgICAgICBXVEZCcmVha3BvaW50VHJhcCgpOwogICAgIH0KICAgICAKICAgICBpZiAoYXV0byog
c2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgKaW5kZXggMjIxNDljOWJkMWI4ZWMxMTgxMmNiZTBiODU0MWJlZTkzYjEw
YWIzNC4uYzY2YzFiMTE5MDM2ODUxYzI3MmQwZDhhMjRlYmUzOWUzMTE3NjRlZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTQ4LDE5ICs0OCwyMCBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9yQXJyYXlNb2Rl
KGNvbnN0IEluc3RydWN0aQogICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsK
IH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50
IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7
CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRP
cGVyYW5kKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpOworICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgp
KTsKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIGludCBlbnRyeSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKIHsK
KyAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIoKSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkp
OwogICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTQzLDcgKzE0NCw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xNTUsNyArMTU2LDcg
QEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBk
c3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEpOwpAQCAtMTY3LDkgKzE2OCw5IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIs
IGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVy
IHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcp
KQorICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUocmVnKSkKICAgICAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yODQsOSArMjg1LDkgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6c2FtcGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQogI2Vu
ZGlmCiAjZW5kaWYKIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRD
aGFyKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENo
YXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJp
bmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0
aCgpID09IDE7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5h
c0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKQEAgLTM2MywyNiArMzY0
LDI2IEBAIGlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9m
aWxlKiBwcm9maWxlKQogICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCi1BTFdBWVNfSU5M
SU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZU19J
TkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGlu
dCBzcmMpCitBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyKGludCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmlu
ZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCB0YWcpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChp
bmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBtb3ZlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzkwLDkgKzM5MSw5IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWco
aW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKICAgICBsb2FkMzIodGFnRm9yKGluZGV4KSwgdGFn
KTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdp
c3RlcklEIHBheWxvYWQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2Nr
LT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkgewogICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkucGF5
bG9hZCgpKSwgcGF5bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MDYsMTM2ICs0
MDcsMTMzIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVn
aXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKICAgICBtb3ZlKEltbTMyKHYudGFnKCkp
LCB0YWcpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXQoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRM
b2FkKHNyYywgZHN0LnRhZ0dQUigpLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVn
cyBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRTdG9yZShk
c3QsIGZyb20udGFnR1BSKCksIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotaW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKIAogICAgIGlm
IChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBh
eWxvYWQgIT0gYmFzZSk7Ci0gICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9hZCk7
Ci0gICAgICAgIGVtaXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICBlbWl0TG9hZFBheWxv
YWQocmVnLCBwYXlsb2FkKTsKKyAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07
CiAgICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCi0gICAg
ICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7CisgICAgICAgIGxvYWQzMih0YWdGb3Io
cmVnLCBiYXNlKSwgdGFnKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwg
cGF5bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkMzIocGF5bG9hZEZv
cih0YXJnZXQsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFz
ZSksIHRhZyk7CisgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7Cisg
ICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9h
ZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklE
IHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3Rl
cklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCiB7Ci0gICAgZW1pdExvYWQoaW5kZXgyLCB0
YWcyLCBwYXlsb2FkMik7Ci0gICAgZW1pdExvYWQoaW5kZXgxLCB0YWcxLCBwYXlsb2FkMSk7Cisg
ICAgZW1pdExvYWQocmVnMiwgdGFnMiwgcGF5bG9hZDIpOworICAgIGVtaXRMb2FkKHJlZzEsIHRh
ZzEsIHBheWxvYWQxKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQg
aW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5D
b25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRk
cmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJl
ZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUo
aW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
SW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkg
eworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgY2hhciogYnl0ZVBvaW50ZXIg
PSByZWludGVycHJldF9jYXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOwogICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7Cisg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IocmVnKSwgdmFsdWUpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsg
aW5kZXggfTsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7
Ci0gICAgc3RvcmUzMih0YWcsIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMih0YWcsIHRhZ0Zvcihy
ZWcsIGJhc2UpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlm
ICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4
SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVy
IHJlZywgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0
b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwg
cGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7
CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJ
c0NlbGwpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAg
c3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0NlbGwp
Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3Io
aW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKGludCBp
bmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQoraW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQm9vbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
aW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYg
KCFpbmRleElzQm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKIHsKLSAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihpbmRleCkpOwor
ICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lz
dGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50
LnBheWxvYWQoKSksIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3RvcmUzMihJbW0z
Mihjb25zdGFudC50YWcoKSksIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKElt
bTMyKGNvbnN0YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3Rv
cmUzMihJbW0zMihjb25zdGFudC50YWcoKSksIHRhZ0ZvcihyZWcsIGJhc2UpKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdp
c3RlckluZGV4KQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90
SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAg
ICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlND
ZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0
SnVtcElmTm90SlNDZWxsKHJlZykpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3Rl
cklEIHRhZykKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewogICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAg
IGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVy
SW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbCh0YWcpKTsKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50
MzJfdCYgY29uc3RhbnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKICAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7
CkBAIC01NTUsMTEgKzU1MywxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5k
Q29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdAogI2Vsc2UgLy8g
VVNFKEpTVkFMVUUzMl82NCkKIAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBTRiBy
ZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
c3JjLCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGlmIChtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXND
b25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CkBAIC01NzEs
NDcgKzU2OSwzMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyks
IGRzdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3Qp
CiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2FkR1BSKCkpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLm9mZnNldCgpLCBkc3QpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3Jj
MiwgUmVnaXN0ZXJJRCBkc3QyKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVh
bFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKIHsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzEsIGRzdDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0
Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBz
cmMyLCBSZWdpc3RlcklEIGRzdDIpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3Jj
MS5vZmZzZXQoKSwgZHN0MSwgc3JjMi5vZmZzZXQoKSwgZHN0Mik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJv
bSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBK
U1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBmcm9t
LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQotewotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKLX0KLQogQUxXQVlT
X0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJRCBy
ZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3ZlKHJl
ZzEsIHNjcmF0Y2gpOwpAQCAtNjI5LDI4ICs2MTIsMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWcpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJlZykK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdp
c3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50
IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmlu
Q29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQog
ewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
Ci0gICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChpbmRleCkpOwotICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLmFzSW50
MzIoKSksIHZhbHVlKTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBBU1NF
UlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQocmVnKSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChyZWcpLmFzSW50MzIoKSksIHZhbHVlKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCks
IHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2
YWx1ZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBh
dGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDdjZmEwOTVmMDBkMTdlMTQxMWJlOWNmYjgwZjgwODA2
Zjc4OGY2YzEuLjYyNjMyZGE4NGFmZWY5NzgyMTE5MDNjNDg2ZDIxOWExZTlhN2U1YWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNTYsMTAgKzU2LDEwIEBA
IG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTc3LDcgKzc3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+
KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0
ZXIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAtMTEwLDcgKzExMCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBK
SVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAg
ICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CiB9CiAKQEAg
LTEyMCw3ICsxMjAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0
YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKQEAgLTE1
NSw5ICsxNTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1fcHJv
dG90eXBlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZp
cnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCiAgICAgLy8gTG9h
ZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBp
bnRvIHJlZ2lzdGVycy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ug
d2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3Ig
dGhlIHJlc3VsdC4KQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBn
ZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIApAQCAtMjA0LDgg
KzIwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0VtcHR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CkBAIC0yMTcsOCArMjE3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5j
aElmQ2VsbChyZWdUMCk7CkBAIC0yNDYsOCArMjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
dW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOwpAQCAtMjc0LDggKzI3NCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNOdW1iZXI+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7CkBAIC0yODYsOCArMjg2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxs
V2l0aFR5cGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtMzA3LDggKzMwNyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBA
IC0zNDMsOCArMzQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2MCwxNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUub2Zmc2V0KCksIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsK
IAogICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2Fz
IHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNsZWFy
IG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBv
ciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MCwxNCArMzkwLDE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZkZh
bHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsKLSAgICBpbnQg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBA
IC00NDUsNyArNDQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVk
X29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+
KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ1Nyw3
ICs0NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpudW5kZWZpbmVkT3JO
dWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00
NzAsOCArNDcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFu
ZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0g
Z2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VS
VChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIApA
QCAtNDg1LDE4ICs0ODUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMs
IHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEp
LCB0YXJnZXQpOwogfQpAQCAtNTEwLDI2ICs1MTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNv
bXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1w
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTM5LDcg
KzUzOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUaHJvdz4oKTsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
VGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CkBAIC01NDgsOSArNTQ4LDkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBl
IHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMx
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jo
cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKICAgICAKQEAgLTU5Miw4ICs1OTIsOCBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgaW50IHNyYzEgPSBieXRl
Y29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTY1MCw4ICs2NTAsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBpbnQgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAgICAgCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKQEAgLTY2NCw4ICs2NjQs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC02ODQsMjAgKzY4NCwyMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RWUmVnID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtNzI4LDEwICs3MjgsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgVk06
OmV4Y2VwdGlvbk9mZnNldCgpKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2V4Y2VwdGlvbi5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2V4Y2VwdGlvbik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0aW9u
Ojp2YWx1ZU9mZnNldCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV90aHJvd25WYWx1ZS5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8v
IEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1Ig
ZW50cnksIGluY2x1ZGluZwpAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZl
cjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29k
ZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC03NDksNyArNzQ5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBz
a2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVncyhyZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpAQCAtNzY2LDEwICs3NjYsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0
aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIGludCBjdXJyZW50U2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50
U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVn
VDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwog
ICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2ln
bmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5t
X3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1
bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7CiAgICAgc2l6ZV90IHRh
YmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9m
ZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRP
ZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1w
VGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgx
MSw3ICs4MTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXgg
PSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwot
ICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAm
bV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgzNCw4
ICs4MzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKQEAgLTg2Nyw4ICs4NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRl
Y29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC05MDMsNyArOTAzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogICAgIC8vIG9iamVj
dCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQg
PSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNv
dW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaikub2Zmc2V0KCkpOworICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGopKTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBA
IC05MTMsNyArOTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWlu
KCkpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAgLTkyNCw3ICs5
MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFk
YXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3NyY0RzdC5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSk7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8
SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAg
UmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVn
ID0gcmVnVDQ7CkBAIC05NjUsMTMgKzk2NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4KEFk
ZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
Y3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190
ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0
KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0
VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOwogfQogCkBAIC05ODUsNyArOTg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CkBAIC05OTYsNyArOTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEp
LCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDI0LDEwICsxMDI0LDEwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3Rv
bT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBi
eXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVl
ID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVj
b2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUg
PSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgcmVnVDEpOwpAQCAtMTEwNCw4ICsxMTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGUK
IHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld1JlZ2V4cD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdS
ZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0
PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTExMTUsMTIgKzExMTUsMTIgQEAg
dm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwog
CkBAIC0xMTYxLDExICsxMTYxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNl
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsK
KyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9u
RXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CkBAIC0xMjA3LDEwICsxMjA3LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXJyYXk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCB2YWx1ZXNJbmRleCA9IGJ5dGVjb2RlLm1fYXJndi5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0
YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVl
c1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOwogfQpAQCAt
MTIxOSw4ICsxMjE5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNpemVJbmRleCA9IGJ5dGVj
b2RlLm1fbGVuZ3RoLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5n
dGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLApAQCAtMTIzNiw5ICsxMjM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwot
ICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDEpOwpAQCAtMTI4Miw5ICsxMjgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0
eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAgICAgCkBAIC0x
MzMwLDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAg
aW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAogICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTEzNDksMTAgKzEzNDksMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOwotICAg
IGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM5MCw5ICsxMzkwLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0MTQsOSAr
MTQxNCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgp
OwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7
CkBAIC0xNDQwLDcgKzE0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiog
Y2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247Ci0gICAgaW50IHZh
bHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRW
aXJ0dWFsUmVnaXN0ZXI7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9m
aWxlLCByZWdUMCk7CiAKQEAgLTE1MDksNyArMTUwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJl
IGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBz
Y3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTE1
MjMsOCArMTUyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0
Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lz
dGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0No
aWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJS
ZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zm
c2V0KCksIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIApAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCksIHJlZ1QwKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAg
ICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3Mo
cmVnVDAsIHJlZ1QxKTsKQEAgLTE1NTYsNyArMTU1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Fy
Z3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFJlc3RMZW5ndGg+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNp
Z25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7CiAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1Qw
KTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKQEAgLTE1ODYsNyArMTU4Niw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKQEAgLTE1OTYsNyAr
MTU5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QyKTsKICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgp
KTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
KyBpbmRleCksIHJlc3VsdFJlZ3MpOworICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdz
KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxp
bmsodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKaW5kZXggYWU1YjZhZDU0Y2E4MTM2ZWNhYzFiNjQxMWM5NTczNDMwZTVjMWY3YS4uYzQ2Mzc5
YTlmOWVjY2FlNzQ0YThlN2FjODA4NTUxZmViZjJmYTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAog
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZm
ZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBt
ZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC05NDMsNyArOTQz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiAgICAg
c2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAzYjQ4NTBmYWI4ZDZmYWU5
MzBlOWU4NjkzYzQ0YmJmNGExZTQzOTNkLi44Y2I1NWZiNWI3ZWY4NWYwYWMxMTlmMjJlZTJhZDE5
MWFjMTkwNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKQEAgLTE2NTQsMTggKzE2NTQsMTggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWMKICAgICAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpCiAgICAgICAgICAgICBkYXRh
TG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
XG4iKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgdW5z
aWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkK
ICAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwot
ICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworCisgICAgICAgIE9w
ZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcywgMCk7CiAgICAgICAgIGludCBsb2NhbHNV
c2VkRm9yQ2FsbGVlU2F2ZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KENvZGVCbG9jazo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwot
ICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2FsKG9wZXJhbmQpICYmIFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKS50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChp
KTsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2Nh
bCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUo
KTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sg
PSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CkBAIC0xNzgzLDcgKzE3ODMsNyBAQCBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZShWTSogdm1Qb2ludGVyLCB1aQogICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lz
Q29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENh
dGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxl
Lm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJv
ZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5MDcsOCArMTkwNyw4
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBpbnQzMl90IHNjb3BlCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIEpTU2NvcGUqIHNjb3BlID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQoKTsKKyAgICBhdXRvJiBz
Y29wZVNsb3QgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKHNjb3BlUmVn
KSk7CisgICAgc2NvcGVTbG90ID0gc2NvcGVTbG90LlJlZ2lzdGVyOjpzY29wZSgpLT5uZXh0KCk7
CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNPYmplY3QqIGNvbnN0cnVjdG9yLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkSGFzSW5zdGFuY2Up
CkBAIC0yNDE2LDcgKzI0MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEZyb21TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAg
SlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CisgICAgSlNPYmplY3QqIHNj
b3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1f
c2NvcGUpLmpzVmFsdWUoKSk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jaykubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGlz
IGFsd2F5cyBjb252ZXJ0ZWQgdG8gQ2xvc3VyZVZhciBmb3IgZ2V0X2Zyb21fc2NvcGUuCkBAIC0y
NDU5LDggKzI0NTksOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cgogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKIAogICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBK
U09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAg
ICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2Fs
bEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBHZXRQdXRJbmZvJiBn
ZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGRv
ZXMgbm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERGRy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYWI5
OWZkOTg3YjA2MWYyZTc2YTE3YzI4YmU4YzRlNzI2NWEyZDgxNS4uZTcyOWZjMDU4ZWM2OGVjMTFm
MzJkNTcwNzg5Yjc3YTA5NzVkMjZmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTCiB7CiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwot
ICAgICAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIApAQCAtMTE3LDggKzExNyw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2Rl
QmxvY2stPmFkZEJ5VmFsSW5mbygpOwogCkBAIC0xNzcsNyArMTc3LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1NoYXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjA4LDcgKzIwOCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgogICAgICAgICBzdG9yZTY0KHJl
Z1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQ1JBU0goKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAg
ICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yNDksNyArMjQ5LDcgQEAgSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSkKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUlu
ZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9i
YXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgIEp1bXAgZW5kID0ganVtcCgpOwog
ICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBAIC0yNzQsOCArMjc0LDggQEAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFs
SW5mbywgT3AgYnl0ZWMKICAgICAvLyBwcm9wZXJ0eTogcmVnVDEKICAgICAvLyBzY3JhdGNoOiBy
ZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVn
VDEpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMSwgcmVn
VDEsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTMwNCwxNCArMzA0LDE0IEBAIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIE9wIGJ5dGVjCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaW50IGJhc2U7Ci0g
ICAgaW50IHByb3BlcnR5OwotICAgIGludCB2YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICAgICAgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwotICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUu
b2Zmc2V0KCk7CisgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgICAgIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC0zMzcsMzYgKzMzNywzNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iu
b2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlci5vZmZzZXQoKSwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIub2Zmc2V0KCksIHJl
Z1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJl
Z1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKQEAgLTM3
NSwxOCArMzc1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlW
YWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iu
b2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBpbnQgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVz
dWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwpAQCAtMzk1LDkg
KzM5NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CkBA
IC00MDYsOCArNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
QEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDg1LDggKzQ4NSw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTEzLDkg
KzUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2wKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAg
LTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgr
K107CkBAIC01NzEsOCArNTcxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNv
ZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBh
YmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3
ZSBzdG9yZSBvbmUgcG9pbnRlciwKQEAgLTYxNSw4ICs2MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpA
QCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCB2b2lkIEpJVDo6
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UmVz
b2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKK3ZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKQEAgLTY3MCw4ICs2NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAg
IHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKQEAgLTc3MCw3
ICs3NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQor
dm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKIHsKICAgICBsb2FkUHRyKHN0cnVjdHVyZVNs
b3QsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBA
IC03OTAsNyArNzkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQogICAgIGxvYWRQdHIocmVnLCByZWcpOwog
fQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCkKK3ZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdU
MCk7CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
OwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5z
bG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CkBAIC05MTksMTcgKzkxOSwxNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSog
b3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKICAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwg
b3BlcmFuZCk7CiB9Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGly
ZWN0V2F0Y2hwb2ludFNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNl
dCwgcmVnVDEpOwpAQCAtOTM4LDcgKzkzOCw3IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXCiAg
ICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJl
VmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC05NTAsOCArOTUwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZv
ID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKQEAgLTEwODYsOCArMTA4Niw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAg
ICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKQEAgLTEw
OTksOSArMTA5OSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVu
dHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsK
ICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywg
cmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKQEAgLTEx
MTAsNyArMTExMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFy
Z3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3du
ZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAg
IEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTMzLDcgKzExMzMsNyBA
QCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlz
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWdu
ZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAg
ICBKdW1wIHZhbHVlTm90Q2VsbDsKQEAgLTExNTAsOCArMTE1MCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
SW50ZXJuYWxGaWVsZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwpAQCAtMTE2NCw4ICsxMTY0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxf
ZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEludGVybmFsRmllbGQ+KCk7
Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTE3Niw3ICsxMTc2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTE5OSw3ICsx
MTk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2ln
bmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxp
bmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewpAQCAtMTQyNSw3ICsxNDI1LDcgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQg
YmFzZSA9IHJlZ1QwOwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHkKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXgg
MmNmOTE5OGY0MGVkYWFmNTNhNjFkYmYzMzkwYTZjN2RiMjg2YTVjMS4uNTgyNzEzZTY0MDg3YTUx
ZjU5MzliOTBiOTg1NDVkZjEzM2QwYzZhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaApAQCAtNDUsMTggKzQ1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbCh1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAg
ICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZSh1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9h
ZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICBpbmxpbmUg
SnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBpbmxp
bmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4
KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIpOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihpbnQgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBpbnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAgdm9pZCBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lz
dGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAg
dm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVn
aXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lk
KiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Q2Vs
bFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5
KTsKIAogICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKQEAgLTY0LDM2
ICs2NCwzNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBh
eWxvYWQpCiAgICAgewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmly
dHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJl
Z2lzdGVyKSwgcGF5bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1w
IEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdp
c3RlckluZGV4KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5k
ZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNo
MzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVh
bCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVh
bFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBs
b2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxS
ZWdpc3RlckluZGV4KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAg
ICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwor
ICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRz
dCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
OwotICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gp
OworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXgpOworICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNo
KTsKICAgICAgICAgSnVtcCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3JhdGNoLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykp
OwotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3Jh
dGNoKTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0
Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7Cisg
ICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQpAQCAt
MTAxLDIzICsxMDEsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjpl
bWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4
KSwgZHN0KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0
KTsKICAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0KICAgICAKLSAg
ICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50
MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlu
bGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0g
ICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAg
ICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAg
SnVtcCBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAgemVyb0V4dGVu
ZDMyVG9QdHIoZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAgICAgfQogCi0g
ICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERv
dWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVn
aXN0ZXJJRCBzY3JhdGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rlciwg
RlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgbG9h
ZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAg
bG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1
bXAgbm90TnVtYmVyID0gYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAgICAgIEp1bXAg
bm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKQEAgLTEyOSwxMiArMTI5LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIH0KICNlbmRpZgogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNl
SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIFJlZ2lzdGVySUQg
dG8sIFJlZ2lzdGVySUQgZnJvbSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwg
UmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRv
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpA
QCAtMTQzLDEyICsxNDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpCiAgICAgewogICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZh
bHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIGludCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVn
aXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnkpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKaW5kZXggMzg4
NzMwNTJkMTI4NTJmYzZiYjkxNDJkNDU2MDdhZThlMTlhNjcwYS4uMGJhNzNlZjhjMTM0ZWJiYmQx
ZDA0YTRiMTcyMTRmNGZhNzM1MTgzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBu
dW1Vc2VkU2xvdAogICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3Rl
cigwKTsKICAgICB9IGVsc2UgewogICAgICAgICBhcmd1bWVudENvdW50UmVjb3ZlcnkgPSBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMik7CisgICAg
ICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBEYXRhRm9ybWF0SW50MzIpOwog
ICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoMCkpOwogICAgIH0KICAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2Fz
ZSh2bSwgaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2Ny
YXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1bWVudFJlZywgZmlyc3RW
YXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
cGVjaWFsaXplZFRodW5rSklULmgKaW5kZXggNGY1NjdkMDZhZWE1NDRhYjI2NzE1NWMxM2RmMzZh
NzI0OWI2YzM0My4uOTMzY2E5YmUxMDJlMGVkZjk0YmI0ZWFlODI4MjE0ODIyOWM4MjZmNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKQEAg
LTU1LDEzICs1NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
bG9hZERvdWJsZUFyZ3VtZW50KGludCBhcmd1bWVudCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0
ZXJJRCBzY3JhdGNoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAg
ICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZERvdWJsZShzcmMsIGRzdCwgc2NyYXRjaCkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRDZWxsQXJndW1lbnQoaW50
IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWRKU0NlbGwoc3JjLCBk
c3QpKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRJbnQzMkFyZ3VtZW50KGludCBhcmd1bWVu
dCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZhaWxUYXJnZXQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIGZhaWxUYXJnZXQgPSBlbWl0TG9hZEludDMyKHNy
YywgZHN0KTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA1MjQxZTVmN2NjMzMyYTY0ZTBkZTZkYjQ0YmRh
ZjllOGU4MGYyMmFhLi5jMzc2ZGJlMmNkN2Q2ZGQzZmE1NDg3YjU3YjU4OTQ3ZjZkZmJhMzMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC0x
MDMyLDggKzEwMzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFi
c1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1bnNpZ25l
ZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7Ci0g
ICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApOworICAgIGppdC5sb2FkNjQoQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJlZ1Qw
KTsKICAgICBhdXRvIG5vdEludGVnZXIgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihHUFJJbmZvOjpy
ZWdUMCk7CiAKICAgICAvLyBBYnMgSW50MzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAzNTdhNDZlOGU1Nzg5N2YyNzg1Y2QzMzlmY2Jl
MmJjMGM5MGNlZGIyLi42YTFhZjlmMDAxZmNjZTJiMzZiNzcxYTgwYTNmYmM1Y2E5NTY2YmMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5o
IgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBA
IC05OCw4ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogICAgIExM
SU5UX0JFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAgICAgICAgXAogICAgIExMSU5UX1NF
VF9QQ19GT1JfU1RVQlMoKQogCi1pbmxpbmUgSlNWYWx1ZSBnZXROb25Db25zdGFudE9wZXJhbmQo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyBy
ZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsg
fQotaW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
VmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZC5v
ZmZzZXQoKSkuanNWYWx1ZSgpOyB9CitpbmxpbmUgSlNWYWx1ZSBnZXROb25Db25zdGFudE9wZXJh
bmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVy
biBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CitpbmxpbmUgSlNW
YWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9wZXJhbmQpLmpzVmFsdWUoKTsgfQogCiAjZGVm
aW5lIExMSU5UX1JFVFVSTl9UV08oZmlyc3QsIHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAgICAgICBcCkBAIC0xNTcxLDcg
KzE1NzIsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxsKENvZGVCbG9j
ayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgIENhbGxGcmFtZSogY2FsbGVl
RnJhbWUgPSBjYWxsRnJhbWUgLSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgCiAgICAgY2FsbGVlRnJh
bWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7Ci0gICAg
Y2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFz
VmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0
Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKICAgICAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CkBAIC0xNjg5LDcgKzE2OTAsNyBAQCBpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lQW5kU2V0VGhp
cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIHZtLnZhcmFyZ3NMZW5ndGgpOwogCiAgICAgY2Fs
bGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2Fs
bGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwog
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFt
ZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOwpAQCAtMTcyNSw3ICsxNzI2LDcgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29u
c3QgSW5zdHJ1Y3Rpb24KICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVy
RnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2Vk
UihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVl
OwogICAgIGNhbGxlZUZyYW1lLT5zZXRSZXR1cm5QQyhyZXR1cm5Qb2ludC5leGVjdXRhYmxlQWRk
cmVzcygpKTsKICAgICBjYWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOwogICAgIGNh
bGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CkBAIC0xOTEyLDcgKzE5MTMsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSkpOwogI2Vsc2UKLSAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHBj
KSkpOworICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCgqcGMpOwogI2VuZGlmCiAKICAg
ICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAt
MTkzMCw3ICsxOTMxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVf
Y2F0Y2gpCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRh
Lm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
eworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0g
SlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCku
anNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTk2MSwxMSArMTk2MiwxMjMgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5U
X0VORF9JTVBMKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lk
IGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gc2lkZVN0YXRlLmdldFRtcDxKU1ZhbHVlPihPcGNvZGU6OmFyZ0NvdW50KS5hc1VJ
bnQzMigpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgewor
ICAgICAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5
dGVjb2RlLm1fYXJndW1lbnRzKS5qc1ZhbHVlKCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMSk7CisgICAgfSk7CisgICAgaWYgKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAg
ICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAh
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKKyAgICAgICAgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmpl
Y3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQo
Y2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKyAgICBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJl
c3VsdDsKK30KKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaE5leHRJbnN0cnVj
dGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT52bSgpLmV4Y2VwdGlvbkZvckluc3BlY3Rp
b24oKSk7CisgICAgaWYgKE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGNv
bnN0IEluc3RydWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCkucHRyKCk7CisgICAgICAgIGF1dG8g
bmV4dEJ5dGVjb2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKnBjLm5leHQo
KS5wdHIoKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0Qnl0ZWNv
ZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAg
IEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAg
ICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5
dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbmV4dEJ5dGVj
b2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRo
X2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkKK3sKKyAgICAvLyBTaW5jZSBhbGwgb3VyIGNhbGxp
bmcgY2hlY2twb2ludHMgZG8gcmlnaHQgbm93IGlzIG1vdmUgcmVzdWx0IGludG8gb3VyIGRlc3Qg
d2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJlIGFuZCByZXR1cm4uCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRl
ID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgYXV0
byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHBjLT5hczxPcENhbGxWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczog
eworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ29uc3RydWN0VmFyYXJn
cz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIC8vIG9wX3RhaWxfY2FsbF92YXJhcmdzIHNob3VsZCBuZXZlciByZXR1cm4gaWYg
dGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5nIHdhcyBpbmxpbmVkLgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBkaXNwYXRjaE5leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30K
KworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3Ny
X2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIC8qIG5lZWRlZCBmb3Ig
Y0NhbGwyIGluIENMb29wICovKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgU2xv
d1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50
T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIEFTU0VSVChieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSk7CisKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7Cisg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAg
aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+
YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVj
a3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ29uc3RydWN0VmFy
YXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGMubmV4dCgp
LT5vcGNvZGVJRCgpID09IG9wX3JldCwgIldlIHN0cm9uZ2x5IGFzc3VtZSBhbGwgdGFpbCBjYWxs
cyBhcmUgZm9sbG93ZWQgYnkgYW4gb3BfcmV0LiIpOworICAgICAgICBoYW5kbGVWYXJhcmdzQ2hl
Y2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcFRhaWxDYWxsVmFy
YXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQocmV0dXJuVG9UaHJvdyh2bSksIDApOworCisgICAgcmV0dXJuIGRp
c3BhdGNoTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCiBleHRlcm4gIkMiIFNs
b3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSogdm0s
IFByb3RvQ2FsbEZyYW1lKiBwcm90b0ZyYW1lKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gdm0tPnRvcENhbGxGcmFtZTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSgqdm0pOwotCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxwdHI7CiAg
ICAgaWYgKGNhbGxGcmFtZSkKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCp2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5oCmluZGV4IDJmZjI4YjAwNmJjMjIzMzMwY2M2Nzg2NWExNjc5NGE5MGU3ZTdh
YWUuLjA1NWY1YzlhMWE4ZjlhNWEzYjQ2M2U3NTcxYzY0NmEyMDc1OTJkYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xMzYsNiArMTM2LDgg
QEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdXBlcl9zYW1wbGVyX2Jl
Z2luKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxl
cl9lbmQpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGlu
ZV9qdW1wX3RhcmdldCk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJv
d19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFM
OworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3Ny
X2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIHVudXNlZCk7CitleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgY2Fs
bFJlc3VsdCk7CiAjaWYgRU5BQkxFKENfTE9PUCkKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5U
eXBlIGxsaW50X3N0YWNrX2NoZWNrX2F0X3ZtX2VudHJ5KFZNKiwgUmVnaXN0ZXIqKSBXVEZfSU5U
RVJOQUw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQppbmRleCBlMTczNGRjZjYxYjRjZmM1NTEyZmEyODU2MDFiY2Fi
MzBjODhmMmU0Li4wMmEyMmVmMGIzZGY3M2NiM2RhMjA1ZWUwZjBlMWU0ZmIzMjZmMjJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJu
UG9pbnQob3BOYW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUs
IHNpemUpCiAKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBB
cmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5Q
Q1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRl
eGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTgzOSwxMyArMTgzOSwxNyBAQCBlbmQp
CiBjYWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBt
YWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3Jv
IGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgdDMKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06
Om1fZXhjZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9t
X3Nsb3dfcGF0aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRh
cmdldAorLm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBi
cmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkK
ICAgICAjIGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUg
cjEsIHNwCkBAIC0yMDAwLDYgKzIwMDQsMzUgQEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiBlbmQpCiAKIAorb3AoY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGlmIEpT
VkFMVUU2NCBhbmQgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKKyAgICAgICAgbW92ZSBjZnIs
IGEwCisgICAgICAgIG1vdmUgcjAsIGExCisgICAgICAgICMgV2UgZG9uJ3QgY2FsbCBzYXZlU3Rh
dGVGb3JDQ2FsbCgpIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgYnl0ZWNvZGVJbmRl
eCBmcm9tIG91ciBzaWRlIHN0YXRlLgorICAgICAgICBjQ2FsbDIoX3Nsb3dfcGF0aF9jaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKQorICAgICAgICByZXN0b3JlU3RhdGVBZnRl
ckNDYWxsKCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xv
d19wYXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMQorICAgIGVsc2UKKyAgICAgICAgbm90
U3VwcG9ydGVkKCkKKyAgICBlbmQKK2VuZCkKKworb3AoY2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lLCBtYWNybyAoKQorICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSBkaXNwYXRjaCB0
byB0aGUgY2hlY2twb2ludCBoYW5kbGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdhcyBlYXNpZXIgCisg
ICAgIyBhbmQgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgIGlm
IEpTVkFMVUU2NCBhbmQgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKKyAgICAgICAgbW92ZSBj
ZnIsIGEwCisgICAgICAgICMgV2UgZG9uJ3QgY2FsbCBzYXZlU3RhdGVGb3JDQ2FsbCgpIGJlY2F1
c2Ugd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgYnl0ZWNvZGVJbmRleCBmcm9tIG91ciBzaWRlIHN0
YXRlLgorICAgICAgICBjQ2FsbDIoX3Nsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KQorICAg
ICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAgICAgICAgYnJhbmNoSWZFeGNlcHRpb24o
X2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgICAgIGptcCByMQor
ICAgIGVsc2UKKyAgICAgICAgbm90U3VwcG9ydGVkKCkKKyAgICBlbmQKK2VuZCkKKwogIyBMYXN0
bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBv
cnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4g
dXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CiAjIGFzIG11Y2guCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCmluZGV4IDAzMDgxMWZhYzEyODhjNDY0ZmUyOGEzYmNhMDFiNTIyZDRhY2Y0MDYuLmM0
ZTk1ZDdkOGJhMDQ5NTBiMzJjOTNlMjNjZmI2MjU0MjJkZTk4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CkBAIC0xNDMsMTEgKzE0MywxOSBAQCBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCiAgICAgZW5kCiBl
bmQKIAorbWFjcm8gcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQorICAgIG1vdmUgUEMsIGExCitlbmQK
KworbWFjcm8gcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgbW92ZSByMCwgUEMKK2VuZAor
CiBtYWNybyBjYWxsU2xvd1BhdGgoc2xvd1BhdGgpCiAgICAgbW92ZSBjZnIsIGEwCi0gICAgbW92
ZSBQQywgYTEKKyAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgY0NhbGwyKHNsb3dQYXRo
KQotICAgIG1vdmUgcjAsIFBDCisgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCiBlbmQKIAog
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCAzZGQyZWI0OGNiYmE2ZWY1
Y2Q5ODg2MzljNzkxMWUyMmE3MTMzMTQ4Li40MTFkZjJjNjc1MjMzMGIzN2I5NmFiY2VkODdhODQ0
NmE4NzU2OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIsMTQgQEAgbWFjcm8gbmV4dEluc3Ry
dWN0aW9uV2lkZTMyKCkKICAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFn
CiBlbmQKIAorbWFjcm8gc3RvcmVQQygpCisgICAgc3RvcmVpIFBDLCBMTEludFJldHVyblBDW2Nm
cl0KK2VuZAorCittYWNybyBsb2FkUEMoKQorICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwg
UEMKK2VuZAorCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1Y3QsIGZpZWxkTmFt
ZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8lZmllbGROYW1lJV9p
bmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZApAQCAtOTIsNyArMTAwLDcgQEAgZW5kCiAKICMgQWZ0
ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFpbWluZyBpbnB1dCByZWdpc3RlcnMg
YXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0
LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBD
CisgICAgbG9hZFBDKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUs
IG9wY29kZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzkwLDcgKzM5OCw3IEBAIGVuZAogCiAjIENh
bGwgYSBzbG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgo
c2xvd1BhdGgsIGFjdGlvbikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZz
ZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBt
b3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpAQCAtMzk5LDIwICs0MDcsMjAgQEAgbWFjcm8g
Y2FsbENhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQogZW5kCiAKIG1hY3JvIGNhbGxUcmFw
SGFuZGxlcih0aHJvd0hhbmRsZXIpCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFn
T2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAg
ICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Nsb3df
cGF0aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxvYWRp
IEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkaSBMTEludFJldHVy
blBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAg
IGNoZWNrU3dpdGNoVG9KSVQoCiAgICAgICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAg
ICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCisgICAgICAgICAg
ICBzdG9yZVBDKCkKICAgICAgICAgICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICAgICAg
ICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTQyMSw3ICs0Mjks
NyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIHIx
LCBzcAogICAgICAgICAgICAgam1wIHIwLCBKU0VudHJ5UHRyVGFnCiAgICAgICAgIC5yZWNvdmVy
OgotICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwor
ICAgICAgICAgICAgbG9hZFBDKCkKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTE3NjgsNiArMTc3
Niw4IEBAIG1hY3JvIHB1dEJ5VmFsT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBvc3JFeGl0
UG9pbnQpCiAgICAgZW5kKQogZW5kCiAKKworCiBwdXRCeVZhbE9wKHB1dF9ieV92YWwsIE9wUHV0
QnlWYWwsIG1hY3JvIChzaXplLCBkaXNwYXRjaCkKIC5vc3JSZXR1cm5Qb2ludDoKICAgICBnZXR0
ZXJTZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BfcHV0X2J5X3ZhbCwgc2l6ZSkKQEAgLTIwNTcs
NyArMjA2Nyw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bj
b2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0Mwog
ICAgICAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVT
dHJ1Y3QsIG1fYXJnYywgdDIpCi0gICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRh
Z09mZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3Vt
ZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAg
ICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1f
bWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4IDg0MGY4OWI4OGQ0MjBjYzNiNzVj
ODNkNmM1NzgyNDE1NDAyZjMzNjYuLjhmNTA1Y2M2OTljZDRhZTM3ZWYzNDUwMGZkZmJlNjk5OTgw
N2NkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKQEAgLTEzMyw2
ICsxMzMsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBvdmVyZmxvd0NoZWNrTm90TmVlZGVkKCkg
eyBjbGVhck5lZWRzT3ZlcmZsb3dDaGVjaygpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZmlsbChzaXplX3QgY291bnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMp
CisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAgICAgIGVuc3VyZUNhcGFjaXR5
KGNvdW50KTsKKyAgICAgICAgaWYgKEJhc2U6Omhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbV9zaXplID0gY291bnQ7CisgICAgICAgIGZ1bmMocmVpbnRlcnBy
ZXRfY2FzdDxKU1ZhbHVlKj4oJnNsb3RGb3IoMCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
dm9pZCBleHBhbmRDYXBhY2l0eSgpOwogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IG5ld0Nh
cGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNw
cAppbmRleCBmOGQ5Nzk5NTg3NDUyMjZhNDdlNmY4YjZjNTU4NjBjMThmY2U4N2ExLi5mZmI3NDU5
YTZhZGNjYmFiMTZkYThhNGVmOGIxNzExZDg3MmExYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xNzg4LDYgKzE3ODgsNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXJpdmVkQ29udGV4dFR5cGU7IH0KICAgICB1bnNpZ25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxs
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9CisgICAgdW5zaWduZWQgaGFzQ2hl
Y2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAgdW5zaWdu
ZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25l
ZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCkBAIC0xODIwLDYg
KzE4MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsK
ICAgICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2RlVHlw
ZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVja3BvaW50cyA6IDE7CiAKICAgICBDb2RlRmVh
dHVyZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC0y
MDE4LDYgKzIwMjAsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtl
ZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqCiAKICAgICAsIG1fZGlkT3B0
aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2Uo
MCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2FjaGVkQ29kZUJsb2NrLmhhc0NoZWNrcG9pbnRz
KCkpCiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZlYXR1cmVzKCkpCiAgICAg
LCBtX3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKCkpCkBAIC0yMjA2LDYgKzIy
MDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29ucwogICAgIG1fcGFyc2VNb2RlID0gY29kZUJs
b2NrLm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdlbmVyYXRpb25Nb2RlID0gY29kZUJsb2NrLm1f
Y29kZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29kZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlw
ZTsKKyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAK
ICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQo
KSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEu
Z2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKaW5kZXggZjM1OGQ0OGE1MGRlNzNlYWIzODU2OTliM2E2ZjUxMTNiYmJlOWJiYS4u
OWI0ZDc4OWY0YTg2YWE0ZjQyOGYxNGQyZmE1NzJhMDJiNGQ3MDJiMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05OCw4ICs5
OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJFR0lOX05PX1NFVF9QQygpOyAgICAgICAgICAg
ICAgICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RVQlMoKQogCi0jZGVmaW5lIEdFVChvcGVyYW5k
KSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRf
QyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpKQorI2RlZmluZSBHRVQo
b3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkKKyNkZWZpbmUgR0VUX0Mo
b3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKIAogI2RlZmluZSBSRVRVUk5fVFdPKGZp
cnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZp
cnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTEzOSw4ICsxMTM5LDcgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQogewogICAgIEJFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4o
KTsKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpT
U2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVn
aXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEdFVF9DKGJ5dGVjb2Rl
Lm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBH
RVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChpbml0
aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNURFpWYWx1ZSgp
KTsKQEAgLTExNTUsOCArMTE1NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX3dp
dGhfc2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNvZGUubV9uZXdT
Y29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZz
ZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
c2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2N1cnJlbnRTY29wZSkuUmVnaXN0ZXI6
OnNjb3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgY3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQogCkBAIC0xMTY1LDcgKzExNjMsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsKICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUo
KTsKICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JI
b2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKIAogICAg
IENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTE3OSw3ICsxMTc3LDcgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJl
c29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNv
ZGVCbG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwor
ICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2Nv
cGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNT
Y29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8gUHJveHkg
Y2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBA
dW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xNDI0LDcgKzE0MjIsNyBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKIHsKICAgICBCRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2lt
bXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOworICAgIEFTU0VSVChieXRlY29kZS5tX2ltbXV0
YWJsZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwogICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBp
bW11dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihH
RVRfQyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsK
ICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NDMsNyArMTQ0MSw3IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBh
bGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0
J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRp
b24gdGhyZWFkLgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICBjb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zm
c2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBj
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkp
LnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCA0YmQxOTJhNmM3N2VmYzAyNmU3YTk1YTViN2Jl
YzcxMjQzNjc3ZTc4Li40N2IyNDc0MThjYTg4ZWZkMWI3OGU2MzExYjY3NWQxZWZhNWE1ZmYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApA
QCAtMzUsNiArMzUsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBKU09iamVjdCogY29uc3RydWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3Qs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICBy
ZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVj
dG9yT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU09iamVjdCogY29uc3RydWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3Qs
IEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTQ2LDEwICs1MSw5IEBAIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25z
dHJ1Y3Rvck9iamVjdCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVj
dG9yT2JqZWN0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xv
YmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0
YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAKIH0KIAotCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0
cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc3RydWN0RGF0YS5oCmluZGV4IGQwYWUwMGJhMTFkN2NlZTI0ZGZmYWU5MTkxMTk2N2UwMmFh
NmVkZTMuLmZiNjE5NzRhN2RiMzljNDkxZjlmOTNiYWViNmNhYzEyNjIxZjNiYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKQEAgLTYwLDYgKzYw
LDggQEAgc3RydWN0IENvbnN0cnVjdERhdGEgewogCiAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIHNv
IHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUgdW5sZXNz
IHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgY29uc3Qg
QXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1l
c3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3Ry
dWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlIG5ld1RhcmdldCk7CiAKIEFMV0FZU19J
TkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNv
bnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApp
bmRleCBhNjc5NWRhMWVkY2NmMzEwMjJhYzJkZDlhZWZhZmQ0M2EwMWE1Yzg1Li40YjM0NjFkZTIy
ZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1MDlmMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKQEAgLTEzNywyMCArMTM3LDE5IEBA
IHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5k
ZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3RoKCkpID0g
dHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fbWFwcGVkQXJndW1lbnRzKSB7CiAgICAgICAg
IHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAg
ICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0
RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGxpbWl0
OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtp
XS5nZXQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBzdG9y
YWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAg
ICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3Qs
IGkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGds
b2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB1bnNp
Z25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAppbmRleCAwYTZiMWEwNjYw
OTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNlNzcyZTBhLi44ZDk2NDJhMmM5NDA0MDgwYjkxM2FjMjcw
Y2QwMTNjMzllY2RhODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50
RGVzY3JpcHRvcihpbmRleCwgbV9sZW5ndGgpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lk
IGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5G
TzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaAppbmRleCBiMzFiNzBhYmQwMGNlZWFmNWViYjdlZTFkNDY3ZGE0ODg3MGQ1MWMxLi4w
NzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJkYWIzZGFlZWIyNzJjYmJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCkBAIC01OSw3ICs1OSw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKFZN
JiwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBpc01vZGlmaWVk
QXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0g
ICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1bWVudHNQdHIgPSBDYWdlZEJhcnJpZXJQdHI8R2lnYWNh
Z2U6OlByaW1pdGl2ZSwgYm9vbD47CiAgICAgTW9kaWZpZWRBcmd1bWVudHNQdHIgbV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAppbmRleCAyMTgyYTYyYjEzMDM0M2Fm
NTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZmLi5lMGFhYmY1ZjJlZTE4NWI3ZDEzMzE2MDM3ZDhjMWQ4
ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29sIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQg
aW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMDUsOSArMzA1LDkgQEAgdm9pZCBHZW5l
cmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEYKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+
KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpICsgb2Zmc2V0KSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5n
ZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0
W2ldID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBn
ZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERl
c3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDQ0YzdlNTIwZjFjMGEyNDBh
OGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAuLjZkMDc1OTE3MTFlZWRiYzI4ZTBlNGRhNzg0OTgyMmFi
OGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBA
IC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcgogICAgICAgICBhcmdz
LmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0LCBpKSk7CiB9CiAKLXZvaWQgSlNBcnJheTo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTI2OSw3
ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgICAgIGRvdWJsZSB2
ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQodGhpcywgaSk7CiAgICAgICAgICAg
ICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6
RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zm
c2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTQsMTEgKzEyOTQsMTEgQEAgdm9pZCBKU0FycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ld
OwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IHYuZ2V0KCk7CisgICAgICAgIGZp
cnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgpOwogICAgIH0KICAgICAKICAgICBm
b3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKKyAgICAgICAgZmly
c3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCAzMTc5NDljNTcyYTExYjc1YWRjMTgz
YWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2NWI1ZmY0OTI1NGNjMWE2YzQ3OTAyYjc5MTBhYzRhN2Q5
YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xNjMsNyAr
MTYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmls
bEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgaXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3Bw
CmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAzM2RhYTk5YTU5MzZkZWExOWExYzQ5YzAuLmU0OTA5NzU2
MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEyYzE5MTFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKQEAgLTQ2LDEz
ICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNI
aWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQg
SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICBjYWxsRnJh
bWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGkgKyBvZmZzZXQpOworICAgICAgICAg
ICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0ganNVbmRlZmluZWQoKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4IGFjYjY4NDgxOTFhMTkwMzUyMmI5YjNlNGQwMGY5Njll
NDBiNzgxNWEuLjA3ZTFhOGExMGMzY2RjNzExN2FjYTNkYzU0M2VkN2RkYjBkNDFmM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJm
bHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5k
ZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgxNjgzNDk3ZS4uMTZhYTM2OWY0ODUw
NzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAgdm9pZCBKU0xvY2s6OndpbGxSZWxl
YXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9IG1fdm07CiAgICAgaWYgKHZtKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0tPmhhc0NoZWNrcG9pbnRP
U1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0IHBlbmRpbmcgY2hlY2twb2ludCBz
aWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAgICB2bS0+ZHJhaW5NaWNyb3Rhc2tz
KCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmlu
ZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFkNmRlMzdiYTAuLjU5NjgwOGNhZmMw
YjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0
LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KIAogICAgIGV4ZWN1dGFibGUtPm1f
dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4
ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0YWJsZS0+
bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4
ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUt
PmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkuZ2V0KCkpLT5jbG9uZVNj
b3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwg
anNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSkpLmdldCgpKS0+
Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAgICByZXR1cm4gZXhlY3V0
YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
NDEzODdjODUwYTk5NWFkNTc0MjEwNTBjZGU4NmNiMjUyMWU1NDExNi4uOTFlZDczOWUyNWY0OTM4
ZWY1MDI3MjdkZjUxNjgwZDg2Y2EyMDg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMSArNTA5LDkgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRl
RGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXpl
KCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6
ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA9IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplOwogCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAvLyBGSVhNRTogTWFrZSBwcm9iZSBPU1IgZXhpdCB3b3JrIG9uIDMy
LWJpdDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxzZTsKLSNlbmRpZgogCiAg
ICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0Nh
Y2hlUGF0aCgpID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4MWQ5NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0
NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2MDVmYmY1MjViZGRmMjMxOTJkMDlkYjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNw
cApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50
KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAgc3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0u
Y2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0
LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYyOWVkNGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIy
ZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUwODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6
aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV90YWJsZS0+bGVuZ3RoKCkpOwog
ICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAppbmRleCA2NGRkZmNiMWEyNTYwZTZmZTFiNDU0ZTRmZWUxNDg5MmFkYzA4YTlm
Li44ZjZlNTY1ZTI0N2U1YTIzMTkzMzE5ODgyODY3MmUyMTA0ODgxNjU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQm9vbGVh
bk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5FeGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMTAyNyw2ICsxMDI4LDIwIEBAIHZv
aWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2Vy
dmF0aXZlUm9vdHMpCiB9CiAjZW5kaWYKIAordm9pZCBWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPiYmIHBheWxvYWQpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jaGVja3BvaW50U2lkZVN0
YXRlLmFkZChjYWxsRnJhbWUsIFdURk1vdmUocGF5bG9hZCkpOworICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gVk06OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRl
KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIHNpZGVTdGF0ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0
ZS50YWtlKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHNpZGVTdGF0ZTsKK30KKwogdm9pZCBsb2dT
YW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXpl
U3RhY2soKSAmJiB2bS50b3BDYWxsRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CmluZGV4IDI4MDg2YzRlZDkxNjA2YzI4MWIxYTFkNWI3YTFkYWIwNjA4ODA3MGEuLjI1YzRhNTE0
YTE4YzY3MGU2NTQzMWFiOTY4Nzg4MzM4MWQ3MWVjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaApAQCAtMTAzLDYgKzEwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnVpbHRp
bkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENh
bGxGcmFtZTsKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVC
bG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtOTQ5
LDYgKzk1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhDb25zZXJ2YXRpdmVSb290cyYpOwogCisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0
YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBm
aW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNr
cG9pbnRPU1JTaWRlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUu
c2l6ZSgpOyB9CisKICAgICBWTUVudHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVj
dCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMDAs
NiArMTIwNSw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAg
IFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gbV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9z
aXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0
ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNp
ZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFi
bGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9s
Rmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5j
cHAKaW5kZXggODFjOWYxZjY3NDcwNzllZDgzMTI2NjJjMDgzMDBjNmNjMzYyOGUzNy4uZTE0ODQw
MGQ0ODdkZmM2NGU0NDA1NGRkYWRiMDg1ODk3MmUzOWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUlu
c3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBS
ZWdpc3RlciogaXQ7CiAgICAgY29uc3QgUmVnaXN0ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSk7CisgICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxKTsKICAgICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAg
ICAgSlNWYWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVy
ID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDll
MGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0
NzM1MmMwZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBW
ZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsg
fQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJl
dHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0
Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRD
b25zdGFudFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3Qg
Z2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRD
b25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0
dXJuIG1fY29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsK
KyAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwog
ICAgIH0KIAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVj
dGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAKaW5kZXggYWIxNzQwNmFmYjczNGE3MDhkZjExZGJiNjgwMTUxOGI3NjY1
ZmI0Mi4uZWUyYjMyN2QyYWY1NDcxOTY4Nzk2OWFjMjUyYTg0Yzc4OGVmNmU5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0y
NDIsNiArMjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJz
ZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAg
ICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMg
Ynl0ZWNvZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFj
ayYsIGNvbnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggZTJhNGM0MjUzM2EyZjQ0N2RkMzIwMjA1
Yjc3N2I3OGIwMzljMGI2OC4uMjA2OWFkOGIyNGI3MzY5ZGNkOWQ1ZjBjN2Y1OGVlYzkyYjM1Yzc2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApA
QCAtNzQzLDcgKzc0Myw3IEBAIHZvaWQqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNF
eGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4
Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElm
IHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3
aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwog
ICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCA5MjdhNjk4NGEzYmUwMTRj
ZjNlYTdkNjdmMDM0NTg0ZWViZWI2MGNlLi41NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5
MGQ1ZjMzM2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsK
IAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIu
aXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5n
ZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1
ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAog
ICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1YmQ3YWI0M2Rl
MDZmODkzYzE2NGQ1OTljNmNjNGY1ZmIxN2IwNWJiLi40ZWU3ZjUxZTgyNWVhNjZmYjczMWJiNzFl
Yzg3NzBhNzQzNmQyZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTM3Miw2ICszNzIsNyBAQAogCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2ln
bmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJl
YWRNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3Nh
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1
MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGhyZWFkTWVzc2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
MzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fk
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFC
MkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRo
ID0gTWFjaEV4Y2VwdGlvbnMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5
RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05NTQsNiArOTU1LDcgQEAKIAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIz
RkYgLyogZHRvYS5oICovLAogCQkJCUZFMDVGQUU2MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRy
VHJhaXRzLmggKi8sCiAJCQkJQUQ2NTNEQTgyMDA2QjZDMjAwRDgyMEQ3IC8qIER1bWJWYWx1ZVRy
YWl0cy5oICovLAorCQkJCTUzMzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVy
YXRvck92ZXJsb2Fkcy5oICovLAogCQkJCTFBRUE4OEUxMUQ2QkJDRjQwMEU1QUQ2NCAvKiBFbnVt
VHJhaXRzLmggKi8sCiAJCQkJQUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmgg
Ki8sCiAJCQkJQThBNDcyOUYxNTFBODI1QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5oICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRt
YXAuaAppbmRleCA0YzZmNWQ0NDI2MzJjM2VmYzAwMGJkMThlOWUzNjk0NTJmYWYxYzEwLi5iNDZk
YTllODVhYjliNjg2MjQzOGE2OTJlMzY2YTc1MDU0ZGNjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9CaXRtYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAtNTEsNiAr
NTEsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29u
c3Q7CiAgICAgdm9pZCBjbGVhcihzaXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2
b2lkIGludmVydCgpOwogICAgIGludDY0X3QgZmluZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1bkxlbmd0
aCkgY29uc3Q7CiAgICAgc2l6ZV90IGNvdW50KHNpemVfdCBzdGFydCA9IDApIGNvbnN0OwogICAg
IHNpemVfdCBpc0VtcHR5KCkgY29uc3Q7CkBAIC0xMDIsNiArMTAzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcj0oYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9iaXRtYXAtPnNldChtX2luZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRt
YXA7CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwpAQCAtMTExLDYgKzExOCw5IEBAIHB1YmxpYzoK
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBmaW5k
Qml0KDAsIHRydWUpKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCBiaXRtYXBTaXplKTsgfQogICAgIAorICAgIGl0ZXJhdG9yIG9wZXJhdG9yW10o
c2l6ZV90KTsKKyAgICBjb25zdCBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCkgY29uc3Q7CisK
ICAgICB2b2lkIG1lcmdlQW5kQ2xlYXIoQml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihC
aXRtYXAmKTsKICAgICAKQEAgLTIyNCw2ICsyMzQsMTMgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6Y2xlYXJBbGwoKQogICAgIG1lbXNldChiaXRzLmRhdGEoKSwg
MCwgc2l6ZW9mKGJpdHMpKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVu
YW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
aW52ZXJ0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAg
ICAgIGJpdHNbaV0gPSB+Yml0c1tpXTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUs
IHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29y
ZFR5cGU+OjpuZXh0UG9zc2libHlVbnNldChzaXplX3Qgc3RhcnQpIGNvbnN0CiB7CkBAIC00MDks
NiArNDI2LDE5IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9w
ZXJhdG9yIT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSAtPiBpdGVyYXRvcgoreworICAgIEFTU0VSVChpbmRleCA8IHNpemUo
KSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHNp
emVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCAtPiBj
b25zdCBpdGVyYXRvcgoreworICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8Qml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPio+KHRoaXMpKVtpbmRleF07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+OjpoYXNoKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXgg
ZGFlNGE3MWIyOGQxMzA0MjRjMGJkNzMxYmU0MTY0M2YwNTJiM2VhOS4uMmEzMjYyYzliOGI2ZDU2
ZGUzY2E0ZGEwMTU2OTZkNzUyN2FhNGI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYg
KzU2LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIER1bWJQdHJUcmFpdHMuaAogICAg
IER1bWJWYWx1ZVRyYWl0cy5oCiAgICAgRW51bVRyYWl0cy5oCisgICAgRW51bUNsYXNzT3BlcmF0
b3JPdmVybG9hZHMuaAogICAgIEV4cGVjdGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaAogICAgIEZh
c3RCaXRWZWN0b3IuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0
b3JPdmVybG9hZHMuaCBiL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGZkZTczZjViMmQ3ZDU3NDRhM2QwODU3N2NjNzI0ODcxZTkzZTYxOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3Zlcmxv
YWRzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisj
ZGVmaW5lIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIG9w
LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNv
bnN0ZXhwciBhdXRvIG9wZXJhdG9yIG9wKGVudW1OYW1lIGVudW1FbnRyeSwgVCB2YWx1ZSkgLT4g
c3RkOjplbmFibGVfaWZfdDwoZW5hYmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGVudW1FbnRyeSkgb3AgdmFsdWU7IFwKKyAgICB9IFwK
KyAgICAgIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8g
b3BlcmF0b3Igb3AoVCB2YWx1ZSwgZW51bU5hbWUgZW51bUVudHJ5KSAtPiBzdGQ6OmVuYWJsZV9p
Zl90PChlbmFibGVFeHByZXNzaW9uKSwgVD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gdmFs
dWUgb3Agc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KTsgXAorICAgIH0gXAorCisjZGVmaW5lIE9W
RVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCArLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgLSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICosIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCAvLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgJSwgZW5hYmxlRXhwcmVzc2lvbikgXAorCisj
ZGVmaW5lIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdS
QUxTKGVudW1OYW1lKSBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCisKKyNkZWZpbmUgT1ZFUkxPQURfUkVM
QVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhw
cmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51
bU5hbWUsID09LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9S
X0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgIT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8LCBlbmFibGVF
eHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihl
bnVtTmFtZSwgPD0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9G
T1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA+LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAg
T1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPj0sIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKworI2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19G
T1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhlbnVtTmFtZSkgT1ZFUkxPQURfUkVMQVRJT05B
TF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgc3RkOjppc19pbnRlZ3Jh
bF92PFQ+KQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmggYi9T
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKaW5kZXggODg1YjdiMTczYjExYTYwMWJlMjlh
MzMyYWI5ZDJhNDE0ZDU2MjEyMi4uOTIwODk1ZmM0OWU3MWJmOTY2OTIyMWMxMzFhMTc0MmZiNzU4
ZmZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaApAQCAtNDUwLDcgKzQ1MCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEoKm1fd29yZCAm
IG1fbWFzayk7CiAgICAgfQpAQCAtNDY0LDYgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KIAorICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9v
bCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA9IHZhbHVlIDogKnRoaXM7IH0KKyAgICBG
YXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRvciY9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8g
KnRoaXMgOiAqdGhpcyA9IHZhbHVlOyB9CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29y
ZCB7IG51bGxwdHIgfTsKICAgICB1aW50MzJfdCBtX21hc2sgeyAwIH07CkBAIC01MDksNyArNTEy
LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9
Ci0gICAgCisKKyAgICAvLyBGb3IgdGVtcGxhdGluZyBhcyBWZWN0b3I8Ym9vbD4KKyAgICB2b2lk
IGZpbGwoYm9vbCB2YWx1ZSkgeyB2YWx1ZSA/IHNldEFsbCgpIDogY2xlYXJBbGwoKTsgfQorICAg
IHZvaWQgZ3JvdyhzaXplX3QgbmV3U2l6ZSkgeyByZXNpemUobmV3U2l6ZSk7IH0KKwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5k
KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0
b3IgY2hhbmdlZC4KQEAgLTU4OSw0ICs1OTYsNSBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCit1c2luZyBXVEY6OkZhc3RCaXRSZWZlcmVuY2U7CiB1c2luZyBXVEY6OkZhc3RCaXRW
ZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaCBiL1Nv
dXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCmluZGV4IDVhNGU5ZWY0NDk0ZWY0NmNhOWU0
ZWVmNzdmZGNjMGQ2MGZhYTRhMTEuLjNhMzViMzhmNGMwMjM2NzlhYzdjZmM5YzQ2NTYwODRhMzkx
NDgzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGlubGluZSBUeXBlIHVuYWxpZ25l
ZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbDxUeXBlPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIFR5cGUgcmVzdWx0IHsgfTsK
ICAgICBtZW1jcHkoJnJlc3VsdCwgcG9pbnRlciwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtNDMsNyArNDMsNyBAQCBpbmxpbmUgVHlwZSB1bmFsaWduZWRMb2FkKGNvbnN0
IHZvaWQqIHBvaW50ZXIpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIHZvaWQgdW5h
bGlnbmVkU3RvcmUodm9pZCogcG9pbnRlciwgVHlwZSB2YWx1ZSkKIHsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbDxUeXBlPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIG1lbWNw
eShwb2ludGVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGQ4ZTc1ZDdlZWUyZDZhYzU4ZTA2
OGVlMTgyNjRkNDhkYWY2ZDEzLi5kZTBjOWQ3ZWZjNDc2NmFmZGU5ZGMzMjI4ZDFmN2M5NmNjYjIx
NjUxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMTkgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRo
ZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmVtb3ZlIHByb2JlIE9TUiBleGl0IG9w
dGlvbiBzaW5jZSB3ZSBhcmUgbm90IHVzaW5nIHRoYXQgYW55bW9yZS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHM6CisKIDIwMTktMTItMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4gTWFyayBXZWJL
aXQuRm9jdXNlZEZyYW1lQWZ0ZXJDcmFzaCBhcyB0aW1lb3V0CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwppbmRleCBjZGJmOWMwZGJmOTMyZTI4YzZkNWE4MjA4YTBhOThjY2VlNmFlZDlmLi41
ZmJjMjA5ZWRlNGQzNDVhNDYwNWIwMGQyNzE3MjA0NWQwNDkyY2U2IDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKQEAgLTQ5OCw3ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0t
dXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEw
MAogQjNPMV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05T
ID0gWyItLW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICIt
LWRlZmF1bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUi
XQotUFJPQkVfT1NSX0VYSVRfT1BUSU9OID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZP
UkNFX0xMSU5UX0VYSVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQog
CiByZXF1aXJlX3JlbGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3sk
dGVzdFdyaXRlcn0iCkBAIC03MTMsNyArNzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRh
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZh
bGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNl
U2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRh
dGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1w
bGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExf
T1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQpAQCAtNzI5LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JW
YWxpZGF0aW9uKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRG
R0VhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIi
LCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVf
T1NSX0VYSVRfT1BUSU9OICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyAr
IENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5v
Q0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZj
YzM3OThmYWQ0MzZjY2IxZDg4M2I1MTlmYTEuLmZiNGE5YmE4YjFlODQ3NGQ3NzFjMmFkZGNjZDM2
MTZkOTQyODYyMjIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTktMTItMTkgIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0
byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxk
LWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qczogQWRkZWQuCisgICAg
ICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0
KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvYXBw
bHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qczogQWRkZWQuCisgICAgICAgIChl
eHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAg
ICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJh
cmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNr
RXF1YWwpOgorICAgICAgICAqIHN0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVy
ZW50LWFyZ3VtZW50LWNvdW50LmpzOgorCiAyMDE5LTEyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIEpTRml4ZWRBcnJheSwgYW5k
IHVzZSBKU0ltbXV0YWJsZUJ1dHRlcmZseSBpbnN0ZWFkCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2Nj
YXNpb25hbGx5LmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1s
ZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2YxNWE2
ZWI4YzI3Y2MwYWQyZTlmNTk1NDFmZmUyYzUwYWMwYTIzCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRp
b25zLW9jY2FzaW9uYWxseS5qcwpAQCAtMCwwICsxLDM2IEBACisKK2xldCBjdXJyZW50QXJnQ291
bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJyZW50QXJn
Q291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVl
KCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAg
ICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsKKwor
bGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7
IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7CisgICAgaWYgKGxlbmd0aENhbGxzKysgJSAxMCA9
PSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiBs
ZW5ndGgiKTsKKyAgICByZXR1cm4gY3VycmVudEFyZ0NvdW50Cit9IH0KK2ZvciAobGV0IGkgPSAw
OyBpIDwgMWU2OyBpKyspIHsKKyAgICB0cnkgeworICAgICAgICB0ZXN0KGFycmF5KTsKKyAgICB9
IGNhdGNoIHsgfQorfQorCitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7
Cit0ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBF
cnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3It
ZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3Ny
LWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmVlNDVjZTFjNzI4
MzY1MzgyNzA1ZDk5ZDMwMWFlNmJjYjhkODdhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9z
dHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcwpAQCAtMCwwICsx
LDMxIEBACisKK2xldCBjdXJyZW50QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50
KCkgeworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFy
Z0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisK
K2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJh
eSk7Cit9Citub0lubGluZSh0ZXN0KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRB
cmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7IGxl
bmd0aENhbGxzKys7IHJldHVybiBjdXJyZW50QXJnQ291bnQgfSB9Citmb3IgKGxldCBpID0gMDsg
aSA8IDFlNTsgaSsrKQorICAgIHRlc3QoYXJyYXkpOworCisKK3Rlc3QoYXJyYXkpOworY3VycmVu
dEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2FsbHMgPSAwOwordGVzdChhcnJheSk7CisKK2lmIChs
ZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJvdyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFu
ZC1leGl0LXN0cmljdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGlu
ZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKaW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcy
MDcyZjE0M2U1YzQ2YzI0Mi4uYWE3MzIzMTkwY2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0
YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1j
YWxsLWFuZC1leGl0LXN0cmljdC5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3Mt
dGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1
bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikK
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3Vz
ICIgKyBiLmI7Ci0gICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2
ZXJzdXMgIiArIGIuYzsKKyAgICBpZiAoYS5jLmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5j
Lmxlbmd0aCArICIgdmVyc3VzICIgKyBiLmMubGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMu
bGVuZ3RoOyBpLS07KSB7CiAgICAgICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsg
IjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzIGIv
SlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVu
dC1jb3VudC5qcwppbmRleCAwNDdmYjAxZjg4MzE0NWNjNzU1NGY1Y2Y3MDFhNzA3NGYyNjdkZWVl
Li41M2Q3NTJkZWNkN2QwZjMxYmMyZjFkNzg5OTFjNjkxMDFmMDhiZmYzIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50
LWNvdW50LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1k
aWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKQEAgLTE4LDggKzE4LDggQEAgbm9JbmxpbmUoYmFy
KTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewogICAgIHZhciByZXN1bHQgPSBm
b28oNDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09IDQyKQotICAgICAgICB0aHJvdyAiV3Jvbmcg
cmVzdWx0IGZvciBmb28sIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdDsKKyAgICAgICAgdGhy
b3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1
bHQpOwogICAgIHJlc3VsdCA9IGJhcig0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0g
ICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsg
cmVzdWx0OworICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVj
dGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386352</attachid>
            <date>2019-12-23 13:34:30 -0800</date>
            <delta_ts>2019-12-23 15:03:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205232-20191223133429.patch</filename>
            <type>text/plain</type>
            <size>672216</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
NWM3MGJkYmNiMmU3OTVhNmE1N2RmMzc4ZWYzMGJjNWE0YmMxMzUzLi4zOWQxODViZjBmZTYzYjUy
NGU0YTJkOTAyNjA0ZWM5NDE1NzUxMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NDMgQEAKKzIwMTktMTItMjMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBt
aWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgY2FuIGJlIHZhbHVhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBh
IGJ5dGVjb2RlIGZvciBhIGNvdXBsZSBvZiByZWFzb25zLgorICAgICAgICAxKSBJdCBjYW4gYmUg
dXNlZCB0byBjb21iaW5lIGJ5dGVjb2RlcyB0aGF0IHNoYXJlIGEgbWFqb3JpdHkgb2YgdGhlaXIg
b3BlcmFuZHMsIHJlZHVjaW5nIGJ5dGVjb2RlIHN0ZWFtIHNpemUuCisgICAgICAgIDIpIEl0IGVu
YWJsZXMgY3JlYXRpbmcgYnl0ZWNvZGVzIHRoYXQgYXJlIGVhc2llciB0byByZWNvbnN0cnVjdCB1
c2VmdWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIGZyb20uCisKKyAgICAgICAgVG8gbWFrZSBl
eGl0aW5nIHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSBwb3NzaWJsZSB0aGlzIHBhdGNoCisg
ICAgICAgIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSB0ZW1wb3Jhcnkgb3BlcmFuZC4gQSB0
ZW1wb3Jhcnkgb3BlcmFuZAorICAgICAgICBpcyBvbmUgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0
IG9mIGVmZmVjdGZ1bCBvcGVyYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgcHJvY2VzcyBvZiBl
eGVjdXRpbmcgYSBieXRlY29kZS4gdG1wIG9wZXJhbmRzIGhhdmUgbm8gbWVhbmluZyB3aGVuCisg
ICAgICAgIGV4ZWN1dGluZyBpbiB0aGUgTExJbnQgb3IgQmFzZWxpbmUgYW5kIGFyZSBvbmx5IHVz
ZWQgaW4gdGhlIERGRyB0bworICAgICAgICBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBmb3IgT1NSIGV4
aXQuIFdlIHVzZSB0aGUgdGVybSBjaGVja3BvaW50IHRvCisgICAgICAgIHJlZmVyIHRvIGFueSBw
b2ludCB3aGVyZSBhbiBlZmZlY3RmdWwgY29tcG9uZW50IG9mIGEgYnl0ZWNvZGUgZXhlY3V0ZXMu
CisgICAgICAgIEZvciBleGFtcGxlLCBpbiBvcF9jYWxsX3ZhcmFyZ3MgdGhlcmUgYXJlIHR3byBj
aGVja3BvaW50cyB0aGUgZmlyc3QgaXMKKyAgICAgICAgYmVmb3JlIHdlIGhhdmUgZGV0ZXJtaW5l
ZCB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgdGhlIHNlY29uZAorICAgICAg
ICBpcyB0aGUgYWN0dWFsIGNhbGwuCisKKyAgICAgICAgV2hlbiB0aGUgREZHIE9TUiBleGl0cyBp
ZiB0aGVyZSBhcmUgYW55IGFjdGl2ZSBjaGVja3BvaW50cyBpbmxpbmUKKyAgICAgICAgY2FsbCBz
dGFjayB3ZSB3aWxsIGVtaXQgYSBqaXQgcHJvYmUgdGhhdCBhbGxvY2F0ZXMgYSBzaWRlIHN0YXRl
CisgICAgICAgIG9iamVjdCBrZXllZCBvZmYgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIGJ5dGVj
b2RlIHdob3NlCisgICAgICAgIGNoZWNrcG9pbnQgbmVlZHMgdG8gYmUgZmluaXNoZWQuIFdlIG5l
ZWQgc2lkZSBzdGF0ZSBiZWNhdXNlIHdlIG1heQorICAgICAgICByZWN1cnNpdmVseSBpbmxpbmUg
c2V2ZXJhbCBjb3BpZXMgb2YgdGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb24uIEFsdGVybmF0aXZl
bHksIHdlIGNvdWxkIGNhbGwgYmFjayBpbnRvIG91cnNlbHZlcyBhZnRlcgorICAgICAgICBPU1Ig
YW5kIGV4aXQgYWdhaW4gZnJvbSBvcHRpbWl6ZWQgY29kZSBiZWZvcmUgZmluaXNoaW5nIHRoZQor
ICAgICAgICBjaGVja3BvaW50IG9mIG91ciBjYWxsZXIuCisKKyAgICAgICAgQW5vdGhlciB0aGlu
ZyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgb2YgaXMgbWFraW5nIHN1cmUgd2UgcmVtb3ZlCisgICAg
ICAgIHNpZGUgc3RhdGUgYXMgd2UgdW53aW5kIGZvciBhbiBleGNlcHRpb24uIFRvIG1ha2Ugc3Vy
ZSB3ZSBkbyB0aGlzCisgICAgICAgIGNvcnJlY3RseSBJJ3ZlIGFkZGVkIGFuIGFzc2VydGlvbiB0
byBKU0xvY2sgdGhhdCB0aGVyZSBhcmUgbm8KKyAgICAgICAgcGVuZGluZyBjaGVja3BvaW50IHNp
ZGUgc3RhdGVzIG9uIHRoZSB2bSB3aGVuIHJlbGVhc2luZyB0aGUgbG9jay4KKworICAgICAgICBB
IGxhcmdlIGFtb3VudCBvZiB0aGlzIHBhdGNoIGlzIHRyeWluZyB0byByZW1vdmUgYXMgbXVjaCBj
b2RlIHRoYXQKKyAgICAgICAgcmVmZXJzIHRvIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIGFuIGludCBh
cyBwb3NzaWJsZS4gSW5zdGVhZCwgdGhpcworICAgICAgICBwYXRjaCByZXBsYWNlcyB0aGVtIHdp
dGggdGhlIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4gVGhlcmUgYXJlIGFsc28KKyAgICAgICAgYSBj
b3VwbGUgb2YgbmV3IGNsYXNzZXMvZW51bXMgYWRkZWQgdG8gSlNDOgorCisgICAgICAgIDEpIFRo
ZXJlIGlzIG5vdyBhIGNsYXNzLCBPcGVyYW5kLCB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbWJpbmF0
aW9uCisgICAgICAgIG9mIGEgVmlydHVhbFJlZ2lzdGVyIGFuZCBhIHRlbXBvcmFyeS4gVGhpcyBp
cyBoYW5keSBpbiB0aGUgREZHIHRvCisgICAgICAgIG1vZGVsIE9TUiBleGl0IHZhbHVlcyBhbGwg
dG9nZXRoZXIuIEFkZGl0aW9uYWxseSwgT3BlcmFuZHM8VD4gaGFzCisgICAgICAgIGJlZW4gdXBk
YXRlZCB0byB3b3JrIHdpdGggcmVzcGVjdCB0byBPcGVyYW5kIHZhbHVlcy4KKworICAgICAgICAy
KSBDYWxsRnJhbWVTbG90IGlzIG5vdyBhbiBlbnVtIGNsYXNzIGluc3RlYWQgb2YgYSBzdHJ1Y3Qg
b2YKKyAgICAgICAgY29uc3RleHByIHZhbHVlcy4gVGhpcyBsZXRzIHVzIGltcGxpY2l0bHkgY29u
dmVydCBDYWxsRnJhbWVTbG90cworICAgICAgICB0byBWaXJ0dWFsUmVnaXN0ZXJzIHdpdGhvdXQg
YWxsb3dpbmcgYWxsIGludHMgdG8gaW1wbGljaXR5CisgICAgICAgIGNvbnZlcnQuCisKKyAgICAg
ICAgMykgRlRMOjpTZWxlY3RQcmVkaWN0YWJpbGl0eSBpcyBhIG5ldyBlbnVtIHRoYXQgZGVzY3Jp
YmVzIHRvIHRoZQorICAgICAgICBGVEwgd2hldGhlciBvciBub3Qgd2UgdGhpbmsgYSBzZWxlY3Qg
aXMgZ29pbmcgdG8gYmUKKyAgICAgICAgcHJlZGljdGFibGUuIFNlbGVjdFByZWRpY3RhYmlsaXR5
IGhhcyBmb3VyIG9wdGlvbnM6IFVucHJlZGljdGFibGUsCisgICAgICAgIFByZWRpY3RhYmxlLCBM
ZWZ0TGlrZWx5LCBhbmQgUmlnaHRMaWtlbHkuIFVucHJlZGljdGFibGUgbWVhbnMgd2UKKyAgICAg
ICAgdGhpbmsgYSBicmFuY2ggcHJlZGljdG9yIHdvbid0IGRvIGEgZ29vZCBqb2IgZ3Vlc3Npbmcg
dGhpcyB2YWx1ZQorICAgICAgICBzbyB3ZSBzaG91bGQgY29tcGlsZSB0aGUgc2VsZWN0IHRvIGEg
Y21vdi4gVGhlIG90aGVyIG9wdGlvbnMgbWVhbgorICAgICAgICB3ZSBlaXRoZXIgdGhpbmsgd2Ug
YXJlIGdvaW5nIHRvIHBpY2sgdGhlIHNhbWUgdmFsdWUgZXZlcnkgdGltZSBvcgorICAgICAgICB0
aGVyZSdzIGEgcmVhc29uYWJsZSBjaGFuY2UgdGhlIGJyYW5jaCBwcmVkaWN0b3Igd2lsbCBiZSBh
YmxlIHRvCisgICAgICAgIGd1ZXNzIHRoZSB2YWx1ZS4KKworICAgICAgICBJbiBvcmRlciB0byB2
YWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhpcyBwYXRjaCB0aGUgdmFyaW91cworICAgICAg
ICB2YXJhcmdzIGNhbGwgb3Bjb2RlcyBoYXZlIGJlZW4gcmV3b3JrZWQgdG8gdXNlIGNoZWNrcG9p
bnRzLiBUaGlzCisgICAgICAgIGFsc28gZml4ZWQgYSBsb25nLXN0YW5kaW5nIGlzc3VlIHdoZXJl
IHdlIGNvdWxkIGNhbGwgbGVuZ3RoCisgICAgICAgIGdldHRlcnMgdHdpY2UgaWYgd2UgT1NSIGV4
aXQgZHVyaW5nIExvYWRWYXJhcmdzIGJ1dCBiZWZvcmUgdGhlCisgICAgICAgIGFjdHVhbGx5IGNh
bGwuCisKKyAgICAgICAgTGFzdGx5LCB3ZSBoYXZlIG5vdCBlbmFibGVkIHRoZSBwcm9iZS1iYXNl
ZCBPU1IgZXhpdCBmb3IgYSBsb25nCisgICAgICAgIHRpbWUgaW4gcHJvZHVjdGlvbiwgdGh1cyB0
aGlzIHBhdGNoIHJlbW92ZXMgdGhhdCBjb2RlIHNpbmNlIGl0CisgICAgICAgIHdvdWxkIGJlIGEg
bm9uLXRyaXZpYWwgYW1vdW50IG9mIHdvcmsgdG8gZ2V0IGNoZWNrcG9pbnRzIHdvcmtpbmcKKyAg
ICAgICAgd2l0aCBwcm9iZSBPU1IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZUZyYW1lLmg6
CisgICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OlBy
b2JlOjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAg
IChwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6CisgICAgICAgIChmbG9hdGluZ1BvaW50
T3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhDYWxsR2VuZXJh
dG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZh
bHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFt
ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5h
bWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5k
ZXg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguaDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5k
ZXg6OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojphc0Jp
dHMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpoYXNoIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4
Ojpmcm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6
OmVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKToKKyAgICAgICAg
KEpTQzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAg
IChKU0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0Fs
d2F5c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3YXlz
TGl2ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVj
b2RlSW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVD
YXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2
ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzS25v
d25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVtcG9yYXJ5UmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OnZpcnR1YWxS
ZWdpc3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNz
OjpvcGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJbmxpbmVDYWxs
RnJhbWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjp1bm1h
cE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayk6
IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoK
KyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6
Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6
b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6
OmZyb21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMu
aDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmQ6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1
YWxSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZDo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmQ6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojp0b0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJv
bUJpdHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6bnVtYmVyT2ZMb2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6bnVtYmVyT2ZUbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmRzOjp0bXApOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OmFyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OnNpemVGb3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6YXRGb3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
ZW5zdXJlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6OmdldEZvck9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpvcGVyYW5kSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6Omhhc09wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
c2V0T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjphdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltd
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6b3BlcmFuZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1
bWVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZv
ckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJh
bmRGaXJzdFRpbWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czxUPjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2sp
OgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpoYXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpzZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXI6On5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFu
ZEJ1ZmZlcjo6flZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFs
dWVSZWNvdmVyeTo6cmVjb3ZlciBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNv
dmVyeS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAo
SlNDOjp2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lz
dGVySXNBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6VmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc1ZhbGlkIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VmlydHVhbFJlZ2lzdGVyOjppc0NvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmlydHVh
bFJlZ2lzdGVyOjp0b0NvbnN0YW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpvcGVyYW5k
SXNMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0FyZ3VtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3BJbXBsKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpzZXRVc2VzQ2hlY2twb2ludHMpOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9SZWdpc3RlcklELmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVySUQ6OnNldEluZGV4KToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
SGVhcC5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6UGF5bG9h
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpBYnN0cmFjdEhlYXApOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOgorICAgICAgICAoSlNDOjpERkc6
OkFyZ3VtZW50UG9zaXRpb246OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGlt
aW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjphcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KToKKyAgICAg
ICAgKEpTQzo6REZHOjplbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBkZmcvREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6
Om9wZXJhbmQpOgorICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKToKKyAgICAgICAg
KiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmls
aXR5TWFwOjpjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJlVG1wcyk6CisgICAgICAgICogZGZn
L0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6ZW5zdXJlVG1wcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBy
b2dyZXNzVG9OZXh0Q2hlY2twb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omdl
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExhenlPcGVyYW5kU3BlY3VsYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbE9yVG1wKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWxPclRtcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZpbmRBcmd1bWVudFBvc2l0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hJbXBsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbEltcGwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6YWRkRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBoYW50b21Mb2NhbERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6SW5saW5lU3RhY2tFbnRyeTo6cmVtYXBPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpEZWxheWVkU2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OmV4ZWN1
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFi
bGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50
YXJnZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVSZWN1cnNpdmVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmlubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVW
YXJhcmdzSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2UpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUdldExv
Y2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxp
emVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVh
ZGluZ1BoYXNlOjpjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVTZXQpOgorICAgICAgICAo
SlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnByb3BhZ2F0ZVBoaXMp
OgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnBoaVN0YWNrRm9yKToK
KyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6YWRkQnl0ZWNvZGVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICog
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25z
dGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0RvZXNH
Qy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJp
dmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Zm9yQWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxl
ZE5vZGVzQXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9j
ayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBz
TGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5C
eXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5
dGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlj
ZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICog
ZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVz
aExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEp
OgorICAgICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tB
Y2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlu
a2VkT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNVbmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1
bmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAg
KEpTQzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0
b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6
CisgICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpzYXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxl
ZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1
bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9u
ZWRBcmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0
UmVzdG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6
ZXhlY3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBU
b1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JF
eGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0No
ZWNrcG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAg
IChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAo
SlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZH
OjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZH
OjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAg
ICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhl
Y3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3RhY2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBo
YXNlOjphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JF
eGl0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoK
KyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVz
KToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxl
QWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91
bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUy
SW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R1ZhcmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmR1
bXAgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojpt
b3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJlZ2lzdGVy
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5kIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lzdGVyIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6bG9nRXZlbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0IGNvbnN0KToK
KyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OmFwcGVuZEFuZExvZyk6CisgICAgICAgICogZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Rm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUV4dHJh
Y3RPU1JFbnRyeUxvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUdldFN0YWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUdldENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVTZXRDYWxsZWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFyYXJnc0xlbmd0aCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldFNwcmVhZExlbmd0aEZyb21J
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZSk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEFyZ3VtZW50c0xlbmd0aCk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEN1cnJlbnRDYWxsZWUpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpidWlsZEV4aXRBcmd1bWVu
dHMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphZGRyZXNzRm9yKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cGF5bG9hZEZvcik6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnRhZ0Zvcik6CisgICAgICAgICogZnRs
L0ZUTE9TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpwcmVwYXJlT1NSRW50cnkpOgor
ICAgICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0
RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0
Lmg6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKToKKyAgICAg
ICAgKiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNlbGVj
dCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAqIGZ0bC9GVExTZWxlY3RQ
cmVkaWN0YWJpbGl0eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAuCisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5o
OgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRv
ci9DaGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoK
KyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRl
QXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0
ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNpdGVJbmRl
eCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6Y29kZU9yaWdpbik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OkNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpD
YWxsU2l0ZUluZGV4OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6
OmJpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyk6Cisg
ICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAg
ICAoSlNDOjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleDo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxlZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6dW5zYWZlQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
OjphZGRyZXNzT2ZDb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
OjpvZmZzZXRGb3IpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRSZXR1cm5QQyk6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWU6OnIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuY2hlY2tlZFIpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6Omd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpqc0NhbGxlZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNh
ZmVDb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldENhbGxlZSk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oLgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgIChKU0M6OnNpemVP
ZlZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNl
dHVwVmFyYXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3Io
KSBjb25zdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0UGF5bG9h
ZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1l
U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVRhZ1Nsb3QpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50Q291bnQpOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVy
Lmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWxsZWVKU1ZhbHVlUmVn
cyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphc3N1bWVDYWxsZWVJc0NlbGwp
OgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X21vZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYml0bm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UmlnaHRTaGlmdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29u
c3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENvbnN0YW50T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdCk6
CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYXNlSWZO
b3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJ
bml0UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkVGFnKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TG9hZFBheWxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZDIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TG9hZEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlSW50MzIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
dG9yZUNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUJvb2wpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFu
dEludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1w
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
ZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2p1bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVt
cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90
b19zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfYXJndW1lbnRfY291bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6
CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRC
eVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFJlc29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJs
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAo
SlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0lu
dGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJm
YWNlSklUOjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0
UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKiBqaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjplbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSk6Cisg
ICAgICAgICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lh
bGl6ZWRUaHVua0pJVDo6bG9hZERvdWJsZUFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6U3BlY2lh
bGl6ZWRUaHVua0pJVDo6bG9hZENlbGxBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxp
emVkVGh1bmtKSVQ6OmxvYWRJbnQzMkFyZ3VtZW50KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6YWJzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE5vbkNv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmdlbmVyaWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFy
Z3NTZXR1cCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAg
IChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpkaXNwYXRj
aFRvTmV4dEluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNsb3dfcGF0aF9jaGVj
a3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OnNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omxs
aW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKToKKyAgICAgICAgKiBsbGludC9MTEludFNs
b3dQYXRocy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3Qu
aDoKKyAgICAgICAgKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI6OmZpbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s6
Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVC
bG9ja1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQ29u
c3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6CisgICAgICAgICogcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmg6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
Y3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyk6Cisg
ICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dl
bmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3Vt
ZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxsUmVsZWFzZUxvY2spOgorICAgICAgICAqIHJ1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAgICAgICAgKiBydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6
Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpzY2FuU2lkZVN0YXRlIGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpoYXNDaGVja3BvaW50T1NSU2lkZVN0
YXRlIGNvbnN0KToKKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6CisgICAgICAgIChK
U0M6OlZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6
Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9j
azo6Z2V0Q29uc3RhbnRUeXBlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpzZXRVc2VzQ2hl
Y2twb2ludHMgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbik6CisgICAgICAgICog
d2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKwogMjAxOS0xMi0yMyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViRHJpdmVyOiBmaXggaGFuZGxp
bmcgb2Ygc2Vzc2lvbiB0aW1lb3V0cyBmb3IgdmFsdWVzIGhpZ2hlciB0aGFuIE1BWF9JTlQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5k
ZXggNzE1YzkzN2Y3OTU2OWI2MDM4NjRiZjg3YTBkZjBiM2JhZGE1Nzg2YS4uOTJiODQxNmQzNDJi
NDU2ZWQ2NTliNWVmNmIxYjA4MDJlYTBiNzZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxOS0x
Mi0yMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyMzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAg
ICAgKFdURjo6V29yZFR5cGU+OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9w
ZXJhdG9yKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9FbnVtQ2xhc3NP
cGVyYXRvck92ZXJsb2Fkcy5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5o
OgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvciBib29sIGNvbnN0KToK
KyAgICAgICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChX
VEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0
VmVjdG9yOjpmaWxsKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisgICAg
ICAgICogd3RmL1VuYWxpZ25lZEFjY2Vzcy5oOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRMb2Fk
KToKKyAgICAgICAgKFdURjo6dW5hbGlnbmVkU3RvcmUpOgorCiAyMDE5LTEyLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFZlY3RvciBIYXNoVHJh
aXRzIHRvIEhhc2hUcmFpdHMuaCB0byBmaXggR0NDIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggM2RjY2UwZjgxZWQ0NGM3NGQ2MGVhNWEwYzYyOGQ4YmZhZDkzMzA4
Zi4uY2NlZjFhZmQ0NWRhMTkzMDFjODZhOWY3NTcyMmJhZGEzN2M4MzEwYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTI1LDYgKzUyNSw3IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL09wY29kZS5oCiAgICAgYnl0ZWNvZGUvT3Bjb2Rl
U2l6ZS5oCisgICAgYnl0ZWNvZGUvT3BlcmFuZHMuaAogICAgIGJ5dGVjb2RlL1Byb3BlcnR5Q29u
ZGl0aW9uLmgKICAgICBieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAogICAgIGJ5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1NTZiNTM0YzJhYjEwMWFjMzkwYmE3
MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAyZTk3NTc5NjZkZmE5OWFjNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmls
ZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3Vk
aXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9p
dGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJndW1lbnQucmIKICQoUFJPSkVDVF9E
SVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9DaGVj
a3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0RTTC5yYgogJChQUk9KRUNUX0RJ
UikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9HZW5lcmF0ZWRG
aWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRiY2U1YmFjZWRjMDVjM2Rj
MGVhOGIwNDMzNDZkMTUxZDBkZWY0NDEuLmIyNjRmNGVkZDM5NjI2OTA1ZTFiMjJhODJlMWU0MTUy
MzU1Njc0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNiArOTMxLDgg
QEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBG
MUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9Owog
CQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzIxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAqLzsgfTsKIAkJNTMzM0JCREQyMTEw
RjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8q
IERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFC
QUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTUzMzhFQkEzMjNBQjA0QjgwMDM4MjY2MiAvKiBGVExTZWxlY3RQ
cmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5
LmggKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVj
a1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9
OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0Qw
MEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNl
VGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
NDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzU5Nyw2ICszNTk5LDggQEAKIAkJ
NTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZD
IC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBB
UEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYz
MUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1h
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFE
IC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0
YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTZWxlY3RQcmVk
aWN0YWJpbGl0eS5oOyBwYXRoID0gZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNt
T3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVj
a1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQz
QzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNt
Qm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYxMSw2
ICszNjE1LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8qIFR5cGVkQXJyYXlDb25z
dHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFR5cGVk
QXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1
N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3
IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRl
cmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGgg
PSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVscGVycy5qczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0
ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRo
ID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1
MjEsNiArNTUyOCw3IEBACiAJCQkJMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292
ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVS
ZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJl
c3RvcmUuaCAqLywKKwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJl
ZGljdGFiaWxpdHkuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmNwcCAqLywKIAkJCQkwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi8sCiAJCQkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01OTQ3LDYgKzU5NTUsNyBAQAogCQkJCTE0MjlEOERDMEVE
MjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJCQlBN0Y4NjlFQzBGOTVDMkVDMDA1
NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJCUZFQTNCQkE3MjEyQjY1NTgwMEU5
M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJNTMzOEUyQTYyMzk2RUZFQzAwQzYx
QkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQy
MThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAogCQkJCTE0RDc5MjY0MERBQTAzRkIw
MDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIy
IC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NTc2LDcgKzg1ODUsOSBAQAogCQkJCUE1
MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVyYXRpb25zLmpzICovLAogCQkJCUUz
NUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3Qu
anMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlzZUNv
bnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRv
ckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9y
UHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFw
UHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVM
b2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3IC8qIE51bWJlckNvbnN0
cnVjdG9yLmpzICovLApAQCAtODU4Nyw2ICs4NTk4LDcgQEAKIAkJCQk3Q0Y5QkM1RjFCNjVEOUIx
MDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJCQk2NTQ3ODg0MjFDOTM3RDJDMDAw
NzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJCTg0OTI1QTlDMjJCMzBDQzgwMEQx
REZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKKwkJCQk1MzREOUJG
ODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAz
NTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM2
MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJN0NGOUJD
NjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLApAQCAt
OTA4Nyw2ICs5MDk5LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIwMjc5MDAxMzRCQzkgLyogQ2VsbFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMyMjMzOUU5RjkwMEEwNENCOCAvKiBD
ZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8q
IENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFE
IC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZB
QUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRl
cnMgKi8sCkBAIC05NDMyLDYgKzk0NDUsNyBAQAogCQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4
NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTMzOEVCQTMyM0FCMDRCODAwMzgyNjYyIC8qIEZUTFNlbGVjdFBy
ZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCNDE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBldFBhcmFtcy5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2RlZmRlYzc2MDg5YTEzZGZiNTAxMWI2
NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRiMmY0ZWIzMGM2ZjZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVkFM
SURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0
aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVS
KG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQqIHZhbHVlKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBmM2I0Zjg1Yjc2OWI3ODhkNDBkNjNl
YTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBmMTY1NzI5ZjQ2ZTA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaApAQCAtNDYsMTQgKzQ2
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAg
VCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0g
SlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCisg
ICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CisgICAgICAg
IHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZz
ZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MiwxNCArNjIsMTQg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgVCB2YWx1
ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUp
CiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVy
YW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+
KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBw
dHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFu
ZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJj
OTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RV
c2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIz
T3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAot
dHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxp
bnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVy
YW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3Bl
cmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJ
bnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0
eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BF
UkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9Cisj
ZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAj
dmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3Bl
cmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJh
bmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIs
IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIt
MC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAg
dm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5
cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3Rv
cjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNP
cGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9y
PE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9h
dFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVy
YW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBkZDlhY2NhOWFkYzkwMjlhMGFlMWJjYWU5
YjIwNjI2YWRkNjUyNDg4Li41NTQ4NWIwZjlhMDZmYjdjMDIzYzQ2YWUzOTkzZGY3OWIxNTQyMmVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBA
IC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2Vw
dGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAg
ICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CiAgICAgICAg
ICAgICBhdXRvJiBhY2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpOwpA
QCAtMTc5Nyw3ICsxNzk3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9y
aWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxs
KCk7CiAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAppbmRleCBiMWQ0MDRhMTQ1
YmQyMTQxYjNhMGE5YzQzMTkxOGE1OGY5YWYxODlmLi42OWI1ZWUxMDZiMmU4MTc1NTc3Nzk3MWJl
MjcxNGM0YTFhOThjYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAg
cHVibGljOgogCiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JP
cmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgICAgICBqaXQubWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4
Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2Nh
dGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBt
X291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKKyAg
ICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQg
Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2Vu
ZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFz
cyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoaW50
IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKFZp
cnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5h
bWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7CisgICAg
cmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgs
MTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZz
ZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNz
IEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1l
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCkt
PmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZp
cnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdl
dENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIp
Iik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQg
Qnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRl
Y29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNv
ZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZh
bHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2Nr
LT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEw
NzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnBy
aW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1l
KGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmlydHVh
bFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1
bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCBy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdmly
dHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAgICAg
QmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNp
bmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVy
OwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUo
aW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29u
c3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3MTE3
ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1
MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lk
IEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisgICAg
ICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApp
bmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0MDU4
ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcsMjQg
KzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5k
ZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkpCisg
ICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAg
ICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkK
LSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3QgYXNC
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQorICAg
ICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMgc2hv
dWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hl
Y2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAKLSAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsg
fQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9wYWNr
ZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0
dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQog
CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAg
ICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAhPSBk
ZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJp
dHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNv
bnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhl
ci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEzICs3
OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
aW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAot
ICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1aW50
MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisK
KyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1
aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNo
ZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0
KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5lIEJ5
dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAg
ICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAg
IHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IGE5
YmQ0ODM3MWI0ZTMwZGFmNjA0NGQwOTQ5YTA3MWQxNGExYWQwNzYuLjYwZDk4Y2ZiMTYyODYzNmZj
ZWYzNzY3OTJiOWMyMTRmY2M0YWEzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldh
dGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIs
CiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAg
OkFycmF5UHJvZmlsZSwKQEAgLTc5Niw2ICs3OTYsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywKICAg
ICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBh
cmdDb3VudEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkLAorICAgIH0sCisgICAgY2hlY2twb2ludHM6
IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDog
bmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF92YXJhcmdzLApAQCAtODEwLDYgKzgxNywxMyBA
QCBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAg
ICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25l
ZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3Vu
dDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cywKQEAgLTg1MCw2ICs4NjQsMTMgQEAgb3AgOmNvbnN0cnVjdF92YXJh
cmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7Cisg
ICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpczogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC05OTcsNyArMTAxOCw3IEBAIG9wIDpj
YXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZl
ci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ci4qLAogICAgIH0KIAogb3AgOnRocm93LApAQCAtMTI0Myw2ICsxMjY0LDggQEAgb3AgOmxsaW50
X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1w
b2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDps
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQorb3AgOmNoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZQorb3AgOmNoZWNrcG9pbnRf
b3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOmhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uCiBvcCA6b3Bf
Y2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIxMzRhNjBiNmNmZjEwMTE0M2FiNTU0MzNi
OGI0M2Y0NDAuLjc5NzVmZWYzYzg4MTQzMTgxNTdhNTlkYmU4YmU1NTQ4Mzg4ZmUzNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAxLDM5IEBAIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB9CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5cGUyPgorY29u
c3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEgdjEsIEVudW1U
eXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWlu
Z190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNpbmcgSW50VHlwZTIgPSB0eXBlbmFtZSBz
dGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOworICAgIGlmIGNvbnN0ZXhwciAo
c2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2Mik7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9PSBzdGF0aWNf
Y2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRt
cExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1w
cz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkt
Pm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3Rh
aWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6
Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVh
bEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzLCBPcFRhaWxD
YWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BD
b25zdHJ1Y3RWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChP
cENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMsIE9wQ29uc3RydWN0VmFyYXJnczo6
YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2Fs
bFZhcmFyZ3M6Om1ha2VDYWxsKQorICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdz
OjphcmdDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgK
aW5kZXggNzM3OWIzYzliYzcyMzI1OTEwOWM2MWU3YWRhNTMzZDllN2QyZjJjOS4uM2U1ZWRjMGE2
OGFlNDRkZjY1MTVjZGJmZDRiNDI3ZWY2OWVlZjE4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlQmFzaWNCbG9jay5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYv
Qml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC05Nyw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBo
OwogfTsKIAorQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNr
cG9pbnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0ZWNvZGVJbmRleCk7CisKIGlubGluZSBib29sIG9w
ZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJ
c05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFu
ZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggM2QxMmUx
OTVjNjk5ZWZiZjk2MzZhMmI5NzRlNzk0NGNkYWVkNzJjMC4uZGU2Y2E4ZGM5MTA5Yjc4OTY3ZjEw
NTUwMDlkYTMwZTg5OTg0ODI4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBA
IC0zMywyMiArMzMsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIG9wZXJh
bmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJ
c0Fsd2F5c0xpdmUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gIVZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS5pc0xvY2FsKCk7CisgICAgcmV0dXJuICFyZWcuaXNMb2NhbCgpOwog
fQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBG
YXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lz
dGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgdW5zaWduZWQgbG9jYWwgPSBWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkudG9Mb2NhbCgpOworICAgIHVuc2lnbmVkIGxvY2FsID0gcmVnLnRvTG9jYWwo
KTsKICAgICBpZiAobG9jYWwgPj0gb3V0Lm51bUJpdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiBvdXRbbG9jYWxdOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZl
KGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0
dWFsUmVnaXN0ZXJJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8
fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOworICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgdmlydHVhbFJlZ2lz
dGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOwogfQogCiBpbmxpbmUg
Ym9vbCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggODY5
ZjUzZjNmY2QwZDA3NjEwOWExZmRhNWY5NDdmNTIwZmU1MTRkZC4uNjAyZGQ1MjVhMWJkMmMxNjNk
YjhjZjEzYjM1Y2M2MzZlYTFlYjVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgogI2luY2x1ZGUgIkNhbGxMaW5r
U3RhdHVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5j
bHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCkBAIC00MDcsNyArNDA4LDcgQEAgYm9vbCBDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xvbmVk
U3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJl
cGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKICAgICAgICAgfQotICAgICAgICByZXBsYWNl
Q29uc3RhbnQodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVu
dFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpLCBjbG9uZWRTeW1ib2xUYWJsZSk7
CisgICAgICAgIHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdp
c3Rlck9mZnNldCgpKSwgY2xvbmVkU3ltYm9sVGFibGUpOwogICAgIH0KIAogICAgIGJvb2wgc2hv
dWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlID0gbV91bmxpbmtlZENvZGUtPndhc0Nv
bXBpbGVkV2l0aFR5cGVQcm9maWxlck9wY29kZXMoKSB8fCBtX3VubGlua2VkQ29kZS0+d2FzQ29t
cGlsZWRXaXRoQ29udHJvbEZsb3dQcm9maWxlck9wY29kZXMoKTsKQEAgLTY0MSw3ICs2NDIsNyBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAg
ICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8g
aXMgbm90IGFub255bW91cy4KICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIgIT0g
VUlOVF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
ID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJs
ZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENv
bnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkp
OwogICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZp
ZXIoYnl0ZWNvZGUubV92YXIpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBhdXRv
IGl0ZXIgPSBzeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CkBAIC03MDks
OCArNzEwLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxv
Y2FsbHlSZXNvbHZlZDogewotICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0g
Ynl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgp
OwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1i
b2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25z
dGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkpKTsK
ICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0
ZWNvZGUubV9pZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElmIG91ciBw
YXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQg
d2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KQEAgLTEwODYsNiArMTA4
NiwxNSBAQCBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vh
a1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpbwogICAgIAogICAgIHJldHVybiB0cnVlOwog
fQorCitCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNv
ZGVJbmRleCBleGl0SW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50
KCkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5h
dChleGl0SW5kZXgpOworICAgICAgICBleGl0SW5kZXggPSBpbnN0cnVjdGlvbi5uZXh0KCkuaW5k
ZXgoKTsKKyAgICB9CisgICAgcmV0dXJuIGV4aXRJbmRleDsKK30KICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKIAogdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgxMSwxMCArMTgy
MCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JC
eXRlY29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtUGFyYW1ldGVycygpOyArK2kpCiAgICAgICAgIGxpdmVPcGVyYW5kcy5hcHBlbmQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlx
dWU8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7Cisg
ICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChwcm9m
aWxlcy0+bV9zaXplID09IGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcm9maWxlcy0+bV9zaXplOyArK2kpCi0gICAgICAgIHByb2ZpbGVzLT5tX2J1
ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0KCk7CisgICAg
ICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNb
aV07CiAKICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3MTMsNyArMjcy
Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0Fu
ZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byogcmFyZURhdGEg
PSBtX3JhcmVEYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6
IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAg
ICAgICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggMTQ2NzQyZWIwNDhhMWQx
NjZmMDE3OTFkNTZjZTU4MTUwZjUzNDI2Ni4uMjUwNjcyNjNlMjQ3NmRhMWIyZGY2ZDVkMmY4ZTgw
NDMxNWYzMDNjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aApAQCAtMTYxLDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBudW1WYXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CisgICAgaW50IG51bVRtcHMoKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRU
bXBzOyB9CiAKICAgICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9u
dW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRl
cnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMp
OyB9CkBAIC0yMjksMjAgKzIzMCwyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRW
TVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9p
bnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkK
KyAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdpc3RlciByZWcp
CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPT0gdGhpc1JlZ2lzdGVyKCkub2Zmc2V0KCkgJiYg
IWlzU3RyaWN0TW9kZSgpKQorICAgICAgICBpZiAocmVnID09IHRoaXNSZWdpc3RlcigpICYmICFp
c1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChp
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29u
c3RhbnQoaW5kZXgpLmlzQ2VsbCgpOworICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwogCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlS
ZWdpc3RlckluZGV4KGludCBpbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3Jh
cnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlu
ZGV4ID49IG1fbnVtVmFyczsKKyAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBtX251bVZh
cnM7CiAgICAgfQogCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5
dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxl
cik7CkBAIC01ODEsMTAgKzU4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFu
dFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+
PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Cisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgp
XTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltyZWcu
dG9Db25zdGFudEluZGV4KCldOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0K
ICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xz
LnNpemUoKTsgfQpAQCAtNzc0LDYgKzc3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T3B0
aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVz
dWx0KTsKICAgICAKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVj
b2RlSW5kZXgpIGNvbnN0OwogICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1f
b3NyRXhpdENvdW50ZXIrKzsgfQpAQCAtODc0LDcgKzg3NSw3IEBAIHB1YmxpYzoKICAgICAgICAg
VmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBWZWN0
b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPj4gbV9j
YXRjaFByb2ZpbGVzOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAogICAgICAgICBE
aXJlY3RFdmFsQ29kZUNhY2hlIG1fZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9OwpAQCAtOTQx
LDEwICs5NDIsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMo
Y29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAotICAgIHZv
aWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHJl
cGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25z
dGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4
IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgdmFsdWUpOwor
ICAgICAgICBBU1NFUlQocmVnLmlzQ29uc3RhbnQoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJl
Zy50b0NvbnN0YW50SW5kZXgoKSkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0s
IHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAppbmRleCAyMTA2ODEzZjBhMWVhYTUxMzRkMGYzOWJkNzUxYzczMThlYmMw
NDMxLi5mOTgyOWEyODZmOGFhYmY0ZDMzMmZmZjFlNzFlYTNjODNmOWJjNjBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw3ICsxNjAsOSBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFtZSog
dGVybWluYWwgPSBudWxscHRyKSBjb25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dGlvbj4KLSAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJik7CisgICAg
dm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpIGNvbnN0OworCisgICAgaW5s
aW5lIGJvb2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAg
ICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50
ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVT
dGFjaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRleCBlNGE1NzViMDNhN2QxYjU5OWFkMGQ1NmNlZGRk
YWY0YmEwNTAyZjNhLi40N2M2NTdjOGRmOTAzODNhZjY1ZWI1YzNiOGE4YjA1OTRkMGM0ZGE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaApAQCAtMjYsMTIgKzI2LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5j
bHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKK2NsYXNzIENvZGVCbG9jazsKIAorLy8gTm90ZTogRnVs
bCBieXRlY29kZSBsaXZlbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBh
IGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4KIGNsYXNzIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAg
LTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9p
bnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoVmlydHVhbFJlZ2lzdGVy
IHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9p
bnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2
ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVz
cyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAgICByZXR1cm4gdmlydHVh
bFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIHJlZyk7CiAg
ICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVj
aGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZl
Y3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0LgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8UGFzdGU+CiAgICAgVmVj
dG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2JlZm9yZVVzZVZl
Y3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0Nzg1MTU5NzA0MTcxZGRm
NmRkMWRhMy4uZTI5ZjM4NGQxZDA2NzJmZWVhMDcxMjA1YmNhYTI4MWE2NDliMjIyOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAt
MTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFycmll
cjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2Fs
bGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8v
IERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5zaWduZWQgdG1w
T2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAgdW5zaWduZWQg
a2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDog
MTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFu
dHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBo
YXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsxOTIsOSBAQCBzdHJ1Y3Qg
SW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMg
Y29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKICAgICAvLyB3
ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElubGluZUNhbGxGcmFtZSgp
Ci0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAgICAsIHN0YWNrT2Zmc2V0
KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xvc3VyZUNhbGwoZmFsc2Up
CiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihzdGFja09mZnNldCkgPT0g
b2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1bnNpZ25lZCBvZmZzZXQp
CisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9mZnNldCk7CisgICAgfQor
CiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tP
ZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgp
OyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tP
ZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9
CiAKQEAgLTI0Nyw5ICsyNTYsOSBAQCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaQogICAgIHJldHVy
biBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhl
cmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBk
aXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1lCisvLyBUaGVzZSBmdW5jdGlvbiBp
cyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNj
ZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1lCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1pbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxp
bmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCitpbmxpbmUgdm9pZCBDb2RlT3JpZ2lu
Ojp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pIGNvbnN0CiB7CiAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAg
LTI2MSwxMSArMjcwLDM4IEBAIGlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0
YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUg
VmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2lubGluZSBib29sIENvZGVPcmlnaW46OmlubGlu
ZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkgY29uc3QKK3sKKyAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOworICAgIHdhbGtVcElubGluZVN0YWNrKFsmXSAoQ29kZU9yaWdpbiBvcmlnaW4p
IHsKKyAgICAgICAgaWYgKG9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKQorICAg
ICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCit7CisgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRtcChvcGVyYW5k
LnZhbHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICByZXR1cm4gb3Bl
cmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1
cm4gcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKK30KKworQUxX
QVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0dXJuIG9wZXJh
bmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRtcChvcGVyYW5kLnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJh
bWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKworQUxX
QVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gdW5tYXBPcGVyYW5k
KGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5oCmluZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFj
NjRhNTkuLjgxZjVhMGM0ODljNGVmNmRkY2JhNmUxYjQ2MmQ3MmQ5ZTk4NjQ2ZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVl
UHJvZmlsZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CkBAIC00OSw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgICAg
IDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCiAgICAgewpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhh
c2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRl
eC5oYXNoKCkgKyBtX29wZXJhbmQudmFsdWUoKSArIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29w
ZXJhbmQua2luZCgpKTsKICAgICB9CiAgICAgCiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9i
eXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKCkgY29u
c3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCEh
KnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpAQCAtOTAsNyArOTEsNyBAQCBwdWJs
aWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsK
IH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleUhhc2ggewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlmMzZjN2ZiZGExMDU1Nzg5ZGZmZGU2N2YzOTZm
ODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEyYzY5YThiYzA2NzA0NzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9w
ZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5kOwogICAgIHJlc3VsdC51Lmxh
enlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICByZXN1bHQudS5sYXp5T3BlcmFu
ZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4KCk7Ci0gICAgcmVzdWx0LnUubGF6
eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7CisgICAgcmVzdWx0LnUu
bGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6
OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZp
cnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6
eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVh
bFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkpOworICAgICAgICBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3Bl
cmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6
eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRleCA1ZDgxYzRjOTAw
YjA4YTRkZWQ4M2E3NGRmYTVhMmRjZjMzNWVjODhkLi4zNmQzNjlmMGMwMGZiZDQ0Yzg1NWEzODll
MDY1MDg0YmM3OGU1ODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKQEAgLTEwNiw3ICsx
MDYsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0Owot
ICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQ7CiAg
ICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5ZmY5Zjk3MzZhZWIzNzM0NTk0NDZkYzc0Y2Qx
MjAyNzU2MjU3Ni4uZDQ3YTY4ZjY0MDM4ZTNiMWRjNTU3YTQ0ZDcwODUwNDAyNzQyMGJmZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMTEgKzM1
LDIyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9w
ZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwg
TG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtQ2hlY2twb2ludFRtcHMg
PSA0OworCisvLyBBIE9wZXJhbmRLaW5kOjpUbXAgaXMgb25lIHRoYXQgZXhpc3RzIGZvciBleGl0
aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBieXRlY29kZXMu
CitlbnVtIGNsYXNzIE9wZXJhbmRLaW5kIHsgQXJndW1lbnQsIExvY2FsLCBUbXAgfTsKKworY2xh
c3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFuZCgpID0gZGVmYXVsdDsKKyAgICBPcGVy
YW5kKGNvbnN0IE9wZXJhbmQmKSA9IGRlZmF1bHQ7CisKKyAgICBPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChvcGVyYW5kLmlzTG9jYWwoKSA/IE9wZXJh
bmRLaW5kOjpMb2NhbCA6IE9wZXJhbmRLaW5kOjpBcmd1bWVudCkKKyAgICAgICAgLCBtX29wZXJh
bmQob3BlcmFuZC5vZmZzZXQoKSkKKyAgICB7IH0KKworICAgIE9wZXJhbmQoT3BlcmFuZEtpbmQg
a2luZCwgaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCisgICAgeyAKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gT3BlcmFuZEtp
bmQ6OlRtcCB8fCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpID09IChraW5kID09
IE9wZXJhbmRLaW5kOjpMb2NhbCkpOworICAgIH0KKyAgICBzdGF0aWMgT3BlcmFuZCB0bXAodWlu
dDMyX3QgaW5kZXgpIHsgcmV0dXJuIE9wZXJhbmQoT3BlcmFuZEtpbmQ6OlRtcCwgaW5kZXgpOyB9
CisKKyAgICBPcGVyYW5kS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAg
aW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5k
ICE9IE9wZXJhbmRLaW5kOjpUbXApOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1f
b3BlcmFuZCk7CisgICAgfQorICAgIHVpbnQ2NF90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oKnRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJhbmQgZnJvbUJp
dHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSA9PSBPcGVyYW5kS2luZDo6VG1wOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpID09IE9wZXJhbmRLaW5kOjpBcmd1bWVudDsgfQorICAgIGJvb2wgaXNM
b2NhbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6TG9jYWwgJiYgdmly
dHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSAhPSBPcGVyYW5kS2luZDo6VG1wICYmIHZpcnR1YWxSZWdpc3RlcigpLmlz
SGVhZGVyKCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkg
IT0gT3BlcmFuZEtpbmQ6OlRtcCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCk7IH0K
KworICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0b0xvY2FsKCkg
Y29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvTG9j
YWwoKTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2luZCBtX2tpbmQg
eyBPcGVyYW5kS2luZDo6QXJndW1lbnQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsgVmlydHVhbFJl
Z2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNfSU5MSU5FIGJv
b2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52YWx1ZSgpOwor
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsK
K30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKGlz
VG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJp
dHModWludDY0X3QgdmFsdWUpCit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8
T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2Yo
dWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7CiAKIGVudW0g
T3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAgICAgICA6IG1f
bnVtQXJndW1lbnRzKDApIHsgfQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBu
dW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6
Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVj
dG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0
ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5j
ZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6
OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3BlcmFuZHMoKSA9
IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBz
aXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251bUFyZ3VtZW50
cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsK
LSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1
bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbnVt
QXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1ZXMuZ3Jvdyhz
aXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXph
dGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25z
dCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3Vt
ZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxW
YWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwg
bV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1fdmFsdWVzLmdy
b3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVz
LmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRz
PFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0
IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICwg
bV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFs
dWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIubnVtYmVyT2ZM
b2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAg
bV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIHNpemVfdCBu
dW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAg
c2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0g
bV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25z
dCB7IHJldHVybiBtX251bUxvY2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVy
T2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAgICAgICByZXR1
cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQog
ICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAg
ICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQoaWR4IDwgbnVt
YmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAg
IHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxv
Y2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAg
fQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5k
ZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJndW1lbnQoc2l6
ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlk
eCldOwotICAgIH0KLSAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07Ci0gICAgfQor
ICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1l
bnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAg
VCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsg
fQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0
dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgbG9jYWwo
c2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQog
ICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBz
aXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVu
dE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBP
cGVyYW5kS2luZDo6VG1wOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygpOworICAg
ICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKICAgICAgICAgICAgIHJldHVybiBudW1i
ZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZM
b2NhbHMoKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBlIGF0Rm9yKHNp
emVfdCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVy
YW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgT3BlcmFu
ZEtpbmQ6OlRtcDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAgICAgY2FzZSBP
cGVyYW5kS2luZDo6QXJndW1lbnQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsK
LSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6Okxv
Y2FsOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRtcCgwKTsKICAg
ICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgY29uc3QgVCYg
YXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlk
eCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJh
bmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBPcGVyYW5k
S2luZDo6VG1wOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAgICBjYXNlIE9w
ZXJhbmRLaW5kOjpBcmd1bWVudDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwot
ICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9j
YWw6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdG1wKDApOwogICAg
IH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKworICAgIHZvaWQg
ZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAg
ICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAg
c2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdT
aXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3Qgb2xkTnVt
TG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBu
dW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAgICAg
aWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewotICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3ZhbHVlc1tuZXdTaXpl
IC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07CisKKyAg
ICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQo
KSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2FsczsgKytpKQor
ICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxzICsgaSldID0g
ZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMo
c2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lkIGVuc3VyZVRtcHMo
c2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7Ci0gICAgICAg
IHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6
ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6
ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7CisgICAgICAg
IHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkg
KyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
bV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAh
PSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQpA
QCAtMTY0LDg0ICsyODAsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4ID49IG51bWJl
ck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRMb2NhbChpZHgs
IHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChpbnQgb3BlcmFu
ZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVfdCBpbmRleCkg
eyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIGdldEZvck9wZXJh
bmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMq
Pih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAgc2l6ZV90IG9wZXJh
bmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
IChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVu
dEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICBy
ZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3Vt
ZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gbG9jYWxJbmRl
eChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5k
ZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3BlcmFu
ZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAo
KSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAgfQogICAgIAotICAg
IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAgVCYgb3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5cGUgb3BlcmFuZChP
cGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVhbFJlZ2lzdGVy
Lm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJu
IG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wKG9wLnZh
bHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlz
KS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9j
YXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgQ29uc3RSZWZU
eXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAgIENvbnN0UmVm
VHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxP
cGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0gICAgYm9vbCBoYXNP
cGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVy
T2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAgICAgICBpZiAob3Au
aXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51bWJlck9mVG1w
cygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBj
b25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kLCBjb25z
dCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFuZCkgPSB2YWx1
ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0T3BlcmFuZCh2
aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNvbnN0IFQmIGF0KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAgVCYgYXQo
c2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBjb25zdCBUJiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQotCi0gICAg
Ym9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCBtX251
bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4KSB7
IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgb3BlcmF0b3JbXShz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFJlZlR5cGUgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgT3BlcmFu
ZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgaWYg
KGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpLm9mZnNldCgp
OwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpbmRleCk7CisgICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZM
b2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAg
cmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUo
aW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJ
c0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldExvY2FsRmlyc3RUaW1l
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCksIHZhbHVlKTsKLSAgICB9Ci0gICAg
CisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCkBAIC0yNTcsNiArMzY1LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVt
YmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkxvY2FscygpID09IG90
aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0g
b3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVz
ID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAgLTI2NSw5ICszNzQsMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0g
ICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMs
IHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKKyAgICAvLyBUaGUg
Zmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQg
bV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIFN0b3Jh
Z2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCA2
NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2YWY5MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4
MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBAIC0zMCw2ICszMCwxNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVl
KCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CkBAIC00NCw2
ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0
KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRt
cEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAg
ICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJ
bmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02
MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9j
IiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2NhbEluZGV4KSk7CiAgICAgfQorICAgIGZvciAo
c2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRl
eCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcElu
ZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGQ1ZGRl
ZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJjMTI2NTQuLjdlOTMyNjJkZmIwOTU5ZGVjMmE5
MjQxZmY4YzYxMWYzM2I5MmI0NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtNzIsNiArNzIsNyBAQCBVbmxpbmtl
ZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2RlVHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4
ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxz
ZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5l
cmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgLCBtX21ldGFkYXRhKFVubGlua2Vk
TWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IGFkMWY5MGI3MGJlYjk4MTdmMzJiYjgw
YzU0N2FlNGJhYjY2NTUxYTUuLjMwODJiMGEyNjNjMzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVz
c2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBt
X2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7
IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwog
ICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsg
bV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2Nv
cGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBj
b25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25z
dGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Z2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRz
LnNpemUoKSA6IDA7IH0KQEAgLTQxOSw2ICs0MjEsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2lnbmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNf
YXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhBZ2UpOworICAgIGJvb2wgbV9oYXNDaGVja3Bv
aW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4
IGJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTExODMzZWZiOTAzNjcuLmViOTE3OTQ1MzBkZjFh
MzI5MmRjZGJlZDMxNjRlOWM3OTA5YTY5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRl
Y29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxl
KiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4
OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2Zp
bGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVj
dCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIgewogICAgIFdURl9NQUtFX1NU
UlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIo
dW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIo
dW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8v
IEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUgc3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3Vs
ZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxlcwogICAgICAgICAvLyB0byBiZSBtb3JlIHNw
YWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kKSk7CisgICAgICAgIG1fYnVmZmVyID0gTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3Rlcj46Om1hbGxvYyhtX3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsr
aSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIo
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQot
ICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsK
KyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0y
MDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAg
IH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5k
T3BlcmFuZD4gbV9idWZmZXI7CisgICAgTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3Rlcj4gbV9idWZmZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAppbmRleCBjNWNhNGRl
MWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVmM2U5Li5iMTM5NDdmMGUxOGRmMDYzYTg4YjNm
MjI3Y2RjZGJmZWZmZWRjMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCkBAIC0zNSwyMiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJl
Y292ZXJ5OjpyZWNvdmVyKENhbGxGcmFtZSogY2FsbEZyYW1lKSBjb25zdAogewogICAgIHN3aXRj
aCAodGVjaG5pcXVlKCkpIHsKICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAg
cmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgp
OworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVl
KCk7CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZElu
dDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdp
c3RlcigpKS51bmJveGVkSW50MzIoKSk7CiAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBT
dHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNh
bGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZFN0cmljdEludDUy
KCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CiAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVu
Ym94ZWREb3VibGUoKSkpOwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hl
ZENlbGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSku
dW5ib3hlZENlbGwoKTsKICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAjZWxzZQotICAgICAgICByZXR1cm4ganNCb29s
ZWFuKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xl
YW4oKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdp
c3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKICNlbmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAg
ICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZDhmMThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIy
MzYxMzYyZWE2My4uNWU0M2JjNzJiYmNjNGZmOTdhNjhmODNkYTgzMDk0ZTU4ZGEzYjMxNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVn
aXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIu
aAppbmRleCAzNjE5NTI5NDJkMmI4NmJhYjEyZjZjY2M3Y2MxYmEwMjFmNWFkMDQ4Li5mZDE3MDA3
MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRkZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVy
YW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMb2NhbChpbnQgb3BlcmFuZCkKIHsK
ICAgICByZXR1cm4gb3BlcmFuZCA8IDA7CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3Vt
ZW50KGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChp
bnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3BlcmFuZCA+PSAwOwogfQpAQCAtNDksMjUgKzQ5
LDMyIEBAIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpbnQsIGludCk7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZh
bGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
OworCiAgICAgVmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIoUmVmUHRyPFJlZ2lzdGVySUQ+KTsKIAogICAgIFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAg
IDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6
IG1fdmlydHVhbFJlZ2lzdGVyKGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAg
ICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAg
OiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKLSAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9w
ZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQor
ICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90IHNsb3QpCisgICAgICAgIDogbV92aXJ0
dWFsUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50PihzbG90KSkKKyAgICB7IH0KKworICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxS
ZWdpc3Rlcik7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFs
UmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudDsgfQotICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlz
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNM
b2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAg
IGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9w
ZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50
SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50IHRvQ29uc3Rh
bnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxS
ZWdpc3RlciAtIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7
IH0KIApAQCAtMTA2LDkgKzExMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19p
bnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXg7Ci0KICAgICBzdGF0aWMgaW50IGxvY2FsVG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1
cm4gLTEgLSBsb2NhbDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJn
dW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGI1MmZjNjIzNTQzYjRjMWMzN2Yy
MTRlNzIxNzRiOTJlMjlhNTQ1NGEuLmNjODE0M2UxOTlmNjRmOWNiNzZjNmU4MDU0Mzg4OGJiZTlh
ZDNiZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xMTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKTsKICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6
ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBw
YXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgpKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgo
cmVnKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJh
bWV0ZXI7CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpp
bml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBjb2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFy
YW1ldGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IHBhcmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRl
c3RydWN0dXJpbmcgYXJlIG5vdGVkLgotICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpOyAvLyB0aGlzCisgICAgbV90aGlzUmVnaXN0
ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmlu
ZGV4KCkpKTsgLy8gdGhpcwogCiAgICAgYm9vbCBub25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpA
QCAtMTYzNywxMSArMTYzNywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxp
dHlPcEltcGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYg
KG1fbGFzdEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRvIG9wID0g
bV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3JjMS0+aW5k
ZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lz
dGVyKCkgPT0gb3AubV9kc3QKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAg
ICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5p
bmRleCgpKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3Jj
Mi0+aW5kZXgoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmlu
ZGV4KCkpLmdldCgpKS0+dHJ5R2V0VmFsdWUoKTsKKyAgICAgICAgICAgICYmIHNyYzItPnZpcnR1
YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlzU3RyaW5nKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkpLT50cnlH
ZXRWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAg
ICAgICAgICAgICAgcmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1p
dCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwpAQCAtMzIzNSw2ICszMjM1LDggQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGZ1bmMKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25v
cmVkUmVzdWx0KCkpOwogICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNS
ZWdpc3RlciwgYXJndW1lbnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJz
dEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChWYXJhcmdzT3A6Om9w
Y29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKaW5kZXggZTE0YWExNjU2MjgxMGZkOTYzN2UwMGFlZTdjZWJmZWQ0NTYxMDQ5ZC4u
YmM1YmJhZTk3YzIzMmQyYjc4OWUyNzNiOTdlYWM5OTM1YThjZDQzZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApA
QCAtMTAwOCw2ICsxMDA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxk
RW1pdENvbnRyb2xGbG93UHJvZmlsZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVy
YXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxl
cik7IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9CisgICAgICAgIHZvaWQgc2V0VXNlc0No
ZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAg
ICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+cGFyc2VNb2RlKCk7IH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4IDM1NjIwYTExMTYxMWM1ZTBiODEwMWNkNDU1
NGMwNmJjODAzMDM3ODAuLmY4MTliMTIzZDRkODliYTA1OTkwOGFhYWRjNTBmNjI5ZGIzZTQ5Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJ
RC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5o
CkBAIC02OSwxMiArNjksMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
fQogCi0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50IGluZGV4KQorICAgICAgICB2b2lkIHNldElu
ZGV4KFZpcnR1YWxSZWdpc3RlciBpbmRleCkKICAgICAgICAgewogI2lmbmRlZiBOREVCVUcKICAg
ICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICBtX3Zp
cnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihpbmRleCk7CisgICAgICAgICAgICBtX3Zp
cnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1w
b3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3Bw
CmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIx
YWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJz
dHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
IG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1
bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkK
KyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChP
cGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00
OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhw
YXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBp
ZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgiKCIpOworICAgICAgICBw
YXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIiki
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5k
ZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJk
YzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lu
bGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUg
QEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
cG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUGF5bG9h
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3Bl
cmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1
ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRz
KCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
ICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjEx
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3Ry
YWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVT
dGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAg
IEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9h
ZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtp
bmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAg
IHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlz
VG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVl
KCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZGMxYzY0ZWU0ZTc2ZThmMTFiMzYxNmE1OWI1Mzcy
YzE3NGE2N2U3Zi4uZWQyNTA3Y2QwNDhkMjNlMGZiODMzZmE2YzA2ZmQ0NTZkODljODljMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaApAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFi
bGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2
YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAg
ICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tl
ZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZp
bHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlm
ICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFj
dFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAv
LyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3Io
ZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTQwMiwxMiAr
NDAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+
b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5v
cGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApAQCAtNDI5LDcgKzQyOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0
LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBtZWFucwogICAgICAgICAv
LyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBj
dXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1j
bGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3Bl
cmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6
ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ1OCw2ICs0NTgsMTIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShu
b2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1F
OiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24s
IGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDc2LDcgKzQ4Miw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQp
LnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0
YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0yMzU4LDcgKzIzNjQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleDsKICAgICAgICAgICAgIGlmIChhcmd1
bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFyZ3VtZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6
RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZ3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUub3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKaW5kZXggZDczMjQ3YjkzYzVk
Yzc4NmI2MTdhYTVhYWRjMmIwZjYxNTI4NmI1Zi4uODljMDhmYTA4MGNlYTMyZmQ5YzU5MWYzMGYx
ZTdkZDQ2ZjFkMTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudFBvc2l0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudFBvc2l0aW9uLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlc1tpXS0+
ZmluZCgpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+
bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5k
KCk7CiAKICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiICIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGlt
aW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
RWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggNzEzZTc5OTlhN2JmY2EyMWRkY2VhOGUzNDYyNjBm
MzQzMWU0ZDk0Mi4uMWZlMjBmZWY3ZDU1ZmUxNzdlZmUzOWM0ZTY5YWZjMzY2ZjhjNDEzYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0Vs
aW1pbmF0aW9uUGhhc2UuY3BwCkBAIC0zNTgsOSArMzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICBjYXNlIExv
YWRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFk
IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3Ao
KSA9PSBOZXdBcnJheUJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9k
ZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZh
cmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBO
ZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBTcHJl
YWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSwgbm9k
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtNDkzLDEwICs0OTYsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9h
ZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gaGVhcC5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgcmVnaXN0ZXIgbWF5IG5vdCBwb2ludCB0byBhbiBhcmd1bWVudCBvciBsb2NhbCwgZm9y
IGV4YW1wbGUgaWYgd2UgYXJlIGxvb2tpbmcgYXQgU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhbmQuaXNIZWFkZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5k
KG9wZXJhbmQpID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg
ICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC01NjAsMTYgKzU2Mywx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVk
QnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9jayB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2Nr
IHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpICsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpOwpAQCAt
NjI3LDcgKzYzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoQWJzdHJhY3RIZWFwIGhlYXApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChoZWFwLmtpbmQoKSA9PSBTdGFjayAmJiAhaGVhcC5wYXlsb2Fk
KCkuaXNUb3AoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNhbGxG
cmFtZSwgaGVhcC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtODA2LDcgKzgwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2FmZVRvR2V0U3RhY2sgPSBpbmRleCA+PSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0g
aW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpKSAtIDE7CkBAIC04NDUsOSArODQ4LDIzIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRz
Q2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxs
b2NhdGlvbihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwgc28gaXQgYmV0dGVy
IGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2Rl
LCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBv
cmlnaW4gPSBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKKworCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0Fy
cmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG9yaWdpbiwgLyog
YWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxk
KCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRp
b24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTg2MiwxMCArODc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+
b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFs
aWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJh
cmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
Tm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+
Y291bnQpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53
aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJ
bnQzMikpLApAQCAtODc0LDE0ICs4OTEsMTUgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
ICAgICBhdXRvIHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBzdG9yZUlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFy
YXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChyZWcuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFj
aywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcub2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBL
aWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVn
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBu
b2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhF
eGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEp
LCBFZGdlKHZhbHVlKSk7CkBAIC05MzUsNyArOTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50
Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGZyYW1lQXJndW1lbnRDb3VudCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZUFyZ3VtZW50Q291bnQgLSBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CkBAIC05ODMsNyArMTAwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVh
dGVSZXN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZy
YW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
ZnJhbWVBcmd1bWVudENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9hZEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7IGxvYWRJbmRleCA8IGZyYW1lQXJndW1lbnRDb3VudDsgKytsb2FkSW5kZXgpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwpAQCAtMTAxOSw5ICsxMDM3LDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0Rh
dGEtPm9mZnNldDsKQEAgLTEwMzAsNyArMTA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
Pj0gMSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZh
cmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIHZh
cmFyZ3NEYXRhLT5saW1pdCwgdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCmlu
ZGV4IGZmMWQ1NjgwZmFlMGEyMDAxNGQxZjFlMTNkYzNlNDhkOGM1NDMzMWQuLjFmZGMzMDk5NDg4
ZmE5OTZlZmEyY2MwYTY5ODM1OGMwYTQ5MTVjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKQEAgLTMyLDExICszMiwxNSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52
b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyIHJlZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogeworICAgIGlmIChvcGVyYW5k
LmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
KQogICAgICAgICByZXR1cm4gKHJlZy5pc0FyZ3VtZW50KCkgJiYgcmVnLnRvQXJndW1lbnQoKSkg
fHwgcmVnLmlzSGVhZGVyKCk7Ci0gICAgCisKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsCiAgICAgICAgICYmIHJlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtNDYsMTkgKzUwLDE5IEBAIGJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xv
dChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIC8vIFdlIGRvIG5vdCBpbmNsdWRlIGZpeHVwcyBo
ZXJlIHNpbmNlIGl0IGlzIG5vdCByZWxhdGVkIHRvIHxhcmd1bWVudHN8LCByZXN0IHBhcmFtZXRl
cnMsIGFuZCB2YXJhcmdzLgotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgIHVuc2lnbmVkIG51bUFy
Z3VtZW50cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50U3Rh
cnQgPQogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApOwogICAgIHJldHVybiByZWcgPj0gYXJn
dW1lbnRTdGFydCAmJiByZWcgPCBhcmd1bWVudFN0YXJ0ICsgbnVtQXJndW1lbnRzOwogfQogCi1i
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0
ZSwgT3BlcmFuZCBvcGVyYW5kKQogewotICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpLCByZWcpOwor
ICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpLCBvcGVyYW5kKTsKIH0KIAogTm9kZSogZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0
LCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4p
CisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBhZGRUaGlzKQogewogICAgIEdy
YXBoJiBncmFwaCA9IGluc2VydGlvblNldC5ncmFwaCgpOwogCkBAIC02OSwxMSArNzMsMTQgQEAg
Tm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21D
bG9uZWRBcmd1bWVudHMKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DcmVh
dGVSZXN0IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIKLSAgICAg
ICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQsCisgICAg
ICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkLAogICAgICAgICBhcmd1bWVudHMtPm9wKCkp
OwogCisgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQorICAgICAgICBy
ZXR1cm4gZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgYXJn
dW1lbnRzLT5jaGlsZDEoKS5ub2RlKCksIG5vZGVJbmRleCwgb3JpZ2luLCBhZGRUaGlzKTsKKwog
ICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgewot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IDA7CisgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gYWRkVGhpczsKICAgICAgICAg
Qml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcmd1bWVudHMtPmJpdFZlY3RvcigpOwogICAgICAgICBO
b2RlKiBjdXJyZW50U3VtID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFyZ3VtZW50cy0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CkBAIC0xMDMsNyArMTEwLDcgQEAg
Tm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogCiAgICAgaWYgKGFyZ3Vt
ZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5QnVmZmVyKSB7CiAgICAgICAgIHJldHVybiBpbnNlcnRpb25TZXQuaW5zZXJ0Q29u
c3RhbnQoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRz
LT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpKSk7CisgICAg
ICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFu
ZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpICsgYWRkVGhpcykpOwogICAgIH0K
ICAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGFyZ3VtZW50cy0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwpAQCAtMTEzLDcgKzEyMCw3IEBAIE5v
ZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAg
ICAgCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgewotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
IWFkZFRoaXM7CiAgICAgICAgIGlmIChhcmd1bWVudHNTaXplID49IG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKQogICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcDsKICAgICAgICAgZWxzZQpAQCAtMTI5LDE0ICsxMzYsMTQgQEAgTm9kZSogZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9u
bHksIEFyaXRoU3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVja2VkKSwKICAgICAgICAg
RWRnZShhcmd1bWVudENvdW50LCBJbnQzMlVzZSksCiAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJl
cigxICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkpOworICAgICAgICAgICAg
bm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwICsgIWFk
ZFRoaXMpLCBJbnQzMlVzZSkpOwogCiAgICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7
CiAgICAgICAgIC8vIFRoZSBhYm92ZSBzdWJ0cmFjdGlvbiBtYXkgcHJvZHVjZSBhIG5lZ2F0aXZl
IG51bWJlciBpZiB0aGlzIG51bWJlciBpcyBub24temVyby4gV2UgY29ycmVjdCB0aGF0IGhlcmUu
CiAgICAgICAgIHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aE1heCwgb3JpZ2luLCAKICAgICAgICAgICAg
IEVkZ2UocmVzdWx0LCBJbnQzMlVzZSksIAotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigwKSwgSW50MzJVc2Up
KTsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5k
ZXgsIG9yaWdpbiwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFkZFRoaXMpKSwgSW50
MzJVc2UpKTsKICAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxp
dGllcy5oCmluZGV4IDlhNzcxOGZiYmY1NDdiMmY2YWUxMDFkYWYzNzRhMDZhMmMzZGRmMTIuLjc0
ZjkzOWU4MTYyMmQ0MDI0NmUyMzU1ZDUwOThhOWVkMmE4NTIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaApAQCAtMzEsMTEgKzMx
LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rlcik7Ci1i
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVn
aXN0ZXIpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSos
IE9wZXJhbmQpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0
ZSwgT3BlcmFuZCk7CiAKIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgK
LSAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwg
Tm9kZU9yaWdpbik7CisgICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25l
ZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIGJvb2wgYWRkVGhpcyA9IGZhbHNlKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCmluZGV4IDk2ZGFjMzlhNDQ0ZmZiZDNjZTU0M2Y1N2Yz
NmNkNjFkZWNjMjhiZDQuLjg5N2M3MGRmZmJhMDY2YjY0OWNhZmRjYzFlZjA5MzM3NjgxMDRkMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oCkBAIC0xMzksOCArMTM5LDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyB9Ci0gICAg
QWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFs
dWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBv
cGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsg
fQogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9j
ay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4KTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGFyZ3Vt
ZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50
KGluZGV4KTsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFp
bGFiaWxpdHlNYXAuY3BwCmluZGV4IDc3NDNlN2QwMWYxY2FkNzgxZDg0YWIwM2QzYzA5Yzc3Zjgw
MjliYTUuLmMyYjU1YWE1YzRhNTIyOWIxYjFhNDQzMWMxODdhZGVmNDZjM2RiMjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKQEAgLTY1
LDEwICs2NSwxMCBAQCB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVIZWFwKCkKIAogdm9pZCBB
dmFpbGFiaWxpdHlNYXA6OnBydW5lQnlMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4g
d2hlcmUpCiB7Ci0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KG1fbG9jYWxz
Lm51bWJlck9mQXJndW1lbnRzKCksIG1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCksIEF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUoKSk7CisgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHND
b3B5KE9wZXJhbmRzTGlrZSwgbV9sb2NhbHMsIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7
CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIHdoZXJlLAotICAgICAg
ICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykg
ewogICAgICAgICAgICAgbG9jYWxzQ29weS5vcGVyYW5kKHJlZykgPSBtX2xvY2Fscy5vcGVyYW5k
KHJlZyk7CiAgICAgICAgIH0pOwogICAgIG1fbG9jYWxzID0gV1RGTW92ZShsb2NhbHNDb3B5KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCmluZGV4
IDUzNTUyNTYwMjNkZGNmMjgwZGM1OTViMzNhN2M3ZmRlYzU0ZTY0ZjAuLjgwYzEyYmYxODAyNWE1
NjEwNTk2ZGEyNGUyM2MwMjVmMmFiZTRmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaApAQCAtNjYsOSArNjYsOSBAQCBzdHJ1Y3QgQXZhaWxh
YmlsaXR5TWFwIHsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzRnVuY3Rv
ciwgdHlwZW5hbWUgQWRkRnVuY3Rvcj4KLSAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwo
VmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5j
dG9yJiBhZGQpCisgICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKE9wZXJhbmQgb3AsIGNv
bnN0IEhhc0Z1bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQogICAgIHsKLSAgICAg
ICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKKyAg
ICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQob3ApOwog
ICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAK
aW5kZXggMDU4NDQ5NjNlNjEwZWQyOTNjNTYwZmFiZmQzODlhOWYzOTc4MGEwNy4uZTIxYjI4YjUy
MjFmMTU2MThiODA2NGEzYTdiMmQ3ODY5MTM4NDIxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9j
YWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiAgICAgOiBi
eXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCiAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICwg
Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkKFN0cnVjdHVyZXNBcmVXYXRjaGVkKQpAQCAt
NDgsMTEgKzQ4LDExIEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnCiAgICAgLCBpc0xpbmtlZChm
YWxzZSkKICNlbmRpZgogICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCi0gICAgLCB2YXJpYWJsZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YXJpYWJsZXNBdFRhaWwobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBu
dW1Mb2NhbHMpCi0gICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0g
ICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1B
cmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcykKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVs
bFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkBAIC03
MCw2ICs3MCwxNSBAQCB2b2lkIEJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMpCiAgICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZUxvY2Fs
cyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7CiB9CiAKK3ZvaWQgQmFz
aWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQoreworICAgIHZhcmlhYmxl
c0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1
cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRt
cHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMsIEFic3RyYWN0
VmFsdWU6OmZ1bGxUb3AoKSk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVRlcm1pbmFs
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0g
ZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
CmluZGV4IGI1YWRmMDkxMmQwOTQyYmU5N2U5ODdjZGM4OWY0YWUzNGQwYzBiYzguLjFkZDM4Yzc5
MDhkYzZmNGQxYjA4NWJjOGUwNjI1NDgwZGI0NDk3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00NiwxMSArNDYsMTIgQEAgdHlwZWRlZiBWZWN0b3I8
Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywK
KyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVu
dHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywKICAgICAgICAgZmxvYXQg
ZXhlY3V0aW9uQ291bnQpOwogICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAgCiAgICAgdm9pZCBlbnN1
cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKTsKKyAgICB2b2lkIGVuc3VyZVRtcHModW5z
aWduZWQgbmV3TnVtVG1wcyk7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX25vZGVzLnNpemUoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFz
aXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2Vy
dGlvblNldC5jcHAKaW5kZXggNzUwOGUyMTlkYzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBm
OS4uMDA4Y2Y1MjI2OTU3YzlhODM1ODVjNWU1ZTJjMTI1ZjJmOGNlNGIyZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKQEAgLTUx
LDcgKzUxLDcgQEAgdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwg
UmVmPEJhc2ljQmxvY2s+JiYgYmxvY2spCiAKIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0
OjppbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCkKIHsKLSAgICBSZWY8
QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRl
eCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMo
KSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIGV4
ZWN1dGlvbkNvdW50KSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5l
dyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZUbXBzKCksIGV4ZWN1dGlvbkNvdW50KSk7CiAgICAgYmxvY2stPmlzUmVhY2hhYmxl
ID0gdHJ1ZTsKICAgICBhdXRvKiByZXN1bHQgPSBibG9jay5wdHIoKTsKICAgICBpbnNlcnQoaW5k
ZXgsIFdURk1vdmUoYmxvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKaW5kZXggMDMwZmFiZmEzMDdmMTlhMjY3YzBjZDVmYzNhZTU5ODNj
ZGFjYTdlMi4uZWJiNDZkYWFmNmUxODUyZjk0Y2EzOWU2YzY2YTZkYjBhZGMxMmU4MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTEx
MSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb25zdGFudE9uZShncmFwaC5mcmVl
emUoanNOdW1iZXIoMSkpKQogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKQorICAgICAgICAsIG1fbnVtVG1wcyhtX2NvZGVCbG9jay0+bnVtVG1wcygp
KQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZh
ckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9wKDApCkBAIC0xMzksNiArMTQwLDE3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMo
bmV3TnVtTG9jYWxzKTsKICAgICB9CiAKKyAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3
TnVtVG1wcykKKyAgICB7CisgICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlp
bmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRt
cHMsICJcbiIpOworICAgICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQorICAgICAgICAg
ICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKKyAgICB9CisKKwog
ICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hl
Y2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBAIC0yNzAsNyAr
MjgyLDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZl
Y3RvcjxCYXNpY0Jsb2NrKj4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBw
b3NzaWJsZVRhcmdldHMpOwogICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgcHJvZ3Jlc3NU
b05leHRDaGVja3BvaW50KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNv
ZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NS
IGV4aXQuCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgYWRkVG9HcmFwaChFeGl0
T0spOworCisgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CisgICAgfQorCisgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIApA
QCAtMjc5LDE2ICszMDEsMTQgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1Nl
dCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9k
ZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVj
dChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25z
dGFudCgpKTsKIAotICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3Bl
cmFuZCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKSk7CiAKLSAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgotICAgICAgICByZXR1cm4g
Z2V0TG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBnZXRMb2NhbE9yVG1wKG9wZXJhbmQp
OwogICAgIH0KIAogICAgIE5vZGUqIGdldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKQEAgLTI5
OCw4ICszMTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1f
Y29uc3RhbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNp
emUgfHwgIW1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgY29u
c3QgQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSAqbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChv
cGVyYW5kLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZCk7CisgICAgICAgICAgICAg
ICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNv
ZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kKTsKICAgICAg
ICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplKSB7CiAgICAgICAgICAgICAg
ICAgICAgIG1fY29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOwogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgp
OyArK2kpCkBAIC0zNTgsOSArMzc4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGluaXRpYWxp
emluZyBsb2NhbHMgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgogICAgICAgICBJbW1lZGlhdGVO
YWtlZFNldAogICAgIH07Ci0gICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorCisgICAgTm9k
ZSogc2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9k
ZSA9IE5vcm1hbFNldCkKICAgICB7Ci0gICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZv
KG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwg
T3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAKICAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnlt
b3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICAgICBtX2V4
aXRPSyA9IGZhbHNlOwpAQCAtMzc0LDcgKzM5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gZGVsYXllZC5leGVjdXRlKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIHZv
aWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKQEAgLTM5MiwxOCArNDEzLDE3
IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAg
ICAgICAgQVNTRVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkgPT0gbV9j
dXJyZW50SW5kZXgpOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKKyAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5v
cGVyYW5kKCkpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAgICAgICAg
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQv
c2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBO
b2RlKiBnZXRMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2Nh
bE9yVG1wKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0g
b3BlcmFuZC50b0xvY2FsKCk7Ci0KLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5p
c1RtcCgpIHx8IG9wZXJhbmQuaXNMb2NhbCgpKTsKKyAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUg
YWNjZXNzIGRhdGFzLCBhbmQgMikKICAgICAgICAgLy8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJl
ZHVuZGFudCBHZXRMb2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IKQEAgLTQyOCwyMCArNDQ4LDI2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNw
ZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOwog
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0TG9jYWwoY29uc3QgQ29k
ZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldExvY2FsT3JU
bXAoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9k
ZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CisgICAgICAgIEFT
U0VSVChvcGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICBTZXRG
b3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4s
IHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9M
b2NhbCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRT
ZXQpIHsKLSAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBm
aW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOworICAgICAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpID49IG1f
bnVtVG1wcykgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigqaW5saW5lQ2FsbEZyYW1lKCkpOworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJCYWQgb3BlcmFuZDogIiwgb3BlcmFuZCwgIiBidXQgY3VycmVudCBudW1iZXIgb2YgdG1w
cyBpczogIiwgbV9udW1UbXBzLCAiIGNvZGUgYmxvY2sgaGFzOiAiLCBtX3Byb2ZpbGVkQmxvY2st
Pm51bVRtcHMoKSwgIiB0bXBzLiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0ICYmICFvcGVyYW5kLmlz
VG1wKCkpIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwocmVnKTsKICAgICAgICAgICAgIGlm
IChhcmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQs
IGFyZ3VtZW50UG9zaXRpb24pOwotICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC5uZWVkc1Nj
b3BlUmVnaXN0ZXIoKSAmJiBvcGVyYW5kID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkp
CisgICAgICAgICAgICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIHJl
ZyA9PSBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQogICAgICAgICAgICAgICAgIGZsdXNo
KG9wZXJhbmQpOwogICAgICAgICB9CiAKQEAgLTQ1MSw3ICs0NzcsNyBAQCBwcml2YXRlOgogICAg
ICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKAog
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShz
ZW1hbnRpY09yaWdpbi5ieXRlY29kZUluZGV4KCksIEJhZEluZGV4aW5nVHlwZSkpOwogICAgICAg
ICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSksIHZhbHVlKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5s
b2NhbChsb2NhbCkgPSBub2RlOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9
CiAKQEAgLTQ4MywyMCArNTA5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgfQotICAgIE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4m
IHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNl
dE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICBOb2RlKiBzZXRBcmd1bWVudChjb25zdCBD
b2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwg
U2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgU2V0Rm9yU2NvcGU8
Q29kZU9yaWdpbj4gb3JpZ2luQ2hhbmdlKG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRp
Y09yaWdpbik7CiAKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kLnRvQXJndW1l
bnQoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gcmVnLnRvQXJndW1lbnQoKTsKICAg
ICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKHJlZyk7CiAKICAgICAgICAgLy8gQWx3
YXlzIGZsdXNoIGFyZ3VtZW50cywgZXhjZXB0IGZvciAndGhpcycuIElmICd0aGlzJyBpcyBjcmVh
dGVkIGJ5IHVzLAogICAgICAgICAvLyB0aGVuIG1ha2Ugc3VyZSB0aGF0IGl0J3MgbmV2ZXIgdW5i
b3hlZC4KICAgICAgICAgaWYgKGFyZ3VtZW50IHx8IG1fZ3JhcGgubmVlZHNGbHVzaGVkVGhpcygp
KSB7CiAgICAgICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkKLSAgICAg
ICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBmbHVzaERp
cmVjdChyZWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWFyZ3VtZW50ICYm
IG1fY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KQpA
QCAtNTMyLDE0ICs1NTksMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludCBhcmd1bWVudCA9
IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpIC0gaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIHN0YWNrLT5tX2FyZ3Vt
ZW50UG9zaXRpb25zW2FyZ3VtZW50XTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIEFyZ3VtZW50UG9zaXRpb24q
IGZpbmRBcmd1bWVudFBvc2l0aW9uKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIEFyZ3Vt
ZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9uKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yQXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOwot
ICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kKTsKKyAg
ICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWRkRmx1c2hEaXJl
Y3RGdW5jPgpAQCAtNTUwLDkgKzU3OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQo
IW1fZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpOwogICAgICAgICAgICAgbnVtQXJndW1lbnRz
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOwogICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAgICBh
ZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJh
bWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAg
ICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0
KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAg
ICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5k
KGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51bVBhcmFtZXRlcnMoKTsK
IApAQCAtNTc1LDYgKzYwNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZy
YW1lKTsKICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNz
ID0gbV9ncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIC8vIE5v
dGU6IFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNhdXNlIHRtcHMgYXJlIG5v
dCByZXF1aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICBj
b25zdCBhdXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3Mo
Ynl0ZWNvZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2lu
dChvcmlnaW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsb2NhbCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9jYWxdKQpAQCAtNTg0LDI3
ICs2MTQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQg
Zmx1c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaChPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9z
aXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAg
dm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3Vt
ZW50UG9zaXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPEZsdXNo
PihvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxOb2Rl
VHlwZSBub2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAg
dm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3Np
dGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5p
c0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgTm9kZSomIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAg
ICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwogICAgICAgICAK
QEAgLTYxNCwyNiArNjQ0LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBh
ZGRUb0dyYXBoKG5vZGVUeXBlLCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAg
aWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRW
YXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBwaGFudG9tTG9jYWxEaXJlY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBwaGFudG9tTG9jYWxEaXJlY3QoT3Bl
cmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxQaGFu
dG9tTG9jYWw+KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsKICAgICB9
CiAKICAgICB2b2lkIGZsdXNoKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnkpCiAg
ICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07CisgICAgICAgIGF1
dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFu
ZCkgeyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAgZmx1c2hJbXBsKGlubGluZVN0
YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7CiAgICAgfQogCiAg
ICAgdm9pZCBmbHVzaEZvclRlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hE
aXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1
c2hEaXJlY3QocmVnKTsgfTsKLSAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBb
Jl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcGhhbnRvbUxvY2Fs
RGlyZWN0KHJlZyk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGlu
ZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChvcGVyYW5kKTsgfTsK
KyAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFt
ZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBwaGFudG9tTG9jYWxEaXJlY3Qob3BlcmFuZCk7IH07CiAg
ICAgICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKGN1cnJlbnRDb2RlT3JpZ2luKCksIGFkZEZsdXNo
RGlyZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwogICAgIH0KIApAQCAtNzYxLDYgKzc5MCwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVk
Z2UoY2hpbGQzKSk7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgfQor
ICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSog
Y2hpbGQxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wID09IE1vdkhpbnQpOworICAgICAgICBy
ZXR1cm4gYWRkVG9HcmFwaChvcCwgT3BJbmZvKG9wZXJhbmQua2luZCgpKSwgT3BJbmZvKG9wZXJh
bmQudmFsdWUoKSksIGNoaWxkMSk7CisgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5
cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGls
ZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAgICAgICAgTm9kZSog
cmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKApAQCAtMTA5MSw4ICsxMTI1LDEwIEBAIHByaXZhdGU6
CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9u
LgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwotICAgIC8vIFRoZSBudW1iZXIgb2YgbG9j
YWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4gdGhlIGZ1bmN0aW9uLgorICAgIC8vIFRo
ZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgYnkgdGhlIGJ5dGVj
b2RlIGZvciB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHM7CisgICAgLy8g
VGhlIG1heCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3IgZm9yd2FyZGluZyBkYXRhIHRvIGFuIE9T
UiBleGl0IGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQgbV9udW1UbXBzOwogICAgIC8vIFRoZSBu
dW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRoYXQgd2UgbmVl
ZCB0bwogICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1bWVudHMgdG8gb3V0Z29pbmcgY2FsbHMg
ZnJvbSB0aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVtYmVyIGluY2x1ZGVzIHRoZSBDYWxsRnJh
bWUgc2xvdHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0aGUgY2FsbGVlCkBAIC0xMTU5LDE0ICsx
MTk1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgp
OwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAgT3BlcmFuZCByZW1hcE9wZXJhbmQoT3Bl
cmFuZCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1faW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOworCisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kOjp0
bXAob3BlcmFuZC52YWx1ZSgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOworICAg
ICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7
CiAKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSAr
IG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsK
ICAgICAgICAgfQogICAgIH07CiAgICAgCkBAIC0xMTc1LDEzICsxMjE0LDggQEAgcHJpdmF0ZToK
ICAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayBtX2ljQ29udGV4dFN0YWNrOwogICAgIAogICAgIHN0
cnVjdCBEZWxheWVkU2V0TG9jYWwgewotICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOwotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwotICAgICAgICBOb2RlKiBtX3ZhbHVlOwot
ICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKLSAgICAgICAgCiAgICAgICAgIERlbGF5ZWRTZXRM
b2NhbCgpIHsgfQotICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3Jp
Z2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9k
ZSkKKyAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgT3Bl
cmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQogICAgICAgICAgICAg
OiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAg
ICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQpAQCAtMTE5NCw4ICsxMjI4LDEzIEBAIHByaXZhdGU6
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldEFyZ3VtZW50KG1fb3JpZ2luLCBtX29wZXJh
bmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRM
b2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOworICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWxPclRtcChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3Zh
bHVlLCBtX3NldE1vZGUpOwogICAgICAgICB9CisKKyAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdp
bjsKKyAgICAgICAgT3BlcmFuZCBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWUgeyBu
dWxscHRyIH07CisgICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwogICAgIH07CiAgICAgCiAgICAg
VmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRMb2NhbFF1ZXVlOwpAQCAtMTIwOCw3ICsx
MjQ3LDcgQEAgcHJpdmF0ZToKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRh
cmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJU
KGJ5dGVjb2RlSW5kZXgpOwotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpu
ZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMs
IDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxv
Y2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMs
IDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1f
YmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBv
cmRlciBvZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tM
aW5raW5nVGFyZ2V0cy5zaXplKCkpCkBAIC0xMjIwLDcgKzEyNTksNyBAQCBCYXNpY0Jsb2NrKiBC
eXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdl
dGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5l
dyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxz
LCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Js
b2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRt
cHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1f
Z3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsK
QEAgLTE0MjMsNyArMTQ2Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2
ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gc3RhdGljX2Nhc3Q8aW50PihjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZh
cmFyZ3MsIHdlIGRvIG5vdCBrbm93IGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgZmls
bGVkIGJ5IExvYWRWYXJhcmdzLiBWYXJhcmdzIElubGluZUNhbGxGcmFtZSdzCi0gICAgICAgICAg
ICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3Rl
bnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IExvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRv
IHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBh
cmd1bWVudHMgYnkgeGtMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJh
bWUgd2hpY2ggbWF5IGJlCiAgICAgICAgICAgICAvLyBhIGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50
by4KICAgICAgICAgICAgIGlmIChjYWxsRnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtMTQ0OSw3ICsxNDg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50
IGMKICAgICAgICAgLy8gV2UgbXVzdCBzZXQgdGhlIGNhbGxlZSB0byB0aGUgcmlnaHQgdmFsdWUK
ICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAg
ICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAg
ICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxTZXQp
OworICAgICAgICAgICAgICAgIHNldERpcmVjdChyZW1hcE9wZXJhbmQoc3RhY2tFbnRyeS0+bV9p
bmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBO
b3JtYWxTZXQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2Fs
bGVlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAKQEAgLTE2MTQsMTYgKzE2NTMsMTggQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUg
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVy
Rml4dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAg
Ci0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQo
KSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5saW5l
Q2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1ZSgp
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3VyZUxv
Y2FscygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xv
Y2FsKCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSAr
CiAgICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5u
dW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFja1Rv
cC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFt
ZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVtVG1w
cygpICsgY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRp
b25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBpZiAo
cmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1
cmVDYWxsKCkpIHsKQEAgLTE2MzYsNyArMTY3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENh
CiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3RhY2tU
b3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9j
aywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAoVmlydHVh
bFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFy
dC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNv
bnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxp
bmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJy
ZW50SW5kZXg7CkBAIC0xNjcxLDkgKzE3MTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQog
ICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3
ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBh
cmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0
aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQg
YXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4
KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxs
ZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4
LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3Qo
YXJndW1lbnRUb0dldCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhh
cmd1bWVudFRvR2V0Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldCksIHZhbHVlKTsKICAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwg
YXJndW1lbnRUb0dldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwpAQCAtMTcxNywxNiArMTc1OCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBDYQogICAgICAgICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZy
YW1lcy4KICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9m
ZnNldCkgewogICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAg
ICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAg
ICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0g
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsK
LSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0
Lm9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1Nl
dCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpbmRleCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZv
KGFyZ3VtZW50VG9TZXQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVl
LmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRv
U2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsg
KytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAgICAgICAgYWRkVG9H
cmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7
CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKyBpbmRleCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcElu
Zm8oYXJndW1lbnRUb1NldCksIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVl
dWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50
VG9TZXQsIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KIApAQCAt
MTg5MywxMiArMTkzNCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5s
aW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBlbWl0
RnVuY3Rpb25DaGVja3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQp
OwogICAgICAgICAKICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQotICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVy
T2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVt
YXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGludCBh
cmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVyczsKLSAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNl
dCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5zdGFy
dCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKQEAgLTE5MDYs
MTEgKzE5NDcsMjQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZGF0YS0+b2Zm
c2V0ID0gYXJndW1lbnRzT2Zmc2V0OwogICAgICAgICBkYXRhLT5saW1pdCA9IG1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFu
ZGF0b3J5TWluaW11bTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxG
b3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9w
SW5mbyhkYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZh
cmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisKKyAgICAgICAg
aWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICBOb2Rl
KiBhcmd1bWVudENvdW50OworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChHZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICBlbHNlIGlmIChpbmxpbmVDYWxsRnJhbWUoKS0+
aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGdldERpcmVjdChy
ZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lKCksIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIGFy
Z3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6
ZShqc051bWJlcihpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEp
LCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUqIGFy
Z3VtZW50cyA9IGdldChhcmd1bWVudHNBcmd1bWVudCk7CisgICAgICAgICAgICBhdXRvIGFyZ0Nv
dW50VG1wID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKE9wZXJhbmQ6OnRtcChPcENh
bGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgIHNldERpcmVj
dChhcmdDb3VudFRtcCwgYWRkVG9HcmFwaChWYXJhcmdzTGVuZ3RoLCBPcEluZm8oZGF0YSksIGFy
Z3VtZW50cykpOworICAgICAgICAgICAgcHJvZ3Jlc3NUb05leHRDaGVja3BvaW50KCk7CisKKyAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0TG9jYWxP
clRtcChhcmdDb3VudFRtcCksIGFyZ3VtZW50cyk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIExvYWRWYXJhcmdzIG1heSBPU1IgZXhpdC4gSGVuY2UsIHdlIG5lZWQgdG8ga2VlcCBh
bGl2ZSBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50CiAgICAgICAgIC8vIGFuZCBhcmd1bWVu
dHNBcmd1bWVudCBmb3IgdGhlIGJhc2VsaW5lIEpJVC4gSG93ZXZlciwgd2Ugb25seSBuZWVkIGEg
UGhhbnRvbSBmb3IKQEAgLTE5MjIsMTQgKzE5NzYsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0
ZXIKICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxzbyBoYXZlIG90aGVyIHJlYXNv
bnMgZm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CiAgICAgICAgIC8vIGJlZm9yZSBTU0Eu
CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoZGF0YS0+Y291bnQpOwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQg
d2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24n
dAogICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJn
dW1lbnREZWZpbml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAg
ICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnBy
ZWRpY3QoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9m
aXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFk
ZFRvR3JhcGgoU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRW
YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCks
IHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsK
ICAgICAgICAgdW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTE5NTMsNyArMjAwNyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVu
dHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERl
ZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVu
dCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1T
ZXRBcmd1bWVudHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjA1Myw3ICsyMTA3LDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0
OiAiLCByZWdpc3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CisgICAgY2FsbGVlUmVnID0g
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcs
ICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlh
dGVTZXRXaXRoRmx1c2gpOwogCkBAIC01MTAyLDcgKzUxNTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdl
eHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlz
Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVu
UmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC02MTc4LDcgKzYyMzIsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUoKSB8fCAobV9ncmFwaC5jb21w
aWxhdGlvbigpICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0gMSAmJiBtX2N1cnJlbnRCbG9j
ay0+YXQoMCktPm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAotICAgICAgICAgICAgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsK
IAogICAgICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYXRjaCk7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlz
IGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCkBAIC02MTk1LDcgKzYyNDks
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCi0gICAgICAgICAgICAg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
eworICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCkBA
IC02MjIzLDE0ICs2Mjc3LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAKIAogICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMgPSAwOwotICAgICAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAg
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9m
aWxlKSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5t
X29wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5k
LmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dyYXBoKEV4
dHJhY3RDYXRjaExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9jYWxQcmVk
aWN0aW9uc1tudW1iZXJPZkxvY2Fsc10pKTsKICAgICAgICAgICAgICAgICArK251bWJlck9mTG9j
YWxzOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKHByb2ZpbGUu
bV9vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwg
T3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbG9jYWxzVG9TZXQudW5j
aGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZhbHVlKSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGlmIChudW1iZXJPZkxvY2FscykKQEAgLTYzNTgsNyArNjQxMiw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgICAgICAg
ICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFs
UG9pbnRlci5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50
ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcikpOwogICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewpA
QCAtNjgyNiw4ICs2ODgwLDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUu
bV9zeW1ib2xUYWJsZS5pc0NvbnN0YW50KCkgJiYgYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUuaXND
b25zdGFudCgpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChieXRlY29kZS5tX3N5bWJvbFRhYmxlLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBGcm96ZW5W
YWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxW
YWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkpOwogICAgICAgICAgICAgTm9k
ZSogc2NvcGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1i
b2xUYWJsZSksIE9wSW5mbyhpbml0aWFsVmFsdWUpLCBzY29wZSk7CiAgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGxleGljYWxFbnZpcm9ubWVudCk7CkBAIC02ODU3LDcgKzY5MTEsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgLy8gbG9hZHMgZnJvbSB0aGUgc2NvcGUgcmVnaXN0ZXIgbGF0ZXIsIGFzIHRoYXQgd291
bGQgcHJldmVudCB0aGUgREZHIGZyb20gdHJhY2tpbmcgdGhlCiAgICAgICAgICAgICAvLyBieXRl
Y29kZS1sZXZlbCBsaXZlbmVzcyBvZiB0aGUgc2NvcGUgcmVnaXN0ZXIuCiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAg
ICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOwogICAgICAgICAgICAgTm9kZSogcmVzdWx0OwogICAgICAgICAgICAgaWYgKEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbGVlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTRnVuY3Rp
b24qPigqbV92bSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gd2Vha0pTQ29uc3RhbnQoZnVu
Y3Rpb24tPnNjb3BlKCkpOwpAQCAtNzI4Miw4ICs3MzM2LDEwIEBAIEJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAvLyBUaGUgb3duZXIg
aXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIGJhcnJpZXIg
b24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRlQmFycmllcihj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9jYWxsZXItPm1f
aW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2NvZGVCbG9jay0+
bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlu
bGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewogICAgICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6Y29u
c3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsID0gZmFsc2U7CkBAIC03NjQ1LDcgKzc3MDEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNzY2
NSwyNCArNzcyMSwyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMu
aXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBPcGVyYW5k
IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1
bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIG9wZXJhbmQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50LmlzQXJndW1lbnQoKSAmJiAhYXJndW1lbnQuaXNI
ZWFkZXIoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxBcmd1
bWVudFBvc2l0aW9uKj4mIGFyZ3VtZW50cyA9IG1faW5saW5lQ2FsbEZyYW1lVG9Bcmd1bWVudFBv
c2l0aW9ucy5nZXQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudHNbYXJndW1lbnQudG9Bcmd1bWVudCgpXS0+YWRkVmFyaWFibGUodmFyaWFibGUp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgb3AsIG9yaWdpbiwgT3BJ
bmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaXZl
bmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIEZsdXNoLCBvcGVyYW5kKTsKICAgICAg
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9j
YWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFBoYW50b21M
b2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVz
ZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBQaGFudG9tTG9jYWwsIG9wZXJhbmQpOwogICAgICAg
ICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1w
bChvcmlnaW4uc2VtYW50aWMsIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3Qp
OwpAQCAtNzc0Nyw2ICs3ODAzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAg
ICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsK
ICAgICB9CiAKKyAgICBtX2dyYXBoLm1fdG1wcyA9IG1fbnVtVG1wczsKICAgICBtX2dyYXBoLm1f
bG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0g
bV9wYXJhbWV0ZXJTbG90czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAKaW5kZXggOGU5YmI0YWNiZTU1MDJkZGE3YjM3NDc4NGI1YTg1ZmZkZTcwM2JmZC4uM2Rj
NzU2OGYxZWUyYzY5NzcyMjY4Y2M5NmRlYTRhMDVjNjIzNjI1MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE3MCwyMiArMTcwLDIyIEBAIHByaXZhdGU6
CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBjb25zdCBPcGVyYW5kczxP
cHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0
SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtdXN0SGFuZGxlVmFsdWVz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgT3B0aW9uYWw8
SlNWYWx1ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAgICAgaWYgKCF2
YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2
ZSBpbiBieXRlY29kZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFub2RlKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgTm90IGxpdmU6ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBX
aWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIgd2l0aCAiLCB2YWx1ZS52YWx1
ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBXaWRlbmluZyAiLCBvcGVy
YW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHRhcmdldCA9IGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdGFyZ2V0Lm1lcmdlT1NSRW50cnlW
YWx1ZShtX2dyYXBoLCB2YWx1ZS52YWx1ZSgpLCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSwg
bm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcAppbmRleCBkOThmZDRhZjQ0MGYwN2NiYzE2YjY3ZDYwMmJhNjQyNmFmMGYy
MzgyLi44NzNmYTA0MzA1OGEwZmQxOGU0ZGYxMjMzZGU2Zjk2NzZhMmJkZTAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAK
QEAgLTU0LDggKzU0LDkgQEAgcHVibGljOgogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1l
bnRzKCk7CiAgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CiAgICAgICAgIHNw
ZWNpYWxDYXNlQXJndW1lbnRzKCk7Ci0gICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5k
PigpOwotICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAg
cHJvcGFnYXRlUGhpczxPcGVyYW5kS2luZDo6TG9jYWw+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXM8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50PigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPE9wZXJh
bmRLaW5kOjpUbXA+KCk7CiAgICAgICAgIGNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CkBAIC0yMTEsMTAgKzIxMiwyMCBA
QCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAg
ICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQo
KSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3
aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBPcGVyYW5k
S2luZDo6QXJndW1lbnQ6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPE9w
ZXJhbmRLaW5kOjpBcmd1bWVudD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCku
dG9Bcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgT3BlcmFuZEtpbmQ6OkxvY2FsOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2Nh
bEZvcjxPcGVyYW5kS2luZDo6TG9jYWw+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFu
ZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIE9wZXJhbmRLaW5kOjpUbXA6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2Fs
Rm9yPE9wZXJhbmRLaW5kOjpUbXA+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CkBAIC0yMjksNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2Ug
Rmx1c2g6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0y
NzAsMTUgKzI4MiwyNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBo
YW50b21Mb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFy
aWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1
c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJp
YWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9j
YWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsK
KyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBj
YXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1
c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50Pihub2Rl
LCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6IHsK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUs
IE9wZXJhbmRLaW5kOjpMb2NhbD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
T3BlcmFuZEtpbmQ6OlRtcDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50
b21Mb2NhbEZvcjxub2RlVHlwZSwgT3BlcmFuZEtpbmQ6OlRtcD4obm9kZSwgdmFyaWFibGUsIHZh
cmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXplU2V0KE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFu
ZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWls
LnNldE9wZXJhbmQobm9kZS0+b3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCkKQEAgLTI4Nyw4ICszMDksOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQobV9ibG9jay0+aXNSZWFjaGFi
bGUpOwogICAgICAgICAKLSAgICAgICAgY2xlYXJWYXJpYWJsZXM8QXJndW1lbnRPcGVyYW5kPigp
OwotICAgICAgICBjbGVhclZhcmlhYmxlczxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFy
VmFyaWFibGVzPE9wZXJhbmRLaW5kOjpBcmd1bWVudD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJs
ZXM8T3BlcmFuZEtpbmQ6OkxvY2FsPigpOworICAgICAgICBjbGVhclZhcmlhYmxlczxPcGVyYW5k
S2luZDo6VG1wPigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkg
cmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CiAg
ICAgICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQsIGJ1dCBk
b2Vzbid0IGFzc3VtZSB0aGF0IHRoZSByZWYKQEAgLTM4OCw3ICs0MTEsNyBAQCBwcml2YXRlOgog
ICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJvcGFnYXRl
UGhpcygpCiAgICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3Rh
Y2sgPSBvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhpU3RhY2sg
OiBtX2xvY2FsUGhpU3RhY2s7CisgICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBw
aGlTdGFjayA9IHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpOwogICAgICAgICAKICAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHkuCiAgICAg
ICAgIG1fYmxvY2sgPSAwOwpAQCAtNDY2LDkgKzQ4OSwxMiBAQCBwcml2YXRlOgogICAgIHRlbXBs
YXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAx
Mjg+JiBwaGlTdGFja0ZvcigpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJn
dW1lbnRPcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFjazsKLSAg
ICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2lu
ZCkgeworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDogcmV0dXJuIG1fYXJndW1l
bnRQaGlTdGFjazsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6IHJldHVybiBtX2xv
Y2FsUGhpU3RhY2s7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OlRtcDogcmV0dXJuIG1fdG1w
UGhpU3RhY2s7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21wdXRlSXNGbHVzaGVkKCkKQEAgLTUyMSw2ICs1
NDcsNyBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBo
aVN0YWNrRW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFj
a0VudHJ5LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwg
MTI4PiBtX3RtcFBoaVN0YWNrOwogICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2Nh
bE9wV29ya2xpc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCmluZGV4IDIzODFjNmI4ZjhmNGJhNzYzNGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UuLjRjY2Ux
NzQ4ODNlMjA0MTBkNjIyM2E2ZjQxNzJlZGRlNjk4YWFlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC0xNDcsOCArMTQ3LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VS
VCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaGVhcC5wYXls
b2FkKCkudmFsdWUoKSA9PSBoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAg
bV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsK
KyAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgp
LnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAg
ICAgICAgICAgICBtX2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UK
QEAgLTE3Miw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVy
Q29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGlmIChwYWlyLmtleS5oZWFwKCkua2luZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5r
ZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5w
YXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBt
X2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBh
aXIua2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyNiw4ICsyMjUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgQWJzdHJhY3RIZWFwIGFic3RyYWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAg
ICAgICAgICAgIGlmIChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAg
ICAgICAgICAgIEFTU0VSVChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJh
Y3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSwgbnVsbHB0cik7
CiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9j
YXRpb24sIG5vZGUsIDB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0
OSw4ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsK
LSAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0g
bG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5
bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFj
dEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSk7CiAg
ICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQog
ICAgICAgICAgICAgICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAg
ICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk4LDcgKzI5
NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBv
bmx5IGxpdmUgaW4gbV9mYWxsYmFja1N0YWNrTWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5
LCBUT1AgYWx3YXlzIGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBu
b3QgaGF2ZSBhIHVuaXF1ZSB2YWx1ZS4KLSAgICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVl
X3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01h
cDsKKyAgICBIYXNoTWFwPGludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4s
IERlZmF1bHRIYXNoPGludDY0X3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxpbnQ2NF90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFj
a1N0YWNrTWFwOwogCiAgICAgTWFwIG1faGVhcE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAyNDc3YWYwZTU3ZjRkZWZhZjI5YjJmODBj
MDQ3NWY1M2VlMTE1ZmQzLi5hYTIyMmI4N2MyN2NjNGFlYWRjZmFlZTJjYWFhMTM3YWNjNDJmZWVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBA
IC0zMDcsNiArMzA3LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxsaW50
X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1
bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90
cmFtcG9saW5lOgogICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgY2FzZSBv
cF9jYWxsX3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9j
YXRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDVm
MDJhYzBkZjkzYTJhZjhkNzQzZTFmMmU3OGQxYWRjOTM5MmU3YTkuLmQ2YTQ2MzVhYzZkZjMyZGVl
MGU3YjNjM2U2ZDM2YjNmNGNiNzExZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCkBAIC0xMTEsOSArMTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAvLyBzY2FuIHdvdWxkIHJlYWQuIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlu
bGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkK
LSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
KyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lm
aWNhbGx5IGFjY291bnQgd2hpY2ggbm9kZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0
MSw3ICs0NDEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAK
ICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNr
LCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAK
ICAgICBjYXNlIE1vdkhpbnQ6CkBAIC00OTcsNyArNDk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdy
aXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUp
OwogICAgICAgICByZXR1cm47CiAKQEAgLTc2NSwxMiArNzY1LDEyIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6
Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNr
LCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0
YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpLCBMYXp5Tm9kZShu
b2RlKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU2V0Q2FsbGVlOgotICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczogewpAQCAtNzgxLDcgKzc4MSw3IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBj
b25zdCBXcml0ZUZ1CiAgICAgfQogCiAgICAgY2FzZSBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpczoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAo
U3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgpA
QCAtNzg5LDM2ICs3ODksNDIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0
YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9k
ZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywg
bm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywg
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9w
ZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhl
YXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7Ci0g
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICByZWFkKGhlYXApOwogICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIEFic3Ry
YWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAg
ICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9w
ZXJhbmQpOwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihT
dGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAg
ICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICByZXR1cm47
ICAKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQp
OwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFj
aywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0
YWNrLCBkYXRhLT5jb3VudCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1p
dDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3Rh
cnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyNyw5ICs4MzMsOSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7Cisg
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50
PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFy
dCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2
ZW5lc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmNwcAppbmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzLi4xNTc0
NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcg
QEAgc3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJp
bGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVj
b2RlKAogICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAg
IHJlZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggNzk4N2I4NzBmZDUw
OWY5MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2FkYi4uN2ZmZDRkMzViNmNmNWM5ZGUzODFlN2RhNjEz
MzJmZDUyNDk2NTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29k
ZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVu
ZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAt
IDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICBy
ZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERp
c3Bvc2FibGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTY0
LDEzICs2NCwxMyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRl
SW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2Rl
T3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAg
ICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjps
YXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNp
emUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lu
cy5zaXplKCkgLSAxKSk7CisgICAgcmV0dXJuIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KGNvZGVP
cmlnaW5zLnNpemUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCmluZGV4IDNiMTY1ZjJjNDAyMTAwM2QwNDFjY2E2ZDlhZTBjZmU3YWU4MjcxM2YuLjE4
NTM2NmQwNGUyNjNlZTllZDk2NGM4NmE3ZWQ5NTI0YTk1YmI5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0z
ODMsNyArMzgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50
QnlWYWwgaW4gc3VjaCBzdGF0aWNhbGx5LW91dC1vZi1ib3VuZHMgYWNjZXNzZXM7IHdlIGp1c3Qg
bG9zZSBDRkEgdW5sZXNzCiAgICAgICAgICAgICAgICAgLy8gR0NTRSByZW1vdmVzIHRoZSBhY2Nl
c3MgZW50aXJlbHkuCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc3RhdGUu
bnVtYmVyT2ZBcmd1bWVudHMoKSAtIDEpCkBAIC00MDQsNyArNDA0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4ICsg
MSksIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSAmJiBpbmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAm
JiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkp
IHsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0U3RhY2soZGF0YSk7CiAg
ICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA4YjUz
OTQzZTI0YTMzNmJkZTEwOWNhNmMzNDAyOTRmNjJhYWE3ZjM4Li5mNWJkMWY1OTEyZmNjOWM4YWQ5
MmEzZWIwYTM4YzE2MGYzZWNhMjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC0yOTUsNiArMjk1LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgSW5CeVZhbDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2Fz
ZSBJbnN0YW5jZU9mQ3VzdG9tOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXg6CiAgICAgY2FzZSBO
dW1iZXJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAKaW5kZXggMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIyNzJkNDc5
OTk4YjUzOS4uNDVmYmM0MzlkNTNiYTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcApAQCAtOTAsNyArOTAsNiBAQCBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
YW55IHN0dWJzIHRoYXQgdGhlIERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBX
ZSB3YW50IHRvCiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24g
ZG9lcyBmaW5hbGl6YXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZtLmdldENUSVN0dWIo
YXJpdHlGaXh1cEdlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5l
cmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cik7CiAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA4YWI4OGNjN2Yx
NjZjYzQ3YjdiNDg4NzBkY2FjNzI1ZjYyYzhmYTEzLi43NjQ5MjQyNDIzYmIxNDdmOGYxMWIyMWMz
MmQxYjk1YjhiNTY2NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKQEAgLTI0MzIsNiArMjQzMiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUg
dG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bj
b2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CkBAIC0yNDY0LDggKzI0
NzIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgog
ICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
Ci0gICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmV3T2Jq
ZWN0OgogICAgICAgICBjYXNlIE5ld1Byb21pc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZvckFsbEtpbGxzLmgKaW5kZXggMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRj
ZmRlMjhiOS4uYmY0MzUwYzRjZDE3ZTNkNTAwNjYzOGY1NWFhYzM1YTU2NTI5OTRhMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtMzIsNiArMzIsMTAg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2UgRm9yQWxs
S2lsbHNJbnRlcm5hbCB7Citjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIC8v
IFV0aWxpdGllcyBmb3IgZmluZGluZyB0aGUgbGFzdCBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxp
dmUgaW4gREZHIFNTQS4gVGhpcyBhY2NvdW50cyBmb3IgbGl2ZW5lc3MgZHVlCiAvLyB0byBPU1Ig
ZXhpdC4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGVudW1lcmF0aW5nIG92ZXIgYWxsIG9mIHRo
ZSBwcm9ncmFtIHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSwKIC8vIGJ5IGV4cGxvcmluZyBh
bGwgYmxvY2tzIHdoZXJlIHRoZSBub2RlIGlzIGxpdmUgYXQgdGFpbCBhbmQgdGhlbiBleHBsb3Jp
bmcgYWxsIHByb2dyYW0gcG9pbnRzIHdoZXJlIHRoZQpAQCAtNTMsMTMgKzU3LDEzIEBAIHZvaWQg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2Rl
KiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgCiAgICAgQ29kZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRl
ci0+b3JpZ2luLmZvckV4aXQ7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3Rl
ZDsKKyAgICBPcGVyYW5kIGFscmVhZHlOb3RlZDsKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0
aGluZyB0aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVl
LgogICAgIGlmIChub2RlQWZ0ZXItPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSBub2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYg
KGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlcikpIHsKLSAgICAgICAgICAgIGZ1bmN0
b3IocmVnKTsKLSAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbm9kZUFmdGVyLT51bmxpbmtlZE9wZXJhbmQoKTsKKyAgICAgICAgaWYgKGdy
YXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgYWZ0ZXIpKSB7CisgICAgICAgICAgICBmdW5j
dG9yKG9wZXJhbmQpOworICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKICAgICAg
ICAgfQogICAgIH0KICAgICAKQEAgLTcwLDI5ICs3NCw0OCBAQCB2b2lkIGZvckFsbEtpbGxlZE9w
ZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBj
b25zdAogICAgIC8vIG90aGVyIGxvb3AsIGJlbG93LgogICAgIGF1dG8qIGJlZm9yZUlubGluZUNh
bGxGcmFtZSA9IGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoYmVmb3JlSW5saW5l
Q2FsbEZyYW1lID09IGFmdGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGludCBzdGFj
a09mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgOiAwOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGJlZm9yZUlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChh
ZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
YmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRl
eCgpLmNoZWNrcG9pbnQoKSk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJlZm9y
ZS5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkgPT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLm9mZnNl
dCgpLCAiV2hlbiB0aGUgREZHIGRvZXMgY29kZSBtb3Rpb24gaXQgc2hvdWxkIGNoYW5nZSB0aGUg
Zm9yRXhpdCBvcmlnaW4gdG8gbWF0Y2ggdGhlIHN1cnJvdW5kaW5nIGJ5dGVjb2Rlcy4iKTsKKwor
ICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpj
b2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgYXV0byBsaXZl
QWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYWZ0ZXIuYnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAgICAgICAg
IGxpdmVCZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CisKKyAgICAgICAgICAgIGxpdmVCZWZvcmUu
Zm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9y
KHJlbWFwT3BlcmFuZChiZWZvcmVJbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIE5vIGxvY2FscyBjYW4gZGllIGF0IGEg
Y2hlY2twb2ludC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihjb2Rl
QmxvY2spOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVsbExp
dmVuZXNzLmdldExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3Vs
YXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2
ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSwg
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAgICAgICAKICAgICAgICAg
KGxpdmVCZWZvcmUgJiB+bGl2ZUFmdGVyKS5mb3JFYWNoU2V0Qml0KAogICAgICAgICAgICAgWyZd
IChzaXplX3QgcmVsYXRpdmVMb2NhbCkgewotICAgICAgICAgICAgICAgIGZ1bmN0b3IodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwocmVsYXRpdmVMb2NhbCkgKyBzdGFja09mZnNldCk7CisgICAgICAg
ICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoYmVmb3JlSW5saW5lQ2FsbEZyYW1lLCB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChyZWxhdGl2ZUxvY2FsKSkpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFh
ZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmluZyBhY3Jvc3Mg
YSBjaGVja3BvaW50IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFuIGlubGluZUNh
bGxGcmFtZS4iKTsKKwogICAgIC8vIERldGVjdCBraWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZl
IHdheTogaXQgaXMga2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4K
LSAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzTGl2ZUluQnl0ZWNvZGUoYWZ0
ZXIpOwotICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3Rv
ciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoYWZ0ZXIpOwor
ICAgIHVuc2lnbmVkIG51bUxvY2FscyA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0
ZWNvZGUoCiAgICAgICAgIGJlZm9yZSwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7Ci0gICAgICAgICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3Rl
ZCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdl
dChyZWcudG9Mb2NhbCgpKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJhbmQu
aXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2NhbCgp
OworICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9y
KG9wZXJhbmQpOwogICAgICAgICB9KTsKIH0KICAgICAKQEAgLTEwNSw3ICsxMjgsOCBAQCB2b2lk
IGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBzZWVuSW5DbG9zdXJlRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBjYWxsZWRGdW5jdG9yRmxhZyA9IDI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IGZs
YWdzOwotICAgIAorCisgICAgQVNTRVJUKG5vZGVJbmRleCk7CiAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwogICAgIAogICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKQEAgLTEy
MCwxNSArMTQ0LDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOwotICAg
IGlmIChub2RlSW5kZXgpCi0gICAgICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAx
KTsKKyAgICBOb2RlKiBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CiAKICAgICBm
b3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgZ3JhcGgsIGJlZm9yZSwgbm9kZSwKLSAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2Nh
bCgKLSAgICAgICAgICAgICAgICByZWcsCisgICAgICAgICAgICAgICAgb3BlcmFuZCwKICAgICAg
ICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmxhZ3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xvc3VyZUZsYWc7CiAgICAgICAgICAg
ICAgICAgfSwKQEAgLTE1OSw2ICsxODEsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAg
ICAvLyBTdGFydCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhw
ZWN0ZWQgdG8gb25seSBpbnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhl
IGJsb2NrIHVwIHRvIG5vZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHpl
cm8gdGhlbiB0aGUgZnVuY3RvciBoYXMgbm90aGluZyB0byBkby4KICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CisgICAgICAgIGRhdGFMb2dMbklmKEZvckFsbEtpbGxzSW50ZXJuYWw6OnZlcmJvc2UsICJsb2Nh
bCBhdmFpbGFiaWxpdHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRleCwgIiAiLCBsb2NhbEF2YWlsYWJp
bGl0eS5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5k
ZXgoCiAgICAgICAgICAgICBncmFwaCwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHks
IGJsb2NrLCBub2RlSW5kZXgsCiAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggN2QwZmEzNjRkNWJiZTNjMjIwMzM5
Mzg4Y2ZhNTVhZDY4Y2E5ZmQ1Mi4uNDE4Njk2YTkzMTM2OTU4NWZkMDIzZDM5ZTc5Y2MxNDBlYmI4
MzM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTMwOCw4ICsz
MDgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHBy
ZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOworICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigi
LCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIp
OwogICAgICAgICAgICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2Fs
KCk7CiAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKQEAgLTMxNywxMyArMzE3LDEz
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4
U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNTdGFj
a0FjY2Vzc0RhdGEoKSkgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7
CisgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIGlmIChk
YXRhLT5tYWNoaW5lTG9jYWwuaXNWYWxpZCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAibWFjaGluZToiLCBkYXRhLT5tYWNoaW5lTG9jYWwpOwogICAgICAgICBvdXQucHJpbnQoY29t
bWEsIGRhdGEtPmZvcm1hdCk7CiAgICAgfQotICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZExvY2Fs
KCkpIAotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkTG9jYWwoKSk7Cisg
ICAgaWYgKG5vZGUtPmhhc1VubGlua2VkT3BlcmFuZCgpKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICBpZiAobm9kZS0+aGFzVmVjdG9yTGVu
Z3RoSGludCgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ2ZWN0b3JMZW5ndGhIaW50ID0g
Iiwgbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgpKTsKICAgICBpZiAobm9kZS0+aGFzTGF6eUpTVmFs
dWUoKSkKQEAgLTUxNSw5ICs1MTUsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgQmFzaWNCbG9jayoKICAgICAg
ICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+
b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgp
ICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCks
ICI8IiwgcGhpTm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhp
Tm9kZS0+b3BlcmFuZCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CiAgICAg
ICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIkAiLCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KHBoaU5vZGUtPmNoaWxkMigpKSB7CkBAIC04ODQsNyArODg1LDcgQEAgdm9pZCBHcmFwaDo6c3Vi
c3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5C
bG9jaywgVmEKICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAg
ICAgICAgICBpZiAobm9kZS0+b3BlcmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFu
ZCgpKQogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtODkzLDkgKzg5NCw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0
aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxv
Y2ssIFZhCiAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFy
aWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
c3Vic3RpdHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7Ci0gICAg
ICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWls
Tm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+
b3BlcmFuZCgpKTsKICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQotICAgICAg
ICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKSkgPSBuZXdHZXRMb2NhbDsKKyAgICAgICAgICAgICAgICBibG9jay52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkgPSBuZXdHZXRM
b2NhbDsKICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMTEzMywzNiArMTEzNCw1NiBAQCBCeXRlY29kZUtpbGxzJiBH
cmFwaDo6a2lsbHNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgcmV0
dXJuIGtpbGxzRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOwogfQog
Ci1ib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJh
bmQgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNoZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7
CiAgICAgYm9vbCBpc0NhbGxlck9yaWdpbiA9IGZhbHNlOworCiAgICAgQ29kZU9yaWdpbiogY29k
ZU9yaWdpblB0ciA9ICZjb2RlT3JpZ2luOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zm
c2V0KCkgLSBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpKTsKKyAgICBhdXRvKiBpbmxpbmVD
YWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAvLyBXZSBu
ZWVkIHRvIGhhbmRsZSB0YWlsIGNhbGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQg
dG8gdGhlCisgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcgdGhlIHRhaWwgY2Fs
bC4KKyAgICBmb3IgKDsgY29kZU9yaWdpblB0cjsgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxG
cmFtZSA/ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlciA6IG51bGxwdHIpIHsKKyAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcE9m
ZnNldCA9IGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMDsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihvcGVyYW5kLnZhbHVlKCkpOworCisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC52YWx1ZSgp
ID49IDApOworICAgICAgICAgICAgLy8gVGhpcyB0bXAgc2hvdWxkIGhhdmUgYmVsb25nZWQgdG8g
c29tZW9uZSB3ZSBpbmxpbmVkLgorICAgICAgICAgICAgaWYgKG9wZXJhbmRJbmRleCA+IHRtcE9m
ZnNldCArIG1heE51bUNoZWNrcG9pbnRUbXBzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0ZvcihpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRt
cHMoKSB8fCBvcGVyYW5kSW5kZXggPCB0bXBPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIGF1dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50
KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAg
ICByZXR1cm4gYml0TWFwLmdldChvcGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOworICAgICAgICB9
CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkgLSBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpOwogICAgICAgICAKICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJyZWcgPSAiLCByZWcsICJcbiIpOwogCi0g
ICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxG
cmFtZSgpOwotICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHItPnN0
YWNrT2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgeworICAgICAg
ICBpZiAob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSA8IGNvZGVPcmlnaW5QdHIt
PnN0YWNrT2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykgewogICAg
ICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZWcub2Zmc2V0KCkgPCBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7
CiAKIAogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwK
LSAgICAgICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkgeworICAgICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSBhIGNhbGxlZS5cbiIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSB7CisgICAgICAgICAgICAgICAgICAgICYmIHJlZyA9PSBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewogICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvb2tz
IGxpa2UgdGhlIGFyZ3VtZW50IGNvdW50LlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTE3Niw0MiArMTE5NywzOSBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVj
b2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVu
ZXNzID0gbGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
ICAgIHJldHVybiBmdWxsTGl2ZW5lc3Mub3BlcmFuZElzTGl2ZShyZWcub2Zmc2V0KCksIGJ5dGVj
b2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3JpZ2lu
UHRyLCBpc0NhbGxlck9yaWdpbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmdWxsTGl2ZW5lc3MudmlydHVhbFJl
Z2lzdGVySXNMaXZlKHJlZywgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJl
ZHVuZGFudCBpZiBpdCB3YXNuJ3QgZm9yIG91cgogICAgICAgICAvLyBvcF9jYWxsX3ZhcmFyZ3Mg
aW5saW5pbmcuCi0gICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpCisgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUgJiYgcmVnLmlzQXJndW1lbnQoKQogICAgICAgICAgICAgJiYgc3RhdGljX2Nh
c3Q8c2l6ZV90PihyZWcudG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
V2l0aEZpeHVwLnNpemUoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiQXJndW1lbnQgaXMgbGl2ZS5cbiIpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNh
bGxlcnMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCi0gICAgICAgIC8vIHRo
ZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCi0gICAgICAgIGNvZGVP
cmlnaW5QdHIgPSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgIGlzQ2Fs
bGVyT3JpZ2luID0gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNr
LCByZXR1cm5pbmcgdHJ1ZS5cbiIpOworICAgIHJldHVybiB0cnVlOyAgICAKIH0KIAotQml0VmVj
dG9yIEdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCitC
aXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiB7CiAgICAgQml0VmVjdG9yIHJlc3VsdDsKLSAgICByZXN1bHQuZW5zdXJlU2l6
ZShibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgIGZvckFs
bExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAorICAgIHVuc2lnbmVkIG51bUxvY2FscyA9IGJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKKyAgICByZXN1bHQuZW5zdXJlU2l6
ZShudW1Mb2NhbHMgKyBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpKTsK
KyAgICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGNvZGVPcmln
aW4sCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgQVNT
RVJUKHJlZy5pc0xvY2FsKCkpOwotICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KHJlZy50b0xv
Y2FsKCkpOworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxzICsgb3BlcmFuZC52YWx1
ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAgICByZXN1bHQucXVpY2tTZXQob2Zm
c2V0KTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MzUsOCArMTY1
Myw4IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBv
cGVyYW5kTm9kZTsgbm9kZTspIHsKICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRo
aXMpKSB7Ci0gICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5sb2NhbCgpLmlz
QXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2Fs
KCkudG9Bcmd1bWVudCgpOworICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+
b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9
IG5vZGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICAgICAgTm9kZSogYXJn
dW1lbnROb2RlID0gbV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3Vt
ZW50XTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3Vt
ZW50RGVmaW5pdGVseSBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4
NDEKQEAgLTE2NTYsNyArMTY3NCw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3Jh
cGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6
eU9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAogICAgICAg
ICAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwg
bm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CmluZGV4IGVjNGYyMmJlZTU1ZjFiMjkwNDJiZmIyM2UxMjY0ZmEyMDNjYWRkZTcuLmQ0MzNkODVk
OTc4OWE1YmU5YjVjZTY4MzhkOWIxZTIzNDFhN2E0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKQEAgLTg0MCwxMyArODQwLDEzIEBAIHB1YmxpYzoKICAgICAvLyBRdWlja2x5
IHF1ZXJ5IGlmIGEgc2luZ2xlIGxvY2FsIGlzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlz
IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcKICAgICAvLyBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIGlm
IHlvdSB3aWxsIG9ubHkgcXVlcnkgb25lIGxvY2FsLiBCdXQsIGlmIHlvdSB3YW50IHRvIGtub3cg
YWxsIG9mIHRoZQogICAgIC8vIGxvY2FscyBsaXZlLCB0aGVuIGNhbGxpbmcgdGhpcyBmb3IgZWFj
aCBsb2NhbCBpcyBtdWNoIHNsb3dlciB0aGFuIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkuCi0gICAg
Ym9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciwgQ29kZU9yaWdpbik7CisgICAg
Ym9vbCBpc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQsIENvZGVPcmlnaW4pOwogICAgIAotICAgIC8v
IFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIGF0IHRoZSBn
aXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CisgICAgLy8gUXVpY2tseSBnZXQgYWxs
IG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGFuZCB0bXBzIGxpdmUgYXQgdGhlIGdpdmVuIHBv
aW50LiBUaGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKICAgICAvLyBhbnkgYXJndW1lbnRzIGJlY2F1c2Ug
dGhvc2UgYXJlIGFsbCBwcmVzdW1lZCBsaXZlLiBZb3UgY2FuIGNhbGwgZm9yQWxsTGl2ZUluQnl0
ZWNvZGUoKSB0bwogICAgIC8vIGFsc28gZ2V0IHRoZSBhcmd1bWVudHMuIFRoaXMgaXMgbXVjaCBm
YXN0ZXIgdGhhbiBjYWxsaW5nIGlzTGl2ZUluQnl0ZWNvZGUoKSBmb3IgZWFjaCBsb2NhbC4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUlu
Qnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
ICAgIHZvaWQgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIC8vIFN1cHBv
cnQgZm9yIG5vdCByZWR1bmRhbnRseSByZXBvcnRpbmcgYXJndW1lbnRzLiBOZWNlc3NhcnkgYmVj
YXVzZSBpbiBjYXNlIG9mIGEgdmFyYXJncwogICAgICAgICAvLyBjYWxsLCBvbmx5IHRoZSBjYWxs
ZWUga25vd3MgdGhhdCBhcmd1bWVudHMgYXJlIGxpdmUgd2hpbGUgaW4gdGhlIGNhc2Ugb2YgYSBu
b24tdmFyYXJncwpAQCAtODgxLDYgKzg4MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
aWYgKGxpdmVuZXNzQXRCeXRlY29kZVtyZWxhdGl2ZUxvY2FsXSkKICAgICAgICAgICAgICAgICAg
ICAgZnVuY3RvcihyZWcpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29kZU9y
aWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgICAgICAgICAgICAgYXV0byBsaXZl
VG1wcyA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRy
LT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRC
aXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBP
cGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MDQsOSArOTEyLDkg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIEJpdFZlY3Rv
ciBvZiBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBub3cuIFRoaXMg
aXMgbW9zdGx5IHVzZWZ1bCBpZgorICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2YgdGhl
IGxvY2FscyBhbmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlm
CiAgICAgLy8geW91IHdhbnQgdG8gY29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxvY2FscyBmcm9t
IHR3byBkaWZmZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5
dGVjb2RlKENvZGVPcmlnaW4pOworICAgIEJpdFZlY3RvciBsb2NhbHNBbmRUbXBzTGl2ZUluQnl0
ZWNvZGUoQ29kZU9yaWdpbik7CiAKICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9w
cmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXND
YWxsZXJPcmlnaW4pCiAgICAgewpAQCAtOTM4LDEyICs5NDYsMTIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAgICAgfQogICAg
IAotICAgIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIGFyZ3VtZW50cyBhbmQgbG9jYWxzIGxpdmUg
YXQgdGhlIGdpdmVuIENvZGVPcmlnaW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8vIGV4dGVuc2lv
biB0byBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFy
ZSBhbHdheXMgcHJlc3VtZWQgbGl2ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVy
YW5kcyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKKyAgICAv
LyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2Ug
YWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIGZvckFs
bExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAgICAgICBmb3JB
bGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAg
ICAgIAogICAgICAgICAvLyBSZXBvcnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBsaXZlLgogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykKQEAgLTExMTQsNiArMTEyMiw3IEBAIHB1
YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21p
bmF0b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4g
bV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAg
dW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwog
ICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1
YTExYzQ1YjA1NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJj
ZjhiZTM4NGUzZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFj
ZUFic3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAs
IG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1f
dmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9s
b2NhbFZhcnMpCi0gICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xp
a2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2NrKG51bGxw
dHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaAppbmRleCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2Zl
YzcxMjk5Li4xODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5o
CkBAIC0xNjcsMTMgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2Fy
ZChtX3ZhcmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJh
bmQoaW50IG9wZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJh
bmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5k
SW5kZXgob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQu
b2Zmc2V0KCkpOyB9Ci0gICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRl
eChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAppbmRleCA3MGVlZjg4NmI0YThmZTI5NDNmNDZiYWU3NmVjNmI2MzcwZTQ1MmQ1Li5jNTU0NGJi
YzVjOTgwNTY2OWY5ZTdmNmZmODBiOWFjMTk2ZjRkZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRD
VElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1bmtMYWJl
bCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUo
KTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRD
b21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZv
Lm1fZmFpbHVyZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
a09TUkV4aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAg
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBKdW1wIHRh
cmdldCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRU
aHVua0xhYmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayh0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0
Y2hhYmxlSnVtcCgpOworICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1
bXAoKTsKICAgICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6
Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJl
bCBibG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2Fs
KCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCgh
dmFyaWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+
b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkg
ewogICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAg
ICAgICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9m
ZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0
KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCBkMWJkN2RhOWRmZmRjMzZjMjYwZTYzNWNi
NjAwYTliMmYxOTE5ZDM1Li40ODgwODc0YzI4NWFiN2Q0NDdlYjg5M2E2ZThiNGJiZjAxMDczMWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUs
NyArMTM1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENh
bGxTaXRlSW5kZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2Fs
bCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2Vy
dmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA0MmY2OGFkYTMyNDc4YTExNzFjZWFk
MGY5M2UwOGFjMjVjYTYzMTM0Li41YzM1ZTUzNWU1ZGQ2NjFkMzFkZDUxMzBkN2MxMmJhY2JhZGIy
YzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTYzLDcgKzYz
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGlz
VmFsaWRGbHVzaExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGlu
ZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBib29sIGlzVmFsaWRGbHVzaExvY2F0
aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IG1lYW50IHRvIGJlIGZh
c3QuIFdlIGp1c3QgdXNlIGl0IGZvciBhc3NlcnRpb25zLiBJZiB3ZSBnb3QgbGl2ZW5lc3Mgd3Jv
bmcsCiAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIGZhbHNlIGZvciBhIEZs
dXNoIHRoYXQgd2UgaW5zZXJ0LgpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1
dG8gZmx1c2hJc0RlZmluaXRlbHlJbnZhbGlkID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5z
aWduZWQgaW5kZXgpIHsKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IGZhbHNlOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5kZXg7IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSkt
PmxvY2FsKCkgPT0gb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSkt
PmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5vcGVyYW5kKCkgPT0gb3Bl
cmFuZCkgewogICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE1LDggKzExNSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2goQmFzaWNCbG9jayogYmxvY2ss
IEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQogICAgIHsKICAgICAgICAgSGFuZGxlckluZm8q
IGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgRmFzdEJpdFZlY3Rv
ciBsaXZlQXRDYXRjaEhlYWQ7Ci0gICAgICAgIGxpdmVBdENhdGNoSGVhZC5yZXNpemUobV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBP
cGVyYW5kczxib29sPiBsaXZlQXRDYXRjaEhlYWQoMCwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZlRtcHMoKSk7CiAKICAgICAgICAgSGFuZGxlckluZm8qIGNhY2hlZEhhbmRs
ZXJSZXN1bHQ7CiAgICAgICAgIENvZGVPcmlnaW4gY2FjaGVkQ29kZU9yaWdpbjsKQEAgLTEzMywx
MSArMTMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5s
aW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIg
PSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNr
KSkgewotICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmZpbGwoZmFsc2UpOwogCiAgICAgICAg
ICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleChoYW5kbGVyLT50YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFs
bExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxp
bmVDYWxsRnJhbWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0
ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsm
XSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRj
aEhlYWQub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICAgICAgICAgIGNhY2hlZEhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyOwpAQCAt
MTU2LDEyICsxNTUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhhbmRs
ZXJSZXN1bHQ7CiAgICAgICAgIH07CiAKLSAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NE
YXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwg
bnVsbHB0cik7CisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRC
bG9ja0FjY2Vzc0RhdGEoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLCBudWxs
cHRyKTsKIAogICAgICAgICBhdXRvIGZsdXNoRXZlcnl0aGluZyA9IFsmXSAoTm9kZU9yaWdpbiBv
cmlnaW4sIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJy
ZW50RXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xv
Y2FsKCkgJiYgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5p
c0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZl
QXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogCiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgaW5kZXgsIG9wZXJhbmQpKTsKIApAQCAt
MTc4LDYgKzE3Nyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2Nh
bCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyBs
b2NhbCsrKQogICAgICAgICAgICAgICAgIGZsdXNoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxv
Y2FsKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcCA9IDA7IHRtcCA8IGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCk7ICsrdG1wKQorICAgICAgICAgICAgICAgIGZs
dXNoKE9wZXJhbmQ6OnRtcCh0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5
Miw5ICsxOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChj
dXJyZW50RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3Vt
ZW50TWF5YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBu
b2RlLT5sb2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYg
bGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKLQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQo
KTsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0
Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlz
VmFsaWRGbHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1
cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nl
c1N0YWNrKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5k
KCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAppbmRleCA3
M2EzZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5mZmY5NmJmY2Y2MjllYjRk
MDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBtX2dyYXBoLmZv
ckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdp
bi5mb3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAg
ICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVy
YW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCkBAIC05
OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IE1vdkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5v
cGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgRXBvY2ggbG9j
YWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQg
PSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3VycmVudEVwb2No
KSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChu
b2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRl
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkg
IT0gRG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRz
KAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4IC0gMSks
IG5vZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewor
ICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBpdCBtaWdodCBj
bGFpbSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aXQncyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0Lgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJlZykpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBL
aWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5v
ZGUsICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAppbmRleCAzOTE1OTM3MjI5ZjI4YTdhYTJlNjU1ZjUyNTFmOTZmNDA0ZTMzYjQ2Li5iODAxNTVl
OTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7
CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVy
IGxvY2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9jYWwobG9jYWwpCisgICAg
U3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9ybWF0KQorICAg
ICAgICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIE9wZXJhbmQgb3Bl
cmFuZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZsdXNoRm9ybWF0
IGZvcm1hdDsKICAgICAKQEAgLTkwMiw2ICs5MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTIzLDkgKzkyNCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOwogICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgotICAg
ICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkMigpOwog
ICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTczLDkgKzk3Niw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNzRGF0YSo+KCkt
PmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICBP
cGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJh
bmQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbCgpCkBA
IC05ODMsNyArOTg2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NE
YXRhKCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1VubGlua2Vk
TG9jYWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpAQCAtOTk2
LDEwICs5OTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFZpcnR1
YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5kIHVubGlua2VkT3BlcmFuZCgp
CiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKLSAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90PigpKTsKKyAgICAgICAgQVNT
RVJUKGhhc1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OmZyb21C
aXRzKG1fb3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNT
dGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM1MCw3ICsxMzUzLDcgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09
IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7CisgICAgICAgIHJldHVybiBv
cCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AoKSA9PSBW
YXJhcmdzTGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJh
cmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggODE5
MTNlZDA1YzhjYTI2OTM0MGFmNTE4N2ZhYTY3YzQxNzVmMjg4ZS4uYzM4NjhjMDg1ZjNiMWQ5ZjUy
NTlhOTc3ZWFjOGY2OTQyZjRjMDMzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAvKiBUaGVzZSBhcmUgdXNlZCBp
biBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8oUHV0U3RhY2ss
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0yMDIsNiArMjAz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5VmFs
V2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhH
ZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFy
QXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggNzliYzc5NjgzMTEzMGMwMzdk
NTQ3MGMwZTc5ZDViMGQ5OTU2MjYzZi4uZDBhOTQwNmYwMjAyMzM1ZmIyMDk0ZmFjOWI0MTcxNzI4
NTI5NTcwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSwxMSArMzUsOSBAQAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewotbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbCB7Ci1z
dGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGF2
YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5C
eXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5mb3JFeGl0LAot
ICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgIik7CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwogICAgICAgICB9
OwpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwog
ICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7CiAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJB
ZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAgICAgICAgICAg
ICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIwLDcg
KzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2lu
LmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIHBydW5p
bmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwOCwyOCArMjA2LDI4IEBA
IHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBu
b2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3RhY2s6IHsKICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpLnNldEZs
dXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkp
LnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CisgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldEZsdXNo
KEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgp
KTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5k
KSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0
Tm9kZVVuYXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBAIHZvaWQgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZhaWxhYmlsaXR5KEZsdXNoZWRB
dChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KSkgPQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFs
dWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOwor
ICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5zdGFydCAr
IGkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1Zh
bHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93IHRvIHJlYWQg
ZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAgICAgQXZhaWxh
YmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQ
cm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291
bnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQ
cm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KGkpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9t
b3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5
NzMwODM5Yzk0NDUwNzI1NzFhNWIwYzdjOTRiODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIx
ZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwog
ICAgIAogICAgIC8vIDcpIEZpeCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2Rl
IGJsb2NrLgogICAgIAotICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAt
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykgPSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2Fz
dDxDb2RlQmxvY2sqKj4ocGl2b3QgLSAoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0g
Y29kZUJsb2NrOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAg
IGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gp
OwpAQCAtMzgyLDEwICszODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2Fs
bEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BD
YXRjaD4oKSk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVm
ZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1f
YnVmZmVyOwogICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihkZmdDb21tb24tPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAg
dW5zaWduZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFs
UmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgZGF0YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJv
ZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3
NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0
ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwx
MCArMTAyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAg
bG9jYWxzW2xvY2FsXSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgdmFyaWFibGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdp
biwKLSAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0
ZXIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5m
byh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwg
U3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmly
dHVhbFJlZ2lzdGVyKCkpLAogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwog
ICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4
IDZmZWRiMTliMWFlYmY0NTM0YTA0ZGJmMDA4ZWE4ZDQ5MjlkMjg5MWUuLjIzOWRmNTJhODI5MmEy
YjM1Y2U2Zjc3MjU2OGZlN2NjOWM2ZDNhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQg
T1NSIEV4aXQuCi0KLXVzaW5nIENQVVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29u
dGV4dCA9IFByb2JlOjpDb250ZXh0OwotdXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0
YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmlu
dE9TUkV4aXQoQ29udGV4dCYsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYp
OwotCi1zdGF0aWMgSlNWYWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3Vy
Y2Ugc291cmNlKQotewotICAgIGlmIChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNW
YWx1ZSByZXN1bHQ7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhf
dCo+KHNvdXJjZS5iYXNlKCkpICsgc291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJl
dHVybiBKU1ZhbHVlOjpkZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigp
KSk7Ci0jZWxzZQotICAgIGlmIChzb3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWUoc291cmNlLnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BS
KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIo
KSksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0K
LSNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24g
QXNzZW1ibHlIZWxwZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9p
ZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCi17Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJl
Z2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAg
ICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVD
UFVSZWdpc3RlciogcGh5c2ljYWxTdGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIq
PigpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsK
LSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAg
ICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBm
cm9tIHRoZSBvcmlnaW5hbCBzdGFjaywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAg
IC8vIEhlbmNlLCB3ZSByZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwg
c3RhY2sgbWVtb3J5IGluc3RlYWQgb2YKLSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0
LnN0YWNrKCkuCi0gICAgICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVS
ZWdpc3RlcikpKTsKLSAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5
c2ljYWxTdGFja0ZyYW1lW2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwot
ICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNh
dmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0
YWNrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
LSAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVy
U2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgc3RhY2suc2V0KGNvbnRleHQuZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVD
UFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9u
IEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0g
PSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENh
bGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwot
ICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVz
LT5zaXplKCk7Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNv
cmQodm0udG9wRW50cnlGcmFtZSk7Ci0gICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2
ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0KLSAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAg
ICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAg
ICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBzaXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgp
IC8gc2l6ZW9mKFVDUFVSZWdpc3Rlcik7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigp
KQotICAgICAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2
ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2Vf
Y2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0
IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVj
dHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9p
ZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRv
JiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVj
b3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVT
YXZlQnVmZmVyID0gZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1D
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdp
c3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdp
c3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVn
aXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2
ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnku
cmVnKCkuZ3ByKCkpKTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4
dC5mcHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxl
ZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9y
Q29weUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3Rl
ciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0g
ICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VS
VChjb2RlQmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQg
ZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3Vu
dCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0g
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAg
ICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgdWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAg
ICAgICBpZiAod2FzQ2FsbGVkVmlhVGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQo
ZW50cnkucmVnKCkpKQotICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0
PHVpbnRwdHJfdD4oZW50cnkub2Zmc2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
YXZlZFJlZ2lzdGVyVmFsdWUgPSBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAg
ICAgICAgZnJhbWUuc2V0KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBl
bnRyeS5vZmZzZXQoKSwgc2F2ZWRSZWdpc3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBu
b3QgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJl
c3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9p
ZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZv
aWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENv
bnRleHQmKSB7IH0KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxl
ZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsg
fQotCi0jZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0
YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29u
dGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBW
TSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZl
cnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0K
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBj
YXBhY2l0eSA9IHN0ZDo6bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpIC0gMSkpOwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0g
RGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCi0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0K
LSAgICByZXN1bHQtPnNldENhbGxlZSh2bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFz
ZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNv
bnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAg
ICAgICByZXN1bHQtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJn
dW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50
MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7
Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVk
QXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKLSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVk
QXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1l
QmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2Us
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQot
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJn
dW1lbnQoaSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0
b3JlQXJndW1lbnRzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6
OkpJVENvZGUqIGRmZ0pJVENvZGUsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVy
YW5kcykKLXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7
Ci0KLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50
czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewot
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsK
LSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwot
Ci0gICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0
V2VyZU5vdENyZWF0ZWQKLSAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENs
b25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0
byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYg
KGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0KLSAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZH
LmF0KGlkKS0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0Owot
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
dGFja09mZnNldCA9IDA7Ci0KLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0g
ICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMy
X3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFt
ZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIFBheWxvYWRPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBhcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsKLQotICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09iamVjdDsKLSAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50
c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0
ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxs
RnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBh
cmd1bWVudHNPYmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQs
IGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOwot
Ci0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKLSAg
ICB9Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0
aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9zdCBsaWtlbHkgbmVl
ZGVkIChsb3dlciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51
bSB2YWx1ZSkuCi0vLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2
aW91cyBsb3dlciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQotLy8gZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsIHZhbHVlIGJlbG93KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsIHsKLSAgICBOb25lLAotICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0gICAgVmFsdWVQcm9m
aWxlVXBkYXRlLAotICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhlcgotfTsKLQotdm9p
ZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2
bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxG
cmFtZSo+KCk7Ci0gICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7
Ci0gICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7Ci0KLSAgICBpZiAodmFsaWRhdGVERkdEb2Vz
R0MpIHsKLSAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28s
IHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKLSAgICAgICAgLy8gY29kZSBydW5uaW5n
IHRoYXQgZXhwZWN0cyBubyBHQy4KLSAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1
ZSk7Ci0gICAgfQotCi0gICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGNh
bGxGcmFtZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAgICBjb250ZXh0LmZwKCkgPSBj
YWxsRnJhbWU7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotCi0gICAgLy8gSXQncyBzb3J0IG9m
IHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2lu
ZyBzbyB3b3VsZG4ndAotICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZt
Lm9zckV4aXRJbmRleDsKLSAgICBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2st
PmppdENvZGUoKS0+ZGZnKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4
aXRbZXhpdEluZGV4XTsKLQotICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhp
dC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7Ci0gICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQo
c2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkp
OwotCi0gICAgaWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAgICAgICAgRXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbDo6Tm9uZTsKLQotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0
ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAot
ICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVj
b3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4aXQgcmFtcCBjb2Rl
LgotCi0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgICAgICBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChleGl0Lm1fcmVjb3Zl
cnlJbmRleCAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29k
ZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07Ci0gICAgICAgICAg
ICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIp
OwotCi0gICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0cjsKLSAgICAg
ICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIGlmIChleGl0Lm1f
dmFsdWVQcm9maWxlKQotICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9
IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgaWYgKGV4aXQubV9raW5kID09
IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgewotICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGU7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwg
YmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2Zp
bGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkp
OwotICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgICAg
IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQg
PSBiYXNlbGluZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3Rl
ZFRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFj
dGl2ZVRocmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0
ZWRUaHJlc2hvbGQgPiAwKTsKLSAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgYWRqdXN0ZWRUaHJlc2hvbGQpOwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9y
RXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhp
dC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgYm9vbCBleGl0VG9M
TEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAgICAgICAgdm9pZCog
anVtcFRhcmdldDsKLSAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9
ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRy
KCk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVz
dGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgSklUQ29k
ZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVN
YXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAg
QVNTRVJUKGNvZGVMb2NhdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb21wdXRl
IHRoZSB2YWx1ZSByZWNvdmVyaWVzLgotICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBv
cGVyYW5kczsKLSAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRP
cGVyYW5kU3BhbnM7Ci0gICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVj
b25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZp
ZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3Bh
bnMpOwotICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJl
Z2lzdGVyQ291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7Ci0KLSAgICAgICAgZXhpdC5l
eGl0U3RhdGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFz
ZWxpbmVDb2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyks
IHJlY292ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRU
aHJlc2hvbGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQpKTsKLQotICAg
ICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7Ci0gICAgICAgICAgICBQcm9m
aWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKLSAg
ICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2st
PmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwotCi0gICAgICAgICAg
ICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4
aXQoCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0
YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4
aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAg
ICAgICAgICBleGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJFeGl0OwotICAg
ICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQot
ICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAg
ICAgICBleGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3Nl
T1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkpIHsKLSAgICAgICAgICAgIGRh
dGFMb2dGKCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMg
PSAlc1xuIiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29k
ZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5t
X2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAotICAgICAgICAgICAgICAgIHRv
Q1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQu
ZXhpdFN0YXRlLmdldCgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0
U3RhdGUuYmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgIE9wZXJhbmRzPFZhbHVl
UmVjb3Zlcnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAgICBWZWN0b3I8VW5k
ZWZpbmVkT3BlcmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5k
ZWZpbmVkT3BlcmFuZFNwYW5zOwotCi0gICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50
OF90Kj4oKSArIGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAgICAvLyBUaGUgb25s
eSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsg
b3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGRvIHsKLSAgICAgICAgYXV0byBleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2
ZWw+KGV4aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOwotCi0gICAgICAgIGlmIChl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25l
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXph
dGlvbiBsZXZlbDogU3BlY3VsYXRpb25SZWNvdmVyeQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8g
ZG8gc3BlY3VsYXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5k
IHZhbHVlIHByb2ZpbGluZwotICAgICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQg
cmVjb3ZlcnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5Ci0g
ICAgICAgIC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0
IGFzIFVOTElLRUxZLgotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4
aXRTdGF0ZS5yZWNvdmVyeTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5KSkgewotICAg
ICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNw
ZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkg
PSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+
KHJlY292ZXJ5LT5zcmMoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAg
ICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2
ZUFkZFNlbGY6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+
IDEpIF4gMHg4MDAwMDAwMFU7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAg
ICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2
ZUFkZEltbWVkaWF0ZToKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
ID0gKGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVk
aWF0ZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNw
dS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3By
KHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNo
ZWNrOgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVy
eS0+ZGVzdCgpKSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZh
bHNlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9u
TGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUK
LSAgICAgICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVlOwotICAgICAgICBpZiAoISFleGl0Lm1fanNW
YWx1ZVNvdXJjZSkgewotICAgICAgICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1
LCBleGl0Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAg
ICAgICBwcm9maWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAv
LyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKLSAg
ICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJv
ZmlsZSkgewotICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAg
ICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09
IEJhZEluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJs
b2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0
Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29k
ZUluZGV4KCkpLnB0cigpOwotICAgICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rp
b24tPmlzPE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFk
YXRhKHByb2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKLSAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSh2bSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJl
KHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlN
b2RlKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgot
ICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKLSAg
ICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ug
d2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywg
d2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAg
ICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KGNvbnRleHQpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJh
bWVGb3JDYXRjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVy
RXhpdCkKLSAgICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7Ci0K
LSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAg
ICAgICAgICBwcmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBleGl0KTsKLQot
ICAgIH0gd2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9uLgotCi0gICAg
RnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKCEoY29u
dGV4dC5mcDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
QVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpT
VmFsdWU6Ok51bWJlclRhZyk7Ci0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6
bm90Q2VsbE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0K
LSAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1
bHRzIGludG8gdGhlIHN0YWNrLgotICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1
ZXMgYmVmb3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBi
ZWNhdXNlIHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUg
c2F2ZSByZWdpc3RlcnMuCi0KLSAgICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwotICAgIHNpemVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3Bl
cmFuZHMuc2l6ZSgpOwotICAgIHNpemVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRl
ZmluZWRPcGVyYW5kU3BhbnMuc2l6ZSgpOwotCi0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFu
SW5kZXggPSAwOwotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVy
T2ZPcGVyYW5kczsKLSAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICBu
ZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRl
ZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpz
VW5kZWZpbmVkKCk7Ci0gICAgZm9yIChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwg
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkgewotICAgICAgICBhdXRvJiBz
cGFuID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07Ci0gICAgICAgIGludCBmaXJz
dE9mZnNldCA9IHNwYW4ubWluT2Zmc2V0OwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0
T2Zmc2V0ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKLQotICAgICAgICBmb3IgKGludCBvZmZz
ZXQgPSBmaXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQpCi0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkg
ewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3Rl
ckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVu
ZGVmaW5lZE9wZXJhbmRJbmRleCkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9w
ZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0g
MTsKLSAgICAgICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVk
T3BlcmFuZFNwYW5zKQotICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgg
PSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRl
eDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFu
ZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVj
b3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0g
ICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZChvcGVyYW5kLCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgSW5HUFI6Ci0gICAg
ICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3Zl
cnkuZ3ByKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2FzZSBJblBh
aXI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1Lmdw
cjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3Zlcnku
cGF5bG9hZEdQUigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBj
YXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIEpTVmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5i
b3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwg
anNCb29sZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1Zh
bHVlKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNC
b29sZWFuKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2Fm
ZUpTVmFsdWUoKS5wYXlsb2FkKCkpKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJh
bWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBj
YXNlIFVuYm94ZWRJbnQ1MkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6
OmludDUyU2hpZnRBbW91bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5h
c2FuVW5zYWZlVW5ib3hlZEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hl
ZFN0cmljdEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAg
Y2FzZSBVbmJveGVkRG91YmxlSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnBy
KHJlY292ZXJ5LmZwcigpKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
RG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZy
YW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJs
ZSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRX
ZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENy
ZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRo
ZSBiYXNlbGluZSBKSVQgdXNlcy4KLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwg
Y29kZUJsb2NrKTsKLSAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2Rl
QmxvY2spOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpO
dW1iZXJUYWcpOwotICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBz
dGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2Vu
ZGlmCi0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLQotICAg
IC8vIE5vdyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFy
Z3VtZW50cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3Zl
cmllcyBkb24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0
IHRyeSB0byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKLSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJh
bmdlcyBvZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0
aGUgc3RhY2sgaXMgc2Vuc2libGUuCi0gICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBh
c3N1bWUgdGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRz
aWRlIG9mIGl0cwotICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cg
dGhlIERGRyB3b3VsZG4ndCBkbyB0aGF0LgotCi0gICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50
cyhjb250ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFk
anVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcg
T1NSLCB3ZSBrbm93Ci0gICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdp
bGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5
IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJh
bWVzCi0gICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUg
dGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRv
IGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBD
b2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0
aW1pemVkCi0gICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUg
aXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50
ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIp
IElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5n
IHRoZSBvbGQKLSAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVu
IGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkg
ZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBD
b2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5
IE9TUgotICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVu
c2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0g
ICAgLy8KLSAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQg
ZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxv
b3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0g
ICAgLy8gVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVy
IHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNl
ZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhl
biBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8g
ZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9T
UiBleGl0IGhhcHBlbnMKLSAgICAvLyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZl
dyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1u
ZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkK
LSAgICAvLyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJ
VCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBh
bmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2Ug
ZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIu
Ci0gICAgLy8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZh
aWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9m
IHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhl
cmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdl
IHNldCB0aGUKLSAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50
ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0KLSAg
ICBpZiAoVU5MSUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZO
ZWVkVG9SZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6
UmVvcHRpbWl6ZU5vdykpCi0gICAgICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGlu
ZUNvZGVCbG9jaywgY29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJh
bWVzKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1w
VG9UYXJnZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQp
OwotfQotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRC
YXNlJiBleGl0KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZy
YW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBsZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0
Ci0gICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUo
KSkpOwotICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBDb2RlT3Jp
Z2luKiBjb2RlT3JpZ2luOwotICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdp
bjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdp
biA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxD
YWxscygpKSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29k
ZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KCpjb2RlT3JpZ2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIElubGlu
ZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAgIENvZGVPcmlnaW4q
IHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxz
KCZ0cnVlQ2FsbGVyQ2FsbEtpbmQpOwotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5m
cCgpOwotCi0gICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOwotCi0gICAgICAgIGlm
ICghdHJ1ZUNhbGxlcikgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNU
YWlsKCkpOwotICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENh
bGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAg
IHZvaWQqIG9sZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7Ci0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3Qq
PigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsK
LSAgICAgICAgICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nh
c3Q8UHRyVGFnPihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+
cmV0dXJuUENPZmZzZXQoKSwgcmV0dXJuUEMpOwotICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBm
cmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1
ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsK
LSAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwg
Y2FsbGVySXNMTEludCk7Ci0KLSAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxs
RnJhbWUoKSkKLSAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90Kj4o
KSArIHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpLT5zdGFja09mZnNldCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7Ci0KLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICAgICAgdm9pZCogbmV3
RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gdGFnQ29k
ZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5Q
Q09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBpbmxpbmUgY2FsbCBmcmFtZSdzIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KLSAgICAgICAgLy8g
SWYgdGhpcyBpbmxpbmVkIGZyYW1lIGlzIGEgdGFpbCBjYWxsIHRoYXQgd2lsbCByZXR1cm4gYmFj
ayB0byB0aGUgb3JpZ2luYWwgY2FsbGVyLCB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIGNvcHkgdGhl
IHByaW9yIGNvbnRlbnRzIG9mIHRoZSB0YWcgcmVnaXN0ZXJzIGFscmVhZHkgc2F2ZWQgZm9yIHRo
ZSBvdXRlciBmcmFtZSB0byB0aGlzIGZyYW1lLgotICAgICAgICBzYXZlT3JDb3B5Q2FsbGVlU2F2
ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgIXRydWVDYWxsZXIpOwotCi0gICAgICAgIGlmIChjYWxs
ZXJJc0xMSW50KSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygq
dHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgZnJh
bWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2Vs
aW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKS5vZmZzZXQs
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpOwotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVT
bG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6
OnBiR1BSKS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNS
YXdQb2ludGVyKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQz
Ml90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOwot
ICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZz
ZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
KS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVF
NjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQz
Ml90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWlu
dDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90
PihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQp
IC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJp
dCBwYXJ0Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNv
ZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNhbGxzCi0gICAgaWYgKGNvZGVP
cmlnaW4pIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwot
I2Vsc2UKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gb3V0ZXJtb3N0
QmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkp
LmJpdHMoKTsKLSNlbmRpZgotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVGFnT2Zmc2V0LCBsb2NhdGlv
bkJpdHMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENv
bnRleHQmIGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCi17Ci0gICAgT1NSRXhpdFN0YXRlKiBl
eGl0U3RhdGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLQotICAgIFdURjo6c3RvcmVMb2FkRmVu
Y2UoKTsgLy8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhwZWN0cyB0aGF0IHRoZSBPU1IgZXhp
dCBtZWNoYW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2UuCi0gICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIoYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgLy8gV2UgYmFycmllciBhbGwgaW5saW5l
ZCBmcmFtZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50IGlubGluZSBzdGFjayAtLQotICAg
IC8vIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxpbmVkIGZ1bmN0aW9uIG93bnMgdGhl
IHZhbHVlIHByb2ZpbGUgdGhhdAotICAgIC8vIHdlJ2xsIHVwZGF0ZSB3aGVuIHdlIGV4aXQuIElu
IHRoZSBjYXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlmIGJvdGgKLSAgICAvLyBhIGFuZCBi
IGFyZSBpbmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBiIGR1ZSB0byBhIGJhZCB2YWx1ZSBs
b2FkZWQKLSAgICAvLyBmcm9tIGEuCi0gICAgLy8gRklYTUU6IE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVCbG9jayBvd25zCi0gICAgLy8gdGhl
IHZhbHVlIHByb2ZpbGUuCi0gICAgSW5saW5lQ2FsbEZyYW1lU2V0KiBpbmxpbmVDYWxsRnJhbWVz
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbmxpbmVDYWxsRnJhbWVzLmdl
dCgpOwotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgIGZvciAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykKLSAgICAgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCkpOwotICAgIH0KLQotICAgIGF1dG8qIGV4aXRJbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1f
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAoZXhpdElubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRJ
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLQot
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1bXBUYXJnZXQ7Ci0gICAgQVNTRVJU
KGp1bXBUYXJnZXQpOwotCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAg
ICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQg
Y2FsbEZyYW1lRm9yQ2F0Y2guCi0gICAgICAgIHZtLmNhbGxGcmFtZUZvckNhdGNoID0gY29udGV4
dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIH0KLQotICAgIHZtLnRvcENhbGxGcmFtZSA9IGNvbnRl
eHQuZnA8Q2FsbEZyYW1lKj4oKTsKLQotICAgIGlmIChleGl0U3RhdGUtPmlzSnVtcFRvTExJbnQp
IHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxp
bmVDb2RlQmxvY2spOwotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9u
JiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0KLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJl
Z2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2Rl
QmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0g
ICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpKTsK
LSNlbHNlCi0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1Y3Rpb24pOwotI2VuZGlmCi0KLSAg
ICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICB2bS50YXJn
ZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudEluc3RydWN0aW9uOwotICAgIH0KLQot
ICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihqdW1wVGFyZ2V0
KTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQsIHVpbnQz
Ml90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKLXsKLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQ29kZUJsb2NrKiBhbHRlcm5h
dGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAgICBFeGl0S2luZCBraW5kID0gZXhp
dC5tX2tpbmQ7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLQotICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1
cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgb3NyRXhpdElu
ZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhraW5kKSwg
Iikgd2l0aCAiKTsKLSAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKLSAgICAgICAgZGF0YUxvZygKLSAg
ICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291
bnRlcigpLAotICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAiLCBh
bHRlcm5hdGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIs
IG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5vcHRpbWl6YXRpb25E
ZWxheUNvdW50ZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRhdGFMb2coIm5vIGFsdGVybmF0
aXZlIGNvZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0aXNvbmVkKSIpOwotICAgIGRhdGFM
b2coIiwgb3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCksICJc
biIpOwotICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewot
ICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgZGF0
YUxvZygiICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIsIFJhd1BvaW50ZXIoY29udGV4dC5n
cHI8dm9pZCo+KGdwcikpKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9n
KCIgICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgRlBSUmVnIGZw
ciA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0
LmZwck5hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0X3QgYml0cyA9IGNvbnRleHQuZnBy
PHVpbnQ2NF90PihmcHIpOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBjb250ZXh0LmZwcihmcHIp
OwotICAgICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJp
dHMpLCB2YWx1ZSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLS8vIEpJVCBiYXNl
ZCBPU1IgRXhpdC4KLQogT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9m
aWxlLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQg
cmVjb3ZlcnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9vcmlnaW4uZm9y
RXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5tX29yaWdpbi53YXNIb2lzdGVkKQog
ICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCkBAIC05NTgsMTUgKzcwLDE4IEBA
IENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9u
Rm9yUmVwYXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMo
Q0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4m
IG9wZXJhbmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgaW50PiBhbHJlYWR5QWxsb2Nh
dGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFu
ZC4KKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxSZWdpc3Rlcj4gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJh
bmQuCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RB
cmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKwogICAgICAgICBNaW5pZmllZElEIGlkID0gcmVjb3Zlcnkubm9kZUlEKCk7
CiAgICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZmluZChpZCk7
CiAgICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZW5kKCkpIHsK
QEAgLTk4Nyw3ICsxMDIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKEND
YWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewog
ICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwKKyAgICAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKHN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksCiAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBA
IC05OTcsNyArMTEyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2Fs
bEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAg
ICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmly
dHVhbFJlZ2lzdGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTEwMjMsNyArMTM4LDcgQEAgdm9p
ZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZt
LCBjb25zdCBPcGVyYW5kczxWYWwKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BS
MCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAotICAg
ICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CisgICAgICAg
IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpKTsKICAgICB9CiB9CiAKQEAgLTE0NjYsMTYgKzU4MSw3OSBAQCB2b2lkIE9TUkV4aXQ6OmNv
bXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQs
IGNvbnN0CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCiAgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0
aXZlQ2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGRuJ3Qg
dXNlIGEgcHJvYmUgYnV0IGZpbGxpbmcgYWxsIHRoZSBzaWRlIHN0YXRlIG9iamVjdHMgaXMgdHJp
Y2t5IG90aGVyd2lzZS4uLgorICAgICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gdmFsdWVzKG9w
ZXJhbmRzLm51bWJlck9mVG1wcygpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
cGVyYW5kcy5udW1iZXJPZlRtcHMoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzW2ldID0gb3Bl
cmFuZHMudG1wKGkpOworCisgICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKKyAgICAgICAgYXV0byog
dG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKKyAgICAgICAgaml0
LnByb2JlKFs9LCB2YWx1ZXMgPSBXVEZNb3ZlKHZhbHVlcyldIChQcm9iZTo6Q29udGV4dCYgY29u
dGV4dCkgeworICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSog
ZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKKyAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVT
dGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKKwor
ICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiByZWNvdmVyeSA9IHZhbHVlc1tpICsgdG1w
T2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0
IHRoZSBGVEwgZG9lcyBhbmQgbWF0ZXJpYWxpemUgYWxsIHRoZSBKU1ZhbHVlcyBpbnRvIHRoZSBz
Y3JhdGNoIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAg
ICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gcmVjb3ZlcnkuY29uc3RhbnQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJbkpTU3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1w
c1tpXSA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRtcE9m
ZnNldF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0
YWNrOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpT
U3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHRtcFNjcmF0Y2gpW2kgKyB0bXBPZmZzZXRdOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB2bVB0ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3Rh
dGUpKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNv
ZGVPcmlnaW47CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3By
PENhbGxGcmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZv
ciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3Jp
Z2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNh
bGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBh
dXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAg
ICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihy
ZWludGVycHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1
cm5QQ09mZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBp
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IGlmIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCk7IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGFkZFNp
ZGVTdGF0ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOworICAgICAgICB9KTsKKyAgICB9
CisKICAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSBy
ZXN1bHRzIGludG8gdGhlIHN0YWNrLgogCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAg
ICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50Pihq
aXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCkpKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4o
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IGE3ZTU4NzhjMDcxNzA4YTFkYTc2YzBi
MGViNTRkNTRmMWEwNGViOGUuLjllOWJjZWE0ODFjMWQ2ODc3OTcyZjI1OWQ2MmMxYTIzMDBiMmIx
NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCkBAIC0xNTAsOCArMTUw
LDYgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogCiAgICAgZnJpZW5k
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21waWxlT1NSRXhpdChDYWxsRnJhbWUqKTsK
IAotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVPU1JFeGl0KFByb2JlOjpDb250ZXh0Jik7Ci0KICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3BhdGNoYWJsZUp1bXBMb2Nh
dGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8T1NSRXhpdFB0clRhZz4gbV9jb2RlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKaW5kZXggMzEwOTYz
ZDg0NDM2YzUzMzI3ODRmMGEyOTJhNDljYmUxYjgyYTU5Yi4uMDAzYjYxOGNkNDQwZTQwMGFiYWFj
ZWMwYWZiYzNjMTI0MzVkYjk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdEJhc2UuaApAQCAtNzAsNiArNzAsMTEgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBHZW5lcmljVW53aW5kOwogICAgIH0KIAorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0V4aXRpbmdUb0NoZWNrcG9pbnRIYW5kbGVyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKTsK
KyAgICB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5
cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IDliMDIxYmI3MTFiYTAyZDliYzEwMDNkNzc0MTQz
MTcyYTViNjMxN2YuLjc5NWU4ZGQxN2E1NDRhNDcxN2VmM2FlZDc1OTBjNWVmMzRmYTBlZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiQnl0ZWNvZGVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxM
SW50VGh1bmtzLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTQz
LDYgKzE0Niw5IEBAIHZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5CiB7CiAgICAgY2FsbGVySXNMTElu
dCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKKyAgICBp
ZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICByZXR1cm4gTExJbnQ6
OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGlu
ZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpOworCiAgICAgdm9pZCoganVt
cFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBAIC0yMzgsNyArMjQ0LDcgQEAg
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JF
eGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUxMQog
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGpp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29k
ZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwogICAgIGZvciAo
Y29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2lu
LT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CkBAIC0zMDUsMzMgKzMxMSwz
NCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxl
ckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygp
OwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoYmFzZWxpbmVDb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3RvcmU2NChBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1i
aXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9m
ZnNldCgpKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRz
KCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxv
Y2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoKS5iaXRzKCk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5
SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSk7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBz
byBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKICAgICAvLyBEb24n
dCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5s
aW5lIHRhaWwgY2FsbHMKICAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdp
bi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
KCkub2Zmc2V0KCkpKS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQo
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXgg
PSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoY29kZU9yaWdp
bi0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucyhieXRlY29kZUluZGV4
KS5hdCgpLnB0cigpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKS5iaXRzKCk7CiAjZW5kaWYK
LSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRp
b25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgIGppdC5zdG9y
ZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5
SGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CiAgICAgfQogfQogCkBAIC0zODYsNyArMzkzLDExIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0
KQogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0
aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKQorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0
cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUpOworICAgICAg
ICBlbHNlIAorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86OnJlZ1QyKTsKQEAgLTQw
MiwxMCArNDEzLDE4IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogI2VuZGlmCiAgICAgICAgIGp1
bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNF
bnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1hcCgp
LmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgQVNTRVJU
KGNvZGVMb2NhdGlvbik7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5t
X2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb247CisgICAgICAgIGlmIChleGl0SW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxK
U0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2tGb3JFeGl0LT5ieXRlY29kZUluZGV4
Rm9yRXhpdChleGl0SW5kZXgpID09IGV4aXRJbmRleCk7CisgICAgICAgICAgICBkZXN0aW5hdGlv
biA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS5maW5kKGV4aXRJbmRleCk7CisgICAg
ICAgIH0KIAotICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkPE9TUkV4
aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgQVNTRVJUKGRlc3RpbmF0
aW9uKTsKKworICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhp
dFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAogICAgIGppdC5hZGRQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Y29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHAKaW5kZXggMjE2YzViYWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRi
MDNkYzE5OS4uN2RhNmFmZDVjMjIxYzk3ZmY5M2Y0MDBjYjM0OTQ0NTRkNGQ0OTI0MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0yMTA3LDcgKzIxMDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKG1faGVhcC5mb2xsb3coYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUo
KSkgIT0gZXNjYXBlZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAg
aW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VW
YWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBtYXRl
cmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcEluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJ
bmZvLmgKaW5kZXggZjM5YzE0YjlmMGE0NDg3ODlkNzcyZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdl
ZmNmYjI0ODAwMmE0YmY1ZWE2MGE2ZTY2NTIwZmUwNTE0NGJjYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wSW5mby5oCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBPcEluZm8gewogICAg
IGV4cGxpY2l0IE9wSW5mbyhJbnRlZ3JhbFR5cGUgdmFsdWUpCiAgICAgICAgIDogbV92YWx1ZShz
dGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8oUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRf
dD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlKSkpIHsgfQotCisgICAgZXhwbGlj
aXQgT3BJbmZvKE9wZXJhbmQgb3ApIDogbV92YWx1ZShvcC5hc0JpdHMoKSkgeyB9CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBleHBsaWNpdCBPcEluZm8oVCogcHRyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggYjRhMDgwZDgyN2Ey
YjZlNjhiNTc1YmU3ODAzOGYzNmVmNzlkZTMxNi4uNjQ4MWE3OTNmYTRkNjNiYzczOGQwOTg5OWJi
MjRmNzQ0M2VhNmEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCkBAIC0yOTYxLDE3ICsyOTYxLDE4IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAg
ICAgcmV0dXJuIC0xOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQz
Ml90IGxlbmd0aCwgdWludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQz
Ml90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVp
bnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoSW5jbHVkaW5nVGhpcywgdWludDMyX3QgbWFu
ZGF0b3J5TWluaW11bSkKIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50IHsgZmly
c3RFbGVtZW50RGVzdCB9OwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAg
IEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwog
ICAgIAotICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBWaXJ0dWFsUmVn
aXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOworICAg
IGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudCkpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoSW5jbHVkaW5n
VGhpcyAtIDEpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRh
dG9yeU1pbmltdW07ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoSW5jbHVk
aW5nVGhpcyAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGNhbGxGcmFt
ZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CiB9CiAKIGRvdWJsZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2RiMzZhYjVhMGM2YWRjMi4uMmIx
MDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVlMDliYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcApAQCAt
NDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3Bh
Y2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWwgewotc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQogY2xhc3MgUGhhbnRvbUlu
c2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21JbnNlcnRpb25QaGFzZShHcmFw
aCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGluc2VydGlvbiIpCkBA
IC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0TG9jYWxzIGV4ZWN1dGUsIHdo
aWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2VydCB0b28gZmV3IFBoYW50
b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9yZWZD
b3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1Bo
YW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUGhhbnRvbSBpbnNlcnRp
b246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC03Miw3
ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAgIGhhbmRsZUJsb2NrKGJsb2Nr
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxv
ZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3Jh
cGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIgKzEwMCwyMiBAQCBwcml2YXRlOgogICAg
ICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkg
ewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAg
ICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJp
bmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIG1f
dmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM0LDM4
ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAog
ICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlVwZGF0aW5nIGVwb2No
IGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgICAg
IGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAKLSAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOworICAgICAgICAgICAgT3Bl
cmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVy
YW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERG
R1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIHJlZywgIlxuIik7CisgICAgICAg
ICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIEtpbGxlZCBvcGVyYW5k
OiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZCBmcm9t
IFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeUtpbGxlZCkKKyAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5S2lsbGVkKSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAi
IGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJlZyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBt
X3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBPcGVy
YW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVkIGluIHRoaXMgYmxvY2suIik7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1f
dmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQgYSBQaGFudG9tIGlmIHRoZSBu
b2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAgICAgICAgICAgICAgICAvLyBl
eGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQuCi0gICAgICAgICAgICAgICAg
aWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKQorICAgICAgICAgICAgICAg
IGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJlbnRFcG9jaCkgeworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiBo
YXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR1BoYW50b21J
bnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIEluc2VydGluZyBQaGFudG9tIG9u
ICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsCisgICAgICAg
ICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBh
ZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCkp
OworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZXhhY3QgcmVm
IGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bwogICAg
ICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAgICAgICAgICAgICAg
IGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3OSwxNCArMTgwLDE0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOwog
ICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkgewogICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBs
b2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBsaXZlIHVudGlsIHRoZSBTZXRMb2Nh
bCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChsb2Nh
bCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBsb2NhbDsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAg
ICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2FsKSA9IG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2Nr
LT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApp
bmRleCAxMjhjODQxZjBhYzdmOWRlYjYyZjdlNmZjNDYzYTUyODczNGM3NTU5Li4yYTZhMDJmMmJi
ZGYwMWZhODkyMDMwYzljZGQxYTM5Njc5Njk2ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApAQCAtNTMsNyArNTMs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxS
ZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKKyAgICAgICAgICAgIGNhbGxJZkFw
cHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVy
aXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0
YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3Ao
KSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwg
VmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAg
Y2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIGhlYXAub3BlcmFuZCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTg3LDEyICs4Nywx
MiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5o
ZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAgCi0gICAgICAgIG1fZGVmKFZpcnR1YWxS
ZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUpOworICAg
ICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFuZCgpLCBub2RlKTsKICAgICB9CiAgICAg
CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxs
SWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Is
IE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAm
JiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50b0xvY2FsKCkpID49IG1fZ3JhcGguYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1
NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1
ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygp
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBP
cHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAg
ICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCmluZGV4IGVjZTk0NzA2ZWU4NGMyNmUxOWExOThlMjM1Y2E3NGZiNzg1MTkz
MTIuLmJiYzU1MWQ4OTIwMGQ4OTc3YTVmNDUwNmYxZWE3MGM1ZDI2YTliZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCkBAIC0xMzcwLDYgKzEzNzAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6
CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFy
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3
Li5jOTc5MzM1YTMwMWVmNDZiOTkyM2VkZmY1NTZiZTczZDU3ZjU4ZjMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApA
QCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1l
c3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1z
dGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFj
a1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFw
aCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAg
LTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNs
ZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRT
dGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAg
fQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxi
b29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAg
ICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAg
ICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVB
dEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJh
bmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEw
MSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxp
dmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2
ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRz
OworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAg
ICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3Jp
dGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3Ao
KSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkg
PT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBvcCA9PSBMb2FkVmFyYXJncyB8
fCBvcCA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCA9PSBLaWxsU3RhY2spOwogICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5k
bGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlO
b2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9k
ZSkgeyB9KTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kIDogd3JpdGVzKQorICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6
IHdyaXRlcykKICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
IDogcmVhZHMpCisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogcmVh
ZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTIzNCw3ICsyMjksNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGRlZmVycmVk
ID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
REZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZl
cnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldFN0YWNrKSB7CkBA
IC0yNjEsNyArMjU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM5OAogCiAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzQ29uZmxpY3RpbmcgPQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9
PSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID09IENvbmZsaWN0aW5n
Rmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWlzQ29uZmxpY3RpbmcpOwpAQCAtMjc1LDE3ICsyNzAs
MjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbS4KICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vZGUtPm9wKCkgPT0gUHV0U3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsOworICAg
ICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiU2V0dGluZyBmbHVzaCBmb3JtYXQgZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBv
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFu
ZCkgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3Ao
KSA9PSBLaWxsU3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gc2luayBhIFB1dFN0YWNrIHBhc3QgYSBLaWxsU3RhY2suCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGlj
dGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJLaWxsaW5nIHN0YWNrIGZvciAiLCBub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5v
cGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVy
ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwgIiBlc2NhcGluZyAiLCBvcGVyYW5kLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjkzLDE2ICsyOTEsMTggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5k
KSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAg
ICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0g
Rm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3Mg
fHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiV3JpdGluZyBkZWFkIGZsdXNoIGZvciAiLCBub2RlLCAi
IGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhh
bmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVh
bFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
T3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9j
a10pCkBAIC0zMTMsMTMgKzMxMywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29y
cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Npbmtp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIkNvbnNpZGVyaW5nICIsIFZpcnR1YWxSZWdpc3RlcihkZWZlcnJlZC5vcGVyYW5kRm9y
SW5kZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAo
c3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1
Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJp
bmcgIiwgZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIg
YW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOwogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldID0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3Jd
W2ldLCBkZWZlcnJlZFtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTM1MiwxMCArMzUy
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIE9wZXJhbmRzPFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFibGUoCiAgICAgICAgICAgICBPcGVyYW5kc0xpa2Us
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgIFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXI+IGluZGV4VG9PcGVyYW5kOworICAgICAgICBWZWN0b3I8T3BlcmFuZD4gaW5k
ZXhUb09wZXJhbmQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvcklu
ZGV4KGkpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKwogICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRv
ci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChv
cGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNp
emUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CkBAIC0zNzAsMTIgKzM3MCwxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICAgICAgcHV0
U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRv
ci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVy
YW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5v
cGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
IEdldFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRU
b1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzg2LDcgKzM4Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgCiAgICAgICAgIHNzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCiAgICAgICAg
ICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayog
YmxvY2spIC0+IE5vZGUqIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFkW2Jsb2NrXS5vcGVy
YW5kKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5
Nyw3ICszOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZv
cm1hdCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAg
ICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFk
ZGluZyBQaGkgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9n
cmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJ
bnZhbGlkRXhpdCgpKTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBt
YXBwaW5nLmZpbGwobnVsbHB0cik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRI
ZWFkKGJsb2NrLCB2YXJpYWJsZSk7CkBAIC00MjEsMTUgKzQyMSwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gZGVmLT52YWx1ZSgpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmcgYXQgdG9wIG9mICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIjogIiwgbWFwcGluZywgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9j
ayhibG9jaykpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGlu
ZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5p
bmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBwaGlEZWYtPnZhbHVlKCksICJcbiIpOwogICAg
ICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURlZi0+dmFsdWUoKTsK
ICAgICAgICAgICAgIH0KQEAgLTQzNywxNSArNDM3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRl
eCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBQdXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZGF0YS0+b3BlcmFuZDsKICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IGRhdGEtPmZvcm1hdDsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgbWFwcGlu
Zy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTQ1MywxNiArNDUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAg
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFu
ZChkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9
IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghaXNDb25jcmV0ZShmb3JtYXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCkgIT0gQ29u
ZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgIT0gQ29u
ZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhlcmUgaXMgbm8gZGVmZXJyYWwuIE5vIGRlZmVycmFsIG1lYW5zIHRoYXQgdGhlIG1vc3QKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dGhvcml0YXRpdmUgdmFsdWUgZm9yIHRoaXMgc3Rh
Y2sgc2xvdCBpcyB3aGF0IGlzIHN0b3JlZCBpbiB0aGUgc3RhY2suIFNvLAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8ga2VlcCB0aGUgR2V0U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTQ3MiwyMCArNDcyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgLy8gaGF2ZSBzdG9yZWQgYW5kIGdldCByaWQgb2YgdGhlIEdldFN0YWNrLgogICAgICAgICAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGZvcm1hdCA9PSBkYXRhLT5mb3Jt
YXQsIGZvcm1hdCwgZGF0YS0+Zm9ybWF0KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2Fs
KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQo
ZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gaW5j
b21pbmctPmRlZmF1bHRFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b0lkZW50aXR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIGNhc2UgS2lsbFN0YWNrOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5n
Rmx1c2g7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5r
ZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwgIiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKQEAgLTQ5
OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEg
UHV0U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1
dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIG5vZGUsICJcbiIpOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsK
QEAgLTUxMyw3ICs1MTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9
OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxl
ciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCBGb3J3YXJkVmFyYXJn
cyBhcmUgdW5jb25kaXRpb25hbCB3cml0ZXMgdG8gdGhlIHN0YWNrCkBAIC01MjEsMTMgKzUyMSwx
MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSB3
cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9zZSBzdGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRWYXJh
cmdzLiBUaGlzIG1lYW5zIHdlIHNob3VsZCBuZXZlciBzaW5rCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBQdXRTdGFja3MgcmlnaHQgdG8gdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2Fk
VmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAg
ICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRs
ZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJl
Z2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3Bl
cmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0gfQogICAgICAgICAgICAgfQpAQCAtNTM5LDggKzUzOSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2Fs
Y3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3Bl
cmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRT
dGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQ3JlYXRpbmcgVXBzaWxvbiBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVt
cChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvckJsb2NrKSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkQXRIZWFkW3N1Y2Nl
c3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG51bGxwdHIsIGlzQ29uY3JldGUoZm9ybWF0KSwgZm9ybWF0KTsKQEAgLTU4
NSw3ICs1ODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRl
ciBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCmluZGV4IDQzNmU1ZDM5MTRiMzIzNWEwMjQ3ZmM0MTg0NzE2MzExZDY3Njg2
NTAuLjA0ZjJjMGNkMzk5OGIxODFiOWU5OGJiYTQyNzA0ODgzYjQwZDJkOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKQEAg
LTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5s
b2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+b3BlcmFu
ZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50R2V0
dGVycy5hZGQoY2hpbGROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudE1hcHBp
bmcuYWRkKG5vZGUsIGNoaWxkTm9kZSk7CkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9y
U1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIC8vIFBydW5lIGJ5IGxpdmVuZXNzLiBUaGlzIGRvZXNuJ3QgYnV5IHVzIG11Y2gg
b3RoZXIgdGhhbiBjb21waWxlIHRpbWVzLgotICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWhlYWROb2Rl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzAwLDcgKzMwMCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+cmVwbGFj
ZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCBW
aXJ0dWFsUmVnaXN0ZXIodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSksICIgLT4g
Iiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5n
OiAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvckluZGV4KGkpLCAiIC0+ICIsIG5vZGUsICJc
biIpOwogICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmRbaV0gPSBub2RlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMxMywxMSArMzEzLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJp
YWJsZUZvclNTQUluZGV4W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlv
blBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IHBo
aURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBwaGlJbnNlcnRpb25Qb2lu
dCwgU3BlY05vbmUsIE1vdkhpbnQsIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhp
dCgpLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0
KCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAg
ICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVk
Z2UoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPm9y
aWdpbi5leGl0T0spCkBAIC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNhc2UgTW92SGludDogewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2ls
bFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9k
ZS0+dW5saW5rZWRMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8obm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+b3JpZ2luLmV4aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQ5LDE5ICsz
NDksMTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVJc0ZsdXNoZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QdXRTdGFjaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3Rh
Y2tBY2Nlc3NEYXRhLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBjaGlsZCwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzog
IiwgdmFyaWFibGUtPm9wZXJhbmQoKSwgIiAtPiAiLCBjaGlsZCwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0g
Y2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9hcmd1bWVudEdldHRlcnMuY29udGFpbnMobm9kZSkp
OwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID0gbm9k
ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTM3MSw4ICszNzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAi
LCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJh
bmQoKSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2
YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CkBAIC0zODUsNyArMzg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bUxvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSktPmRlZmF1bHRFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSktPmRl
ZmF1bHRFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDI1LDEy
ICs0MjUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBpcyBub3QgZXhpdE9L
LgogICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRVc2VLaW5k
Rm9yKGZvcm1hdCk7CiAKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ikluc2VydGluZyBVcHNpbG9uIGZvciAiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiBwcm9wYWdhdGlu
ZyAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICIgdG8gIiwg
cGhpTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNl
cnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUtPm9wZXJhbmQoKSwgIiBwcm9wYWdhdGluZyAi
LCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIiB0byAiLCBw
aGlOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5z
ZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBFZGdlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJs
ZS0+b3BlcmFuZCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VLaW5kKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCBiOWE0NmJlYjAyNTgxNjI0ODg4ZGQxODEwMmIy
YzZkMThiYTZkZDc4Li44ODMwYzY4NmIwMjE3ZDUyNjIzMmVhYTIyNzZiZTIyYzI0Y2VmMDUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzIy
LDYgKzMyMiw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUs
IEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdz
OgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDA4YjNhZTdjZDhiOGZiYTk0
YmYzMWE5OTIzZmJkMTllZmUzNzc2MGQuLmU4NmJmNWQ1ZDc3OTU1MzI1OGFkMzYwYjY1YTU4NDA0
MDE2NDU0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTW92SGludChOb2RlKiBub2RlKQogICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOwogICAgIG5vdGljZU9TUkJpcnRoKGNoaWxkKTsKICAgICAKLSAgICBtX3N0cmVhbS0+
YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFi
bGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFpbChBYm9ydFJlYXNvbiByZWFzb24p
CkBAIC0xODI1LDcgKzE4MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVu
dEJsb2NrKCkKICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2Jsb2NrKTsKICAgICAKICAg
ICBmb3IgKHNpemVfdCBpID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykg
ewotICAgICAgICBpbnQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5k
Rm9ySW5kZXgoaSk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2Nr
LT52YXJpYWJsZXNBdEhlYWRbaV07CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCkBAIC0xODM1LDEx
ICsxODM1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAg
ICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBO
byBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCiAgICAgICAgIGZvcm1hdCA9IGRhdGFG
b3JtYXRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpOwotICAgICAgICBtX3N0cmVhbS0+YXBw
ZW5kQW5kTG9nKAotICAgICAgICAgICAgVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoCi0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLAotICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKSwKLSAgICAgICAgICAgICAgICBmb3JtYXQpKTsKKyAgICAgICAg
REZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhb3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwg
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CisgICAgICAgIG1f
c3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpKTsKICAgICB9CiAKICAgICBtX29yaWdpbiA9
IE5vZGVPcmlnaW4oKTsKQEAgLTE5MTksNyArMTkxNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcygpCiAgICAgICAgIGlmIChmb3JtYXQgPT0gRmx1c2hlZEpTVmFs
dWUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdp
c3Rlci5pc0FyZ3VtZW50KCkpOwogCiAgICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2Ug
PSBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlcikp
OwogICAgICAgICAKQEAgLTczNDAsNTQgKzczMzgsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqIG5vZGUpCiB7
CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAK
ICAgICBKU1ZhbHVlUmVncyBhcmd1bWVudHNSZWdzOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRz
UmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwotICAgIH0KKyAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBKU1ZhbHVl
T3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgYXJn
dW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOworICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQpOwog
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBsb2NrKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1
ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICB9CisgICAgR1BSVGVtcG9y
YXJ5IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyh0aGlzKTsKKyAgICBHUFJSZWcgYXJnQ291bnRJbmNs
dWRpbmdUaGlzR1BSID0gYXJnQ291bnRJbmNsdWRpbmdUaGlzLmdwcigpOwogICAgIHVubG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFu
Y2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4g
VGhpcyBpcyBzYWZlCi0gICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRl
Z3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAg
Ly8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNh
biBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgLy8gcGFzdCB0aGUg
c2l6aW5nLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE0NDgKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwogCi0gICAgR1BSUmVnIGFyZ0NvdW50
SW5jbHVkaW5nVGhpc0dQUiA9Ci0gICAgICAgIEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BS
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNSZWdzKTsKKyAgICBpbnQzMlJlc3Vs
dChhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIG5vZGUpOyAgCit9CiAKLSAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1
ZGluZ1RoaXNHUFIpOwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5v
ZGUqIG5vZGUpCit7CisgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7CisKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3Vu
dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7ICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50
cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEpTVmFsdWVSZWdzIGFy
Z3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKIAogICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCks
IG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAg
ICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgICAgICBhcmdDb3VudElu
Y2x1ZGluZ1RoaXNHUFIpKTsKKyAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNl
KCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291
cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJvdmUsCi0gICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAg
ICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKICAgICAgICAgICAgIFRydXN0ZWRJbW0z
MihkYXRhLT5saW1pdCkpKTsKIAotICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdU
aGlzR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAg
ICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgbV9qaXQuc3RvcmUzMihhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7
CiAKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdz
LCBkYXRhLT5vZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlN
aW5pbXVtKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVu
dHNSZWdzLCBkYXRhLT5vZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBkYXRhLT5t
YW5kYXRvcnlNaW5pbXVtKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbm9S
ZXN1bHQobm9kZSk7CkBAIC03Mzk3LDE3ICs3Mzk2LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lOwotICAgIGlmIChub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgaW5saW5l
Q2FsbEZyYW1lID0gbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKTsKKyAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSgpOwogICAgIGVsc2UKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCisgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGFyZ3VtZW50Q291bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRl
bXBvcmFyeSBsZW5ndGgodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKLSAgICBHUFJSZWcgbGVuZ3RoR1BSID0gbGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgR1BSUmVn
IGxlbmd0aEdQUiA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdGVtcFJl
Z3MgPSB0ZW1wLnJlZ3MoKTsKLSAgICAgICAgCi0gICAgZW1pdEdldExlbmd0aChpbmxpbmVDYWxs
RnJhbWUsIGxlbmd0aEdQUiwgLyogaW5jbHVkZVRoaXMgPSAqLyB0cnVlKTsKKyAgICAKKyAgICBt
X2ppdC5tb3ZlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBsZW5ndGhHUFIpOwogICAgIGlm
IChkYXRhLT5vZmZzZXQpCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihkYXRhLT5v
ZmZzZXQpLCBsZW5ndGhHUFIpOwogICAgICAgICAKQEAgLTc1NjYsNyArNzU2Nyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkK
ICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKCk7CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZQogICAgICAgICAmJiAhaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICBrbm93bkxlbmd0aCA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICBrbm93bkxl
bmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgIGxlbmd0aElzS25vd24gPSB0cnVlOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGtub3duTGVuZ3RoID0gVUlOVF9NQVg7CkBAIC0xMjQ2OCw3ICsx
MjQ2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhOb2RlKiBub2RlKQogICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0lubGluZUNhbGxGcmFtZSgpKQogICAgICAgICBhcmd1
bWVudENvdW50UmVnaXN0ZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
cjsKICAgICBlbHNlCi0gICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAg
IGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzOwogICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1
bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHQuZ3ByKCkpOwogICAgIGludDMyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgKaW5kZXggMjJhZDQ2ZjkwNWY5NzdiOTBmODViOTFhYzkzY2RmY2RmNjAwZWY0
Yi4uMzU2ZjFlMWEwOWRhNDJmZDg5NmU5YTQ3NWUwMTNkNzNkNTNlZDUyNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTM5Myw2ICsxMzkz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJk
VmFyYXJncyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0
ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50
cyhOb2RlKik7CkBAIC0xNjcwLDE1ICsxNjcxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VU
eXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRT
ZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVn
aXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0
ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkK
ICAgICB7CisgICAgICAgIEFTU0VSVCghYnl0ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVj
b2RlUmVnLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9z
dHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywg
bWFjaGluZVJlZywgZm9ybWF0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9j
YWwoRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbV9jdXJyZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCksIGZvcm1hdCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCks
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0
aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA4Yzg1NmM4NzllNmYzYTFkN2RiMjkxMTVh
YjhkMzUzY2FmMWJlMTllLi44MDYyNmIwMTYxMGY5NjA1YWFlYzAyNjhmNDViYTVkNGY3MzEwYThm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChu
b2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhp
cyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fu
bm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBA
IC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVj
b3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnRO
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFk
KTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4
MjQsNiArMzgyNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21w
aWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggMTc3YTgxMzJhYzNi
M2YzN2M5NjE2NWEzNzYxNWUzMDdjYWQyNDQzMy4uY2Q1ZTVkYTU0NWY1YmZjZWU1MjliYWZiNmMy
NTExOWVhY2FiYmQyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xOTM2LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRM
b2NhbDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNr
aW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAg
IC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9j
ZWVkLgpAQCAtMjAwNyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAg
ICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVh
bFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9j
dXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9y
bWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC00NDY0LDYgKzQ0NjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBj
YXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAg
ICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IDE2OGIz
ZGY0MzM0NjU3ZTZhYWRiNjRiYmY2MzNlZWM1YWZhMWIwNDQuLjZlMDk0OWIwZmE4YzA4NzExNzUz
YmIxYzZhN2YyYTMyNmQwMmExOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGFja0xheW91dFBoYXNlLmNwcApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIHRyZWF0IGEgdmFyaWFibGUgYXMgYmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBh
biBhY2Nlc3MgdG8gaXQgKFNldExvY2FsLCBHZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBo
YW50b21Mb2NhbCkuCiAgICAgICAgIAotICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAg
ICAgICAgT3BlcmFuZHM8Ym9vbD4gdXNlZE9wZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMs
IGdyYXBoKCkubV90bXBzLCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRo
b3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9k
ZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CkBAIC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2Fs
KCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OiB7CiAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNM
b2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291
bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJh
bmQoZGF0YS0+Y291bnQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3Rh
cnQuaXNMb2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVh
bGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0g
MSkuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEtPmxpbWl0OyBpLS07KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAg
ICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAg
ICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtOTIsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAg
ICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNl
ZExvY2Fscy5zZXQoc3RhY2stPmxvY2FsLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAg
IHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHN0YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTEwOCwyMSArMTA3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNl
ZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVw
LnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChW
aXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2Vk
TG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2Vk
T3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAgbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWwgPSBj
b2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgh
dXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJbmRleChpKSkgewogICAgICAgICAgICAgICAgIGFs
bG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
dmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbG9jYWwgPSB2YXJp
YWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0gICAgICAgICAgICBpZiAobG9jYWwgPj0gYWxsb2Nh
dGlvbi5zaXplKCkpCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3Bl
cmFuZCgpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJ
bmRleChvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBhbGxvY2F0aW9uLnNpemUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQorICAgICAgICAgICAgaWYgKGFsbG9j
YXRpb25baW5kZXhdID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24o
YWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgdmFyaWFibGUt
Pm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YSkgewotICAgICAgICAgICAg
aWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tYWNo
aW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEt
Pm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxz
aXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5s
b2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3BlcmFuZC50b0xvY2FsKCkpID49IGFs
bG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5kLnRvTG9jYWwoKV0gPT0gVUlOVF9N
QVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24oYWxsb2NhdGlv
biwgZGF0YS0+bG9jYWwpOworICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWdu
KHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIo
YXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lzdGVyKGFzc2lnbih1c2VkT3BlcmFuZHMs
IGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0t
OykgewogICAgICAgICAgICAgSW5saW5lVmFyaWFibGVEYXRhIGRhdGEgPSBtX2dyYXBoLm1faW5s
aW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbigKLSAgICAgICAg
ICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUo
KTsgYXJndW1lbnQtLTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3Np
dGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1LDgg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0
aW9uLCBkYXRhLT5jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
U3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2Nh
dGlvbiwgZGF0YS0+Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGlu
ZVN0YXJ0ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjMxLDE3ICsyMzEsMTYgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgVmlydHVhbFJl
Z2lzdGVyIGFzc2lnbihjb25zdCBPcGVyYW5kczxib29sPiYgdXNlZE9wZXJhbmRzLCBjb25zdCBW
ZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3JjOwotICAgICAgICBpZiAocmVzdWx0Lmlz
TG9jYWwoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlv
bltyZXN1bHQudG9Mb2NhbCgpXTsKLSAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlO
VF9NQVgpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobXlBbGxvY2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gb3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKworICAgICAgICBzaXplX3Qgb3BlcmFuZEluZGV4ID0g
dXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgbXlB
bGxvY2F0aW9uID0gYWxsb2NhdGlvbltvcGVyYW5kSW5kZXhdOworICAgICAgICBpZiAobXlBbGxv
Y2F0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcigp
OworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsK
ICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAppbmRleCBlYjNkZGJkNzE4NDNkNDlmNjViMzJjZTk2
MWZmOWEwNzEyYTFhMDUxLi5iNDhjNmY3ZjE5MDk3NzVkNzI3OTc5OTFmM2ZiOTgzZGU2MzhhNzI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTI4NSwxNyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVsbHB0
cjsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG1fbm9kZS0+bG9jYWwoKTsK
KyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fbm9kZS0+b3BlcmFuZCgpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykg
ewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0g
bG9jYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBu
b2RlLT5vcGVyYW5kKCkgPT0gb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICBzZXRMb2Nh
bCA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJz
dHJhY3RIZWFwKFN0YWNrLCBsb2NhbCkpKQorICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092
ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAKaW5kZXggNmFjYWZiZjNiZjUzNWM5Njk2YmU2NDhhMjA3MGI2
ZWU2ZjRmOGJmOS4uZjFiMWZmNjRkZGE1M2NmNDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAg
Q0NhbGxIZWxwZXJzIGppdChudWxscHRyKTsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0
ZU9TUkV4aXQsICZ2bSk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiREZHIE9TUiBleGl0IHRodW5rIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5oCmluZGV4IDA1YTUwYTU0YjI1ZDUxZGJjYjE4NThmZTdhYWRjYTQ4NjgyMDVk
OWUuLjhiNWMzZjAxYTQ4NTIwYjdhYWFhYWViYWZmOTNjM2IyNmNjZDk4NGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBWTTsKIAog
bmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAppbmRleCA2MGZiZjg5OTVmZGFkNzgyNTZhMDY3Yjg5YzRlYzVmNTcx
M2YxZDdlLi43OTY2NWY4YWI4NWZjMTExNmQ2MzlmYjNkOGI1NWY2ZWQ5MDI2OGRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBjaGVja09wID0gQ2hlY2tTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoU3BlY0NlbGxDaGVjayAmIFNwZWNFbXB0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5s
b2NhbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2Nh
bCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgobG9jYWwgLSAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCA6IDApKSA9PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBU
RFogdmFsdWUuIFRoZSBjYWxsIGVudHJ5cG9pbnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERaLApA
QCAtMTY4LDggKzE2OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExvY2Fs
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJz
dGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25h
bDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxl
VmFsdWVzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVW
YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RI
YW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFu
ZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggOWVl
NWUwMDc0MDlkZjUyOTRiZmNmNTFiNzc2ZWI4Y2ZjZjQ3YzUwZS4uYTJkNmNmYzI0OTM0ZTNkYzNj
NDZjMGUyNGQ0ZGExY2UxYjBjZjViNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAKQEAgLTQ4Myw3ICs0ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tpXTsKICAgICAgICAgICAgICAgICBBU1NFUlQocGhp
c0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG5vZGUtPm9wZXJhbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+
aXNQaGlJbmRleChpKSkKQEAgLTUxOSwxMCArNTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNp
emUoKTsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2Qmxv
Y2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKGxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0g
cHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRv
ICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBw
cmV2Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxv
Y2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAg
LTUzMywxMSArNTMzLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJl
ZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3Ao
KSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50TWF5YmUKQEAgLTU0NywxOSArNTQ3LDE1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwg
IXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUp
LCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRp
b25zKAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKSwKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCkpOwotICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9u
cygKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMo
T3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIE9wZXJh
bmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwg
YmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFy
aWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2
OCwyNCArNjY0LDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJl
ZkNvdW50cy5nZXQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlLCBibG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0g
U2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJl
IG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZs
dXNoaW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5p
dGVseToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQn
cyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5p
dGVseSBmb3IgdGhhdCBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAg
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAg
ICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC05NjgsMjYgKzk2NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9n
KG5vZGUsICIgLT4gIiwgZWRnZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgewogICAgICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nKGxvY2FsLCAiIGluIG51bGwgQmxvY2sgIik7CisgICAgICAgICAgICBkYXRhTG9nKG9wZXJh
bmQsICIgaW4gbnVsbCBCbG9jayAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAg
ZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxv
Y2spCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJh
c2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nKGxvY2Fs
LCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7
CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIg
LT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZh
bGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxv
Y2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5k
LCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAg
ICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNl
QmxvY2spOworICAgICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAiLCBvcGVyYW5kLCAiIGlu
IEJsb2NrICIsICpzb3VyY2VCbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNw
cAppbmRleCAyNmYwMzI5ZDU0MzA0MTU3MjA1ZTc4MTQ5OGM2NGUwYmU5OTMyMTEwLi45NWNkYzky
ZTJjMjQxMGEzNWMwMTMxMzFmZGMzYjdjY2MyODI5ZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTQx
LDExICs0MSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNl
IHsKIAotbmFtZXNwYWNlIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3Jh
cGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5nIikK
QEAgLTU2LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZhcmFy
Z3MgZm9yd2FyZGluZzpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAg
IH0KQEAgLTg4LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNhbGxz
IGludG8gdGhpcyBmdW5jdGlvbiB0byBiZSByYXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGluIGEg
c2ltcGxlIE8obikgbWFubmVyLgogICAgICAgICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0g
YmxvY2stPmF0KGNhbmRpZGF0ZU5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7
CiAgICAgICAgIAogICAgICAgICAvLyBXZSBlbGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3Jl
YXRlQ2xvbmVkQXJndW1lbnRzIGlmIHRoZSBidXR0ZXJmbHkgaXMgb25seQpAQCAtMTA1LDcgKzEw
Myw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7
CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE3LDkg
KzExNSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpLmlzVG1wKCksICJXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhIHRt
cCByZWZlcnJpbmcgdG8gYW4gYXJndW1lbnRzIG9iamVjdC4iKTsKICAgICAgICAgICAgICAgICBs
YXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwotICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRM
b2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5rZWRMb2NhbCgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhub2RlLT51bmxpbmtlZE9wZXJh
bmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9j
YWxzLmFwcGVuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IENoZWNrVmFyYXJnczoKQEAgLTE0MCwxMyArMTM5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzYXdFc2NhcGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICBpZiAoc2F3RXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAg
ICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
dXNlcyhub2RlLCBjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4
ID0gbm9kZUluZGV4OwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5s
aW5lZENhbGxlcjoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlk
YXRlIHx8IG5vZGUtPmNoaWxkMigpID09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+aXNMb2FkZWRGcm9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNj
YXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoIXZhbGlkR2V0QnlPZmZzZXQpIHsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1dHRl
cmZseSA6IGNhbmRpZGF0ZUJ1dHRlcmZsaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLnVzZXMobm9kZSwgYnV0dGVyZmx5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBCdXR0ZXJmbHkgZXNjYXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM1
LDExICsyMzUsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFu
ZHMoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRl
eCArIDEpLAotICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwg
cmVnLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9j
YWxzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgS2lsbGluZyAiLCBvcGVyYW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVk
IGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWxldmFudExvY2Fscy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJlZykg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNb
aV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fsc1tpLS1dID0g
cmVsZXZhbnRMb2NhbHMubGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2
YW50TG9jYWxzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAg
ICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2VySW5k
ZXggPSAiLCBsYXN0VXNlckluZGV4LCAiLCAiLCBibG9jay0+YXQobGFzdFVzZXJJbmRleCksICJc
biIpOwogICAgICAgICAKICAgICAgICAgLy8gV2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERldGVy
bWluZSBpZiBiZXR3ZWVuIHRoZSBjYW5kaWRhdGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMg
YW55CkBAIC0yNjMsMTYgKzI2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZI
aW50OgogICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgY2FzZSBLaWxs
U3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2Fu
ZGlkYXRlLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBQdXRTdGFjazoKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xv
dChjYW5kaWRhdGUsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRh
dGUsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJ
bnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CkBAIC0yODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNl
IEZsdXNoOgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNh
bmRpZGF0ZSwgbm9kZS0+bG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPm9wZXJhbmQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjk3LDEzICsyOTcs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhl
YXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCByZWcpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlk
YXRlLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc0lu
dGVyZmVyZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAg
ICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJmZXJl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAg
LTMxMSw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAv
LyBXZSBjYW4gbWFrZSB0aGlzIHdvcmsuCi0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGlu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgZGF0YUxvZygiICAgIFdpbGwgZG8gZm9yd2FyZGluZyFcbiIpOwogICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTM0MSw4ICszNDAsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRoZXNl
LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50
c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUt
Pm9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
Rm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDhlYmZm
YjQzNWVkNGRiZjYwMmJkNjJhZWQ0YzM0MzJlYTVhODI5MDIuLjJhYzJlZTM5YjRjY2FkMzA4MTI1
YjRlNmVjYzg4YTg3YzdkMTc5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFj
Y2Vzc0RhdGEoKQotICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNO
b25lKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJl
UHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2
ZXJVbmJveChmYWxzZSkKQEAgLTQ1LDEwICs0NCwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZh
cmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFjY2Vz
c0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgOiBt
X2xvY2FsKGxvY2FsKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorVmFyaWFibGVBY2Nl
c3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIDogbV9wcmVk
aWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9u
ZSkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9z
aG91bGROZXZlclVuYm94KGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFp
bGVkKGZhbHNlKQpAQCAtODcsNyArODYsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hv
dWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IHRoaXMgZmFjaWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1FOiBt
YWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRzLgotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQo
KSkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRp
Y3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0CkBAIC0xMjEsNyArMTIwLDcgQEAgYm9vbCBWYXJpYWJs
ZUFjY2Vzc0RhdGE6OnRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKQogewogICAg
IEFTU0VSVChpc1Jvb3QoKSk7CiAgICAgICAgIAotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQo
KSB8fCBzaG91bGROZXZlclVuYm94KCkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSB8
fCBzaG91bGROZXZlclVuYm94KCkKICAgICAgICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVV
c2VzQXNBcnJheUluZGV4KSkKICAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRT
dGF0ZShtX2RvdWJsZUZvcm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgCkBA
IC0xNzYsNyArMTc1LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50
SW50NTJJbXBsKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1bnQg
Zm9yIG1hY2hpbmUgYXJndW1lbnRzLgotICAgIGlmIChtX2xvY2FsLmlzQXJndW1lbnQoKSkKKyAg
ICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAogICAgIC8vIFRoZSBhcmd1bWVudC1hd2FyZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBh
bGwgb2YgYW4gKGlubGluZWQgb3IgbWFjaGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCmluZGV4IDFkMzg5MmY5ZWMwOWNiYTIwNDNm
YTI1NGU2MDk0MjMyMDE0YTI4NGUuLmJlMmZiNTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNm
Y2VmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaApAQCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6
IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoVmFyaWFibGVBY2Nlc3NEYXRhKTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsK
KyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCk7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lz
dGVyIGxvY2FsKCkKKyAgICBPcGVyYW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7Cisg
ICAgICAgIEFTU0VSVChtX29wZXJhbmQgPT0gZmluZCgpLT5tX29wZXJhbmQpOworICAgICAgICBy
ZXR1cm4gbV9vcGVyYW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hp
bmVMb2NhbCgpCkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRpbmcg
dGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNw
YWNlCiAgICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZp
Y2FudC4KIAotICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX21hY2hpbmVMb2NhbDsKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAgICAg
U3BlY3VsYXRlZFR5cGUgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbjsKKyAgICBPcGVyYW5kIG1f
b3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9kZUZs
YWdzIG1fZmxhZ3M7CiAKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCmluZGV4IDI4ZTQzN2ZkNTFm
ZWE0OTY5ZWI0OGVjZjBjMDUwOGYwYTM3ZGY4MzUuLjViMmMxZWU5MDliNTQ4ZjM5ODI3MGM0M2Jk
MzZlZDcyZTNmOWNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50LmNwcApAQCAtNTksMTEgKzU5LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIsIGlk
KCksICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAg
ICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAi
KSIpOworICAgICAgICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQoKSwgIiwgIiwgb3BlcmFuZCgp
LCAiKSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAgICAg
IG91dC5wcmludCgKLSAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdp
c3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwKKyAgICAgICAgICAg
ICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIs
IG9wZXJhbmQoKSwKICAgICAgICAgICAgICIsICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9y
bWF0KCkpLCAiKSIpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAppbmRleCAyMDYwZDRhMmZkMjcyMjNk
ZDZmNjk5YzZkYmFkNmQyMjQ2N2M5ODM0Li5jMWY1NGJhNGZiZGNhYWE1YTFkOWE1ZWRjMWFjNDgx
MzhkMzRlM2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuaApAQCAtNjgsNiArNjgsMTAgQEAgZW51bSBWYXJpYWJsZUV2ZW50S2luZCA6IHVpbnQ4X3Qg
ewogfTsKIAogdW5pb24gVmFyaWFibGVSZXByZXNlbnRhdGlvbiB7CisgICAgVmFyaWFibGVSZXBy
ZXNlbnRhdGlvbigpIAorICAgICAgICA6IG9wZXJhbmQoKSAKKyAgICB7IH0KKwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3Rl
cklEIGZwcjsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtNzYsNyArODAsNyBAQCB1bmlvbiBW
YXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7CiAjZW5kaWYKLSAgICBpbnQzMl90IHZpcnR1YWxS
ZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudCB7CkBA
IC0xNjIsNyArMTY2LDcgQEAgcHVibGljOgogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAg
ICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9u
IHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gdmly
dHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOwogICAgICAgICBl
dmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZN
b3ZlKHdoaWNoKTsKQEAgLTE4MSwxMyArMTg1LDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwoCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9y
bWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIG1h
Y2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVu
dCBldmVudDsKICAgICAgICAgV2hpY2hUeXBlIHdoaWNoOwogICAgICAgICB3aGljaC52aXJ0dWFs
UmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsKICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlv
biByZXByZXNlbnRhdGlvbjsKLSAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IGJ5
dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0
ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVudC5tX2tpbmQgPSBTZXRMb2NhbEV2ZW50OwogICAg
ICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2gg
PSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5NSwxMyArMTk5LDEzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZI
aW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZykKKyAgICBzdGF0
aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIE9wZXJhbmQgYnl0ZWNvZGVS
ZWcpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5
cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwogICAgICAgICBWYXJpYWJs
ZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52
aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9u
Lm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAgICAgICAgZXZlbnQubV9raW5kID0gTW92SGludEV2
ZW50OwogICAgICAgICBldmVudC5tX3doaWNoID0gV1RGTW92ZSh3aGljaCk7CiAgICAgICAgIGV2
ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKHJlcHJlc2VudGF0aW9uKTsKQEAgLTI2NSwx
MyArMjY5LDEzIEBAIHB1YmxpYzoKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxSZWdpc3Rlcigp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBt
X2tpbmQgPT0gU3BpbGwpOwotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVz
ZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0
aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQotICAgIAotICAgIFZp
cnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkgY29uc3QKKworICAgIE9wZXJhbmQgb3Bl
cmFuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09IFNldExvY2FsRXZl
bnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVudCk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0dXJu
IG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFuZDsKICAgICB9CiAgICAgCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3RlcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAppbmRleCA0NTI2ZDM5YmIw
OTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2Li44Y2Y3MDgwNDAzYThlZmZkOWIyMjFhMzVh
ZjhkMjFkZTMyYjVkZGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBWYXJpYWJs
ZUV2ZW50U3RyZWFtOjpsb2dFdmVudChjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKIHsKICAg
ICBkYXRhTG9nRigic2VxIyV1OiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKCkpKTsKICAg
ICBldmVudC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgZGF0YUxvZ0YoIiAiKTsKKyAgICBk
YXRhTG9nTG4oIiAiKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTExOSwxMCArMTE5LDEyIEBAIHVu
c2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1pbmlmaWVkR3JhcGgmIGdyYXBoLAog
ICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgdmFsdWVSZWNvdmVy
aWVzLCBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+KiB1bmRlZmluZWRPcGVyYW5kU3BhbnMp
IGNvbnN0CiB7CisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwogICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwogCiAg
ICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOworICAgIHVuc2lnbmVkIG51bVRtcHM7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5zaWduZWQgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlk
SW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSBmYWxzZTsKQEAgLTEz
MCwzNyArMTMyLDQyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0
KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbiA9IFsmXSAodW5zaWduZWQgaSkg
ewogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZEluZGV4KQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmly
dHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLm9mZnNldCgpOwotICAgICAgICBp
bnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChp
IC0gMSkub2Zmc2V0KCk7CisgICAgICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmll
cy5vcGVyYW5kRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpOworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9y
SW5kZXgoaSAtIDEpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICBpbnQgbWlu
T2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZzZXQsIGxhc3RPZmZzZXQpOwogICAgICAgICB1bmRl
ZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7IGZpcnN0VW5kZWZpbmVkLCBtaW5PZmZzZXQsIGkg
LSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAgICAgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlkSW5k
ZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQgPSBbJl0gKHVuc2ln
bmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBzZXBhcmF0ZSB0aGUgc3BhbiBvZiBhcmd1
bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2NhbHMgZXZlbiBpZiB0aGV5IGhhdmUgYWRqYWNlbnQg
b3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJ
bmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLmlzQXJn
dW1lbnQoaSkpCisgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXggJiYg
Zmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5k
ZXgoaSkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3Bh
bihpKTsKIAogICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgPT0gaW52YWxpZEluZGV4KSB7CiAg
ICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGk7Ci0gICAgICAgICAgICBmaXJzdFVuZGVmaW5l
ZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKTsKKyAgICAgICAgICAg
IGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5k
ZXgoaSkuaXNBcmd1bWVudCgpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIGF1dG8qIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJ
bmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKS0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsK
LSAgICBlbHNlCisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9M
b2NhbCgpICsgMTsKKyAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CisgICAgfSBlbHNlIHsKICAgICAgICAgbnVtVmFyaWFi
bGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOworICAgICAgICBudW1U
bXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51bVRtcHMoKTsKKyAgICB9CiAgICAgCiAgICAgLy8g
Q3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdyZSBhdCBpbmRleCA9PSAwIHRoZW4gdGhpcyBtdXN0
IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAgLy8gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwg
dmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJlY292ZXJpZXMgc2hvdWxkCiAgICAg
Ly8gcmVmbGVjdCB0aGlzLgogICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgdmFsdWVSZWNvdmVy
aWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG51bVZhcmlhYmxlcyk7CisgICAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdG1wcyBoZXJlIGJl
Y2F1c2UgdGhleSBjYW4ndCBiZSB1c2VkIHlldC4KKyAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0g
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZh
cmlhYmxlcywgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNvdmVy
aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkpLCBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkudmly
dHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0xNzEsMTIgKzE3OCwxMyBAQCB1bnNpZ25lZCBWYXJp
YWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgc3RhcnRJbmRleC0tOwogICAg
IAogICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEgbW9jay11cCBvZiB0aGUgREZHJ3Mgc3RhdGUgYW5k
IGV4ZWN1dGUgdGhlIGV2ZW50cy4KLSAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNv
dXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgT3Bl
cmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBudW1WYXJpYWJsZXMsIG51bVRtcHMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG9wZXJh
bmRTb3VyY2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgb3BlcmFuZFNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgTWluaWZpZWRH
ZW5lcmF0aW9uSW5mbz4gZ2VuZXJhdGlvbkluZm9zOwogICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBpbmRleDsgKytpKSB7CiAgICAgICAgIGNvbnN0IFZhcmlhYmxlRXZlbnQm
IGV2ZW50ID0gYXQoaSk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5n
IGV2ZW50ICIsIGV2ZW50KTsKICAgICAgICAgc3dpdGNoIChldmVudC5raW5kKCkpIHsKICAgICAg
ICAgY2FzZSBSZXNldDoKICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8uCkBAIC0xOTgsMjEg
KzIwNiwyMyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50Ogot
ICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVS
ZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2
ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOworICAgICAg
ICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAg
ICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwg
VmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgU2V0TG9jYWxFdmVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVy
YW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNv
dXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlOjpm
b3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkp
KTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJh
bmQoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5v
cGVyYW5kKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3Rl
cigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorCisgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk9wZXJhbmQgc291cmNlczogIiwgb3BlcmFuZFNvdXJjZXMpOwogICAgIAogICAgIC8vIFN0
ZXAgMzogQ29tcHV0ZSB2YWx1ZSByZWNvdmVyaWVzIQotICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJp
YWJsZXMpOworICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KE9w
ZXJhbmRzTGlrZSwgb3BlcmFuZFNvdXJjZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBvcGVyYW5kU291cmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBWYWx1ZVNvdXJjZSYgc291
cmNlID0gb3BlcmFuZFNvdXJjZXNbaV07CiAgICAgICAgIGlmIChzb3VyY2UuaXNUcml2aWFsbHlS
ZWNvdmVyYWJsZSgpKSB7CkBAIC0yMzAsNiArMjQwLDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIE1pbmlmaWVkTm9kZSogbm9kZSA9IGdyYXBo
LmF0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyBpbmZvID0g
Z2VuZXJhdGlvbkluZm9zLmdldChzb3VyY2UuaWQoKSk7CiAgICAgICAgIGlmICghaW5mby5hbGl2
ZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVS
ZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBpcyBkZWFkLiIpOwogICAgICAgICAgICAg
dmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQo
KSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJh
dGVkKQogICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJhbmQoaSk7CkBAIC0yMzcs
NiArMjQ4LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVlUmVj
b3Zlcmllc1tpXSwgbm9kZSkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJP
cGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSksICIgaXMgY29uc3Rh
bnQuIik7CiAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2Vw
YXJhdGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgbm9k
ZS0+Y29uc3RhbnQoKSA9PSBqc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgICAgICByZWNv
cmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAtMjY2LDcgKzI3OCw3IEBAIHVuc2lnbmVkIFZhcmlh
YmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5mby51LnZpcnR1YWxS
ZWcpLCBpbmZvLmZvcm1hdCk7CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJ
bkpTU3RhY2soaW5mby51Lm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIGluZm8uZm9ybWF0KTsK
ICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJlY29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkK
ICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihvcGVyYW5kU291cmNlcy5zaXplKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uaAppbmRleCAwMTU3MzAwN2VkZGRkNzBmMzFkMTdhYzBkOTlmNzhlYmY1ZWE2ZWJjLi5lOWU0
M2FiZmVjNDg1ZmVjN2U2NjMxNTFjMWMyMmVjNTE4OTc0MTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaApAQCAtNDIsOSArNDIs
MTIgQEAgc3RydWN0IFVuZGVmaW5lZE9wZXJhbmRTcGFuIHsKIH07CiAKIGNsYXNzIFZhcmlhYmxl
RXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9yPFZhcmlhYmxlRXZlbnQ+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIHZvaWQgYXBwZW5k
QW5kTG9nKGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQogICAgIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBsb2dFdmVudChldmVudCk7CiAgICAgICAgIGFwcGVuZChldmVu
dCk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCmluZGV4IGMxNTFmMjE3ZGVlYzE4NjdlNjhmNTVlMmNiNGEwN2Y5NTE5NjIwZDYu
LjdjYTgyNWQ5NTlkNTdkODM0NWI0NTQyOGIxNTVhYmVjODYwNWMzMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTE5Miw2ICsxOTIsNyBA
QCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNh
c2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgVmFsdWVU
b0ludDMyOgogICAgIGNhc2UgQnJhbmNoOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCmluZGV4IDMwODBkYzM0NTA5YzczMzMyNGI4
MTQzZDJhOTU0ZjA4ZWRhZjEzZmIuLmMwMDRmYWNjYzFhZDA1ZDM2Y2VkYmVkZjk2NzgyYWFiN2Rj
Yjk4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVu
dHJ5SklUQ29kZS5jcHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAogRm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQotICAg
IDogbV9ieXRlY29kZUluZGV4KFVJTlRfTUFYKQotICAgICwgbV9lbnRyeUZhaWx1cmVDb3VudCgw
KQorICAgIDogbV9lbnRyeUZhaWx1cmVDb3VudCgwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggMGU0YjM0YTFiNzk3ZDQ4YTcw
MmQ0YWVmMjI0NGU3YWQ5ZjM0YjQ4Zi4uYjdjYjEwMzI2ZDcwNjQ0NWU1Mzg3MDYxYmM3NWE2OGQ4
N2NiZTE1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5jbGVhclN0YWNrRnJhbWUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwLCBjb2RlLmZyYW1lU2l6
ZSgpKTsKIAogICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZl
UmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwor
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNvZGVCbG9j
aywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwogICAgICAgICAg
ICAgICAgIH0pOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2ludElu
ZGV4IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZUluZGV4LmtleXMo
KSkgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdGhlIENvZGVCbG9jayB0byBoYXZlIGEgd2VhayBwb2ludGVyIHRvIGl0c2Vs
ZiBiZWNhdXNlCiAgICAgICAgIC8vIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdldCBj
b2xsZWN0ZWQuCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIo
Yml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CiAKICAgICAgICAgLy8gU3RhY2sg
T3ZlcmZsb3cgQ2hlY2suCiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dyYXBo
LnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CkBAIC0z
NTUsNyArMzU1LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMu
CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCksIDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1h
cCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmls
aXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkpKTsKQEAgLTEyODQsNiArMTI4NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2FsbEV2
YWw6CiAgICAgICAgICAgICBjb21waWxlQ2FsbEV2YWwoKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlVmFyYXJnc0xl
bmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTk1Niw3ICsxOTU5LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVl
KiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVm
ZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShi
dWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpKSkpOwogICAgIH0KIAog
ICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKQEAgLTE5NzUsNyArMTk3OCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKICAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVyYW5k
KTsKICAgICAgICAgCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNy
ZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgIApAQCAtNzkzNSwxMyAr
NzkzOCwxMyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgpCiAg
ICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRy
ZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSkpOwogICAgIH0K
IAogICAgIHZvaWQgY29tcGlsZVNldENhbGxlZSgpCiAgICAgewogICAgICAgICBhdXRvIGNhbGxl
ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGNh
bGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgbV9vdXQu
c3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTc5NTYsNyArNzk1OSw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAg
ICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9u
b2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKCkKQEAgLTk1NTEsNTEgKzk1NTQsNTEg
QEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NM
ZW5ndGgoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAg
ICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgCisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5h
cmd1bWVudHNDaGlsZCgpKTsKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAogICAg
ICAgICAgICAgSW50MzIsIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGpzQXJndW1lbnRzLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRh
LT5vZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5j
ZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBU
aGlzIGlzIHNhZmUKLSAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBp
bnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0g
ICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVy
ZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgICAgICAv
LyBwYXN0IHRoZSBzaXppbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDE0NDgKLSAgICAgICAgCisKICAgICAgICAgTFZhbHVlIGxlbmd0aElu
Y2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CiAKLSAgICAg
ICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsCi0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGgsIGxlbmd0aEluY2x1ZGluZ1Ro
aXMpKTsKKyAgICAgICAgc2V0SW50MzIobGVuZ3RoSW5jbHVkaW5nVGhpcyk7CisgICAgfQogCisg
ICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZSht
X25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKICAgICAgICAgc3Bl
Y3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
Ci0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25z
dEludDMyKGRhdGEtPmxpbWl0KSkpOwotICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJpdE9y
KG1fb3V0LmlzWmVybzMyKGxlbmd0aEluY2x1ZGluZ1RoaXMpLCBtX291dC5hYm92ZShsZW5ndGhJ
bmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpKTsgCisKICAgICAg
ICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1h
Y2hpbmVDb3VudCkpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRp
b24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBw
b2ludGVyIGluc3RlYWQKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0
aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25Mb2FkVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGlu
c3RlYWQKICAgICAgICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxkbid0IGhhdmUg
dG8gZG8gdGhpcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTY2MAogICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9vdXQubFNocigK
LSAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZz
ZXQoKSkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJl
c3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCiAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cigzKSk7CiAgICAgICAgIAogICAgICAgICB2bUNhbGwoCiAg
ICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwKICAgICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpz
QXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBs
ZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgICAg
ICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRv
cnlNaW5pbXVtKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdz
KCkKICAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgaWYgKG1f
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0g
bV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3By
ZWFkKSB7CiAgICAgICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTk2MDQsNTAgKzk2MDcsMjEgQEAgcHJpdmF0
ZToKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICAg
ICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBt
X25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAg
ICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IG51bGxwdHI7IAotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG51bGxwdHI7Ci0gICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBn
ZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50
c0xlbmd0aC5pc0tub3duKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFy
Z3VtZW50c0xlbmd0aC5rbm93bjsKLSAgICAgICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBkYXRh
LT5vZmZzZXQpCi0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIGRh
dGEtPm9mZnNldDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICBsZW5ndGggPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKGtu
b3duTGVuZ3RoICsgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUs
IGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KLSAgICAgICAgICAgIGlmICghZGF0YS0+
b2Zmc2V0KQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2Vy
ID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJ
bnQzMigwKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+b2Zmc2V0KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsK
LSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
TGFyZ2VyLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxh
cmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3Ro
LnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKLSAgICAgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBt
X291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhS
ZXN1bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9
IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOwotICAgICAgICB9CisgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OworICAg
ICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpOwogCisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5n
VGhpcywgbV9vdXQuaW50MzJPbmUpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBW
YXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFi
b3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7
CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBh
eWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVl
IHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NG
b3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCkBAIC05NzA2LDY1ICs5NjgwLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2Fs
IG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRp
b25zLgogICAgICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAg
cmV0dXJuIGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElO
VDMyX01JTikpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3Qmxv
Y2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKLSAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5j
b25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSksIHVuc3VyZShpc0xhcmdlciksIHVu
c3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNM
ZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGZpeGVk
TGVuZ3RoID0gbV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQz
MihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBz
bWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LnNlbGVjdChtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgs
IG1fb3V0LmludDMyWmVybyksIGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFBy
ZWRpY3RhYmlsaXR5OjpQcmVkaWN0YWJsZSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9y
d2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2Fs
bEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNo
LCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFk
TGVuZ3RoczsKLQotICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgp
Lm5vZGUoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50
b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJh
eUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZh
bHVlLCAyPiBzcHJlYWRMZW5ndGhzOwotCi0gICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291
bnQgPSByZWN1cnNhYmxlTGFtYmRhKFsmXShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9p
ZCB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAg
ICAgICAgICAgICAgICBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICAgICAgICAgIEJpdFZl
Y3RvciogYml0VmVjdG9yID0gdGFyZ2V0LT5iaXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZihtX2dyYXBoLnZhckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJP
ZlN0YXRpY0FyZ3VtZW50czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBo
YW50b21OZXdBcnJheUJ1ZmZlcikgewotICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJn
dW1lbnRzICs9IHRhcmdldC0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5s
ZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEFTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAg
ICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUo
aW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5n
ZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApOwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgY29sbGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAg
ICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBu
dW1iZXJPZlN0YXRpY0FyZ3VtZW50cyk7Ci0gICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNw
cmVhZExlbmd0aHMpCi0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRk
KGxlbmd0aEluY2x1ZGluZ1RoaXMsIGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNs
dWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3Bl
Y3VsYXRlKApAQCAtOTc3NSw3ICs5NzA0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUg
dGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAot
ICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2Fj
aGVkU3ByZWFkTGVuZ3RocywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwg
TFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVh
ZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMsICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2Rl
KiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYg
KHRhcmdldC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpLCBzdG9yZUluZGV4KTsKIApAQCAtOTgwNyw4ICs5
NzM2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3Ao
KSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgp
OwogCi0gICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNT
dGFydChpbmxpbmVDYWxsRnJhbWUsIHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7
Ci0gICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNo
ZWRTcHJlYWRMZW5ndGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCk7CisgICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNT
dGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0
aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCkpOwogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2so
KTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CkBAIC0xMjI2Myw4ICsxMjE5Myw4IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29w
ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIo
bV9jYWxsRnJhbWUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7
Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBh
Y2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAg
IG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoMCkpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZy
YW1lKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29w
ZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAg
ICAgCkBAIC0xMjMyNSw3ICsxMjI1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50c0xl
bmd0aCBsZW5ndGg7CiAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICBs
ZW5ndGgua25vd24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24g
PSB0cnVlOwogICAgICAgICAgICAgbGVuZ3RoLnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5n
dGgua25vd24pOwogICAgICAgICB9IGVsc2UgewpAQCAtMTIzNTUsNyArMTIyODUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJh
bWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICByZXR1
cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkp
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJl
c3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAg
ICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQpAQCAtMTc2MjAsNyArMTc1NTAsNyBAQCBw
cml2YXRlOgogICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRl
LmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwogICAgICAgICBtX291
dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksCi0gICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAjaWYgIVVTRShCVUlMVElO
X0ZSQU1FX0FERFJFU1MpIHx8ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9jYWxsRnJhbWUsIG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2Vu
ZGlmCkBAIC0xNzcyOCw3ICsxNzY1OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBs
b3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBl
bmRPU1JFeGl0KApAQCAtMTc4MzMsMTUgKzE3NzY0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVz
Y3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5k
ID0gZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAg
ICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFi
aWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAg
ICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkg
ewogCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkK
LSAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5n
KCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwg
b3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZh
aWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBl
eGl0T3JpZ2luKSkKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQg
PSAiLCBvcGVyYW5kLCAiLCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdp
biA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBF
eGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywg
bWFwLCBhdmFpbGFiaWxpdHkpOwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleElu
U3RhY2ttYXBMb2NhdGlvbnMoKSkKQEAgLTE4MTQxLDM5ICsxODA3MiwzOSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBo
LCBzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAg
IFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0
cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3Mo
YmFzZSwgbV9oZWFwcy52YXJpYWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVy
biBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCldLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5
bG9hZEZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxv
YWRGb3IoTFZhbHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBU
eXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBv
aW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAg
ICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9
IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZm
X3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVy
IGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAw
KQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9m
ZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5k
LCBvZmZzZXQpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFu
ZCwgb2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJh
bmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAg
ICAgICAgcmV0dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAg
fQogICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7
CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQ
b2ludGVyIHRhZ0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFn
Rm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkVudHJ5LmNwcAppbmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5
MDQ0OTE5Li4wOTFlN2YzYzliNDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50
cnk6ICIsIHZhbHVlcywgIlxuIik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1
ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpLm9mZnNldCgpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZh
bHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1
bWVudCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJl
Y29uc3RydWN0ZWRWYWx1ZSA9IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlm
ICgocmVjb25zdHJ1Y3RlZFZhbHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFs
dWUudmFsdWUoKSkgfHwgIWFyZ3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVm
YmJiNjVmODZiYjZkYWJjZGYxOGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZm
ZGFiYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3
LDEwICs0NywxMCBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6
T1NSRXhpdERlc2NyaXB0b3IoCiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVy
T2ZUbXBzKQogICAgIDogbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAg
ICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9m
QXJndW1lbnRzLCBudW1iZXJPZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1l
bnRzLCBudW1iZXJPZkxvY2FscywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3
LDMgQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9j
YXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
IAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKaW5kZXggZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVl
Yi4uZmQ3ZjlmMDViYzQ4OWMxZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4
aXRIYW5kbGU7CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlw
dG9yKAogICAgICAgICBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5z
aWduZWQgbnVtYmVyT2ZMb2NhbHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAg
ICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3
ZSB3aXNoIHRvIHByb2ZpbGUuCiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0
IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2Vh
ODNmNmZiODJiY2IzYThjMGE4ODE3NmVlNzIuLjIxNzE1ZDNkZDIyYzM4NzllYjA0ZmI2Yjc4ZTc5
NTI4NGY1ZTAzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5j
bHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKQEAgLTM3LDEwICszOCwxMSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0
Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVy
c0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNr
Q29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgSlNWYWx1ZSogdG1wU2NyYXRj
aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRv
ci0+bV92YWx1ZXMudG1wSW5kZXgoMCkpOworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAg
ICAgIGppdC5wcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAg
ICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRl
eCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5p
cXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAgc2lk
ZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworCisg
ICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdU
Rk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBD
b2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmln
aW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewor
ICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2Fs
bEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0
ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdp
bi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAg
ICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2gg
YnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQog
ICAgIC8vIGFscmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgt
LTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9yLT5t
X3ZhbHVlcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpOworCisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGlj
X2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisgICAg
ICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19j
YXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5m
bzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpKSk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhp
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCA3
ZjdjZDM4MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3Li4xMDJjMWU2YTFiZDllYjNi
NDcxMzM3NDRmODQzZWM2NGQ2M2ExOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3BlcmF0aW9ucy5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2Jq
ZWN0KgogICAgICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVy
Zmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2Nh
dGUgY2VsbHMgZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNl
dCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAg
IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1
dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVk
YjNhZDljZTVlOWNmLi5kNTdmYjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2NTUs
MzcgQEAgTFZhbHVlIE91dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdp
bigpLCB2YWx1ZSwgaW50NjRaZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1
ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0Ojpz
ZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQcmVk
aWN0YWJpbGl0eSBwcmVkaWN0YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkp
IHsKICAgICAgICAgaWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFr
ZW47CisgICAgICAgICAgICByZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmV0dXJuIG5vdFRha2VuOworICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBv
cmlnaW4oKSwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFiaWxp
dHkgPT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmln
aW4oKSwgdmFsdWUsIGxlZnQsIHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IG5ld0Jsb2NrKCk7CisgICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdCbG9j
aygpOworICAgIExCYXNpY0Jsb2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisKKyAg
ICBtX2Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6OkJy
YW5jaCwgb3JpZ2luKCksIHZhbHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRha2Vu
QmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExpa2Vs
eSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAg
ICAgIEZyZXF1ZW50ZWRCbG9jayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNl
bGVjdFByZWRpY3RhYmlsaXR5OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6
IEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0aW9u
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwgb3Jp
Z2luKCkpOworCisgICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVu
dGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5l
dzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAgICBy
aWdodFRha2VuQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBv
cmlnaW4oKSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1fYmxv
Y2sgPSBjb250aW51YXRpb247CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1dDo6
YXRvbWljWGNoZ0FkZChMVmFsdWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRo
IHdpZHRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRlZjdl
MDYwZjkzNjJiM2JkY2EwZmQ0NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2Mjdk
NWZmMzFjNzgxMGQ4ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1
ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1
ZXMuaCIKKyNpbmNsdWRlICJGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZU
TFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVk
UG9pbnRlci5oIgpAQCAtMzY1LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElz
WmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5k
KHZhbHVlLCBtYXNrKSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQog
Ci0gICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5v
dFRha2VuKTsKKyAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBM
VmFsdWUgbm90VGFrZW4sIFNlbGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFiaWxp
dHk6Ok5vdFByZWRpY3RhYmxlKTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9t
aWNzIGJ5IGRlZmF1bHQuIFVzZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNl
ZEFjY2VzcygpIHdpdGggYQogICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9j
c3QgZmVuY2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxl
Y3RQcmVkaWN0YWJpbGl0eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQ
cmVkaWN0YWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2MDJhY2ZmZTQwNDQ1NTUxMDBlYjQ1ZDhmNmEw
MzA5ZjM1ODExZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNlbGVj
dFByZWRpY3RhYmlsaXR5IDogdWludDhfdCB7CisgICAgLy8gVXNlIHRoaXMgd2hlbiB3ZSBleHBl
Y3QgaXQgdG8gYmUgdmVyeSB1bmxpa2VseSB0aGUgYnJhbmNoIHByZWRpY3RvciB3aWxsIGJlIGFi
bGUgdG8gZ3Vlc3Mgd2hpY2ggc2lkZSBvZiB0aGUgc2VsZWN0IHdpbGwgYmUgY2hvc2VuLiBUaGlz
IHRlbGxzIEIzIHRvIHRyeSB0byBlbWl0IHRoZSBzZWxlY3QgYXMgYSBjb25kaXRpb25hbCBtb3Zl
LCB3aGljaCAodXN1YWxseSkgaXMgbm90IHNwZWN1bGF0ZWQgYnkgdGhlIENQVS4KKyAgICBOb3RQ
cmVkaWN0YWJsZSwKKyAgICAvLyBVc2UgdGhpcyB3aGVuIGl0J3MgcG9zc2libGUgYSBicmFuY2gg
cHJlZGljdG9yIHdpbGwgZG8gYSBnb29kIGpvYiBndWVzc2luZyB0aGUgc2VsZWN0ZWQgdmFsdWUg
YnV0IHdlIGRvbid0IGtub3cgYSBwcmlvcmkgd2hpY2ggc2lkZSBpcyBtb3JlIGxpa2VseS4KKyAg
ICBQcmVkaWN0YWJsZSwKKyAgICAvLyBVc2UgdGhlc2Ugd2hlbiB3ZSBhcmUgdmVyeSBzdXJlIG9u
ZSBvZiB0aGUgdHdvIHNpZGVzIGlzIHN1YnN0YW50aWFsbHkgbW9yZSBsaWtlbHkgdGhhbiB0aGUg
b3RoZXIuCisgICAgTGVmdExpa2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IGZlMmE0ZWM3MjZjZWNlZDM0
MTMwOTM5OTQ5NGVhOWViN2U2YjRiNWYuLjcwZDI4OGUwM2YxZDhkODFmMjc3ZjZiODIxN2FjOWYz
ZmE4MGMxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwu
aApAQCAtMTAwLDcgKzEwMCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlm
IChjYWxsU2l0ZUluZGV4KSB7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICB9
CiAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0
aW9uVGFyZ2V0LCBmdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTZhNWY1Mjc3ZGQ2MzFhY2Q0Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAgLTAs
MCArMSw2NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3Mg
Q2hlY2twb2ludAorICAgIGF0dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRlZnMK
KyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAgZGVm
IGluaXRpYWxpemUobmFtZSwgaW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAaW5kZXggPSBpbmRleAorICAgICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAs
IHVzZURlZil8IHVzZURlZiA9PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRlciB7
IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBkZWYg
bGl2ZW5lc3MobmFtZXNwYWNlKQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNwYWNl
fTo6I3tuYW1lfToKK0VPRgorICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisgICAg
ZGVmIGluaXRpYWxpemUob3Bjb2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9wY29k
ZSA9IG9wY29kZQorICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0g
Y2hlY2twb2ludHMubWFwX3dpdGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hlY2tw
b2ludC5uZXcobmFtZSwgaW5kZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVz
cworICAgICAgICBAY2hlY2twb2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAgICBl
bmQKKyAgICAgICAgRU9GPC0tCitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ije0Bv
cGNvZGUuY2FwaXRhbGl6ZWRfbmFtZX0odWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3aXRj
aCAoY2hlY2twb2ludCkgeworCisgICAgfQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5kZXggZGFiODY4NmNhMzNhMTAyYzli
ZmExZGYxODAzZWJiNGYwYWIyNDQ4NS4uY2ZkOWRmMTUxMTQ3YTg2ZGE0YmM3NWJlNDZhNjc4MjVl
MjUzNzVmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNv
ZGUucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAg
LTMwLDYgKzMwLDcgQEAgY2xhc3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAgICBh
dHRyX3JlYWRlciA6bWV0YWRhdGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0cl9y
ZWFkZXIgOmNoZWNrcG9pbnRzCiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cgPSAi
T3Bjb2RlU2l6ZTo6TmFycm93IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQogICAg
ICAgICB0aWQKICAgICBlbmQKIAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4
dHJhcywgYXJncywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYgaW5p
dGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9p
bml0aWFsaXplcnMsIHRtcHMsIGNoZWNrcG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNlY3Rp
b24KICAgICAgICAgQG5hbWUgPSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwge30K
ICAgICAgICAgQG1ldGFkYXRhID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0
aWFsaXplcnMKICAgICAgICAgQGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdfbmFt
ZSwgdHlwZSksIGluZGV4fCBBcmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4ICsgMSB9
IHVubGVzcyBhcmdzLm5pbD8KKyAgICAgICAgQHRtcHMgPSB0bXBzCisgICAgICAgIEBjaGVja3Bv
aW50cyA9IGNoZWNrcG9pbnRzLm1hcCB7IHwoY2hlY2twb2ludCwgXyl8IGNoZWNrcG9pbnQgfSB1
bmxlc3MgY2hlY2twb2ludHMubmlsPwogICAgIGVuZAogCiAgICAgZGVmIGNyZWF0ZV9pZCEKQEAg
LTExOCw2ICsxMjEsOCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgPDwtRU9GCiBzdHJ1Y3QgI3tj
YXBpdGFsaXplZF9uYW1lfSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7CiAgICAgI3tvcGNvZGVJRH0K
KyAgICAje3RlbXBzfQorICAgICN7Y2hlY2twb2ludFZhbHVlc30KIAogI3tlbWl0dGVyfQogI3tk
dW1wZXJ9CkBAIC0xMzIsNiArMTM3LDE4IEBAIEVPRgogICAgICAgICAic3RhdGljIGNvbnN0ZXhw
ciAje29wY29kZUlEVHlwZX0gb3Bjb2RlSUQgPSAje25hbWV9OyIKICAgICBlbmQKIAorICAgIGRl
ZiBjaGVja3BvaW50VmFsdWVzCisgICAgICAgIHJldHVybiBpZiBAY2hlY2twb2ludHMubmlsPwor
CisgICAgICAgIFsiZW51bSBDaGVja3BvaW50cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChjaGVja3Bv
aW50cy5tYXB7IHxjaGVja3BvaW50fCAiICAgICAgICAje2NoZWNrcG9pbnR9LCIgfSkuY29uY2F0
KFsiICAgICAgICBudW1iZXJPZkNoZWNrcG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4iKQor
ICAgIGVuZAorCisgICAgZGVmIHRlbXBzCisgICAgICAgIHJldHVybiBpZiBAdG1wcy5uaWw/CisK
KyAgICAgICAgWyJlbnVtIFRtcHMgOiB1aW50OF90IHsiXS5jb25jYXQoQHRtcHMubWFwIHt8KHRt
cCwgdHlwZSl8ICIgICAgICAgICN7dG1wfSwifSkucHVzaCgiICAgIH07Iikuam9pbigiXG4iKQor
ICAgIGVuZAorCiAgICAgZGVmIGVtaXR0ZXIKICAgICAgICAgb3Bfd2lkZTE2ID0gQXJndW1lbnQu
bmV3KHdpZGUxNiwgb3Bjb2RlSURUeXBlLCAwKQogICAgICAgICBvcF93aWRlMzIgPSBBcmd1bWVu
dC5uZXcod2lkZTMyLCBvcGNvZGVJRFR5cGUsIDApCkBAIC0yMDAsNiArMjE3LDcgQEAgcHJpdmF0
ZToKICAgICB0ZW1wbGF0ZTxPcGNvZGVTaXplIF9fc2l6ZSwgYm9vbCByZWNvcmRPcGNvZGUsIHR5
cGVuYW1lIEJ5dGVjb2RlR2VuZXJhdG9yPgogICAgIHN0YXRpYyBib29sIGVtaXRJbXBsKEJ5dGVj
b2RlR2VuZXJhdG9yKiBnZW4je3R5cGVkX2FyZ3N9I3ttZXRhZGF0YV9wYXJhbX0pCiAgICAgewor
ICAgICAgICAjeyFAY2hlY2twb2ludHMubmlsPyA/ICJnZW4tPnNldFVzZXNDaGVja3BvaW50cygp
OyIgOiAiIn0KICAgICAgICAgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMTYpCiAgICAg
ICAgICAgICBnZW4tPmFsaWduV2lkZU9wY29kZTE2KCk7CiAgICAgICAgIGVsc2UgaWYgKF9fc2l6
ZSA9PSBPcGNvZGVTaXplOjpXaWRlMzIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L1NlY3Rpb24ucmIKaW5kZXggMjA0YWM3NTllMTNlZmYxNTFmOGNkMTc3ZjNiZjFiNzBlMDc3OWNh
YS4uNjY4NTViYTY1MDA4MGU0YzIzY2MwZWJlYzEwZTc5NDljZGU3NjhiOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtNDMsNyArNDMsNyBAQCBjbGFz
cyBTZWN0aW9uCiAgIGVuZAogCiAgIGRlZiBjcmVhdGVfb3Bjb2RlKG5hbWUsIGNvbmZpZykKLSAg
ICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmlnWzpleHRyYXNdLCBjb25maWdbOmFyZ3Nd
LCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRhZGF0YV9pbml0aWFsaXplcnNdKQorICAg
ICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10s
IGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10sIGNvbmZp
Z1s6dG1wc10sIGNvbmZpZ1s6Y2hlY2twb2ludHNdKQogICBlbmQKIAogICBkZWYgYWRkX29wY29k
ZV9ncm91cChuYW1lLCBvcGNvZGVzLCBjb25maWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCmluZGV4IGU3ZDM5NThiY2E5ZjhmOWJjOGZhN2Q2MTUxMzNkZTExYzg0ZTVhMDguLjhlNDk4
MjM2ODYzZTY1MjgyNGUyYzFjNjAxODRhZDQ1N2Q3YjVhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCkBAIC03MDQsNiArNzA0LDcgQEAgdm9pZCBIZWFwOjphc3NlcnRNYXJrU3Rh
Y2tzRW1wdHkoKQogdm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3Rz
JiByb290cykKIHsKICAgICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJDb25zZXJ2YXRpdmVSb290
cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJl
YWRTdGF0ZSwgbV9jdXJyZW50VGhyZWFkKTsKKyAgICBtX3ZtLnNjYW5TaWRlU3RhdGUocm9vdHMp
OwogfQogCiB2b2lkIEhlYXA6OmdhdGhlckpTU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYg
cm9vdHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwCmluZGV4IDFhNGRlM2Y5MzYyOTBlNjJmNjM4OWVmNWZmYTA3Zjg5NzM2Y2U1NTguLmI3ZWYy
NTk4NDM2M2QzYmI5YmY1MGRkMGFkMTM2ZWZlMjUwOTlmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC05MCwyMiArOTAsMjIgQEAg
Ym9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiAK
IHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJl
dHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzXS50YWco
KTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKV0udGFnKCk7CiB9CiAKIFNVUFBSRVNTX0FTQU4gdW5zaWdu
ZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnVuc2Fm
ZVRhZygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpXS51bnNhZmVUYWcoKTsKIH0KIAogQ2FsbFNpdGVJ
bmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVy
biBDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyhjYWxsU2l0ZUFzUmF3Qml0cygpKTsKIH0KIAogU1VQ
UFJFU1NfQVNBTiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVD
YWxsU2l0ZUFzUmF3Qml0cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXg6OmZyb21CaXRz
KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
QEAgLTExNiw4ICsxMTYsOCBAQCBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50
VlBDKCkgY29uc3QKIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1
Y3Rpb24qIHZwYykKIHsKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKEJ5dGVjb2RlSW5kZXgo
Yml0d2lzZV9jYXN0PHVpbnQzMl90Pih2cGMpKSk7Ci0gICAgdGhpc1tDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CisgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSgqdnBjKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4o
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpXS50YWcoKSA9IGNhbGxT
aXRlLmJpdHMoKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVj
b2RlT2Zmc2V0KCkgY29uc3QKQEAgLTEzNyw3ICsxMzcsOCBAQCBjb25zdCBJbnN0cnVjdGlvbiog
Q2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50
VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZShjb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW0NhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzXS50YWcoKSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KGNhbGxTaXRlLmJpdHMoKSk7CisgICAgdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0udGFnKCkgPSBjYWxsU2l0ZS5iaXRz
KCk7CisgICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMpOwogfQogCiB1bnNpZ25lZCBDYWxs
RnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdApAQCAtMTY2LDcgKzE2
Nyw3IEBAIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1lOjpieXRlY29kZUluZGV4KCkKICAgICB9CiAj
ZW5kaWYKICAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAg
cmV0dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAg
ICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKTsKIH0KIAogQ29kZU9yaWdp
biBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTgwLDcgKzE4MSw3IEBAIENvZGVPcmlnaW4g
Q2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb2Rl
T3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICByZXR1cm4gQ29kZU9yaWdpbihCeXRl
Y29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgIHJldHVybiBD
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCkpOwogfQogCiBSZWdpc3Rl
ciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDhhYmRkYjgxMDZiNDFiMWFlMDNkNzU3
NmE4MDFkN2JmOTFmMjE2YzguLjRhODNiN2ZmYThjYjA4OGM2OTJiZDU4ZTFiM2UxOWFhYTMyNTQz
OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKICNpbmNsdWRlICJW
TS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKKyNpbmNsdWRlIDx3dGYvRW51bUNsYXNz
T3BlcmF0b3JPdmVybG9hZHMuaD4KIAogbmFtZXNwYWNlIEpTQyAgewogCkBAIC00NSwxOSArNDYs
MzIgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRl
eCgpID0gZGVmYXVsdDsKICAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgZXhw
bGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBtX2Jp
dHMoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkKKyAgICAgICAgeyAKKyAgICAgICAgICAgIEFTU0VS
VCghYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworICAgICAgICB9CisjZWxzZQorICAgICAg
ICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KGNvbnN0IEluc3RydWN0aW9uJiBpbnN0cnVjdGlvbikK
KyAgICAgICAgICAgIDogbV9iaXRzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KCZpbnN0cnVj
dGlvbikpCiAgICAgICAgIHsgfQorI2VuZGlmCiAKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OyB9Ci0gICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9i
eXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBt
X2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAgICAgdWludDMyX3QgYml0cygpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQorICAgICAgICB1aW50MzJfdCBi
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisgICAgICAgIHN0YXRpYyBDYWxsU2l0ZUlu
ZGV4IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpIHsgcmV0dXJuIENhbGxTaXRlSW5kZXgoYml0cyk7
IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRzKCkpOyB9CiAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKKyAgICAgICAgICAgIDog
bV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQogICAgIHByaXZhdGU6Ci0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBCeXRlY29k
ZUluZGV4KCkub2Zmc2V0KCkgfTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC02NSw3ICs3OSw3IEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7
CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0
cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4Ojpmcm9tQml0cyhi
aXRzKSkKKyAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChiaXRzKQogICAgICAgICB7CiAgICAg
ICAgIH0KIApAQCAtNzgsMjQgKzkyLDI3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02
NF8zMiBleHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAog
ICAgIHN0cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rl
cikgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikg
Y29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVyblBDOworICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVy
KSB2b2lkKiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVn
aXN0ZXJzID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAg
IH07CiAgICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMg
PT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZy
YW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAKLSAgICBzdHJ1Y3Qg
Q2FsbEZyYW1lU2xvdCB7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNvZGVCbG9jayA9
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgY2FsbGVlID0gY29kZUJsb2NrICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUgKyAxOwotICAgICAgICBz
dGF0aWMgY29uc3RleHByIGludCB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyArIDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0
aGlzQXJndW1lbnQgKyAxOworICAgIGVudW0gY2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7Cisg
ICAgICAgIGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKKyAg
ICAgICAgY2FsbGVlID0gY29kZUJsb2NrICsgMSwKKyAgICAgICAgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBjYWxsZWUgKyAxLAorICAgICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyArIDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1l
bnQgKyAxLAogICAgIH07CiAKKyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9D
TEFTU19XSVRIX0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FEX1JFTEFUSU9O
QUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3Qp
CisKICAgICAvLyBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRp
b24uCiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9u
cy4KICAgICBjbGFzcyBDYWxsRnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgMTsKKyAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50
PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgKyAxOwogCiAgICAg
ICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lm
aWMgY2lyY3Vtc3RhbmNlcwogICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBj
YWxsZWUgY2FuJ3QgYmUgYSBXYXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMjMsMTAg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFu
ZCBpZiBpdCdzIG5vdCwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNW
YWx1ZSBndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNP
YmplY3QqIGpzQ2FsbGVlKCkgY29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29u
c3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRl
cigpKTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNh
blVuc2FmZVBvaW50ZXIoKSk7IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7
IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpXS5wb2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1
bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBh
ZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2Nr
Kio+KHRoaXMgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9j
ayoqIGFkZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2Rl
QmxvY2sqKj4odGhpcyArIHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSk7IH0KICAgICAgICAgaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2Rl
QmxvY2soKSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJl
Z2lzdGVyT2Zmc2V0KSBjb25zdDsKIApAQCAtMTgyLDE1ICsxOTksMTMgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICBzdGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVn
Z2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAg
ICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQg
ZnJvbSB0aGUgQ29kZUJsb2NrKS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAg
UmVnaXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVy
IGZvciBhIG5vbi1jb25zdGFudAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOwor
ICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAg
ICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8g
QWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMg
bWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1l
bnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAx
OyB9Ci0gICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsg
cmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnBh
eWxvYWQoKTsgfQorICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBj
b25zdCB7IHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBh
cmd1bWVudE9mZnNldChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJz
dEFyZ3VtZW50ICsgYXJndW1lbnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZz
ZXRJbmNsdWRpbmdUaGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGFyZ3VtZW50KTsgfQogCkBAIC0yMzksNyArMjU0LDcgQEAgbmFtZXNwYWNl
IEpTQyAgewogCiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFy
Z3VtZW50KTsKIAotICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9m
ZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsg
fQogCiAgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQogICAgICAgICBib29sIGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29u
c3QKQEAgLTI1MSwxMCArMjY2LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBp
c1N0YWNrT3ZlcmZsb3dGcmFtZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkg
Y29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQg
Y291bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpc10ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAgICAgICAgdm9p
ZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8
UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKV0ucGF5bG9hZCgpID0gY291bnQ7IH0KICAgICAgICAgaW5saW5l
IHZvaWQgc2V0Q2FsbGVlKEpTT2JqZWN0Kik7CiAgICAgICAgIGlubGluZSB2b2lkIHNldENvZGVC
bG9jayhDb2RlQmxvY2sqKTsKLSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkg
eyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IElu
c3RydWN0aW9uKj4odmFsdWUpOyB9CisgICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9pZCogdmFs
dWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gdmFsdWU7IH0KIAogICAgICAgICBT
dHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKaW5kZXggYTk3ZGVjYTUzYmNl
MTc5Mjg5YjBjMzgwZDA0ZThmMmE4NjA0NzdkMS4uZWU3ZWMyYWIxMDRhN2EzNGQ5OGIwZjQzOGY2
NDRjMmRjYTFjNTE2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCkBAIC0zMiw1MCArMzIsMzkgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBpbmRleCkKLXsKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAgIGlmIChjb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihp
bmRleCkpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKLX0KLQogaW5saW5lIFJlZ2lzdGVyJiBD
YWxsRnJhbWU6OnIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gcihyZWcub2Zm
c2V0KCkpOwotfQotCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihpbnQg
aW5kZXgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOworICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKQorICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmdGhpcy0+
Y29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIocmVnKSk7CisgICAgcmV0dXJuIHRoaXNbcmVn
Lm9mZnNldCgpXTsKIH0KIAogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIo
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0
KCkpOworICAgIEFTU0VSVCghcmVnLmlzQ29uc3RhbnQoKSk7CisgICAgcmV0dXJuIHRoaXNbcmVn
Lm9mZnNldCgpXTsKIH0KIAogaW5saW5lIEpTVmFsdWUgQ2FsbEZyYW1lOjpndWFyYW50ZWVkSlNW
YWx1ZUNhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0g
ICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7CisgICAgcmV0
dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5qc1ZhbHVl
KCk7CiB9CiAKIGlubGluZSBKU09iamVjdCogQ2FsbEZyYW1lOjpqc0NhbGxlZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlXS5vYmplY3QoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxp
bnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLm9iamVjdCgpOwogfQogCiBpbmxpbmUgQ29kZUJs
b2NrKiBDYWxsRnJhbWU6OmNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CisgICAgcmV0dXJu
IHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rl
cjo6Y29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBTVVBQUkVTU19BU0FOIENvZGVCbG9jayogQ2Fs
bEZyYW1lOjp1bnNhZmVDb2RlQmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKKyAg
ICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayld
LlJlZ2lzdGVyOjphc2FuVW5zYWZlQ29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBKU0dsb2JhbE9i
amVjdCogQ2FsbEZyYW1lOjpsZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkgY29uc3QKQEAgLTEw
MiwxMiArOTEsMTIgQEAgaW5saW5lIGJvb2wgQ2FsbEZyYW1lOjppc1dhc21GcmFtZSgpIGNvbnN0
CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q2FsbGVlKEpTT2JqZWN0KiBjYWxsZWUpCiB7
Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVd
ID0gY2FsbGVlOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGNhbGxlZTsKIH0KIAogaW5saW5lIHZvaWQg
Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdID0gY29k
ZUJsb2NrOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50
PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXSA9IGNvZGVCbG9jazsKIH0KIAogaW5saW5lIHZv
aWQgQ2FsbEZyYW1lOjpzZXRTY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCwgSlNTY29wZSog
c2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiN2RiNzU5NzQ1
YTMwNTE0ZTA5M2ZiMjYzYzRmYWJiNTQyYzBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleDsKKyAgICBKU1ZhbHVlIHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdOworfTsK
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKaW5kZXggZGFhOTRjODlmOTAwNWE5OTcyZmMwZTNiMDJlYjg5M2QyMTFjZGQ5Ny4uOGVm
MWMzZDg1MGMyYzhhMDE1NDZmMmM4YTlkZWIzZDg1NDdhNWIzNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5o
IgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5o
IgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpTVmFs
dWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
OwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1lLT5j
YWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxl
ckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNl
dCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0g
Y2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkp
LlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxpbmtl
ZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAg
IGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5p
c0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0
aW9uQ29udGV4dCgpOwpAQCAtMjEzLDYgKzIxNCw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3Mo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90
CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAgIGlm
IChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFyZ09m
ZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UKQEAg
LTI0OSw3ICsyNTMsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBsZW5n
dGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2b2lk
IGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90
IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwgIWxl
bmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDMxICsyNjUsMzEgQEAgdm9pZCBsb2FkVmFy
YXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
VmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0
QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8
RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nh
c3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAg
ICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwp
LT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5
Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3Qs
IG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAg
ICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmpl
Y3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8
SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganNDYXN0
PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVs
ZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAm
JiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAgICAg
ICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhR
dWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IG9i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xv
YmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVz
dCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFsdWU7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk3LDggKzMwMSw3IEBA
IHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAgICAg
IGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFtZU9m
ZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7
CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhs
ZW5ndGggKyAxKTsKQEAgLTUzOCw4ICs1NDEsMTMgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVC
bG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51bGxw
dHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAobV9j
b2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9pbnRz
LgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuUEMgPT0gTExJ
bnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpKQorICAgICAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT52bSgpLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKG1fY2FsbEZy
YW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKICAgICAg
ICAgICAgICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBtX2Nv
ZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpE
b25lOwpAQCAtNTYxLDYgKzU2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNob3VsZFN0b3BV
bndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCisgICAg
ICAgIG1fcmV0dXJuUEMgPSBtX2NhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAgICAg
ICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICB9CiAKQEAgLTU5Nyw2ICs2MDYs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayom
IG1fY29kZUJsb2NrOwogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIG11dGFibGUg
Y29uc3Qgdm9pZCogbV9yZXR1cm5QQyB7IG51bGxwdHIgfTsKIH07CiAKIE5FVkVSX0lOTElORSBI
YW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxG
cmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCkBAIC04NjYsNyArODc2LDcgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KgogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBn
bG9iYWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgp
KSkKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNp
emUoKSA+IG1heEFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAgaWYg
KGlzSlNDYWxsKSB7CkBAIC05MzUsNyArOTQ1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpl
eGVjdXRlQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU08K
ICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICBpZiAo
VU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNpemUoKSA+IG1heEFy
Z3VtZW50cykpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA4NmMzMjQ2
OTIwNGU5YWU1OTExZmVjZWE5MDJhZTk3Y2FiNTVkM2EwLi5mZjFiNGU4NjEwNGM5NjI1OTc3OWUy
NTI3OTIyYWYzMzQ3Y2YyOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4QXJndW1lbnRzID0gMHgxMDAwMDsKICAg
ICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiwgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVp
bnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JGb3J3
YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVk0mLCB1bnNpZ25lZCBu
dW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CisgICAg
dm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERl
c3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAg
ICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhl
Y0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMy
X3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZh
cmFyZ3NGcmFtZUFuZFNldFRoaXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxs
ZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJn
dW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAg
ICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwCmluZGV4IGQ3MWE1OTcxZGRjOGYwZjVlYTY3OGQ1ZmNlNDhlMzk2ZTIyYTg3NTQuLjc1ZGRk
MjAzZjczYmUwNTc2ZDZkZDc0OGI2NWNiYWE5YWJiZmM3MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMDgsNyArMjA4
LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFt
ZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGlu
ZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBtX2ZyYW1lLm1f
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1lLm1f
Y29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDM0ZDkwYzhh
MWFjZDhlYWMyZmZiNmUwZTZiZjlkYWEyOGRlNTFlMzEuLjI0Mjc3YmQyMDBmMDIxZjNhYjA3ODIw
NTI1Y2E3OGU4ZGVlZjQzNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaApAQCAtNjQ3LDI4ICs2NDcsMjggQEAgcHVibGljOgogICAgIH0KICNlbmRpZgog
Ci0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIEdQUlJl
ZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lk
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BS
UmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHRvKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9Ci0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlcjMyKGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihW
aXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVu
dHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoZnJv
bSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChpbnQg
ZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVhbFJlZ2lzdGVy
IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpCiAgICAgewotICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgaW50
IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3Rlcikp
KTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCi0gICAg
dm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkKKyAg
ICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lz
dGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSks
IEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8pCkBAIC02OTYsMTkgKzY5NiwxOSBAQCBwdWJsaWM6CiAg
ICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlci4gT24gc29tZSBwbGF0Zm9ybXMsIHRoZSBjYWxs
ZWUgaXMgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgdGhlCiAgICAgLy8gImxpbmsgcmVnaXN0ZXIi
IGNvbnRhaW5pbmcgdGhlIHJldHVybiBhZGRyZXNzIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4K
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVm
b3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJv
bSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJE
ZWx0YSgpKSk7CiAgICAgfQogI2Vsc2UKLSAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJh
bWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQg
ZW1pdFB1dFBheWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9t
LCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihmcm9tLCBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Cisg
ICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5
Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHBy
b2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRU
YWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKFRydXN0ZWRJbW0zMiB0YWcsIGludCBl
bnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUYWdUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3Vl
KFRydXN0ZWRJbW0zMiB0YWcsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAg
IHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50
ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7CisgICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAg
CkBAIC0xMTQ4LDkgKzExNDgsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJl
Z2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAg
ICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFu
ZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBh
ZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHN0YXRp
YyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcg
YmFzZUdQUikKQEAgLTExNjMsOSArMTE2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh2
aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikgKyBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3Io
aW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAg
cmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIs
IEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE3OCwzMCArMTE4MCwzMSBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFk
ZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2Fk
Rm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVl
IENhbGxGcmFtZS4KLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3Qp
CisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycykpOworICAgICAgICBBU1NFUlQoc2xvdC5vZmZzZXQoKSA+PSBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6
ZUluUmVnaXN0ZXJzKS5vZmZzZXQoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBm
aXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50
U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CisgICAgICAg
IHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50
IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZpcnR1YWxSZWdp
c3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53
aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVl
RnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFt
ZVBheWxvYWRTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0K
QEAgLTEyMTgsNyArMTIyMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xv
dCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CisgICAgICAg
IHJldHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJlZ2lzdGVyKDApKS53aXRoT2Zmc2V0KENh
bGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEdQUlJl
ZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ2lzdGVyU2V0IHByZXNlcnZlZCkKQEAgLTE1MjcsNyArMTUz
MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lIHx8
IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSkKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgcmV0dXJuIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICByZXR1cm4gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCmluZGV4IGJmNDNkN2I4M2I5
YTk5MDllODUyMjU5YzMwOGIwODgzNmQ3OWY3MzcuLmEyZWE0NjI2ZWNhM2ZhNTA0NGZlZGYzNDll
MmU1MjUzNmU5YTVhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXIuY3BwCkBAIC02MSw3ICs2MSw3IEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxs
RnJhbWVTaHVmZmxlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURh
CiAjZW5kaWYKIAogICAgIEFTU0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRh
LmNhbGxlZS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwotICAgIGFkZE5ldyhWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgZGF0YS5jYWxsZWUpOworICAgIGFkZE5l
dyhDYWxsRnJhbWVTbG90OjpjYWxsZWUsIGRhdGEuY2FsbGVlKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZGF0YS5hcmdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVCghZGF0
YS5hcmdzW2ldLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5hcmdzW2ldLnZpcnR1YWxSZWdpc3Rlcigp
LmlzTG9jYWwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmgKaW5kZXggNjI0MzliZGYzNDQzYjg3YmU5OTk2MDJmZDljM2ViYzk2YWY2YTlmNS4uNGM2
YWEzMmY0ZjU4NzYzODMxMDkzOGYwMGY5MmMwOTk4ZDY2Zjk0MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaApAQCAtMTI4LDcgKzEyOCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKICAgICAgICAgQVNT
RVJUKCFnZXROZXcoanNWYWx1ZVJlZ3MpKTsKLSAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hl
ZFJlY292ZXJ5IHsgZ2V0TmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSB9OworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSB9OwogICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkpOwog
ICAgICAgICBhZGROZXcoanNWYWx1ZVJlZ3MsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsK
ICAgICB9CkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXNzdW1lQ2FsbGVl
SXNDZWxsKCkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgQ2FjaGVkUmVj
b3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNo
ZWRSZWNvdmVyeSA9ICpnZXROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgc3dp
dGNoIChjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgIGNhc2UgSW5QYWlyOgogICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAppbmRleCAyODAzMmEyMWFhY2I5YTJkOTMyMjg1ZmUxZjk2NWFkZTNlMjdhODBh
Li44NzMxNWVmODQ3N2FjMTJhNzNjNTcwYWVmOTEyNTBjNTY5YTRmMTRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKQEAgLTMzMSwxNiArMzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVP
cFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEs
IE5FcSB9OwogICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwotICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOworICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAotICAg
ICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsK
LSAgICAgICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVy
SUQgdmFsdWUpOworICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3Rlciwg
RlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZEludDMyVG9Eb3VibGUo
VmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCiAgICAgICAgIGVudW0gV3Jp
dGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJh
c2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKICAgICAg
ICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9yZSBhbnkg
c2NyYXRjaCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUgc2FtZSBh
cyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
KTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVk
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVy
KFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMg
dGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBh
dmFpbGFibGUgZm9yCkBAIC00MDQsMzIgKzQwNCwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsK
IAotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJl
Z3MgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpT
VmFsdWVSZWdzIHNyYyk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKIAot
ICAgICAgICBpbnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAg
ZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgaW50MzJf
dCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CisgICAgICAgIGRv
dWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CiAKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChp
bnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CisgICAgICAgIGJv
b2wgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsKIAotICAgICAgICB2b2lkIGVt
aXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRM
b2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQg
ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZv
aWQgZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsK
IAogICAgICAgICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRleCwg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdp
c3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQg
dGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CisgICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklE
IGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJ
RCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMy
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNl
KTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0g
ZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0
b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQg
ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0
ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUlu
dDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQz
MiA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIs
IFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAg
ICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBib29sIGluZGV4SXNDZWxsID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2wo
VmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBm
YWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBS
ZWdpc3RlcklEIHZhbHVlKTsKIAotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFn
KTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyKTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CiAKICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhv
dFBhdGgoY29uc3QgSWRlbnRpZmllciopOwogCkBAIC00MzgsMTcgKzQzOCwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rp
b24gKiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJ
bnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0
ZXJzID0gdHJ1ZSk7CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAgICAgICAg
IHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl
cklEIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEs
IFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZv
aWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVy
SUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSBy
ZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
Q2VsbChpbnQgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpT
VmFsdWUzMl82NCAqLyA9IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbWl0
U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICAg
ICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsK
ICAgICAgICAgfQpAQCAtNDU2LDI5ICs0NDksMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEp1bXAgZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lz
dGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklE
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7
Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGlu
dCBWUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50KFJl
Z2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAgICAgICAgIFBhdGNo
YWJsZUp1bXAgZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVtYmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklE
IHNjcmF0Y2gpOwogCi0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNl
VlJlZywgY29uc3QgSWRlbnRpZmllciopOworICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90
UGF0aChWaXJ0dWFsUmVnaXN0ZXIgYmFzZVJlZywgY29uc3QgSWRlbnRpZmllciopOwogCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVs
YXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
aW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwot
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBp
bnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgp
OwogCkBAIC02ODUsOCArNjc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUo
aW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25l
ZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNj
b3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2
ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2
b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJS
ZWcpOwpAQCAtNjk0LDIwICs2ODcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0
YWcsIEdQUlJlZyBwYXlsb2FkKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
SlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwogI2VuZGlmCi0g
ICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCk7CisgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNo
cG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJU
b1NldCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJh
bmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAg
ICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKGludCBkc3QpOworICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAotICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgICAgICBK
U1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudEludChpbnQgc3JjKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENo
YXIoaW50IHNyYyk7CisgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4K
ICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+Kiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9u
KTsKQEAgLTczNCw3ICs3MjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VS
VCghaXRlci0+ZnJvbS5pc1NldCgpKTsKICAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICB2b2lkIGxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29k
ZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAogICAgICAgICAgICAgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQpOwogCkBAIC03NTQsMTMgKzc0NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRo
UmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICNlbmRpZgog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4sIGludCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0
YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rp
b25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1
bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04MDQsNyArNzk3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVu
Y3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNh
bGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEs
IE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3Mu
Li4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAg
LTg2NCw3ICs4NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJV
RwotICAgICAgICB2b2lkIHByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXMoaW50IHNyYzEsIGludCBz
cmMyKTsKKyAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdp
c3RlciBzcmMxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
QU1QTElOR19GTEFHUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCmluZGV4IDM0NTg3NDRmYmNkZDUzYWNmOWE0MzMyOGJjNDk0YjBmZWRjYjg5M2YuLjNhMzJj
MzI2MTg5ZmFiMTk3ZDdjZjlmOTFkNWY2YjRiMzEwMjAyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVW5zaWduZWQ+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAt
MTcyLDEzICsxNzIsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGlu
dCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3Ay
LCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNv
ZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGlu
dCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQpAQCAtMjMwLDEzICsyMzAsMTMg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9
IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDApOwpAQCAtMjU2LDEzICsyNTYsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIGVt
aXRfY29tcGFyZVVuc2lnbmVkSW1wbChkc3QsIG9wMSwgb3AyLCBjb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGludCBv
cDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmVnVDApOwpAQCAtMjg0LDEzICsyODQsMTMgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRh
cmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwg
aXRlcik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKIAogICAgIC8v
IFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBz
bG93IHBhdGg6CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7
Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwKTsKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2RlYyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAgIGludCBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0g
Ynl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwg
cmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC00MTUsOSAr
NDE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE1vZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIg
PSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1h
a2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4K
ICAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtNDkxLDkgKzQ5MSw5
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogdm9p
ZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFByb2ZpbGluZ1BvbGljeSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTM4LDggKzUzOCw4IEBAIHZvaWQgSklUOjpl
bWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxpCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01OTksOSAr
NTk5LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRG
YXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yOjpTaGlmdFR5cGUgc25pcHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9m
ZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC02NzQsOCArNjc0LDggQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIE4KIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2Zp
bGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9m
aWxlZEZ1bmN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIC8v
IEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3Jj
IGFuZCBkc3QuCkBAIC03MjQsOSArNzI0LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE4KIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElD
LCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
IHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC03OTksNyArNzk5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwpAQCAtODQ1LDkgKzg0NSw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9m
ZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC05MDYsOSArOTA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEaXY+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwot
ICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0
ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggYzNmOGFhMGM3ZmFmNGVhZDQzNDY3
ZDU0MjcyNmFlOGFjOTI1ODdkZi4uOGRkNzk2ZmE5NTY0YWM1NDBhYzBhNTE0ZGNmZmQ4ZmFiM2Mx
MWJlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01MSw3ICs1MSw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNv
bnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYsNyArNjYsNyBAQCBK
SVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikK
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2Fy
Z3YpOwogCiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICAgICAgc3RvcmUzMihyZWdUMCwgbWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVBy
b2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKQEAgLTg1LDkgKzg1LDkgQEAg
c3RkOjplbmFibGVfaWZfdDwKICwgdm9pZD4KIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9
IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRl
Y29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBi
eXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Zh
bHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5
dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOyAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSB2aXJ0
dWFsIHJlZ2lzdGVyIGlmIHdlIG5ldmVyIHVzZSBpdCBhcyBvbmUuLi4KICAgICBpbnQgZmlyc3RW
YXJBcmdPZmZzZXQgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QxKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZAogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlE
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAg
ICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggYjdkMGNhMjM1
OGJlNTI1MDE4YTNmNGU5NjE2ZDljYjg0OGZmZjUyMS4uZTA3YTgzM2Q0Yzg1M2I5YzdhMDJkZThi
NzQ2MDFkZjMwNjZiYWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2Vw
dGlvbnMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKICAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2Fs
bEZyYW1lKSwgIiBmb3IgY29kZSBibG9jayAiLCBjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBD
UkFTSCgpOworICAgICAgICBXVEZCcmVha3BvaW50VHJhcCgpOwogICAgIH0KICAgICAKICAgICBp
ZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggZmNlOGJiNzQ3NjYzNzgzNzk4Yzk5NzU2ZThk
ZjdmODllMDliYjg1Yi4uOWMxMTczNDM0MGMzNjQ3MjFiMzU4Yjk1MTZmNjg3MDkzMzRjNWEwNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTQ4LDE5ICs0OCwyMCBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9y
QXJyYXlNb2RlKGNvbnN0IEluc3RydWN0aQogICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRE
b3VibGUoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
RG91YmxlKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0
Q29uc3RhbnRPcGVyYW5kKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpOworICAgIEFTU0VSVChzcmMuaXND
b25zdGFudCgpKTsKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKIHsKKyAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIoKSk7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0Zv
cihlbnRyeSkpOwogICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTQz
LDcgKzE0NCw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpCiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xNTUs
NyArMTU2LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRh
ZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24sIGludCBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRh
ZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwpAQCAtMTY3LDkgKzE2OCw5IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKHZSZWcpKQorICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUocmVn
KSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yODQsOSArMjg1LDkgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2FtcGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJs
b2NrKQogI2VuZGlmCiAjZW5kaWYKIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRDaGFyKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKQEAgLTM2
MywyNiArMzY0LDI2IEBAIGlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUo
QXJyYXlQcm9maWxlKiBwcm9maWxlKQogICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCi1B
TFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykK
K0FMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0lu
dDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25z
dGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5p
dFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgc3RvcmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklE
IHRhZykKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywg
UmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBt
b3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzkwLDkgKzM5MSw5IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKICAgICBsb2FkMzIodGFnRm9yKGlu
ZGV4KSwgdGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9h
ZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQpCiB7Ci0gICAgaWYgKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkgewogICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChp
bmRleCkucGF5bG9hZCgpKSwgcGF5bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
MDYsMTM2ICs0MDcsMTMzIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1
ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKICAgICBtb3ZlKEltbTMy
KHYudGFnKCkpLCB0YWcpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXQoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQogewog
ICAgIGVtaXRMb2FkKHNyYywgZHN0LnRhZ0dQUigpLCBkc3QucGF5bG9hZEdQUigpKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBK
U1ZhbHVlUmVncyBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVt
aXRTdG9yZShkc3QsIGZyb20udGFnR1BSKCksIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3Rl
cklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQo
VmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
UmVnaXN0ZXJJRCBiYXNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsK
IAogICAgIGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHBheWxvYWQgIT0gYmFzZSk7Ci0gICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwg
cGF5bG9hZCk7Ci0gICAgICAgIGVtaXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICBlbWl0
TG9hZFBheWxvYWQocmVnLCBwYXlsb2FkKTsKKyAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7
IGluZGV4IH07CiAgICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBi
YXNlCi0gICAgICAgIGxvYWQzMih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKLSAgICAgICAg
bG9hZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7CisgICAgICAgIGxvYWQz
Mih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVn
LCBiYXNlKSwgcGF5bG9hZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkMzIo
cGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIodGFnRm9yKHRh
cmdldCwgYmFzZSksIHRhZyk7CisgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5
bG9hZCk7CisgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVy
SUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXls
b2FkMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBS
ZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcy
LCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCiB7Ci0gICAgZW1pdExvYWQo
aW5kZXgyLCB0YWcyLCBwYXlsb2FkMik7Ci0gICAgZW1pdExvYWQoaW5kZXgxLCB0YWcxLCBwYXls
b2FkMSk7CisgICAgZW1pdExvYWQocmVnMiwgdGFnMiwgcGF5bG9hZDIpOworICAgIGVtaXRMb2Fk
KHJlZzEsIHRhZzEsIHBheWxvYWQxKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewot
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZElt
bVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRy
ZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChp
bmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29s
ID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgY2hhciogYnl0
ZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOwogICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2
YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IocmVnKSwgdmFs
dWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdp
c3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGFyZ2V0IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IodGFyZ2V0
LCBiYXNlKSk7Ci0gICAgc3RvcmUzMih0YWcsIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CisgICAgc3RvcmUzMih0YWcs
IHRhZ0ZvcihyZWcsIGJhc2UpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQz
MihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykp
OwogICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBi
b29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVh
bFJlZ2lzdGVyIHJlZywgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQog
ewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgp
KTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdG
b3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJv
b2wgaW5kZXhJc0NlbGwpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4
KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5k
ZXhJc0NlbGwpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVC
b29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7
CiAgICAgaWYgKCFpbmRleElzQm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcihp
bmRleCkpOworICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHJlZykpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3Rh
bnQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxS
ZWdpc3RlciByZWcsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKIHsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgaW5kZXggfTsKLSAgICBzdG9yZTMyKEltbTMy
KGNvbnN0YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSk7Ci0gICAgc3Rv
cmUzMihJbW0zMihjb25zdGFudC50YWcoKSksIHRhZ0Zvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBz
dG9yZTMyKEltbTMyKGNvbnN0YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7
CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC50YWcoKSksIHRhZ0ZvcihyZWcsIGJhc2UpKTsK
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZp
cnR1YWxSZWdpc3RlckluZGV4KQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4
KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVt
cElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHJlZykpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4
LCBSZWdpc3RlcklEIHRhZykKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewogICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVh
bFJlZ2lzdGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbCh0YWcpKTsKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAg
IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50
KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50
JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
aW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKICAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5h
c0ludDMyKCk7CkBAIC01NTUsMTEgKzU1MywxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdAog
I2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9t
IHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUlu
ZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAg
IGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlm
IChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7
CkBAIC01NzEsNDcgKzU2OSwzMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIGxvYWQ2NChhZGRyZXNz
Rm9yKHNyYyksIGRzdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVl
UmVncyBkc3QpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2Fk
R1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLm9mZnNldCgpLCBkc3QpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3Qx
LCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0
MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKIHsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxS
ZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoc3JjMS5vZmZzZXQoKSwgZHN0MSwgc3JjMi5vZmZzZXQoKSwgZHN0Mik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
c3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CisgICAgcmV0dXJuIHNy
Yy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3Qs
IFJlZ2lzdGVySUQgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0
b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9t
KQotewotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKLX0K
LQogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVn
aXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAg
ICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOwpAQCAtNjI5LDI4ICs2MTIsMjggQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWcpKTsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBp
bnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7CiAgICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJ
bW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRk
cmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQz
MlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklE
IHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW5kZXgpKSB7Ci0gICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChpbmRleCkpOwot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5k
ZXgpLmFzSW50MzIoKSksIHZhbHVlKTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAg
ICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQocmVnKSk7CisgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChyZWcpLmFzSW50MzIoKSksIHZh
bHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0Zv
cihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0Zv
cihyZWcpLCB2YWx1ZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJ
VDo6ZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDhlMzkxYzU2OWU2ZTFjNTcxNTA2NDA2
MDRiYmQxMTQ0NWE3MzUxNWEuLjI0ZDM4YjU4ZTI4NjEzMTU2ZTIzZGUxNzAwYWM4NmZiZDBjYTE0
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNTYsMTAg
KzU2LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTc3LDcg
Kzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFbmQ+KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAtMTEw
LDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVz
dWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywg
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNl
cyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9
CiB9CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRh
Lm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjksOSArMTI5LDkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0lu
c3RhbmNlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGlu
dCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOworICAgIFZpcnR1
YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVl
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7
CiAKQEAgLTE1NSw5ICsxNTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBwcm90byA9IGJ5dGVj
b2RlLm1fcHJvdG90eXBlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OworICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCiAg
ICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVj
dGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwg
c2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVz
ZSBpdCBmb3IgdGhlIHJlc3VsdC4KQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8UwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIApA
QCAtMjA0LDggKzIwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CkBAIC0yMTcs
OCArMjE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2Vs
bCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CkBAIC0yNDYsOCArMjQ2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCkBAIC0yNjEsOCArMjYxLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwpAQCAtMjc0LDggKzI3NCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNOdW1iZXI+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0yODYsOCArMjg2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNDZWxsV2l0aFR5cGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90
eXBlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpAQCAtMzA3
LDggKzMwNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CkBAIC0zNDMsOCArMzQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmlt
aXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNv
ZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2MCwx
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLm9mZnNldCgpLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUub2Zmc2V0KCksIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQs
IHJlZ1QwKTsKIAogICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUg
dmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAg
IC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZv
ciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgpAQCAtMzc3LDcgKzM3Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MCwxNCArMzkwLDE0IEBAIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAgICAgYWRkSnVtcChi
cmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsK
LSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwpAQCAtNDIxLDcgKzQyMSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
dW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmlu
ZWRPck51bGw+KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
QEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpudW5k
ZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CkBAIC00NzAsOCArNDcwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBKU1ZhbHVlIHNwZWNpYWxQ
b2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwog
ICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgIApAQCAtNDg1LDE4ICs0ODUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTEwLDI2ICs1MTAsMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVl
KTsKICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAg
ICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpA
QCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVH
UFIpOwogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CkBAIC01NDgs
OSArNTQ4LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKICAgICAKQEAgLTU5Miw4ICs1
OTIsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgaW50IHNy
YzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTY1MCw4
ICs2NTAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
bnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBp
bnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKQEAgLTY2
NCw4ICs2NjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBpbnQgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC02ODQsMjAgKzY4NCwy
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtNzI4LDEwICs3MjgsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0
b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhy
ZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2V4Y2VwdGlvbi5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwg
RXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZS5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIC8vIEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBk
b2luZyBPU1IgZW50cnksIGluY2x1ZGluZwpAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFs
dWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Cisg
ICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0
YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC03NDksNyArNzQ5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSkpOwpAQCAtNzY2LDEw
ICs3NjYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIGludCBjdXJy
ZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5t
X2RzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNo
SW1tPigpOwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4Owog
ICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBi
eXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAg
IFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7CiAgICAg
c2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVz
dGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRh
YmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKQEAgLTgxMSw3ICs4MTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7CiAgICAgc2l6ZV90IHRh
YmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9m
ZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRP
ZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1w
VGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
QEAgLTgzNCw4ICs4MzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTg2Nyw4ICs4NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVs
bD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNy
YzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC05MDMsNyAr
OTAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogICAg
IC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXpl
X3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwogICAgIGZvciAoc2l6ZV90IGogPSBD
b2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaikub2Zmc2V0KCkpOworICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxv
Y2spOwogCkBAIC05MTMsNyArOTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwg
cmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZT
Y29wZUNoYWluKCkpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAg
LTkyNCw3ICs5MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlE
ID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
VGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFy
cmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxs
ZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJh
cmVEYXRhUmVnID0gcmVnVDQ7CkBAIC05NjUsMTMgKzk2NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOwogfQogCkBAIC05ODUsNyArOTg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC05OTYsNyArOTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDI0LDEwICsxMDI0
LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0
YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3Rv
ciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3Rh
bmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgcmVnVDEpOwpAQCAtMTEwNCw4ICsxMTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGUKIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTExMTUsMTIgKzEx
MTUsMTIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlv
bkRlY2wpOwogCkBAIC0xMTYxLDExICsxMTYxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCks
IHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwog
I2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CkBAIC0xMjA3LDEwICsxMjA3
LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZXNJbmRleCA9IGJ5dGVjb2RlLm1fYXJndi5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUu
bV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
ICAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUp
OwogfQpAQCAtMTIxOSw4ICsxMjE5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNpemVJbmRl
eCA9IGJ5dGVjb2RlLm1fbGVuZ3RoLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNv
ZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNpemVJbmRleCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLApAQCAtMTIzNiw5ICsxMjM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwpAQCAtMTI4Miw5ICsxMjgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4
ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAg
ICAgCkBAIC0xMzMwLDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAog
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTEzNDksMTAgKzEzNDksMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNl
dCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2Vs
bAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM5MCw5ICsx
MzkwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9z
dHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0g
ICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJl
Z1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAg
LTE0MTQsOSArMTQxNCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
Lm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7CkBAIC0xNDQwLDcgKzE0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFR5cGVM
b2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247Ci0g
ICAgaW50IHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKQEAgLTE1MDksNyArMTUwOSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhp
cyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9
CiAKQEAgLTE1MjMsOCArMTUyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlz
VmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIApAQCAtMTU0NSw3ICsxNTQ1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2Nv
dW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6
OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CkBAIC0xNTU2LDcgKzE1NTYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9u
dW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwpAQCAtMTU4Niw3ICsxNTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEFyZ3VtZW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDApOwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFu
Y2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBs
b2FkVmFsdWUoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCks
IHJlc3VsdFJlZ3MpOworICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXgg
YWU1YjZhZDU0Y2E4MTM2ZWNhYzFiNjQxMWM5NTczNDMwZTVjMWY3YS4uYzQ2Mzc5YTlmOWVjY2Fl
NzQ0YThlN2FjODA4NTUxZmViZjJmYTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CisgICAg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5t
X2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9i
eXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC05NDMsNyArOTQzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiAgICAgc2tpcE9TUkVu
dHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYg
cHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmls
ZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShz
dGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAzYjQ4NTBmYWI4ZDZmYWU5MzBlOWU4Njkz
YzQ0YmJmNGExZTQzOTNkLi44Y2I1NWZiNWI3ZWY4NWYwYWMxMTlmMjJlZTJhZDE5MWFjMTkwNDRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE2
NTQsMTggKzE2NTQsMTggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWMKICAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmln
Z2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKIAot
ICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgdW5zaWduZWQgbnVt
VmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKICAgICAgICAg
ICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwotICAgICAgICBP
cGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworCisgICAgICAgIE9wZXJhbmRzPE9w
dGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBudW1WYXJzV2l0aFZhbHVlcywgMCk7CiAgICAgICAgIGludCBsb2NhbHNVc2VkRm9yQ2Fs
bGVlU2F2ZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAg
ICAgaWYgKG9wZXJhbmRJc0xvY2FsKG9wZXJhbmQpICYmIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKworICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgbG9j
YWxzVXNlZEZvckNhbGxlZVNhdmVzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5k
KS5qc1ZhbHVlKCk7CisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRSKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPm5ld1JlcGxhY2VtZW50KCk7CkBAIC0xNzgzLDcgKzE3ODMsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShWTSogdm1Q
b2ludGVyLCB1aQogICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRG
b3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBt
ZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHBy
b2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVja2V0
c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29w
ZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5MDcsOCArMTkwNyw4IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHNjb3BlCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQoKTsKKyAgICBhdXRvJiBzY29wZVNsb3Qg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKHNjb3BlUmVnKSk7CisgICAg
c2NvcGVTbG90ID0gc2NvcGVTbG90LlJlZ2lzdGVyOjpzY29wZSgpLT5uZXh0KCk7CiB9CiAKIGlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNPYmplY3Qq
IGNvbnN0cnVjdG9yLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkSGFzSW5zdGFuY2UpCkBAIC0yNDE2
LDcgKzI0MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZy
b21TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3Qq
IHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganND
YXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLmpz
VmFsdWUoKSk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBj
b252ZXJ0ZWQgdG8gQ2xvc3VyZVZhciBmb3IgZ2V0X2Zyb21fc2NvcGUuCkBAIC0yNDU5LDggKzI0
NTksOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cgogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCog
c2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZy
YW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICBKU09iamVj
dCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNv
ZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5y
KGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZv
ID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGRvZXMgbm90IGtl
ZXAgdGhlIHNjb3BlIHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERGRy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYWI5OWZkOTg3YjA2
MWYyZTc2YTE3YzI4YmU4YzRlNzI2NWEyZDgxNS4uZTcyOWZjMDU4ZWM2OGVjMTFmMzJkNTcwNzg5
Yjc3YTA5NzVkMjZmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTCiB7CiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIApAQCAtMTE3LDggKzExNyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFk
ZEJ5VmFsSW5mbygpOwogCkBAIC0xNzcsNyArMTc3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
KQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwpAQCAtMjA4LDcgKzIwOCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJp
Y0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAg
fQogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgogICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwor
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0go
KTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yNDksNyArMjQ5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSkKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAg
IGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAg
IGVtcHR5LmxpbmsodGhpcyk7CkBAIC0yNzQsOCArMjc0LDggQEAgSklUUHV0QnlJZEdlbmVyYXRv
ciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3Ag
Ynl0ZWMKICAgICAvLyBwcm9wZXJ0eTogcmVnVDEKICAgICAvLyBzY3JhdGNoOiByZWdUMgogCi0g
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAg
ICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDEsIHByb3Bl
cnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTMwNCwxNCArMzA0LDE0IEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8s
IE9wIGJ5dGVjCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaW50IGJhc2U7Ci0gICAgaW50IHBy
b3BlcnR5OwotICAgIGludCB2YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogCiAg
ICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5Lm9mZnNldCgpOwotICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7
CisgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC0zMzcsMzYgKzMzNywzNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRl
ckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50
MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlci5vZmZzZXQoKSwgcmVnVDEpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIub2Zmc2V0KCksIHJlZ1QyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKQEAgLTM3NSwxOCArMzc1
LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0
KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCks
IHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwpAQCAtMzk1LDkgKzM5NSw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC00MDYsOCAr
NDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBA
IC00NDUsOCArNDQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTQ2OSw3
ICs0NjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDg1LDggKzQ4NSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNTEzLDkgKzUxMyw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAgLTU1Niw3ICs1
NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CkBAIC01
NzEsOCArNTcxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAg
ICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVl
VlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUubV9mbGFn
cyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBh
dGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBv
bmUgcG9pbnRlciwKQEAgLTYxNSw4ICs2MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNjM4LDcg
KzYzOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNb
bV9pbkJ5SWRJbmRleCsrXTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1
cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCkKK3ZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCkKIHsKICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1Qw
KTsKQEAgLTY3MCw4ICs2NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVk
IGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKQEAgLTc3MCw3ICs3NzAsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6
OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCkKIHsKICAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1Qx
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC03OTAsNyAr
NzkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUq
KiBvcGVyYW5kLCBHUFJSZWcgcmVnKQogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lk
IEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKK3Zv
aWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CkBAIC04
MDAsOCArODAwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAg
ICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4o
Jm1ldGFkYXRhLm1fb3BlcmFuZCk7CkBAIC05MTksMTcgKzkxOSwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7
CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
ICAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7
CiB9Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFk
ZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hw
b2ludFNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEp
OwpAQCAtOTM4LDcgKzkzOCw3IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXCiAgICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQor
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQog
ewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC05NTAsOCArOTUwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRUb1Njb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVk
R2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1l
dGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKQEAgLTEwODYsOCArMTA4Niw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRl
Y29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKQEAgLTEwOTksOSArMTA5
OSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0g
ICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKQEAgLTExMTAsNyArMTEx
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUp
Cit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFs
dWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQog
ewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKQEAgLTExNTAsOCArMTE1MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxG
aWVsZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwpAQCAtMTE2NCw4ICsxMTY0LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEludGVybmFsRmllbGQ+KCk7Ci0gICAgaW50
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTE3Niw3ICsxMTc2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBK
dW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTE5OSw3ICsxMTk5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVk
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUg
bW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSkgewpAQCAtMTQyNSw3ICsxNDI1LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJl
Z1QwOwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHkKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNT
RVJUKGlzRmxvYXQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggMmNmOTE5OGY0
MGVkYWFmNTNhNjFkYmYzMzkwYTZjN2RiMjg2YTVjMS4uNTgyNzEzZTY0MDg3YTUxZjU5MzliOTBi
OTg1NDVkZjEzM2QwYzZhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
U0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaApAQCAtNDUsMTggKzQ1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgaW5saW5l
IEp1bXAgZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0
ZXJJRCBkc3QpOwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBpbmxpbmUgSnVtcCBl
bWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAg
ICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogI2Vu
ZGlmCiAKLSAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50
cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2
YWx1ZSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVySUQgdG8s
IFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwg
VmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKIAogICAg
ICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKQEAgLTY0LDM2ICs2NCwzNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxs
KHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpCiAg
ICAgewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBw
YXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lz
dGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwg
cGF5bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdp
c3Rlcik7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJm
YWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4
KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1
bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1
YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9y
KHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAg
fQogICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6
ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVy
SW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICByZXR1cm4gYnJh
bmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAgICBBU1NFUlQo
dmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICBs
b2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklU
OjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIGlu
bGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUo
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0
ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmly
dHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAg
ICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAg
ICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwor
ICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAg
ICAgSnVtcCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAg
ICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAg
ICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIGxv
YWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBkb25l
LmxpbmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQpAQCAtMTAxLDIzICsx
MDEsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpT
Q2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7
Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsK
KyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAg
ICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWdu
ZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9h
ZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKICAgICAgICAgSnVtcCBub3RJ
bnQzMiA9IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIo
ZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAgICAgfQogCi0gICAgaW5saW5l
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6
ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3Rl
cklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZDY0KGFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90TnVt
YmVyID0gYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAgICAgIEp1bXAgbm90SW50ID0g
YnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
c2NyYXRjaCwgZHN0KTsKQEAgLTEyOSwxMiArMTI5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IH0KICNlbmRpZgogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lz
dGVySUQgZnJvbSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJ
RCB0bywgUmVnaXN0ZXJJRCBmcm9tKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZy
b20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwpAQCAtMTQzLDEy
ICsxNDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lk
KiB2YWx1ZSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCiAgICAgewogICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRk
cmVzc0ZvcihlbnRyeSkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGlu
dCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRD
ZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKaW5kZXggMDk1MjU5MWVlOWY3
ZDVkNGZjMjE3MGM3MTY5M2NlYjY2OTc3NGI0Yi4uNDlmNTRjNWRhNTY3MjUwM2ExZTA3NmYyMmQ5
ZDM4MDI5YmIwOWZjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1
cFZhcmFyZ3NGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZh
cmFyZ3NGcmFtZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NG
cmFtZUZhc3RDYXNlKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xv
dAogICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcigwKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBhcmd1bWVudENvdW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBEYXRhRm9ybWF0SW50MzIpOwor
ICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIERh
dGFGb3JtYXRJbnQzMik7CiAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSk7CiAgICAgfQogICAgIGVtaXRTZXR1cFZh
cmFyZ3NGcmFtZUZhc3RDYXNlKHZtLCBqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEs
IHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgYXJndW1lbnRDb3VudFJlY292ZXJ5LCBmaXJzdEFy
Z3VtZW50UmVnLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAppbmRleCBhMTE2MjJlZWJkYmU0
Nzg1ZWYwNmFkYzM5MzQ3MWY1YzIxZjcyNDAzLi5lMTU2MDMwZTQxNDM3OGFjYjM1NWRhYTcyY2U1
YzQ1MjBlZGMxZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNp
YWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaApAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgdm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50IGFyZ3VtZW50LCBGUFJlZ2lz
dGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFy
Z3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkRG91YmxlKHNy
YywgZHN0LCBzY3JhdGNoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9h
ZENlbGxBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0
TG9hZEpTQ2VsbChzcmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJn
dW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAg
ICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgZmFpbFRhcmdldCA9
IGVtaXRMb2FkSW50MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IGU2ZDMyNjYwYjY2
MjdmYmQyZjQzYTU2ZjA2MWMzMDI1OWFiMDQzZGQuLjNlNTY5MDllZGY0ZjUwZDVhNWM0OTFhM2Iz
Mjk0YWE1ZDczMTViOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKQEAgLTEwMzIsOCArMTAzMiw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCk7Cisg
ICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJZk5v
dEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJbnQzMi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IGYxNjRiODBiMTE4
NDVjNmZjNDUzYzRiMzc4M2FiYjZjNDIzZDg5NTEuLmYwYWU3MjU4MDA3MWQyYmY4YTAxMzJjYzYz
MDE3ZmQyOWRmZGRmYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhh
bmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5v
bkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lz
dGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZz
ZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxG
cmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdl
dE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVl
KCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZCkuanNW
YWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7
ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAg
ICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2Vu
ZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAg
Q2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5dGVjb2RlLm1fYXJndjsKICAg
ICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNv
ZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAg
IGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwogICAgIAogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKQEAgLTE2ODksNyArMTY5
MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1l
bnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwg
Z2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgdm0udmFyYXJnc0xl
bmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAg
ICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVl
QXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0
Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0
VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7CkBAIC0xNzI1LDcgKzE3
MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIGNhbGxlZUZyYW1lLT5z
ZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGNhbGxl
ZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNo
ZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxl
ZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldFJldHVyblBDKHJldHVyblBv
aW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2so
bnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE5MTIsNyAr
MTkxMyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbCkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMpKSk7CiAjZWxz
ZQotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4ocGMpKSk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCpw
Yyk7CiAjZW5kaWYKIAogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFk
b3dDaGlja2VuKCk7CkBAIC0xOTMwLDcgKzE5MzEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHJvZmlsZV9jYXRjaCkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BD
YXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
ayk7Ci0gICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmls
ZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBy
b2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0xOTYxLDExICsxOTYy
LDEyNCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfb3V0X29mX2xpbmVfanVtcF90
YXJnZXQpCiAgICAgTExJTlRfRU5EX0lNUEwoKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgT3Bj
b2RlPgorc3RhdGljIHZvaWQgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQoVk0mIHZtLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgT3Bjb2Rl
JiBieXRlY29kZSwgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUmIHNpZGVTdGF0ZSkKK3sKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgdW5zaWduZWQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBzaWRlU3RhdGUudG1wc1tPcGNvZGU6OmFyZ0NvdW50
SW5jbHVkaW5nVGhpc10uYXNVSW50MzIoKTsKKyAgICB1bnNpZ25lZCBmaXJzdFZhckFyZyA9IGJ5
dGVjb2RlLm1fZmlyc3RWYXJBcmc7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwor
ICAgIGFyZ3MuZmlsbChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEsIFsmXSAoSlNWYWx1
ZSogYnVmZmVyKSB7CisgICAgICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYnVmZmVyLCBj
YWxsRnJhbWUtPnIoYnl0ZWNvZGUubV9hcmd1bWVudHMpLmpzVmFsdWUoKSwgZmlyc3RWYXJBcmcs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfSk7CisgICAgaWYgKGFyZ3Mu
aGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAg
ICBpZiAoT3Bjb2RlOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKKyAgICAgICAg
cmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX2NhbGxlZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSks
IGFyZ3MsICIiKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdChnbG9iYWxP
YmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSksIGdldE9wZXJh
bmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGFyZ3MsICIiKTsKKworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IHJlc3VsdDsKK30KKworaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBkaXNwYXRjaFRvTmV4dEluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0
cnVjdGlvblN0cmVhbTo6UmVmIHBjKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFjb2RlQmxvY2st
PnZtKCkuZXhjZXB0aW9uRm9ySW5zcGVjdGlvbigpKTsKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VP
U1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bmspIHsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG5leHRQQyA9IHBjLm5l
eHQoKS5wdHIoKTsKKyAgICAgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBMTEludDo6Z2V0Q29kZVB0
cjxKU0VudHJ5UHRyVGFnPigqcGMubmV4dCgpLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChuZXh0UEMsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9
CisKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQnl0ZWNvZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRl
eCA9IHBjLm5leHQoKS5pbmRleCgpOworICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkuZmluZChuZXh0Qnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChudWxscHRyLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisjZW5k
aWYKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIFNs
b3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGlu
ZWRfY2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgcmVzdWx0KQorewor
ICAgIC8vIFNpbmNlIGFsbCBvdXIgY2FsbGluZyBjaGVja3BvaW50cyBkbyByaWdodCBub3cgaXMg
bW92ZSByZXN1bHQgaW50byBvdXIgZGVzdCB3ZSBjYW4ganVzdCBkbyB0aGF0IGhlcmUgYW5kIHJl
dHVybi4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0
ZS0+Ynl0ZWNvZGVJbmRleDsKKyAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7
CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCkubV9kc3Qp
ID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3Mgc2hvdWxkIG5ldmVyIHJldHVybiBpZiB0aGUgdGhpbmcgaXQgd2FzIGNhbGxpbmcgd2FzIGlu
bGluZWQuCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGRpc3BhdGNoVG9OZXh0SW5z
dHJ1Y3Rpb24oY29kZUJsb2NrLCBwYyk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5U
eXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBF
bmNvZGVkSlNWYWx1ZSAvKiBuZWVkZWQgZm9yIGNDYWxsMiBpbiBDTG9vcCAqLykKK3sKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZt
ID0gY29kZUJsb2NrLT52bSgpOworICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBz
aWRlU3RhdGUgPSB2bS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShjYWxsRnJhbWUpOworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleDsK
KyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworCisgICAgYXV0byBwYyA9
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRv
IG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBj
YWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3Rh
dGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdz
OgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxP
YmplY3QsIHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9yZXQgfHwgcGMu
bmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX2ptcCwgIldlIHN0cm9uZ2x5IGFzc3VtZSBhbGwgdGFp
bCBjYWxscyBhcmUgZm9sbG93ZWQgYnkgYW4gb3BfcmV0IChvciBzb21ldGltZXMgYSBqbXAgdG8g
YSByZXQpLiIpOworICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1l
LCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcFRhaWxDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5n
ZXQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQocmV0
dXJuVG9UaHJvdyh2bSksIDApOworCisgICAgcmV0dXJuIGRpc3BhdGNoVG9OZXh0SW5zdHJ1Y3Rp
b24oY29kZUJsb2NrLCBwYyk7Cit9CisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxs
aW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHBy
b3RvRnJhbWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1l
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0KICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbEZyYW1lKQog
ICAgICAgICBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKnZt
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKaW5kZXgg
MmZmMjhiMDA2YmMyMjMzMzBjYzY3ODY1YTE2Nzk0YTkwZTdlN2FhZS4uMDU1ZjVjOWExYThmOWE1
YTNiNDYzZTc1NzFjNjQ2YTIwNzU5MmRiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmgKQEAgLTEzNiw2ICsxMzYsOCBAQCBMTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX3N1cGVyX3NhbXBsZXJfYmVnaW4pOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdXBlcl9zYW1wbGVyX2VuZCk7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KTsKIGV4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vy
cm9yKFZNKiwgUHJvdG9DYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7CitleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgdW51c2VkKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSBjYWxsUmVzdWx0KTsKICNpZiBFTkFC
TEUoQ19MT09QKQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfc3RhY2tfY2hl
Y2tfYXRfdm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9JTlRFUk5BTDsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CmluZGV4IGM4YTA3ZjAwZWZjMjQ4NTA0NjA4ZWRhNjk1YjA4ODI1Y2YyYTZhMDQuLjNmMjUxMWJj
YzA0NDA2YTI3N2EzZGY3MTBiN2JjYjRhMmZmMTM1M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTEwOTEsNyArMTA5
MSw3IEBAIG1hY3JvIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcE5hbWUsIHNpemUp
CiAgICAgZGVmaW5lT1NSRXhpdFJldHVybkxhYmVsKG9wTmFtZSwgc2l6ZSkKIAogICAgIHJlc3Rv
cmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJd
LCBQQwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5
cGUsIG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTg0MCwxMyArMTg0MCwxNyBAQCBlbmQpCiBjYWxs
T3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAo
Z2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDMKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhj
ZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAor
Lm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJ
ZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAj
IGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNw
CkBAIC0yMDAxLDYgKzIwMDUsMzkgQEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiBlbmQpCiAKIAorb3AoY2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGlmIEpTVkFMVUU2
NCBhbmQgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKKyAgICAgICAgcmVzdG9yZVN0YWNrUG9p
bnRlckFmdGVyQ2FsbCgpCisKKyAgICAgICAgbW92ZSBjZnIsIGEwCisgICAgICAgIG1vdmUgcjAs
IGExCisgICAgICAgICMgV2UgZG9uJ3QgY2FsbCBzYXZlU3RhdGVGb3JDQ2FsbCgpIGJlY2F1c2Ug
d2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgYnl0ZWNvZGVJbmRleCBmcm9tIG91ciBzaWRlIHN0YXRl
LgorICAgICAgICBjQ2FsbDIoX3Nsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5s
aW5lZF9jYWxsKQorICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAgICAgICAgYnJh
bmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisg
ICAgICAgIGptcCByMQorICAgIGVsc2UKKyAgICAgICAgbm90U3VwcG9ydGVkKCkKKyAgICBlbmQK
K2VuZCkKKworb3AoY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lLCBtYWNybyAoKQorICAg
ICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSBkaXNwYXRjaCB0byB0aGUgY2hlY2twb2ludCBoYW5k
bGVyIGRpcmVjdGx5IGJ1dCB0aGlzIHdhcyBlYXNpZXIgCisgICAgIyBhbmQgcHJvYmFibHkgZG9l
c24ndCBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgIGlmIEpTVkFMVUU2NCBhbmQgbm90IChD
X0xPT1Agb3IgQ19MT09QX1dJTikKKyAgICAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2Fs
bCgpCisKKyAgICAgICAgbW92ZSBjZnIsIGEwCisgICAgICAgICMgV2UgZG9uJ3QgY2FsbCBzYXZl
U3RhdGVGb3JDQ2FsbCgpIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgYnl0ZWNvZGVJ
bmRleCBmcm9tIG91ciBzaWRlIHN0YXRlLgorICAgICAgICBjQ2FsbDIoX3Nsb3dfcGF0aF9jaGVj
a3BvaW50X29zcl9leGl0KQorICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAgICAg
ICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xp
bmUpCisgICAgICAgIGptcCByMQorICAgIGVsc2UKKyAgICAgICAgbm90U3VwcG9ydGVkKCkKKyAg
ICBlbmQKK2VuZCkKKwogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4g
dGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hv
dWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0
CiAjIGFzIG11Y2guCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IGFlNjY5OTQzYTUwZGNhZDg4NjQ3YWU3
ZDY1YWRhNDIyNmRlOTlhMmMuLjBlMTYzMmNkYmNhZjBlYWE0OGNjNWE0ZjhhY2I0NzY0ZWQ2ZTUz
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xNDMsMTEgKzE0MywxOSBAQCBtYWNybyBjQ2FsbDQo
ZnVuY3Rpb24pCiAgICAgZW5kCiBlbmQKIAorbWFjcm8gcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQor
ICAgIG1vdmUgUEMsIGExCitlbmQKKworbWFjcm8gcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisg
ICAgbW92ZSByMCwgUEMKK2VuZAorCiBtYWNybyBjYWxsU2xvd1BhdGgoc2xvd1BhdGgpCiAgICAg
bW92ZSBjZnIsIGEwCi0gICAgbW92ZSBQQywgYTEKKyAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgp
CiAgICAgY0NhbGwyKHNsb3dQYXRoKQotICAgIG1vdmUgcjAsIFBDCisgICAgcmVzdG9yZVN0YXRl
QWZ0ZXJDQ2FsbCgpCiBlbmQKIAogbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpp
bmRleCBlYTQzYWI2ODk1NTViODNiYjJmODlhMTYzYTAyNDE3NmUwYWVmY2Q2Li5hYjg4ZmZlN2Rj
OTNkNWUxZTQ1NjBkZTNhZTkwMDIwM2ZiMTY4MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDIsNiArNDIs
MTQgQEAgbWFjcm8gbmV4dEluc3RydWN0aW9uV2lkZTMyKCkKICAgICBqbXAgW3QxLCB0MCwgUHRy
U2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAorbWFjcm8gc3RvcmVQQygpCisgICAgc3RvcmVp
IFBDLCBMTEludFJldHVyblBDW2Nmcl0KK2VuZAorCittYWNybyBsb2FkUEMoKQorICAgIGxvYWRp
IExMSW50UmV0dXJuUENbY2ZyXSwgUEMKK2VuZAorCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhv
cGNvZGVTdHJ1Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2Rl
U3RydWN0JV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZApAQCAtOTIsNyAr
MTAwLDcgQEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFp
bWluZyBpbnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRlckNh
bGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRQQygpCiAgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9u
c1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fZHN0LCB0
MSkKQEAgLTM5MCw3ICszOTgsNyBAQCBlbmQKIAogIyBDYWxsIGEgc2xvdyBwYXRoIGZvciBjYWxs
IG9wY29kZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCi0gICAg
c3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCisg
ICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBh
MAogICAgIG1vdmUgUEMsIGExCkBAIC0zOTksMjAgKzQwNywyMCBAQCBtYWNybyBjYWxsQ2FsbFNs
b3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQKIAogbWFjcm8gY2FsbFRyYXBIYW5kbGVyKHRo
cm93SGFuZGxlcikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
VGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgp
CiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Ns
b3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxv
YWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAg
bG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9K
SVRGb3JMb29wKCkKICAgICBjaGVja1N3aXRjaFRvSklUKAogICAgICAgICAxLAogICAgICAgICBt
YWNybygpCi0gICAgICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICAgICAgICAgIHN0b3JlUEMoKQogICAgICAgICAgICAgcHJl
cGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAg
ICBtb3ZlIFBDLCBhMQpAQCAtNDIxLDcgKzQyOSw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRG
b3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgcjEsIHNwCiAgICAgICAgICAgICBqbXAgcjAsIEpT
RW50cnlQdHJUYWcKICAgICAgICAgLnJlY292ZXI6Ci0gICAgICAgICAgICBsb2FkaSBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAgICAgbG9h
ZFBDKCkKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTIwNTcsNyArMjA2NSw3IEBAIG1hY3JvIGNv
bW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2Fs
bCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9yZXEgdDIsIENh
bGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgdDIpCi0g
ICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRb
Y2ZyXQorICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMsIHNwCiAg
ICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKaW5kZXggODQwZjg5Yjg4ZDQyMGNj
M2I3NWM4M2Q2YzU3ODI0MTU0MDJmMzM2Ni4uOGY1MDVjYzY5OWNkNGFlMzdlZjM0NTAwZmRmYmU2
OTk5ODA3Y2RhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
TGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaApAQCAt
MTMzLDYgKzEzMywxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tOb3ROZWVk
ZWQoKSB7IGNsZWFyTmVlZHNPdmVyZmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVuY3RvciYg
ZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5zdXJlQ2Fw
YWNpdHkoY291bnQpOworICAgICAgICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVuYyhyZWlu
dGVycHJldF9jYXN0PEpTVmFsdWUqPigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eShpbnQg
bmV3Q2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwCmluZGV4IGY4ZDk3OTk1ODc0NTIyNmE0N2U2ZjhiNmM1NTg2MGMxOGZjZTg3YTEuLmZm
Yjc0NTlhNmFkY2NiYWIxNmRhOGE0ZWY4YjE3MTFkODcyYTFhZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTE3ODgsNiArMTc4OCw3IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX2Rlcml2ZWRDb250ZXh0VHlwZTsgfQogICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgaGFzVGFp
bENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNpZ25lZCBo
YXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KICAgICB1
bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAgIHVu
c2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKQEAgLTE4
MjAsNiArMTgyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUg
OiAyOwogICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDogMTsKICAgICB1bnNpZ25lZCBtX2Nv
ZGVUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIAogICAgIENv
ZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsK
QEAgLTIwMTgsNiArMjAyMCw3IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSoKIAogICAgICwgbV9k
aWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBt
X2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhjYWNoZWRDb2RlQmxvY2suaGFzQ2hlY2tw
b2ludHMoKSkKIAogICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMoKSkK
ICAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKQEAgLTIyMDYs
NiArMjIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zCiAgICAgbV9wYXJzZU1vZGUgPSBj
b2RlQmxvY2subV9wYXJzZU1vZGU7CiAgICAgbV9jb2RlR2VuZXJhdGlvbk1vZGUgPSBjb2RlQmxv
Y2subV9jb2RlR2VuZXJhdGlvbk1vZGU7CiAgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5tX2Nv
ZGVUeXBlOworICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVja3BvaW50
czsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRh
LmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJl
RGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAppbmRleCA4NzcxNmQyNzdhMGViYzJkYjRlMTU5Y2Y2OWY5YjJlMmI1Y2E5
Zjc0Li44MTZiYjJmMzJiNTdiZTZmNDg2ZGRlYjhmNWU3MzExMGQ1OWNmMGYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTk4
LDggKzk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUgR0VUKG9w
ZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCi0jZGVmaW5l
IEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCisjZGVmaW5l
IEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpKQorI2RlZmluZSBH
RVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQpKQogCiAjZGVmaW5lIFJFVFVSTl9U
V08oZmlyc3QsIHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoZmlyc3QsIHNlY29uZCk7ICAgICAgICBcCkBAIC0xMTUyLDggKzExNTIsNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCiB7CiAgICAgQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25t
ZW50PigpOwotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0g
ICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVn
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VUX0MoYnl0
ZWNvZGUubV9zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRpYWxWYWx1
ZSA9IEdFVF9DKGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJU
KGluaXRpYWxWYWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBqc1REWlZh
bHVlKCkpOwpAQCAtMTE2OCw4ICsxMTY3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1
c2hfd2l0aF9zY29wZSkKICAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29kZS5t
X25ld1Njb3BlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19F
WENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVudFNjb3Bl
Lm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNj
b3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBjdXJyZW50U2NvcGUsIG5ld1Njb3BlKSk7CiB9CiAKQEAgLTExNzgsNyArMTE3Niw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19m
dW5jX2RlY2xfaW5fZXZhbCkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwogICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNj
b3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpz
Y29wZSgpOwogICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwog
CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTkyLDcgKzExOTAsNyBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3Bl
KCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVkU2NvcGUg
PSBKU1Njb3BlOjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKICAgICAvLyBQ
cm94eSBjYW4gdGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQcm94eSBpbiB3aXRoIHN0YXRlbWVu
dCdzIEB1bnNjb3BhYmxlcy4KICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTE0MzcsNyArMTQz
NSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogewogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
OwotICAgIEFTU0VSVChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGJ5dGVjb2Rl
Lm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgQVNTRVJUKGJ5dGVjb2RlLm1f
aW1tdXRhYmxlQnV0dGVyZmx5LmlzQ29uc3RhbnQoKSk7CiAgICAgSlNJbW11dGFibGVCdXR0ZXJm
bHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5qc1ZhbHVlKCkuYXNDZWxs
KCkpOwogICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIApAQCAtMTQ1Niw3ICsxNDU0LDcgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIC8vIFdlIGFsc28gY2Fu
bm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2lu
Y2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgLy8gYSBjb21w
aWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAg
IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZs
eS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAg
ICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRl
cmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRiZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVh
NWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQxYjc4ZTYzMTFiNjc1ZDFlZmE1YTVm
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERh
dGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEu
Y3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0KiBjb25z
dHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9i
amVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQorewor
ICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29u
c3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9CisKK0pTT2JqZWN0KiBjb25z
dHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9i
amVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIq
IGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDYsMTAgKzUxLDkgQEAg
SlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBj
b25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgY29u
c3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVj
dChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1
Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0KIEpTT2JqZWN0KiBjb25zdHJ1Y3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwg
Q29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1
Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmExMWQ3Y2VlMjRkZmZhZTkxOTExOTY3
ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2JhZWI2Y2FjMTI2MjFmM2JhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaApAQCAtNjAs
NiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAKIC8vIENvbnZlbmllbmNlIHdyYXBw
ZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENhbGxEYXRhIGFuZCBDYWxsVHlwZSB1
bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpTX0VYUE9SVF9QUklWQVRFIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBj
b25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklW
QVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9u
T2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVy
cm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBD
b25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsKIAogQUxX
QVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
Y3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFlZmFmZDQzYTAxYTVjODUuLjRiMzQ2
MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApAQCAtMTM3LDIwICsxMzcs
MTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25l
ZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChpbmRleCwgaW50ZXJuYWxMZW5ndGgo
KSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFs
UmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYXBwZWRBcmd1bWVudHMpIHsKICAg
ICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGggKyBvZmZzZXQsIG1fbGVuZ3Ro
KTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0g
Zmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwg
bGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gc3RvcmFn
ZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9
IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7
CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9i
amVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHZW5lcmljQXJndW1lbnRz
Ojpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAK
IHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1lbnRzU2l6ZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCmluZGV4IDBhNmIx
YTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEuLjhkOTY0MmEyYzk0MDQwODBiOTEz
YWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJn
dW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFS
RV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUx
YzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVlYjI3MmNiYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKQEAgLTU5LDcg
KzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0
b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29sIGlzTW9k
aWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7
CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSos
IFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9IENhZ2VkQmFycmllclB0cjxH
aWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2RpZmllZEFyZ3VtZW50c1B0ciBtX21v
ZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDIxODJhNjJiMTMw
MzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFiZjVmMmVlMTg1YjdkMTMzMTYwMzdk
OGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wg
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNp
Z25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMwNSw5ICszMDUsOSBAQCB2b2lk
IEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxU
eXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkgKyBvZmZzZXQpKQot
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVu
dERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBp
KSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNDRjN2U1MjBmMWMw
YTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5
ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyCiAgICAgICAg
IGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0KIAotdm9pZCBKU0FycmF5Ojpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0x
MjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICAgICAgZG91
YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKTsKICAgICAg
ICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kg
LSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwxMSArMTI5NCwxMSBAQCB2b2lkIEpT
QXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0
b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxs
RnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQoKTsKKyAgICAg
ICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYuZ2V0KCk7CiAgICAgfQogICAgIAog
ICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAg
ICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmluZGV4IDMxNzk0OWM1NzJhMTFiNzVh
ZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5MjU0Y2MxYTZjNDc5MDJiNzkxMGFj
NGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTE2
Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDljMC4uZTQ5
MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcApAQCAt
NDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQor
dm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAg
ICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggYWNiNjg0ODE5MWExOTAzNTIyYjliM2U0ZDAw
Zjk2OWU0MGI3ODE1YS4uMDdlMWE4YTEwYzNjZGM3MTE3YWNhM2RjNTQzZWQ3ZGRiMGQ0MWYzZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0
ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1
dHRlcmZseS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBjb3B5VG9B
cmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZv
aWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAppbmRleCBhNmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2ODM0OTdlLi4xNmFhMzY5
ZjQ4NTA3MDYxYzA2MzYxNTE4YWUxNWQyYmM2OGZiNmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTIwNCw2ICsyMDQsNyBAQCB2b2lkIEpTTG9jazo6d2ls
bFJlbGVhc2VMb2NrKCkKIHsgICAKICAgICBSZWZQdHI8Vk0+IHZtID0gbV92bTsKICAgICBpZiAo
dm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCF2bS0+aGFzQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZSgpLCAiUmVsZWFzaW5nIEpTTG9jayBidXQgcGVuZGluZyBjaGVja3Bv
aW50IHNpZGUgc3RhdGUgc3RpbGwgYXZhaWxhYmxlIik7CiAgICAgICAgIHZtLT5kcmFpbk1pY3Jv
dGFza3MoKTsKIAogICAgICAgICBpZiAoIXZtLT50b3BDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5j
cHAKaW5kZXggZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2ZGUzN2JhMC4uNTk2ODA4
Y2FmYzBiMGY0Yzg0NzBiZDc1OWVkOWY0OTE2YzY2NDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcApA
QCAtNzQsNyArNzQsNyBAQCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgZXhlY3V0YWJs
ZS0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbE9iamVjdC0+dm0o
KSwgZXhlY3V0YWJsZSwgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZSk7CiAKLSAgICBleGVjdXRh
YmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0o
KSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKS5nZXQoKSktPmNs
b25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOworICAgIGV4ZWN1dGFibGUtPm1fbW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRh
YmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25z
dGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0
KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKIAogICAgIHJldHVybiBl
eGVjdXRhYmxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApp
bmRleCA0MTM4N2M4NTBhOTk1YWQ1NzQyMTA1MGNkZTg2Y2IyNTIxZTU0MTE2Li45MWVkNzM5ZTI1
ZjQ5MzhlZjUwMjcyN2RmNTE2ODBkODZjYTIwODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcApAQCAtNTA5LDExICs1MDksOSBAQCBzdGF0aWMgdm9pZCByZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBpZiAoT3B0aW9uczo6c29mdFJlc2VydmVkWm9u
ZVNpemUoKSA8IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpv
bmVTaXplKQogICAgICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpID0gT3B0aW9u
czo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNpemU7CiAKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgIC8vIEZJWE1FOiBNYWtlIHByb2JlIE9TUiBleGl0IHdvcmsg
b24gMzItYml0OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwotI2VuZGlm
CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBPcHRpb25zOjpk
aXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKaW5kZXggMDgxZDk3OGE3YjJhNjI2NmFjNTUyYzM3
OWQzODQ1MDA1ZGMxMWYxMC4uM2M3NDBkNDhmNjI0MWIwMjYwNWZiZjUyNWJkZGYyMzE5MmQwOWRi
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuY3BwCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnVubWFwQXJn
dW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKQogICAgICAgICBzdG9yYWdlKClbaSAtIG5hbWVkTGVu
Z3RoXS5jbGVhcigpOwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oCmluZGV4IGY4NWU0N2RmYmVlOGNhN2MzNzA0ZjI5ZWQ0Y2IxYjRlOTcyMDQ0NTcuLmU1
OGNiMjJlZmQ0OGM2NzRiZjViMWIxMTI4MGI1MWFiYzBkZTA4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCkBAIC0xNDIsNyArMTQyLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVu
dHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX3RhYmxlLT5sZW5ndGgo
KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCmluZGV4IGVhM2I0OTM0MmJhYzliNjg4YThkZmQ4MWUzZTM1MTFkNzFm
MzU5ODIuLjE3NTRkYTNkODc1ZGYyNjIxZjdiMjRmYjdlMWRhNWYwMjI4MDMwYTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJC
b29sZWFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFibGVzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0xMDUyLDYgKzEwNTMsMjYg
QEAgdm9pZCBWTTo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBj
b25zZXJ2YXRpdmVSb290cykKIH0KICNlbmRpZgogCit2b2lkIFZNOjphZGRDaGVja3BvaW50T1NS
U2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2lu
dE9TUkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9hZCkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NoZWNrcG9pbnRT
aWRlU3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gc2lkZVN0YXRlID0gbV9jaGVja3BvaW50U2lk
ZVN0YXRlLnRha2UoY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gc2lkZVN0YXRlOworfQorCit2b2lk
IFZNOjpzY2FuU2lkZVN0YXRlKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykgY29uc3QKK3sKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0ZXIgOiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUpCisgICAgICAg
IHJvb3RzLmFkZChpdGVyLnZhbHVlLT50bXBzLCBpdGVyLnZhbHVlLT50bXBzICsgc2l6ZW9mKGl0
ZXIudmFsdWUtPnRtcHMpKTsKK30KKwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsK
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJh
bWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDUzOTUxM2JlMDk1NjAzOTIz
OTRjYzQyNDlhYTUyNzM2ZGNiODBmMzAuLmY2NTgzODI3MmQ2YmI1NDY3NGExYWIwODliMjUzZjAw
ZDk3ZjY5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDEwICsxMDMs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBjbGFzcyBC
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ2FsbEZyYW1lOworc3RydWN0IENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hl
OwogY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBDb21wYWN0VmFyaWFibGVNYXA7Citj
bGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEN1c3RvbUdldHRlclNldHRlcjsKIGNsYXNz
IERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjsKIGNsYXNzIERhdGVJbnN0YW5jZTsKQEAgLTk1Niw2
ICs5NTgsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKIAorICAgIHZvaWQgYWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
JiYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gZmlu
ZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKik7CisgICAgYm9vbCBoYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja3BvaW50U2lkZVN0YXRlLnNp
emUoKTsgfQorICAgIHZvaWQgc2NhblNpZGVTdGF0ZShDb25zZXJ2YXRpdmVSb290cyYpIGNvbnN0
OworCiAgICAgVk1FbnRyeVNjb3BlKiBlbnRyeVNjb3BlOwogCiAgICAgSlNPYmplY3QqIHN0cmlu
Z1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CkBAIC0xMjA3LDYgKzEyMTQs
NyBAQCBwcml2YXRlOgogICAgIExvY2sgbV9zY3JhdGNoQnVmZmVyTG9jazsKICAgICBWZWN0b3I8
U2NyYXRjaEJ1ZmZlcio+IG1fc2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6ZV90IG1fc2l6ZU9mTGFz
dFNjcmF0Y2hCdWZmZXIgeyAwIH07CisgICAgSGFzaE1hcDxDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1
ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNrcG9pbnRTaWRlU3RhdGU7
CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsKICAg
ICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJvbEZsb3dQcm9m
aWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCmluZGV4
IDgxYzlmMWY2NzQ3MDc5ZWQ4MzEyNjYyYzA4MzAwYzZjYzM2MjhlMzcuLmUxNDg0MDBkNDg3ZGZj
NjRlNDQwNTRkZGFkYjA4NTg5NzJlMzlhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1ZNSW5zcGVjdG9yLmNwcApAQCAtMzk3LDggKzM5Nyw4IEBAIHZvaWQgVk1JbnNwZWN0b3I6
OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgY29uc3QgUmVnaXN0ZXIq
IGl0OwogICAgIGNvbnN0IFJlZ2lzdGVyKiBlbmQ7CiAKLSAgICBpdCA9IGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKTsKLSAgICBlbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsKKyAgICBpdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkg
KyAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkpOworICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyAoQ2FsbEZyYW1lU2xvdDo6
dGhpc0FyZ3VtZW50IC0gMSk7CiAgICAgd2hpbGUgKGl0ID4gZW5kKSB7CiAgICAgICAgIEpTVmFs
dWUgdiA9IGl0LT5qc1ZhbHVlKCk7CiAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0g
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYw
Y2ZmYWYyYzI3ZGQ1YTU2Ny4uMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdmMTkyNDczNTJjMGY4
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmgKQEAgLTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPHVp
bnQ2NF90PiYgY29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KICAgICBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1f
aW5zdHJ1Y3Rpb25zOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRU
eXBlKGludCBpbmRleCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0
YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRU
eXBlKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoT3B0
aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSk7Ci0gICAgICAgIHJldHVybiBtX2Nv
bnN0YW50VHlwZXNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07CisgICAgICAg
IHJldHVybiBtX2NvbnN0YW50VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsKICAgICB9CiAK
ICAgICB2b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJl
YW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwCmluZGV4IGFiMTc0MDZhZmI3MzRhNzA4ZGYxMWRiYjY4MDE1MThiNzY2NWZiNDIuLmVl
MmIzMjdkMmFmNTQ3MTk2ODc5NjlhYzI1MmE4NGM3ODhlZjZlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtMjQyLDYgKzI0
Miw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50
R2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCisgICAgLy8gV2Ug
bmVlZCB0aGlzIGZvciBhdXRvZ2VuZXJhdGVkIHRlbXBsYXRlcyB1c2VkIGJ5IEpTIGJ5dGVjb2Rl
cy4KKyAgICB2b2lkIHNldFVzZXNDaGVja3BvaW50cygpIGNvbnN0IHsgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7IH0KKwogICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25z
dCBTdGFjayopIHsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9wZXJhdGlvbnMuY3BwCmluZGV4IGUyYTRjNDI1MzNhMmY0NDdkZDMyMDIwNWI3NzdiNzhi
MDM5YzBiNjguLjIwNjlhZDhiMjRiNzM2OWRjZDlkNWYwYzdmNThlZWM5MmIzNWM3NmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTc0Myw3
ICs3NDMsNyBAQCB2b2lkKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9u
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcAogICAgIC8vIGZvciBleGNlcHRpb25z
IGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJl
Zm9yZSBqdW1waW5nCiAgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQg
dGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCi0gICAgYml0d2lzZV9jYXN0
PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIGJpdHdpc2VfY2FzdDx1aW50
NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
XSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAgICByZXR1
cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggOTI3YTY5ODRhM2JlMDE0Y2YzZWE3ZDY3
ZjAzNDU4NGVlYmViNjBjZS4uNTRmNjM2YWMxYjUwNzVkMWM2NjdiMzhhOTAzMTMyOTBkNWYzMzNj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKQEAg
LTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKICNkZWZp
bmUgUkVBRCh2aXJ0dWFsUmVnaXN0ZXIpIFwKICAgICAodmlydHVhbFJlZ2lzdGVyLmlzQ29uc3Rh
bnQoKSBcCi0gICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3Rh
bnQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKSkgXAorICAgICAgICA/IEpTVmFsdWU6OmRlY29k
ZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlcikpIFwKICAgICAgICAg
OiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKSkKIAogaW5saW5lIGJvb2wgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmZiMmY1NDUzYTE1N2E1MDFj
Y2VjNWQ3MTM2ODNlZWY3N2U5Yzg1OC4uN2Y0M2RhZjI0ZjRmMjBiZjgxZWExM2Y3ZjRiNTc5MTNi
YmI4Y2I4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0z
NzIsNiArMzcyLDcgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2Fn
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBU
aHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRo
cmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzM4RUJBNDIz
QUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1h
Y2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hF
eGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1
NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1
M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtOTU1LDYgKzk1Niw3IEBACiAJCQkJQThBNDcyOTgxNTFBODI1QTAwNDEyM0ZGIC8qIGR0
b2EuaCAqLywKIAkJCQlGRTA1RkFFNjFGREIyMTQzMDAwOTMyMzAgLyogRHVtYlB0clRyYWl0cy5o
ICovLAogCQkJCUFENjUzREE4MjAwNkI2QzIwMEQ4MjBENyAvKiBEdW1iVmFsdWVUcmFpdHMuaCAq
LywKKwkJCQk1MzM4RUJBNDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JPdmVy
bG9hZHMuaCAqLywKIAkJCQkxQUVBODhFMTFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5o
ICovLAogCQkJCUFEN0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oICovLAogCQkJ
CUE4QTQ3MjlGMTUxQTgyNUEwMDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKaW5k
ZXggNGM2ZjVkNDQyNjMyYzNlZmMwMDBiZDE4ZTllMzY5NDUyZmFmMWMxMC4uYjQ2ZGE5ZTg1YWI5
YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Qml0bWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKQEAgLTUxLDYgKzUxLDcgQEAg
cHVibGljOgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAg
IHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBpbnZl
cnQoKTsKICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNpemVfdCBydW5MZW5ndGgpIGNvbnN0
OwogICAgIHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAwKSBjb25zdDsKICAgICBzaXplX3Qg
aXNFbXB0eSgpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3I9KGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYml0bWFw
LT5zZXQobV9pbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBCaXRtYXAqIG1fYml0bWFwOwogICAg
ICAgICBzaXplX3QgbV9pbmRleDsKQEAgLTExMSw2ICsxMTgsOSBAQCBwdWJsaWM6CiAgICAgaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgZmluZEJpdCgwLCB0
cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgYml0bWFwU2l6ZSk7IH0KICAgICAKKyAgICBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCk7
CisgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0OworCiAgICAgdm9p
ZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5kQ2xlYXIoQml0bWFwJik7
CiAgICAgCkBAIC0yMjQsNiArMjM0LDEzIEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQoYml0cy5kYXRhKCksIDAsIHNpemVv
ZihiaXRzKSk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmludmVydCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBiaXRz
W2ldID0gfmJpdHNbaV07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewpAQCAtNDA5LDYgKzQyNiwx
OSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvciE9
KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Citp
bmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgLT4gaXRlcmF0b3IKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAg
IHJldHVybiBpdGVyYXRvcigqdGhpcywgaW5kZXgpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgLT4gY29uc3QgaXRl
cmF0b3IKK3sKKyAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT4qPih0aGlzKSlbaW5kZXhdOworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwg
dHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGIyODdmNzdl
NzhlMzQ3NTk5OTE1YTA2NmQ1ZjEwZTdjMzhiODdmMjkuLmZhMDZiMzE0NDE5NGVhNTU4NzMzY2Ex
YTJmMmQxMTQzODMyMWY2M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC01NSw2ICs1NSw3IEBA
IHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBEb3VibHlMaW5rZWRMaXN0LmgKICAgICBEdW1i
UHRyVHJhaXRzLmgKICAgICBEdW1iVmFsdWVUcmFpdHMuaAorICAgIEVudW1DbGFzc09wZXJhdG9y
T3ZlcmxvYWRzLmgKICAgICBFbnVtVHJhaXRzLmgKICAgICBFeHBlY3RlZC5oCiAgICAgRXhwb3J0
TWFjcm9zLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3Zl
cmxvYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM1N2JhMmZhMmY3OTI5YTZhOTk4YTlhNGVmMTRkMmJlNTc1NDYzNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5o
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworI2RlZmlu
ZSBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBvcCwgZW5h
YmxlRXhwcmVzc2lvbikgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBjb25zdGV4
cHIgYXV0byBvcGVyYXRvciBvcChlbnVtTmFtZSBlbnVtRW50cnksIFQgdmFsdWUpIC0+IHN0ZDo6
ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpIG9wIHZhbHVlOyBcCisgICAgfSBcCisgICAg
XAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBjb25zdGV4cHIgYXV0byBvcGVyYXRv
ciBvcChUIHZhbHVlLCBlbnVtTmFtZSBlbnVtRW50cnkpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVu
YWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisgICAgICAgIHJldHVybiB2YWx1ZSBvcCBz
dGF0aWNfY2FzdDxUPihlbnVtRW50cnkpOyBcCisgICAgfSBcCisKKyNkZWZpbmUgT1ZFUkxPQURf
TUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVz
c2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5h
bWUsICssIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5V
TV9DTEFTU19XSEVOKGVudW1OYW1lLCAtLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxP
QURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgKiwgZW5hYmxlRXhwcmVz
c2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5h
bWUsIC8sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5V
TV9DTEFTU19XSEVOKGVudW1OYW1lLCAlLCBlbmFibGVFeHByZXNzaW9uKSBcCisKKyNkZWZpbmUg
T1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51
bU5hbWUpIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5h
bWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikKKworI2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFM
X09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFibGVFeHByZXNzaW9u
KSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwg
PT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9D
TEFTU19XSEVOKGVudW1OYW1lLCAhPSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FE
X09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIDwsIGVuYWJsZUV4cHJlc3Np
b24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCA8PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVN
X0NMQVNTX1dIRU4oZW51bU5hbWUsID4sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9B
RF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA+PSwgZW5hYmxlRXhwcmVz
c2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVN
X0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJB
VE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4p
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9X
VEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAppbmRleCA4ODViN2IxNzNiMTFhNjAxYmUyOWEzMzJhYjlk
MmE0MTRkNTYyMTIyLi45MjA4OTVmYzQ5ZTcxYmY5NjY5MjIxYzEzMWExNzQyZmI3NThmZmQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvRmFzdEJpdFZlY3Rvci5oCkBAIC00NTAsNyArNDUwLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICBvcGVyYXRv
ciBib29sKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISgqbV93b3JkICYgbV9tYXNr
KTsKICAgICB9CkBAIC00NjQsNiArNDY0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgfQogCisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3J8PShib29sIHZhbHVl
KSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzID0gdmFsdWUgOiAqdGhpczsgfQorICAgIEZhc3RCaXRS
ZWZlcmVuY2UmIG9wZXJhdG9yJj0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA6
ICp0aGlzID0gdmFsdWU7IH0KKwogcHJpdmF0ZToKICAgICB1aW50MzJfdCogbV93b3JkIHsgbnVs
bHB0ciB9OwogICAgIHVpbnQzMl90IG1fbWFzayB7IDAgfTsKQEAgLTUwOSw3ICs1MTIsMTEgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KLSAgICAK
KworICAgIC8vIEZvciB0ZW1wbGF0aW5nIGFzIFZlY3Rvcjxib29sPgorICAgIHZvaWQgZmlsbChi
b29sIHZhbHVlKSB7IHZhbHVlID8gc2V0QWxsKCkgOiBjbGVhckFsbCgpOyB9CisgICAgdm9pZCBn
cm93KHNpemVfdCBuZXdTaXplKSB7IHJlc2l6ZShuZXdTaXplKTsgfQorCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwogCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFu
Z2VkLgpAQCAtNTg5LDQgKzU5Niw1IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
K3VzaW5nIFdURjo6RmFzdEJpdFJlZmVyZW5jZTsKIHVzaW5nIFdURjo6RmFzdEJpdFZlY3RvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oIGIvU291cmNlL1dU
Ri93dGYvVW5hbGlnbmVkQWNjZXNzLmgKaW5kZXggNWE0ZTllZjQ0OTRlZjQ2Y2E5ZTRlZWY3N2Zk
Y2MwZDYwZmFhNGExMS4uM2EzNWIzOGY0YzAyMzY3OWFjN2NmYzljNDY1NjA4NGEzOTE0ODNiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKKysrIGIvU291cmNl
L1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChj
b25zdCB2b2lkKiBwb2ludGVyKQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
PFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
Y29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgVHlwZSByZXN1bHQgeyB9OwogICAgIG1l
bWNweSgmcmVzdWx0LCBwb2ludGVyLCBzaXplb2YoVHlwZSkpOwogICAgIHJldHVybiByZXN1bHQ7
CkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCog
cG9pbnRlcikKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgdm9pZCB1bmFsaWduZWRT
dG9yZSh2b2lkKiBwb2ludGVyLCBUeXBlIHZhbHVlKQogewotICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgbWVtY3B5KHBvaW50
ZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEwOGUxM2E0YWVmYjBhNWM3YWNiNGNkOGQ3MDkw
NGU4YTdiN2VhYTMuLjU4M2Y1NWU5ZGZhMzVlMTcwNmE5ZjY0ODJhNzk2YzIxNjZlN2FjNjIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAxOS0xMi0yMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRs
ZSBvZiBhIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDUyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMTItMjMgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IElucHV0TWV0aG9kIEFQSSB1bml0IHRlc3RzIGRvbid0IHdvcmsgdW5kZXIgWDExCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCBjZGJmOWMwZGJmOTMyZTI4YzZkNWE4MjA4YTBhOThj
Y2VlNmFlZDlmLi41ZmJjMjA5ZWRlNGQzNDVhNDYwNWIwMGQyNzE3MjA0NWQwNDkyY2U2IDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTQ5OCw3ICs0OTgsNiBAQCBOT19DSklUX09Q
VElPTlMgPSBbIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFm
dGVyV2FybVVwPTEwMAogQjNPMV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQog
QjNPMF9PUFRJT05TID0gWyItLW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5
c2lzPTEwMCIsICItLWRlZmF1bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNl
RlRMSklUPXRydWUiXQotUFJPQkVfT1NSX0VYSVRfT1BUSU9OID0gWyItLXVzZVByb2JlT1NSRXhp
dD10cnVlIl0KIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xM
SW50PXRydWUiXQogCiByZXF1aXJlX3JlbGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVz
dC13cml0ZXItI3skdGVzdFdyaXRlcn0iCkBAIC03MTMsNyArNzEyLDcgQEAgZGVmIHJ1bkZUTE5v
Q0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuRlRM
Tm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0
bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10
cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0
b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJ
VF9PUFRJT04gKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5v
LWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUi
LCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10
cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtNzI5LDcgKzcyOCw3IEBAIGRlZiBydW5G
VExOb0NKSVRPU1JWYWxpZGF0aW9uKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQK
IAogZGVmIHJ1bkRGR0VhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVu
KCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJ
T05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImRmZy1lYWdlciIsICooRUFH
RVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBGT1JDRV9MTElOVF9F
WElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBy
dW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAw
Yzk1Yjg3YWE5NmZkM2M2OTkwYWI0OWNmYzAzOWQwMzkxNGQwZmYuLmU0ZmQ0NDk0OTNjZDg3Zjlh
NTk1NGEzZWU3NzIyYmQ5NTUwMWIzYWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMTItMjMgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgREZHL0ZUTCBzaG91
bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MjMyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYXBwbHktb3Ny
LWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qczog
QWRkZWQuCisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6Cisg
ICAgICAgICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAg
KiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qczogQWRkZWQu
CisgICAgICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAg
ICh0ZXN0KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qczoKKyAg
ICAgICAgKGNoZWNrRXF1YWwpOgorICAgICAgICAqIHN0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxs
LXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzOgorICAgICAgICAqIHN0cmVzcy9yZXN0
LXZhcmFyZ3Mtb3NyLWV4aXQtdG8tY2hlY2twb2ludC5qczogQWRkZWQuCisgICAgICAgIChmb28p
OgorICAgICAgICAoYmFyKToKKwogMjAxOS0xMi0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEltcHJvdmUgb3VyIGJvdW5kIGZ1bmN0aW9uIGlt
cGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1z
aG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzIGIvSlNUZXN0
cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25z
LW9jY2FzaW9uYWxseS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2YxNWE2ZWI4YzI3Y2MwYWQyZTlmNTk1NDFm
ZmUyYzUwYWMwYTIzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3Ny
LWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qcwpA
QCAtMCwwICsxLDM2IEBACisKK2xldCBjdXJyZW50QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3Rl
ZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Cit9Citub0lubGluZShl
eHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZp
bmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsK
K2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5n
dGgoKSB7CisgICAgaWYgKGxlbmd0aENhbGxzKysgJSAxMCA9PSAxKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoInRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiBsZW5ndGgiKTsKKyAgICByZXR1cm4g
Y3VycmVudEFyZ0NvdW50Cit9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU2OyBpKyspIHsKKyAg
ICB0cnkgeworICAgICAgICB0ZXN0KGFycmF5KTsKKyAgICB9IGNhdGNoIHsgfQorfQorCitjdXJy
ZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYg
KGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0
aC1vbmNlLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5n
dGgtb25jZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmVlNDVjZTFjNzI4MzY1MzgyNzA1ZDk5ZDMwMWFlNmJj
YjhkODdhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQt
c2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcwpAQCAtMCwwICsxLDMxIEBACisKK2xldCBjdXJyZW50
QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJy
ZW50QXJnQ291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24g
Y2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQo
KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkp
IHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0
KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJy
YXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7IGxlbmd0aENhbGxzKys7IHJldHVybiBj
dXJyZW50QXJnQ291bnQgfSB9Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKQorICAgIHRl
c3QoYXJyYXkpOworCisKK3Rlc3QoYXJyYXkpOworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVu
Z3RoQ2FsbHMgPSAwOwordGVzdChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAg
ICB0aHJvdyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pT
VGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJp
Y3QuanMKaW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3
MzIzMTkwY2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5q
cworKysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5k
LWV4aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwg
YikgewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2
ZXJzdXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEu
Yy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBp
ZiAoYS5jLmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIg
KyBiLmMubGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAg
ICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3Vz
ICIgKyBiLmM7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxs
LXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJz
aXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwppbmRleCAwNDdm
YjAxZjg4MzE0NWNjNzU1NGY1Y2Y3MDFhNzA3NGYyNjdkZWVlLi41M2Q3NTJkZWNkN2QwZjMxYmMy
ZjFkNzg5OTFjNjkxMDFmMDhiZmYzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNp
dmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291
bnQuanMKQEAgLTE4LDggKzE4LDggQEAgbm9JbmxpbmUoYmFyKTsKIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgewogICAgIHZhciByZXN1bHQgPSBmb28oNDAsIDIpOwogICAgIGlmIChy
ZXN1bHQgIT09IDQyKQotICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVj
dGVkIDQyLCBnb3QgIiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3Vs
dCBmb3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOwogICAgIHJlc3VsdCA9IGJh
cig0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0gICAgICAgIHRocm93ICJXcm9uZyBy
ZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0OworICAgICAgICB0aHJv
dyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3Vs
dCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZXN0LXZhcmFyZ3Mtb3NyLWV4aXQt
dG8tY2hlY2twb2ludC5qcyBiL0pTVGVzdHMvc3RyZXNzL3Jlc3QtdmFyYXJncy1vc3ItZXhpdC10
by1jaGVja3BvaW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3YmEwNTUxZDNlZTk0OGYwOTRjZjM4MGY4Y2Vi
ZmM2Nzk5MDQyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9yZXN0LXZhcmFy
Z3Mtb3NyLWV4aXQtdG8tY2hlY2twb2ludC5qcwpAQCAtMCwwICsxLDIxIEBACisidXNlIHN0cmlj
dCI7CisKK2Z1bmN0aW9uIGZvbyhhLCBiLCAuLi5yZXN0KSB7CisgICAgcmV0dXJuIHJlc3QubGVu
Z3RoOworfQorCitmdW5jdGlvbiBiYXIoYSwgYiwgLi4ucmVzdCkgeworICAgIHJldHVybiBmb28u
Y2FsbCguLi5yZXN0KTsKK30KK25vSW5saW5lKGJhcik7CisKK2xldCBhcnJheSA9IG5ldyBBcnJh
eSgxMCk7Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgbGV0IHJlc3VsdCA9
IGJhciguLi5hcnJheSk7CisgICAgaWYgKHJlc3VsdCAhPT0gYXJyYXkubGVuZ3RoIC0gYmFyLmxl
bmd0aCAtIGZvby5sZW5ndGggLSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaSArICIgIiAr
IHJlc3VsdCk7Cit9CisKK2FycmF5Lmxlbmd0aCA9IDEwMDAwOworaWYgKGJhciguLi5hcnJheSkg
IT09IGFycmF5Lmxlbmd0aCAtIGJhci5sZW5ndGggLSBmb28ubGVuZ3RoIC0gMSkKKyAgICB0aHJv
dyBuZXcgRXJyb3IoKTsK
</data>
<flag name="review"
          id="402159"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>